Changelog
Esta página es espejo de
CHANGELOG.md
en el repo del motor. El formato sigue
Keep a Changelog; el versionado
sigue de manera laxa Semantic Versioning.
v0.3.0 — 2026-05-18 · barrida de limitaciones de Cypher v0.2.1
Cierra las seis limitaciones del query engine documentadas en el
README de v0.2.1 (MATCH (n) rechazado, MERGE con relación roto, id
reservado, etc.). Una de ellas — la reserva de id — es breaking.
Arreglado
lower::combineahora emiteCrossProductentre dos planes no-Empty en lugar de dropear el anterior, asíMATCH (a:A) MATCH (b:B) CREATE (a)-[:R]->(b)propaga ambos bindings aCREATE.find_merge_matchesindexaVec<CreateElement>por alias asíMERGE (a)-[r:R]->(b)funciona contra el patrón con forma de CREATE.execute_expandaceptaedge_type=None;MATCH (a)-[r]->(b)y-[*1..N]->funcionan sin un tipo de relación explícito.LogicalPlan::NodeScan.labelahora esOption<String>;MATCH (n)sin label hace fan-out sobre cada label observado.
Breaking
-
ides ahora una propiedad de usuario; el NodeId interno pasa a_id. Antes,idsecuestraba los literales de map de Cypher como el sigilo del NodeId interno. Después de esta release,ides una propiedad común de usuario; el NodeId interno es_id. La funciónid(n)de Cypher sigue devolviendo el NodeId interno.Migración. Renombrar
{id: $uuid}→{_id: $uuid}donde la intención sea el NodeId interno. Usán._id(accessor) oid(n)(función) para leerlo.n.idahora lee la propiedad de usuario (oNull).
v0.2.1 — 2026-05-18 · fix de CI
El tag py-v0.2.0 construyó cada wheel pero el paso de publish se
salteó. v0.2.1 shippea el mismo código con las expectativas de los
tests puestas al día. Sin cambios al motor.
v0.2.0 — 2026-05-18 · historia de self-host
Agregado
- Backend de almacenamiento
file://con manifest CAS completo víaflockpor namespace +rename(2)atómico. - Backend de almacenamiento
gs://para Google Cloud Storage. - Backend de almacenamiento
az://para Azure Blob Storage. - Crate y binario
namidb-server— daemon HTTP en Rust que expone una API REST. Endpoints:POST /v0/cypher,GET /v0/health,GET /v0/version,POST /v0/admin/flush. Auth con bearer token, flush periódico, Dockerfile, mapeo completo de tipos JSON ↔ Cypher. docker-compose.ymlen la raíz del repo — MinIO + bucket-init +namidb-server.- Parser de URIs compartido usado por el cliente de Python, el CLI y el servidor.
- Diagramas de arquitectura y despliegue con variantes para dark-mode.
Cambiado
- El CLI
namidb runaprende--store <uri>para runs durables contra cualquier backend. Por defectomemory://defaultcuando se omite. tg.Client(uri)de Python delega el parseo de URI a la implementación compartida de Rust.
Arreglado
- La expectativa de indent del plan-explain alineada con el tree-renderer.
v0.1.0 — release pública inicial
Primera release pública bajo Business Source License 1.1 (Change Date: 2029-05-18, Change License: Apache License 2.0).
Motor
- Parser de Cypher / GQL cubriendo un subset estricto de GQL (ISO/IEC 39075:2024) + openCypher 9. Ejecución de punta a punta de las queries LDBC SNB Interactive Complex Read IC01–IC12.
- Escrituras vía Cypher:
CREATE,MERGE,SET,DELETE,DETACH DELETE,REMOVE. Durables encommit_batch. - Optimizador basado en costos con predicate pushdown, projection pushdown, join reorder, conversión a hash-join, hash semi-join y pruning de row-groups de Parquet.
- Ejecutor vectorizado morsel-driven con representación intermedia factorizada opcional (RFC-017).
Storage
- Almacenamiento columnar sobre object storage: SSTs de nodes en Parquet, formato custom de edge-SST con CSR adjacency (RFC-002), compresión zstd, bloom filters, índices de fence-pointer.
- Corrección sin coordinación vía manifest CAS.
- Caches en capas (
AdjacencyCache,NodeViewCache,SstCache).
Clientes
- Bindings de Python (
pip install namidb), wheels abi3. - CLI:
namidb parse,namidb explain --verbose,namidb run.
Proyecto
- Workspace de 8 crates.
- 18 RFCs de diseño en
docs/rfc/. - Harness de benchmark sintético con forma de LDBC con un runner pareado de Kùzu.