Vector DB + graph DB + ranker, fused in one query. No pipelines. No Python glue. This is GraphRAG at the database layer.
The stack you were going to build
Most AI product teams ship with Postgres + a vector DB + a graph DB + a cache + a search engine. That's five systems to deploy, five bills, five failure modes, and a mountain of glue code. NodeDB is one.
Before
5 services, your ops team, 3am pages
- Postgres for users, orders, billing
- Pinecone / Weaviate for embeddings
- Neo4j for social graph & recommendations
- Redis for sessions & cache
- Elasticsearch for product search
- TileDB / Zarr for scientific arrays (genomics, climate, earth obs)
- ⚠️ Glue code, dual writes, sync drift, cross-service joins in your app layer
After
One connection string
- NodeDB — relational tables
- NodeDB — vector index with HNSW + PQ
- NodeDB — property graph with 13 algorithms
- NodeDB — key-value with O(1) hash lookups
- NodeDB — full-text search with BM25
- NodeDB — ND sparse arrays for genomics, climate, earth obs
- Bitemporal on the engines that need it — audit, time-travel, GDPR-safe erasure
- RLS + RBAC + audit log + tenant isolation — multi-tenant SaaS without writing row filters
- ✨ One SQL planner joins them natively. Ship the app, not the plumbing.
What NodeDB Replaces
The combination of PostgreSQL + pgvector + Redis + Neo4j + ClickHouse + Elasticsearch — unified into one binary with shared storage and zero network hops between engines.
| Engine | Purpose | Replaces |
| Vector | Semantic search, RAG, recs | pgvector, Qdrant |
| Graph | Relationships, GraphRAG | Neo4j |
| Document | Flexible or strict schemas | MongoDB, PostgreSQL |
| Columnar | Analytics, timeseries, spatial | ClickHouse, DuckDB |
| Key-Value | Sessions, counters, caches | Redis, DragonflyDB |
| Full-Text Search | BM25, fuzzy, hybrid fusion | Elasticsearch |
| Array | ND sparse scientific data | TileDB, SciDB, Zarr |
| CRDT | Offline sync, edge devices | Custom sync layers |
Cross-Engine Queries in Standard SQL
-- Vector search with metadata pre-filtering
SELECT title, vector_distance(embedding, $query_vec) AS score
FROM articles WHERE category = 'ml'
AND id IN (SEARCH articles USING VECTOR(embedding, $query_vec, 10));
-- Hybrid BM25 + vector, fused with Reciprocal Rank Fusion
SELECT title, rrf_score(
vector_distance(embedding, $query_vec),
bm25_score(body, 'distributed database')
) AS score FROM articles LIMIT 10;
-- Spatial + vector in one statement
SELECT name FROM restaurants
WHERE ST_DWithin(location, ST_Point(-73.99, 40.75), 2000)
AND embedding <-> $query_vec LIMIT 10;
Ship AI products, not plumbing.
Get early access to the launch. We'll send you the repo, the benchmarks, and the design-partner invite.