urirun

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.

urirun://bindings.v2compilerunpolicymcp://a2aerror://

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.