Building relationship-aware AI applications today usually means duct-taping three different systems together: Neo4j for the graph, Pinecone for vectors, and Elasticsearch for text.
This infrastructure nightmare leads to:
- Writing endless glue code.
- Maintaining brittle data sync pipelines.
- Zero transactional consistency across your data silos.
After getting completely fed up with this, I spent the last few months building an alternative: CoordiNode.
What is CoordiNode?
CoordiNode is an open-source (AGPL-3.0), graph-native hybrid retrieval engine built entirely in Rust. It unifies graph traversal, vector similarity search, and full-text retrieval into a single transactional engine.
The Elephant in the Room: Why not Neo4j, ArangoDB, or SurrealDB?
Whenever a new database drops, the immediate question is: why reinvent the wheel? Here is exactly why we built this:
- Why not Neo4j? Neo4j is the king of graphs, but it runs on the JVM. We wanted a lightweight, zero-GC, single-binary engine that delivers predictable performance without JVM tuning overhead.
- Why not SurrealDB or ArangoDB? Both are fantastic multi-model databases. However, they rely on proprietary query languages (SurrealQL and AQL). We firmly believe OpenCypher is the gold standard for graph traversals. CoordiNode is built to be OpenCypher-compatible from day one.
Core Features
- One Engine, One Query: Traverse a knowledge graph, filter by vector distance, and rank by text match in a single Cypher query.
- Predictable Performance: Pure Rust implementation using a native seqno MVCC with a unified oplog (built on a modified Fjall LSM-tree).
- ACID Transactions: Full Snapshot Isolation across all your graph, text, and vector data simultaneously.
The "Magic Moment" Query
Imagine running this in one transaction:
MATCH(topic:Concept {name: "machine learning"})-[:RELATED_TO*1..3]->(related)
MATCH(related)<-[:ABOUT]-(doc:Document)
WHERE vector_distance(doc.embedding, $question_vector) < 0.4
AND text_match(doc.body, "transformer attention mechanism")
RETURN doc.title, vector_distance(doc.embedding, $question_vector) AS relevance
The Reality Check (Early Alpha v0.3.x)
I want to be 100% transparent—this is an early alpha. The core is solid, but bugs are expected. Here is our actual roadmap status:
- Single-node only: Currently optimized for 100K-1M nodes. Distributed Raft clustering is in active development (v0.4).
- No Bolt Protocol (Yet): Use our native gRPC, REST proxy, or HTTP. Neo4j driver compatibility (Bolt) is planned for v1.2.
- In-Memory Vectors: HNSW indexes currently reside in RAM (e.g., 1M vectors × 384 dims = ~1.5GB RAM).
Try it out
You can spin it up via Docker in under 5 minutes:
git clone https://github.com/structured-world/coordinode.git
cd coordinode
docker compose up -d
We are a small team building the infrastructure layer for AI-native applications. If you believe graph + vector + text should live in one engine under a genuine open-source license, give it a spin!
We would be incredibly grateful for your feedback or bug reports on GitHub.
👉 GitHub: https://github.com/structured-world/coordinode
If you like what we're building, feel free to drop a ⭐ on GitHub! It helps us keep going.