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::combinenow emitsCrossProductbetween two non-Empty plans instead of dropping the earlier one, soMATCH (a:A) MATCH (b:B) CREATE (a)-[:R]->(b)propagates both bindings toCREATE.find_merge_matchesindexesVec<CreateElement>by alias soMERGE (a)-[r:R]->(b)works against the CREATE-shaped pattern.execute_expandacceptsedge_type=None;MATCH (a)-[r]->(b)and-[*1..N]->work without an explicit relationship type.LogicalPlan::NodeScan.labelis nowOption<String>;MATCH (n)without a label fans out across every observed label.
Breaking
-
idis now a user property; the internal NodeId moves to_id. Previouslyidhijacked Cypher map literals as the internal NodeId sigil. After this release,idis a plain user property; the internal NodeId is_id. The Cypherid(n)function keeps returning the internal NodeId.Migration. Rename
{id: $uuid}→{_id: $uuid}anywhere the intent is the internal NodeId. Usen._id(accessor) orid(n)(function) to read it.n.idnow reads the user property (orNull).
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-namespaceflock+ atomicrename(2).gs://storage backend for Google Cloud Storage.az://storage backend for Azure Blob Storage.namidb-servercrate 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.ymlat 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 runlearns--store <uri>for durable runs against any backend. Defaults tomemory://defaultwhen 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 oncommit_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.