about.urirun.com
urirun
The open URI runtime + SDK. Declare an action once as scheme://target/resource/operation, compile a reviewable registry, and dispatch it behind a default-deny policy gate. No UI, no lock-in — a library you embed in any project.
$ pip install urirun $ urirun scan . --registry-out registry.json ==> 6 routes compiled · urirun.bindings.v2 · default-deny policy $ urirun run 'hash://local/sha256/command/file' --registry registry.json --execute { "ok": true, "result": { "sha256": "9f86d0…" } } $
urirun vs ifURI
The engine, not the product.
urirun://
urirun — what you embed
An open runtime and SDK. It compiles, validates, gates and dispatches URI routes. Zero UI, zero daemon you must run — just a library and a CLI.
ifuri://
ifURI — what you use
The local-first app and ecosystem built on urirun: desktop app, LAN mesh, connector hub, voice, chat. ifURI is one consumer of urirun — your project can be another.
This site is about urirun the runtime. For the product and downloads, see about.ifuri.com and ifuri.com.
The contract
One address shape. One bindings document.
Every capability is named as scheme://target/resource/operation and declared in a single urirun.bindings.v2 document — the contract that every SDK emits and every runtime reads.
{
"version": "urirun.bindings.v2",
"bindings": {
"hash://local/sha256/command/file": {
"kind": "command",
"adapter": "argv-template",
"inputSchema": { "type": "object", "required": ["path"] },
"argv": ["sha256sum", "{path}"],
"policy": { "allowExecute": true }
}
}
}
Compile → run → audit
Reviewable registry. Default-deny execution.
scan / compile
Compile a registry
Merge bindings, adopted artifacts and connector entry points into one reviewable registry tree.
validate
Schema-checked payloads
Each route declares a JSON Schema; the payload is validated before anything runs.
policy
Default-deny gate
Nothing executes unless a route is explicitly allowed. Dry-run by default; execute is opt-in.
error://
Addressable errors
Failures get a stable code, a category and a docs link — recorded, searchable, ticketable.
Free projections
One registry → MCP tools + A2A cards.
Because every route is typed and addressable, the same registry projects — with no extra code — to MCP tools for LLM clients and an A2A agent card for agent-to-agent discovery. Serve it over HTTP with urirun node serve.
urirun v2_mcp tools registry.json # → MCP tools/list urirun v2_mcp card registry.json # → A2A agent card urirun node serve --registry registry.json --port 8765 --execute # GET /health · GET /routes · GET /mcp/tools · GET /a2a/card · POST /run
One contract, any language
The same connector — Python, JS, PHP.
The runtime is a contract, not a language. The SDK ships per language so urirun is a library inside your project. Each snippet emits the identical urirun.bindings.v2 document — urirun validate accepts them all.
python
c = urirun.connector(
"hash", scheme="hash")
@c.command("sha256/command/file")
def f(path: str):
return ["sha256sum", "{path}"]javascript
connector("hash",{scheme:"hash"})
.command("sha256/command/file",{
input:{required:["path"]},
argv:["sha256sum","{path}"],
})php
(new Urirun\Connector("hash","hash"))
->command("sha256/command/file",
["required"=>["path"]],
["sha256sum","{path}"]);The CLI
From a folder to a running node.
urirun is also a command line: adopt a project into bindings, compile a registry, run a route, serve a node, browse and install connectors — all from one tool.
urirun scan . # adopt artifacts → bindings urirun compile bindings.json # → reviewable registry urirun run 'uri' --execute # dispatch behind policy urirun node serve # HTTP node: /health /routes /run urirun connectors install … # from connect.ifuri.com
Who runs on it
A runtime others build on.
ifURI
The local-first app + LAN mesh built on urirun.
connectors
Installable URI capability packages — any language.
your project
Embed the SDK; expose your commands and services as URIs.
docs
Runtime, bindings, connectors, error reference.