nodedb
Library Listed
Local-first, real-time, edge-to-cloud hybrid database for multi-modal workloads
- Downloads
- 35
- Dependents
- 3
- Stars
- 246
- Forks
- 20
- Contributors
- 7
- Commits
- 4,217
- Latest release
- 0.6.2 ·
About
The memory and storage engine for AI agents — from the edge to the cloud.
Durable, queryable, access-guarded memory for AI agents that runs where the agent runs — embedded on device, offline-capable, and syncing to a distributed server when connected. Semantic, relational, episodic, and time-series memory in one engine, one process, with no network hops between them.
Quickstart · Docs · Benchmarks · NodeDB-Lite · CLI
AI agents need memory: what they were told, how facts relate, what happened when, and what matters right now. The usual answer stitches a cloud vector store to a graph database to a document store — or dumps everything into a markdown file and hopes. NodeDB puts all of it in one engine that runs where the agent runs: the same engine embeds on a laptop, phone, or browser (NodeDB-Lite) and scales to a distributed cluster (NodeDB Origin), with CRDT sync between them.
It already powers ma8e, an in-development memory-and-knowledge layer for coding agents built entirely on embedded NodeDB — deterministic capture, hybrid retrieval, and access guards in one process with no network hop.
Read the full README
Why NodeDB
- Memory that runs where the agent runs. The same engines embed on device and in the browser (NodeDB-Lite, WASM), work offline, and sync conflict-free to the server (CRDT). A cloud vector store can't embed next to your agent; a markdown file isn't queryable or access-guarded.
- All of an agent's memory in one query. Vector search, graph traversal, full-text ranking, document storage, timeseries, and key-value share one storage core, one identity space, and one planner — so a query flows from semantic search into graph traversal filtered by full-text, in one process with no network hops. Multi-model is how NodeDB does this; the point is the capability, not the label.
- PostgreSQL wire protocol. Connect with
psqlor any PostgreSQL client library. Standard SQL with engine-specific extensions where SQL can't express the operation. - One engine instead of a polyglot stack. When you outgrow the edge, the same engine folds a server-side sprawl of separate systems into a single deployment — fewer services to run, no cross-system sync pipelines, no schema drift.
- Serious about performance. Thread-per-Core data plane with io_uring, SIMD-accelerated distance functions, zero-copy MessagePack transport, per-column compression (ALP, FastLanes, FSST, Gorilla). See benchmarks below.
Performance
Timeseries ingest + query benchmark — 10M rows, high-cardinality DNS telemetry (50K+ unique domain names). Single node, NVMe storage.
Ingest
| Engine | Rate | Time | Memory | Disk |
|---|---|---|---|---|
| NodeDB | 93,450/s | 107s | 120 MB | 2,217 MB |
| TimescaleDB | 56,615/s | 177s | 963 MB | 2,802 MB |
| ClickHouse | 53,905/s | 186s | 1,035 MB | 1,647 MB |
| InfluxDB | 22,715/s | 88s (2M cap) | 1,656 MB | 982 MB |
Queries (ms, best of 3)
| Query | NodeDB | ClickHouse | TimescaleDB | InfluxDB (2M) |
|---|---|---|---|---|
COUNT(*) | <1 | 1 | 423 | 13,110 |
WHERE qtype=A COUNT | 47 | 6 | 347 | 5,297 |
WHERE rcode=SERVFAIL | 41 | 6 | 334 | 1,048 |
GROUP BY qtype | 56 | 15 | 597 | 12,426 |
GROUP BY rcode | 52 | 16 | 604 | 13,183 |
GROUP BY cached+AVG | 120 | 33 | 677 | 13,652 |
GROUP BY client_ip (10K) | 141 | 157 | 660 | 14,301 |
GROUP BY qname (50K+) | 2,665 | 288 | 3,644 | 16,720 |
time_bucket 1h | 101 | 30 | 603 | -- |
time_bucket 5m+qtype | 138 | 99 | 711 | -- |
NodeDB is not a specialized timeseries database, yet it ingests 1.65x faster than TimescaleDB and 1.73x faster than ClickHouse with 8x less memory. Query latency is competitive with ClickHouse on low-cardinality aggregations and within 3-5x on high-cardinality GROUP BY. This is the tradeoff of a general-purpose engine: you get one system instead of five, with performance that stays in the same ballpark as specialized tools.
Engines
| Engine | What it replaces | Key capability |
|---|---|---|
| Vector | pgvector, Pinecone, Weaviate | HNSW with SQ8/PQ quantization, adaptive bitmap pre-filtering |
| Graph | Neo4j, Amazon Neptune | CSR adjacency, 13 algorithms, Cypher-subset MATCH, GraphRAG |
| Document | MongoDB, CouchDB | Schemaless (MessagePack + CRDT) or Strict (Binary Tuples, O(1) field access). Typeguards for gradual schema enforcement |
| Columnar | ClickHouse, DuckDB | Per-column codecs (ALP, FastLanes, FSST), predicate pushdown, HTAP bridge |
| Timeseries | TimescaleDB, InfluxDB | ILP ingest, continuous aggregation, PromQL, approximate aggregation |
| Spatial | PostGIS | R*-tree, geohash, H3, OGC predicates, hybrid spatial-vector |
| Key-Value | Redis, DynamoDB | O(1) lookups, TTL, sorted indexes, rate limiting, SQL-queryable |
| Full-Text Search | Elasticsearch | BMW BM25, 27-language support, CJK bigrams, fuzzy, hybrid vector fusion |
| Array (NDArray) | TileDB, Zarr | Multi-dimensional tiles, Z-order indexing, bitemporal support, tile-level retention |
Install
# Docker
docker run -d \
-p 6432:6432 -p 6433:6433 -p 6480:6480 \
-v nodedb-data:/var/lib/nodedb \
farhansyah/nodedb:latest
# Cargo
cargo install nodedb
Requires Linux kernel >= 5.1 (io_uring). Connect:
ndb -w # native CLI as user nodedb on localhost:6433, prompts for the password (or set NDB_PASSWORD)
psql -h localhost -p 6432 -U nodedb -d default # password: <data_dir>/.superuser_password, or set NODEDB_SUPERUSER_PASSWORD
CREATE COLLECTION users;
-- Standard SQL
INSERT INTO users (name, email, age) VALUES ('Alice', 'alice@example.com', 30);
-- Object literal syntax (same result)
INSERT INTO users { name: 'Bob', email: 'bob@example.com', age: 25 };
-- Batch insert
INSERT INTO users [
{ name: 'Charlie', email: 'charlie@example.com', age: 35 },
{ name: 'Dana', email: 'dana@example.com', age: 28 }
];
SELECT * FROM users WHERE age > 25;
New here? Start with the Quickstart on the official documentation site: nodedb.dev/docs.
Deployment Modes
| Mode | Use case |
|---|---|
| Origin (server) | Full distributed database. Multi-Raft, io_uring, pgwire. Horizontal scaling. |
| Origin (local) | Same binary, single-node. No cluster overhead. |
| NodeDB-Lite | Embedded library for phones, browsers, desktops. CRDT sync to Origin. |
NodeDB-Lite
All eight engines as an embedded library. Linux, macOS, Windows, Android, iOS, and browser (WASM, experimental).
- Lite only -- local-first apps that don't need a server. Vector search, graph, FTS, documents, arrays, all in-process with sub-ms reads.
- Lite + Origin -- offline-first with CRDT sync. Writes happen locally, deltas merge to Origin when online. Multiple devices converge regardless of order.
- Same API -- the
NodeDbtrait is identical across Lite and Origin. Switch between embedded and server without changing application code.
See NodeDB-Lite for platform details and sync configuration.
Key Features
Write-time validation -- Typeguards enforce types, required fields, CHECK constraints, and DEFAULT/VALUE expressions on schemaless collections. Graduate to strict schema with CONVERT COLLECTION x TO document_strict.
Bitemporal queries -- System time (audit trail) and valid time (temporal semantics) on Document, Columnar, Timeseries, Graph and Array. Vector, Full-Text, Spatial and KV indexes reach time through the collection they index. Query data as it existed in the past, or as it was valid on a past date. GDPR-compliant tile purge on array engine.
Multi-dimensional arrays -- Scientific computing with Z-order indexed tiles, tile-level compression, and bitemporal support. Combine with vector/graph/text in fused queries via cross-engine identity.
Real-time -- CDC change streams with consumer groups (~1-5ms latency). Streaming materialized views. Durable topics. Cron scheduler. LISTEN/NOTIFY. All powered by the Event Plane.
Programmability -- Stored procedures with IF/FOR/WHILE/LOOP. User-defined functions. Triggers (async, sync, deferred). SECURITY DEFINER.
Security -- RBAC with GRANT/REVOKE. Row-level security with $auth.* context across all engines. Hash-chained audit log. Multi-tenancy with per-tenant encryption. JWKS, mTLS, API keys.
Six wire protocols -- pgwire (PostgreSQL), HTTP/REST, WebSocket, RESP (Redis), ILP (InfluxDB line protocol), native MessagePack.
Tools
ndb-- Native CLI with TUI, syntax highlighting, and tab completion. Alternative topsql.- NodeDB Studio -- GUI client for managing collections, browsing data, and monitoring. (coming soon)
- nodedb-bench -- Performance benchmarks against competing databases.
Documentation
The official documentation site is nodedb.dev/docs — start with the Quickstart.
In-repo references:
- Getting Started -- Build, run, connect
- Architecture -- Three-plane execution model
- Engine Guides -- Deep dives into each engine
- Security -- Auth, RBAC, RLS, audit, multi-tenancy
- Real-Time -- CDC, pub/sub, LIVE SELECT
- NodeDB-Lite -- Embedded edge database
- AI Patterns -- RAG, GraphRAG, agent memory, feature store
Contributing
We welcome bug fixes, engine improvements, new codecs and analyzers, test coverage, and documentation. Read CONTRIBUTING.md before opening a PR — NodeDB's Three-Plane execution model has hard rules that reviewers enforce.
Building from Source
For development or contributing:
git clone https://github.com/NodeDB-Lab/nodedb.git
cd nodedb
cargo build --release
cargo install cargo-nextest --locked # one-time
cargo nextest run --all-features
Release Status
NodeDB Origin is in public beta; the current release is v0.6.2 (2026-10-16). All eight engines are feature-complete and covered by tests. Server binaries, Docker images and the crates.io crates ship at the same version. The CRDT sync protocol and the native protocol still change between minor releases, so upgrade NodeDB Lite and nodedb-client together with the server.
v0.6 — Beta (today). Build new products on it. Expect internal changes (storage layout, on-disk format, replication internals) between minor releases: a 0.5.0 data directory cannot be opened by 0.6, so start 0.6 on an empty directory. Patch and minor bumps land as needed. The beta period is deliberately for real workloads to surface edge cases we can't manufacture in-house.
v1.0.0 — Production-ready (target: after the beta hardening period). What 1.0 guarantees:
- API & SQL stability — semver from 1.0 onward. No breaking SQL or client-API changes within a major.
- Wire protocol stability — pgwire, HTTP, native MessagePack, RESP, ILP, WebSocket frozen.
- On-disk format stability — no breaking migrations within 1.x. Forward-compatible upgrades only.
- Cluster & Raft stability — rolling upgrades supported within 1.x; no quorum-breaking changes.
- Performance SLAs — published p50/p99 targets per engine, regression-gated in CI.
- Security audit — third-party audit completed and findings remediated before 1.0 ships.
- Storage, backup, and recovery — fully exercised under fault injection, sustained load, and crash-restart cycles.
Pre-1.0 versions may change internals between releases — those changes are critical-path work (storage, backup, security, recovery) that has to be hardened in real production conditions before we put a stability stamp on it. The wire protocol and SQL surface won't break; everything underneath is fair game until 1.0.
Note: This release track applies to NodeDB Origin (the server) only. NodeDB-Lite,
ndbCLI, and NodeDB Studio are versioned independently on their own tracks.
Want to test or experiment with NodeDB? Join our Discord — we provide full support for early adopters during the beta.
Contributors
License
NodeDB is source-available under a mixed-license model. The short version: you can use NodeDB for anything — internal apps, your own SaaS or AI-agent platform, commercial products, at any scale. The one thing you may not do is offer NodeDB itself to third parties as a hosted database service (DBaaS).
- Everything except the server — Apache 2.0, no strings.
The shared kernel that both Origin and NodeDB-Lite
build on: the engines (
nodedb-vector,nodedb-vector-gpu,nodedb-graph,nodedb-fts,nodedb-spatial,nodedb-columnar,nodedb-array), the foundations (nodedb-mem,nodedb-wal,nodedb-crdt), and the supporting crates (nodedb-types,nodedb-codec,nodedb-strict,nodedb-sql,nodedb-query,nodedb-physical,nodedb-client). Use them freely in your own projects, SDKs, and tools. - The server — Business Source License 1.1. Only four crates:
nodedb(the server binary),nodedb-bridge,nodedb-raft,nodedb-cluster— the three-plane runtime and distribution layer. Free for any use except operating it as a managed/hosted database service on others' behalf. Converts to Apache 2.0 on 2030-05-01.
Cloud providers and marketplaces may offer one-click or self-deploy NodeDB images freely — that's explicitly permitted; the line is operational, not promotional. Only running the database as a managed service on someone's behalf needs a commercial license.
NodeDB-Lite (the embedded build — WASM/OPFS, mobile, desktop) is entirely Apache 2.0 and pulls in only the Apache crates above. There is no BSL anywhere in a Lite dependency tree — embed it wherever you like.
Compatibility
- Runs on
- GPU support unknown
What shows it
- no dependency or feature matches a backend row
- Native code
- Required
- Binds native code: libz-sys, rdkafka-sys, ring, tikv-jemalloc-sys, zstd-sys
- Python bindings
- No Python binding crate found
- License
- BUSL-1.1
Compare with similar projects
Order: strongest tier first, then most downloads, then name, with unmeasured values last. A library counts downloads over 30 days. An app counts binary downloads per release. An app with none counts its crate downloads over 30 days. ML Rust runs this catalogue, so its closest project always gets a row.
| Project | Downloads | Dependents | Stars | Latest release | Runs on (GPU) | Native code | License |
|---|---|---|---|---|---|---|---|
|
Local-first, real-time, edge-to-cloud hybrid database for multi-modal workloads |
35 downloads over 30 days | 3 | 246 | 0.6.2 | GPU support unknown | Binds native code: libz-sys, rdkafka-sys, ring, tikv-jemalloc-sys, zstd-sys | BUSL-1.1 |
|
Qdrant - High-performance, massive-scale Vector Database and Vector Search Engine for the next generation of AI. Also available in the cloud https://cloud.qdrant.io/ Also in Text, embeddings and search. |
34,017 binary downloads per release | Not applicable | 35,478 | Not measured | Not measured | Apache-2.0 | |
|
mentedb Listed
A purpose-built database engine for AI agent memory Also in Build LLM apps and agents. |
1,605 downloads over 30 days | 1 | 124 | 0.47.1 | GPU support unknown | No native code found | Apache-2.0 |
|
hyperspace-db Listed
[H] HyperspaceDB is a high-performance, vector database. It features 1-bit quantization, async replication, and native support for hierarchical datasets (Lorentz, Poincaré ball & Hybrid models). Also in Text, embeddings and search. |
96 downloads over 30 days | 3 | 163 | 4.2.0 | GPU support unknown | Binds native code: ort-sys (feature local-onnx) | MIT |
|
nodedb-lite Listed
Embedded edge client for NodeDB — offline vector search, graph traversal, and CRDT sync Also in Build LLM apps and agents. |
41 downloads over 30 days | 0 | 8 | 0.1.0 | GPU support unknown | Binds native code: zstd-sys | Apache-2.0 |
|
YantrikDB database server — multi-tenant cognitive memory with wire protocol, HTTP gateway, replication, auto-failover, and at-rest encryption Also in Build LLM apps and agents. |
39 binary downloads per release | Not applicable | 179 | 0.20.0 | GPU support unknown | Binds native code: libsqlite3-sys, zstd-sys | Apache-2.0 |
|
Inference server for LLMs, speech and embeddings: OpenAI-compatible routes with streaming, plus speech synthesis (TTS) and transcription (ASR). Serves Llama, Mistral, Qwen, Mamba2, MLA+MoE and hybrid models from SafeTensors, AWQ, GPTQ and GGUF. Also in Build LLM apps and agents. |
8 binary downloads per release | Not applicable | 7 | 0.7.1 | CUDA, WebGPU | Binds native code: ring (feature distributed) | Apache-2.0 |
All projects in Build LLM apps and agentsAll projects in Text, embeddings and search
Why ListedNo archive, New or Featured rule places it, so it is Listed.
What it lacks for Featured
- It has 0 active dependents and 0 new dependents in 365 days. Featured needs 11 active dependents or 9 new dependents in 365 days. The repository route reads 246 stars, 20 forks and 7 contributors. It needs 4,539 stars, 434 forks and 79 contributors together.
What else the check found
- The last activity is on 7 Nov 2026, 2 days ago. The rules expect an update within 365 days. Dormancy rule
- The latest release requires the deprecated dependency rustls-pemfile. RUSTSEC-2025-0134 Rot signals rule
Exact rules: Listed, Featured library. The check on applied thresholds version 9.
Every rule outcome, as the check records it
expected-interval: version 0.6.2 base 300, raised to the 365-day floor: E = 365 daysdormancy: last activity 2026-11-07, 2 days ago, E = 365: activerot: deprecated requirement `rustls-pemfile (RUSTSEC-2025-0134, https://rustsec.org/advisories/RUSTSEC-2025-0134.html)`featured: not featured: active_users 0 < 11 and new_adopters 0 < 9 and repository route stars 246 (needs 4539), forks 20 (needs 434), contributors 7 (needs 79)listed: listed: no archive, new or featured rule applies
Crates22 crates
Related projects
Measurements and sources
Each signal row shows the raw value, its source and the fetch date. The Sources list gathers every distinct source on this page. Movement needs more history.
Sources6 sources
- Description: the crates.io description
- crates.io database dump, fetched
- RustSec advisory database, fetched
- GitHub repository, fetched
- crates.io package, fetched
- GitHub contributors, fetched
Adoption0 active dependents, 0 new dependents in 365 days1 not measured
| Signal | Value | Source | Fetched | Counts |
|---|---|---|---|---|
| Active dependents | 0 | crates.io database dump | Yes | |
| New dependents (365 days) | 0 | crates.io database dump | Yes | |
| Peak active dependents | 0 | crates.io database dump | Yes | |
| Active dependents as a share of the peak | 1 | crates.io database dump | Yes | |
| Binary downloads per release | Not measured | Yes |
MaintenanceLatest human commit: 2 days ago3 not measured
| Signal | Value | Source | Fetched | Counts |
|---|---|---|---|---|
| Latest human commit | 2026-11-07 | GitHub repository | Yes | |
| Latest release | 2026-10-16 | crates.io database dump | Yes | |
| First release | 2026-03-29 | crates.io database dump | Yes | |
| Latest version | 0.6.2 | crates.io database dump | Yes | |
| Days the oldest outside issue waits for a reply | 3 | GitHub repository | Yes | |
| Maintainer replies over 365 days | 18 | GitHub repository | Yes | |
| Repository archived | false | GitHub repository | Yes | |
| Repository gone | false | GitHub repository | Yes | |
| Release commit or manifest in the repo | true | crates.io package | Yes | |
| Published docs | true | crates.io database dump | Yes | |
| Latest release fails cargo check | Not measured | Yes | ||
| Build check date | Not measured | Yes | ||
| Build check toolchain | Not measured | Yes |
SecurityUnpatched vulnerabilities: none
| Signal | Value | Source | Fetched | Counts |
|---|---|---|---|---|
| Unpatched vulnerabilities past the grace window | none | RustSec advisory database | Yes | |
| RustSec unmaintained advisory | none | RustSec advisory database | Yes | |
| Deprecation notice | none | crates.io database dump | Yes | |
| Deprecated requirement | rustls-pemfile (RUSTSEC-2025-0134, https://rustsec.org/advisories/RUSTSEC-2025-0134.html) | crates.io database dump | Yes |
Distribution9 releases, 35 downloads over 30 days5 not measured
| Signal | Value | Source | Fetched | Counts |
|---|---|---|---|---|
| Releases | 9 | crates.io database dump | Yes | |
| Downloads over 30 days | 35 | crates.io database dump | Yes | |
| Binary downloads over the last 3 releases | Not measured | Yes | ||
| Homebrew installs on request over 365 days | Not measured | Yes | ||
| Repology repository families | Not measured | Yes | ||
| Docker pull growth over 90 days | Not measured | Yes | ||
| Docker pulls at the growth baseline | Not measured | Yes | ||
| Every version a prerelease | false | crates.io database dump | Yes | |
| Every version 0.0.x | false | crates.io database dump | Yes | |
| Every version yanked | false | crates.io database dump | Yes | |
| Crate deleted from crates.io | false | crates.io database dump | Yes |
Repository246 stars, 20 forks, 7 contributors, 4,217 commits. Stars alone never qualify a project.
| Signal | Value | Source | Fetched | Counts |
|---|---|---|---|---|
| GitHub stars | 246 | GitHub repository | Yes — one part of the repository route | |
| GitHub forks | 20 | GitHub repository | Yes — one part of the repository route | |
| Contributors with a GitHub account | 7 | GitHub contributors | Yes — one part of the repository route | |
| Commits on the default branch | 4217 | GitHub repository | No | |
| Repository's main crate left out of the entry | none | crates.io database dump | Yes |
Facts that never count
| Signal | Value | Source | Fetched | Counts |
|---|---|---|---|---|
| License | BUSL-1.1 | crates.io database dump | No | |
| Runs on, from listed crates and their direct dependencies | GPU support unknown | crates.io database dump | No | |
| What shows each backend | no dependency or feature matches a backend row | crates.io database dump | No | |
| Native code, from listed crates and their dependencies | Binds native code: libz-sys, rdkafka-sys, ring, tikv-jemalloc-sys, zstd-sys | crates.io database dump | No | |
| Python bindings, from direct dependencies of listed crates | No Python binding crate found | crates.io database dump | No | |
| Crates that depend on a listed crate directly | 3 | crates.io database dump | No |
Corrections and review history
No correction applies to this entry.
Judgments
A judgment enters only through an approved issue and a merged pull request.
No judgment applies to this entry.