Skip to content

Changelog

This page mirrors CHANGELOG.md in the engine repo. The format follows Keep a Changelog; versioning loosely follows Semantic Versioning.

v0.3.0 — 2026-05-18 · Cypher v0.2.1 limitation sweep

Closes the six query-engine limitations documented in the v0.2.1 README (MATCH (n) rejected, MERGE with relationship broken, id reserved, etc.). One of them — the id reservation — is breaking.

Fixed

  • lower::combine now emits CrossProduct between two non-Empty plans instead of dropping the earlier one, so MATCH (a:A) MATCH (b:B) CREATE (a)-[:R]->(b) propagates both bindings to CREATE.
  • find_merge_matches indexes Vec<CreateElement> by alias so MERGE (a)-[r:R]->(b) works against the CREATE-shaped pattern.
  • execute_expand accepts edge_type=None; MATCH (a)-[r]->(b) and -[*1..N]-> work without an explicit relationship type.
  • LogicalPlan::NodeScan.label is now Option<String>; MATCH (n) without a label fans out across every observed label.

Breaking

  • id is now a user property; the internal NodeId moves to _id. Previously id hijacked Cypher map literals as the internal NodeId sigil. After this release, id is a plain user property; the internal NodeId is _id. The Cypher id(n) function keeps returning the internal NodeId.

    Migration. Rename {id: $uuid}{_id: $uuid} anywhere the intent is the internal NodeId. Use n._id (accessor) or id(n) (function) to read it. n.id now reads the user property (or Null).

v0.2.1 — 2026-05-18 · CI fix

Tag py-v0.2.0 built every wheel but the publish step was skipped. v0.2.1 ships the same code with the test expectations brought up to date. No engine changes.

v0.2.0 — 2026-05-18 · self-host story

Added

  • file:// storage backend with full manifest CAS via per-namespace flock + atomic rename(2).
  • gs:// storage backend for Google Cloud Storage.
  • az:// storage backend for Azure Blob Storage.
  • namidb-server crate and binary — Rust HTTP daemon exposing a REST API. Endpoints: POST /v0/cypher, GET /v0/health, GET /v0/version, POST /v0/admin/flush. Bearer-token auth, periodic flush, Dockerfile, full JSON ↔ Cypher type mapping.
  • docker-compose.yml at the repo root — MinIO + bucket-init + namidb-server.
  • Shared URI parser used by the Python client, the CLI, and the server.
  • Architecture and deployment diagrams with dark-mode variants.

Changed

  • CLI namidb run learns --store <uri> for durable runs against any backend. Defaults to memory://default when omitted.
  • Python tg.Client(uri) delegates URI parsing to the shared Rust implementation.

Fixed

  • Plan-explain indent expectation aligned with the tree-renderer.

v0.1.0 — initial public release

First public release under Business Source License 1.1 (Change Date: 2029-05-18, Change License: Apache License 2.0).

Engine

  • Cypher / GQL parser covering a strict subset of GQL (ISO/IEC 39075:2024) + openCypher 9. End-to-end execution of LDBC SNB Interactive Complex Read queries IC01–IC12.
  • Writes via Cypher: CREATE, MERGE, SET, DELETE, DETACH DELETE, REMOVE. Durable on commit_batch.
  • Cost-based optimizer with predicate pushdown, projection pushdown, join reorder, hash-join conversion, hash semi-join, and Parquet row-group pruning.
  • Morsel-driven vectorized executor with optional factorized intermediate representation (RFC-017).

Storage

  • Columnar storage on object storage: Parquet node SSTs, custom edge-SST format with CSR adjacency (RFC-002), zstd compression, bloom filters, fence-pointer indices.
  • Coordination-free correctness via manifest CAS.
  • Tiered caches (AdjacencyCache, NodeViewCache, SstCache).

Clients

  • Python bindings (pip install namidb), abi3 wheels.
  • CLI: namidb parse, namidb explain --verbose, namidb run.

Project

  • Workspace of 8 crates.
  • 18 design RFCs in docs/rfc/.
  • LDBC-shaped synthetic benchmark harness with a paired Kùzu runner.