v0.6.0
Graph terminology, multi-graph server mode, and canonical query/mutate endpoints. This release renames the Repo concept to Graph across the Cedar resource model, policy API, and query-lint schema source; lets one omnigraph-server process serve up to 10 graphs behind cluster routes with per-graph and server-level policy; and promotes POST /query / POST /mutate (and the CLI's -e/--query-string) as the canonical inline surfaces, with /read and /change kept as deprecated aliases.
Full notes: docs/releases/v0.6.0.md.
Install
- Homebrew (macOS arm64 / Linux x86_64):
brew install ModernRelay/tap/omnigraph - Cargo (all five workspace crates on crates.io):
cargo install --locked omnigraph-cli - Pre-built binaries: see assets below (
omnigraph-linux-x86_64.tar.gz,omnigraph-macos-arm64.tar.gz).
Highlights
- Multi-graph server mode — one process serves 1–10 graphs concurrently under
/graphs/{graph_id}/..., each with its own Cedar policy. Start it with a non-emptygraphs:map inomnigraph.yamland no single-mode selector. Read-onlyGET /graphsenumerates the registry;omnigraph graphs listmirrors it on the CLI. - Graph terminology rename —
Omnigraph::Repo→Omnigraph::Graphin the Cedar resource model,repo_id→graph_idin the policy API, and"repo"→"graph"in the query-lintschema_source.kind. Operator group/action YAML is unaffected (entities are generated); only hand-rolled raw Cedar files need updating. - Canonical
POST /query+POST /mutate— inline query/mutation endpoints with a clean{ query, name, params, branch, snapshot }body./queryrejects mutations with a typed 400./readand/changecontinue indefinitely as deprecated aliases carrying RFC 9745Deprecation: trueand RFC 8288 successorLinkheaders. - Inline source on the CLI —
omnigraph query/omnigraph mutatewith-e/--query-stringrun ad-hoc.gqwithout a temp file; top-levelomnigraph lint(aliascheck) replaces the nestedomnigraph query lint. Legacy spellings warn once to stderr. - Per-graph + server-level Cedar policy —
graphs.<id>.policy.filegoverns each graph;server.policy.filegoverns the server-scopedgraph_listaction. Loaders reject a mismatched action-in-wrong-file at startup. - Strict init —
omnigraph initagainst an already-initialized URI now errors withAlreadyInitializedinstead of silently overwriting;omnigraph init --forceopts back in (it does not purge existing Lance datasets).
Behavior changes worth knowing
- No on-disk migration — existing v0.5.0 (and earlier)
.omnigraphs open directly. All formats unchanged. - Multi-graph deployments lose flat routes — bare
/query,/snapshot, … return 404 in multi mode; everything moves under/graphs/{graph_id}/.... SDK clients generated against a single-mode spec must regenerate. Single-graph invocation is unchanged. - Open servers require an explicit opt-in — a server with no bearer tokens and no policy refuses to start unless passed
--unauthenticated/OMNIGRAPH_UNAUTHENTICATED=1. Tokens-without-policy default-deny every non-readaction, andGET /graphsrequiresserver.policy.filein every runtime state. - Programmatic embedders —
ServerConfiggains amode,AppStateexposesrouting(),AuthenticatedActorbecomesResolvedActor,PolicyEngine::loadsplits intoload_graph/load_server, andPolicyRequest::actor_idmoves to a separateauthorize(actor_id, &request)parameter. The HTTP/bearer contract is unchanged. ChangeRequestfield rename —query_source→query,query_name→name; the legacy keys keep deserializing via serde aliases, so existing clients are unaffected.
Upgrade notes, the single → multi migration, and the full breaking-change detail are in docs/releases/v0.6.0.md.