{"id":48736866,"url":"https://github.com/nodedb-lab/nodedb","last_synced_at":"2026-05-08T00:06:34.775Z","repository":{"id":347702915,"uuid":"1183612568","full_name":"NodeDB-Lab/nodedb","owner":"NodeDB-Lab","description":"A local-first, real-time, edge-to-cloud hybrid database for multi-modal workloads","archived":false,"fork":false,"pushed_at":"2026-04-12T03:47:31.000Z","size":7883,"stargazers_count":11,"open_issues_count":0,"forks_count":4,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-04-12T05:05:17.848Z","etag":null,"topics":["columnar","database","distributed","graph","kv-store","local","nosql","rag","sql","timeseries","vector"],"latest_commit_sha":null,"homepage":"https://nodedb.dev","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/NodeDB-Lab.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"docs/security.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-03-16T19:32:29.000Z","updated_at":"2026-04-12T04:00:19.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/NodeDB-Lab/nodedb","commit_stats":null,"previous_names":["nodedb-lab/nodedb"],"tags_count":5,"template":false,"template_full_name":null,"purl":"pkg:github/NodeDB-Lab/nodedb","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NodeDB-Lab%2Fnodedb","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NodeDB-Lab%2Fnodedb/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NodeDB-Lab%2Fnodedb/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NodeDB-Lab%2Fnodedb/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/NodeDB-Lab","download_url":"https://codeload.github.com/NodeDB-Lab/nodedb/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NodeDB-Lab%2Fnodedb/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31984557,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-18T20:23:30.271Z","status":"ssl_error","status_checked_at":"2026-04-18T20:23:29.375Z","response_time":103,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["columnar","database","distributed","graph","kv-store","local","nosql","rag","sql","timeseries","vector"],"created_at":"2026-04-12T05:01:19.392Z","updated_at":"2026-05-08T00:06:34.766Z","avatar_url":"https://github.com/NodeDB-Lab.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n \n\u003cimg src=\"assets/wordmark.svg\" alt=\"NodeDB\" width=\"420\"\u003e\n\n\u003ch3\u003eThe distributed multi-model database for AI and agent workloads.\u003c/h3\u003e\n\n\u003cp\u003e\n  Eight database engines in a single Rust binary. One SQL dialect. Zero network hops between\n  vector search, graph traversal, document storage, columnar analytics, timeseries, key-value,\n  full-text search, and multi-dimensional arrays.\n\u003c/p\u003e\n\n\u003cp\u003e\n  \u003ca href=\"https://nodedb.dev/docs/introduction/quickstart/\"\u003e\u003cstrong\u003eQuickstart\u003c/strong\u003e\u003c/a\u003e\n  ·\n  \u003ca href=\"https://nodedb.dev/docs\"\u003e\u003cstrong\u003eDocs\u003c/strong\u003e\u003c/a\u003e\n  ·\n  \u003ca href=\"#performance\"\u003e\u003cstrong\u003eBenchmarks\u003c/strong\u003e\u003c/a\u003e\n  ·\n  \u003ca href=\"https://github.com/NodeDB-Lab/nodedb-lite\"\u003e\u003cstrong\u003eNodeDB-Lite\u003c/strong\u003e\u003c/a\u003e\n  ·\n  \u003ca href=\"https://github.com/NodeDB-Lab/nodedb-cli\"\u003e\u003cstrong\u003eCLI\u003c/strong\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://discord.gg/s54gDMVc7B\"\u003e\n    \u003cimg src=\"assets/discord-cta.svg\" alt=\"Join the NodeDB Discord\" width=\"340\"\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\n\u003cp\u003e\n  \u003ca href=\"https://github.com/NodeDB-Lab/nodedb/actions/workflows/ci.yml\"\u003e\n    \u003cimg src=\"https://img.shields.io/github/actions/workflow/status/NodeDB-Lab/nodedb/ci.yml?branch=main\u0026label=ci\" alt=\"CI status\"\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://github.com/NodeDB-Lab/nodedb/releases\"\u003e\n    \u003cimg src=\"https://img.shields.io/github/v/release/NodeDB-Lab/nodedb?display_name=tag\" alt=\"Latest release\"\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://github.com/NodeDB-Lab/nodedb/blob/main/LICENSE\"\u003e\n    \u003cimg src=\"https://img.shields.io/badge/license-BUSL--1.1-blue\" alt=\"License\"\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://github.com/NodeDB-Lab/nodedb/stargazers\"\u003e\n    \u003cimg src=\"https://img.shields.io/github/stars/NodeDB-Lab/nodedb?style=social\" alt=\"GitHub stars\"\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\n\u003c/div\u003e\n\nNodeDB replaces the combination of PostgreSQL + pgvector + Redis + Neo4j + ClickHouse + Elasticsearch with a single process. Graph queries that feed vector search, full-text ranking, and columnar aggregation execute in one engine with shared storage, shared memory, and one planner.\n\n## Why NodeDB\n\n- **One binary, not a polyglot stack.** No inter-service networking, no schema drift between systems, no data synchronization pipelines. A graph query that feeds a vector search that filters by full-text relevance executes in one process.\n- **PostgreSQL wire protocol.** Connect with `psql` or any PostgreSQL client library. Standard SQL with engine-specific extensions where SQL can't express the operation.\n- **Edge to cloud.** The same engines run embedded on phones and browsers (NodeDB-Lite, WASM) with CRDT-based offline-first sync to the server.\n- **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.\n\n## Performance\n\n**Timeseries ingest + query benchmark** — 10M rows, high-cardinality DNS telemetry (50K+ unique domain names). Single node, NVMe storage.\n\n### Ingest\n\n| Engine      | Rate         | Time         | Memory     | Disk         |\n| ----------- | ------------ | ------------ | ---------- | ------------ |\n| **NodeDB**  | **93,450/s** | 107s         | **120 MB** | 2,217 MB     |\n| TimescaleDB | 56,615/s     | 177s         | 963 MB     | 2,802 MB     |\n| ClickHouse  | 53,905/s     | 186s         | 1,035 MB   | **1,647 MB** |\n| InfluxDB    | 22,715/s     | 88s (2M cap) | 1,656 MB   | 982 MB       |\n\n### Queries (ms, best of 3)\n\n| Query                      | NodeDB  | ClickHouse | TimescaleDB | InfluxDB (2M) |\n| -------------------------- | ------- | ---------- | ----------- | ------------- |\n| `COUNT(*)`                 | **\u003c1**  | 1          | 423         | 13,110        |\n| `WHERE qtype=A COUNT`      | 47      | **6**      | 347         | 5,297         |\n| `WHERE rcode=SERVFAIL`     | 41      | **6**      | 334         | 1,048         |\n| `GROUP BY qtype`           | 56      | **15**     | 597         | 12,426        |\n| `GROUP BY rcode`           | 52      | **16**     | 604         | 13,183        |\n| `GROUP BY cached+AVG`      | 120     | **33**     | 677         | 13,652        |\n| `GROUP BY client_ip (10K)` | **141** | 157        | 660         | 14,301        |\n| `GROUP BY qname (50K+)`    | 2,665   | **288**    | 3,644       | 16,720        |\n| `time_bucket 1h`           | 101     | **30**     | 603         | --            |\n| `time_bucket 5m+qtype`     | 138     | **99**     | 711         | --            |\n\nNodeDB 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.\n\n## Engines\n\n| Engine                                       | What it replaces             | Key capability                                                                                                          |\n| -------------------------------------------- | ---------------------------- | ----------------------------------------------------------------------------------------------------------------------- |\n| [Vector](docs/vectors.md)                    | pgvector, Pinecone, Weaviate | HNSW with SQ8/PQ quantization, adaptive bitmap pre-filtering                                                            |\n| [Graph](docs/graph.md)                       | Neo4j, Amazon Neptune        | CSR adjacency, 13 algorithms, Cypher-subset MATCH, GraphRAG                                                             |\n| [Document](docs/documents.md)                | MongoDB, CouchDB             | Schemaless (MessagePack + CRDT) or Strict (Binary Tuples, O(1) field access). Typeguards for gradual schema enforcement |\n| [Columnar](docs/columnar.md)                 | ClickHouse, DuckDB           | Per-column codecs (ALP, FastLanes, FSST), predicate pushdown, HTAP bridge                                               |\n| [Timeseries](docs/timeseries.md)             | TimescaleDB, InfluxDB        | ILP ingest, continuous aggregation, PromQL, approximate aggregation                                                     |\n| [Spatial](docs/spatial.md)                   | PostGIS                      | R\\*-tree, geohash, H3, OGC predicates, hybrid spatial-vector                                                            |\n| [Key-Value](docs/kv.md)                      | Redis, DynamoDB              | O(1) lookups, TTL, sorted indexes, rate limiting, SQL-queryable                                                         |\n| [Full-Text Search](docs/full-text-search.md) | Elasticsearch                | BMW BM25, 27-language support, CJK bigrams, fuzzy, hybrid vector fusion                                                 |\n| [Array (NDArray)](docs/array.md)             | TileDB, Zarr                 | Multi-dimensional tiles, Z-order indexing, bitemporal support, tile-level retention                                     |\n\n## Install\n\n```bash\n# Docker\ndocker run -d \\\n  -p 6432:6432 -p 6433:6433 -p 6480:6480 \\\n  -v nodedb-data:/var/lib/nodedb \\\n  farhansyah/nodedb:latest\n\n# Cargo\ncargo install nodedb\n```\n\nRequires Linux kernel \u003e= 5.1 (io_uring). Connect:\n\n```bash\nndb                              # native CLI (connects to localhost:6433)\npsql -h localhost -p 6432        # or any PostgreSQL client\n```\n\n```sql\nCREATE COLLECTION users;\n\n-- Standard SQL\nINSERT INTO users (name, email, age) VALUES ('Alice', 'alice@example.com', 30);\n\n-- Object literal syntax (same result)\nINSERT INTO users { name: 'Bob', email: 'bob@example.com', age: 25 };\n\n-- Batch insert\nINSERT INTO users [\n    { name: 'Charlie', email: 'charlie@example.com', age: 35 },\n    { name: 'Dana', email: 'dana@example.com', age: 28 }\n];\n\nSELECT * FROM users WHERE age \u003e 25;\n```\n\nNew here? Start with the [Quickstart](https://nodedb.dev/docs/introduction/quickstart/) on the official documentation site: **[nodedb.dev/docs](https://nodedb.dev/docs)**.\n\n## Deployment Modes\n\n| Mode                | Use case                                                                     |\n| ------------------- | ---------------------------------------------------------------------------- |\n| **Origin (server)** | Full distributed database. Multi-Raft, io_uring, pgwire. Horizontal scaling. |\n| **Origin (local)**  | Same binary, single-node. No cluster overhead.                               |\n| **NodeDB-Lite**     | Embedded library for phones, browsers, desktops. CRDT sync to Origin.        |\n\n## NodeDB-Lite\n\nAll eight engines as an embedded library. Linux, macOS, Windows, Android, iOS, and browser (WASM, experimental).\n\n- **Lite only** -- local-first apps that don't need a server. Vector search, graph, FTS, documents, arrays, all in-process with sub-ms reads.\n- **Lite + Origin** -- offline-first with CRDT sync. Writes happen locally, deltas merge to Origin when online. Multiple devices converge regardless of order.\n- **Same API** -- the `NodeDb` trait is identical across Lite and Origin. Switch between embedded and server without changing application code.\n\nSee [NodeDB-Lite](https://github.com/NodeDB-Lab/nodedb-lite) for platform details and sync configuration.\n\n## Key Features\n\n**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`.\n\n**Bitemporal queries** -- System time (audit trail) and valid time (temporal semantics) across all engines. Query data as it existed in the past, or as it was valid on a past date. GDPR-compliant tile purge on array engine.\n\n**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.\n\n**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.\n\n**Programmability** -- Stored procedures with `IF/FOR/WHILE/LOOP`. User-defined functions. Triggers (async, sync, deferred). `SECURITY DEFINER`.\n\n**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.\n\n**Six wire protocols** -- pgwire (PostgreSQL), HTTP/REST, WebSocket, RESP (Redis), ILP (InfluxDB line protocol), native MessagePack.\n\n## Tools\n\n- **[`ndb`](https://github.com/NodeDB-Lab/nodedb-cli)** -- Native CLI with TUI, syntax highlighting, and tab completion. Alternative to `psql`.\n- **[NodeDB Studio](https://github.com/NodeDB-Lab/nodedb-studio)** -- GUI client for managing collections, browsing data, and monitoring. _(coming soon)_\n- **[nodedb-bench](https://github.com/NodeDB-Lab/nodedb-bench)** -- Performance benchmarks against competing databases.\n\n## Documentation\n\nThe official documentation site is **[nodedb.dev/docs](https://nodedb.dev/docs)** — start with the [Quickstart](https://nodedb.dev/docs/introduction/quickstart/).\n\nIn-repo references:\n\n- [Getting Started](docs/getting-started.md) -- Build, run, connect\n- [Architecture](docs/architecture.md) -- Three-plane execution model\n- [Engine Guides](docs/README.md) -- Deep dives into each engine\n- [Security](docs/security/README.md) -- Auth, RBAC, RLS, audit, multi-tenancy\n- [Real-Time](docs/real-time.md) -- CDC, pub/sub, LIVE SELECT\n- [NodeDB-Lite](https://github.com/NodeDB-Lab/nodedb-lite) -- Embedded edge database\n- [AI Patterns](docs/ai/README.md) -- RAG, GraphRAG, agent memory, feature store\n\n## Contributing\n\nWe welcome bug fixes, engine improvements, new codecs and analyzers, test coverage, and documentation. Read [CONTRIBUTING.md](CONTRIBUTING.md) before opening a PR — NodeDB's Three-Plane execution model has hard rules that reviewers enforce.\n\n## Building from Source\n\nFor development or contributing:\n\n```bash\ngit clone https://github.com/NodeDB-Lab/nodedb.git\ncd nodedb\ncargo build --release\ncargo install cargo-nextest --locked  # one-time\ncargo nextest run --all-features\n```\n\n## Release Status\n\nNodeDB Origin is in **public beta** as of **v0.1.0 (2026-05-07)**. All eight engines are feature-complete and covered by tests. The wire protocols (pgwire, HTTP, native MessagePack, RESP, ILP, WebSocket) are stable — clients written against 0.1.0 will keep working through 1.0.\n\n**v0.1.0 — Beta (today).** Build new products on it. The public surface (SQL dialect, wire protocols, configuration) is stable; expect internal changes (storage layout, on-disk format, replication internals) between minor releases. Patch and minor bumps will land as needed — if something requires a 0.2, we ship a 0.2. The two months between beta and 1.0 are deliberately for real workloads to surface edge cases we can't manufacture in-house.\n\n**v1.0.0 — Production-ready (target: 2026-07-07).** What 1.0 guarantees:\n\n- **API \u0026 SQL stability** — semver from 1.0 onward. No breaking SQL or client-API changes within a major.\n- **Wire protocol stability** — pgwire, HTTP, native MessagePack, RESP, ILP, WebSocket frozen.\n- **On-disk format stability** — no breaking migrations within 1.x. Forward-compatible upgrades only.\n- **Cluster \u0026 Raft stability** — rolling upgrades supported within 1.x; no quorum-breaking changes.\n- **Performance SLAs** — published p50/p99 targets per engine, regression-gated in CI.\n- **Security audit** — third-party audit completed and findings remediated before 1.0 ships.\n- **Storage, backup, and recovery** — fully exercised under fault injection, sustained load, and crash-restart cycles.\n\nPre-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.\n\n\u003e **Note:** This release track applies to **NodeDB Origin** (the server) only. [NodeDB-Lite](https://github.com/NodeDB-Lab/nodedb-lite), [`ndb` CLI](https://github.com/NodeDB-Lab/nodedb-cli), and [NodeDB Studio](https://github.com/NodeDB-Lab/nodedb-studio) are versioned independently on their own tracks.\n\n**Want to test or experiment with NodeDB?** Join our [Discord](https://discord.gg/s54gDMVc7B) — we provide full support for early adopters during the beta.\n\n## Contributors\n\n\u003ca href=\"https://github.com/NodeDB-Lab/nodedb/graphs/contributors\"\u003e\n  \u003cimg src=\"https://contrib.rocks/image?repo=NodeDB-Lab/nodedb\" alt=\"NodeDB Contributors\"/\u003e\n\u003c/a\u003e\n\n## License\n\nNodeDB uses a dual-license model:\n\n- **Shared engine crates** (`nodedb-types`, `nodedb-vector`, `nodedb-graph`, `nodedb-fts`, `nodedb-spatial`, `nodedb-codec`, `nodedb-columnar`, `nodedb-array`, `nodedb-sql`, `nodedb-client`, `nodedb-query`, `nodedb-strict`) — [Apache 2.0](LICENSE-APACHE). Use them freely in your own projects, SDKs, and tools.\n- **Server crates** (`nodedb`, `nodedb-wal`, `nodedb-raft`, `nodedb-cluster`, `nodedb-bridge`, `nodedb-mem`, `nodedb-crdt`) — [Business Source License 1.1](LICENSE). Free for any use except offering NodeDB as a hosted database service (DBaaS). Converts to Apache 2.0 on 2030-05-01.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnodedb-lab%2Fnodedb","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnodedb-lab%2Fnodedb","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnodedb-lab%2Fnodedb/lists"}