Skip to content

OmniGraph v0.11.0

Latest

Choose a tag to compare

@github-actions github-actions released this 13 Sep 19:50
· 28 commits to main since this release
1523b4a

OmniGraph v0.11.0

Released 2026-09-13.

This release improves branching reliability, query performance, and cluster
operations, with changes to identity fields and result formats.

Before upgrading

Upgrade the CLI, server, and consuming integrations together. Existing
v0.9/v0.10 graphs require an explicit offline storage upgrade. Stop servers,
writers, and maintenance, retain a verified whole-root backup, and run the
check before converting a qualified standalone graph:

omnigraph upgrade ./graph.omni --check --json
omnigraph upgrade ./graph.omni --json

The default target is v9, which requires only main and no declared property
names beginning _. To retain branches or legacy system column spellings,
add --to-format 8 to both commands. The binary serves v8 and v9; qualified
conversion retains data and history. Cluster-managed roots and unqualified
inputs refuse conversion. See the upgrade guide
for admission, interrupted upgrades, rollback, and the export/rebuild fallback.

Highlights

  • More reliable branches and merges. Fixes stale fast-forward results,
    false merge conflicts, failures on unrelated large rows, and reads racing
    with branch deletion. Branches remain writable after adopting another
    branch's table history. Some failed merges clean up safely without reopening;
    ambiguous outcomes still require recovery.
  • Faster queries and search. Cached catalogs and query compilation speed
    up warm reads. Adaptive traversals and adjacency persisted by optimize
    reduce traversal startup work. Bounded BM25/vector scans and selective hybrid
    search avoid unnecessary reads; filtered nearest() queries widen their
    search to fill the limit when enough matches exist. Broad rrf() queries
    retain their exhaustive full-text path.
  • Keyed relationships. Edge declarations support @key(@src, @dst, ...).
    Matching relationships inserted on separate branches converge on merge,
    with conflicting non-key values reported explicitly.
  • Richer GQ. Return whole node objects, project nearest() distances and
    BM25 scores, and use min/max with dates and booleans. Projected search
    expressions must match the leading ordering expression. Branch create,
    delete, merge, and list are also available as GQ statements through the
    canonical query/mutation routes. See queries
    and branching.
  • Better operational visibility. /readyz reports serving/draining state,
    the applied revision it booted from, and served/quarantined counts. Authorized
    graph listings identify quarantined graphs. Shutdown has a configurable deadline (25 seconds
    by default); set the orchestrator's termination grace longer. See
    deployment guide.
    cluster observe and cluster plan --observe inspect state without taking
    the cluster write lock or changing its ledger.

Compatibility and behavior changes

  • Identity fields: GQ uses @id, @src, and @dst; ordinary id, src,
    and dst can be user properties on new graphs. New physical system columns
    use __id, __src, and __dst; schema show --json reports the vintage.
    JSONL exports put identity in top-level id. Move legacy data.id there
    before loading into a new graph, where data.id means a user property.
    Property names beginning _ are reserved on new graphs; edge properties
    from and to remain reserved.
  • Node results: return { $p } now returns an object containing @id and
    its non-Blob/non-Vector properties. Use $p.@id when you need only identity.
  • JSON values: Query/export rows omit null-valued fields; change images
    retain explicit nulls. Dates are strings, UTC DateTime output has no trailing
    Z, F32/vector values use 32-bit rendering, and float exponent spelling
    changes. Non-finite computed floats become null. All integers are JSON
    numbers, so JavaScript consumers must handle values beyond safe precision.
    Entity Blob values use base64: or URI spelling. See
    JSON result spelling.
  • Stricter validation: Duplicate result column names, unsupported score
    projections, and malformed date values fail explicitly. A Date cannot
    contain a time of day. Previously stored out-of-range date counts must be
    corrected before affected reads/exports succeed. Traversal fixes cover
    self-loop hop counts, repeated variables, and anonymous endpoints.
  • Ordering and cleanup: Search scores and secondary keys now determine
    ranked result order. Unordered traversal limits may select a different valid
    subset. Deleting a parent preserves history needed by descendants; explicit
    cleanup reclaims unused forks and retired refs. optimize maintains layout
    and indexes without collecting those forks.
  • Cluster config: Declared relative paths containing .. or traversing
    symbolic links are refused. Absolute paths retain their previous behavior.
  • Rust consumers: to_sdk_json methods are removed. ReadOutput::rows and
    LegacyReadOutput::rows now use Box<serde_json::value::RawValue>. Fields
    omitted for nulls need Option or #[serde(default)] when deserializing.
  • Interim actor provenance removed: Automatic OmniActor creation,
    actor_provenance config, and --actor-provenance flags are withdrawn; commit
    attribution remains. Interim schema IR v3 and actor-extended cluster ledgers
    are refused. See the compatibility boundary
    if you used a development build with this feature.

Full commit history

Kudos to the new contributors: @roy2392 (#594), @mikemikimike (#591).