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.

EnginePurposeReplaces
VectorSemantic search, RAG, recspgvector, Qdrant
GraphRelationships, GraphRAGNeo4j
DocumentFlexible or strict schemasMongoDB, PostgreSQL
ColumnarAnalytics, timeseries, spatialClickHouse, DuckDB
Key-ValueSessions, counters, cachesRedis, DragonflyDB
Full-Text SearchBM25, fuzzy, hybrid fusionElasticsearch
ArrayND sparse scientific dataTileDB, SciDB, Zarr
CRDTOffline sync, edge devicesCustom 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;

The questions you're about to ask

Ship AI products, not plumbing.

Get early access to the launch. We'll send you the repo, the benchmarks, and the design-partner invite.