{"id":51503669,"url":"https://github.com/puffball1567/rochedb","last_synced_at":"2026-07-07T22:03:23.670Z","repository":{"id":369611982,"uuid":"1290453609","full_name":"puffball1567/rochedb","owner":"puffball1567","description":"RocheDB PoC - ephemeris-based distributed document/vector store","archived":false,"fork":false,"pushed_at":"2026-07-06T06:09:17.000Z","size":291,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-07-06T06:15:58.926Z","etag":null,"topics":["cpp","csharp","database","distributed-database","document-database","embedded-database","faiss","go","kotlin","llm","nim","nodejs","nosql","php","python","rag","rust","swift","typescript","vector-database"],"latest_commit_sha":null,"homepage":null,"language":"Nim","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/puffball1567.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"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-07-06T00:47:33.000Z","updated_at":"2026-07-06T05:10:35.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/puffball1567/rochedb","commit_stats":null,"previous_names":["puffball1567/rochedb"],"tags_count":6,"template":false,"template_full_name":null,"purl":"pkg:github/puffball1567/rochedb","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/puffball1567%2Frochedb","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/puffball1567%2Frochedb/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/puffball1567%2Frochedb/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/puffball1567%2Frochedb/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/puffball1567","download_url":"https://codeload.github.com/puffball1567/rochedb/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/puffball1567%2Frochedb/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":35243972,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-07-07T02:00:07.222Z","response_time":90,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":["cpp","csharp","database","distributed-database","document-database","embedded-database","faiss","go","kotlin","llm","nim","nodejs","nosql","php","python","rag","rust","swift","typescript","vector-database"],"created_at":"2026-07-07T22:03:23.019Z","updated_at":"2026-07-07T22:03:23.662Z","avatar_url":"https://github.com/puffball1567.png","language":"Nim","funding_links":[],"categories":[],"sub_categories":[],"readme":"# RocheDB\n\n**v0.2.0 Technical Preview / research OSS.** RocheDB is not yet presented as a\nproduction replacement for Redis, PostgreSQL, MongoDB, Apache Arrow, or a\ndedicated vector database. The current release target is a measurable prototype\nof ring/galaxy-oriented storage, retrieval, persistence, drivers, and cluster\nsmoke behavior.\n\nRocheDB's practical goal is simple: reduce the amount of data a system has to\nread, transfer, hold in memory, and pass to downstream AI/RAG or application\nlogic. In one sentence:\n\n\u003e RocheDB stores data with a coordinate-like `ring`, then uses that placement at\n\u003e read time to reduce the amount of data that must be searched, transferred, and\n\u003e passed to downstream systems.\n\nThe celestial mechanics vocabulary, especially orbits, encounters, rings, and\naccretion, is an algorithmic design source rather than the value proposition.\nThe value proposition is smaller working sets, fewer transferred bytes, fewer\nretrieval tokens, and lower infrastructure pressure when data can be placed by\nmeaningful locality.\n\nIt is not an AI-only database. The same model is intended to work as a general\nNoSQL/document store for web systems: users, tenants, regions, products,\ncategories, dates, and application state can all become rings or ring\nhierarchies. The core idea is that locality, authorization boundaries, dump\nunits, migration units, and retrieval scope should be visible to the database\ninstead of being reconstructed after every query.\n\nWrites are intentionally light. A human, application, or import rule places data\ninto a ring. Reads use the ring, hierarchy, centroid, coherence, mass, retrieval\nprofile, and projection to keep the candidate set small.\n\nRocheDB is NoSQL, but it is not a MongoDB-compatible or ad-hoc aggregation\ndatabase. The main difference is that a `ring` is not just a collection name; it\nis part of the read path. RocheDB expects applications, routes, tenants, import\nrules, or operators to place data into meaningful rings so later reads can avoid\nunrelated working sets. See [How RocheDB Differs From Typical NoSQL](docs/nosql-positioning.md).\n\nRocheDB's main bet is not \"scan the entire corpus faster.\" It is \"avoid reading\nunneeded data in the first place.\" Training data, document corpora, and\napplication histories tend to grow. Systems that keep scanning wider datasets\neventually run into physical limits: memory bandwidth, semiconductor supply,\nenergy, cooling, cloud cost, and latency. RocheDB tries to move cost from total\ncorpus size toward semantic working-set size.\n\n## Documents\n\n- Documentation site entry point: [docs/index.md](docs/index.md)\n- Installation: [docs/installation.md](docs/installation.md)\n- Public API reference: [docs/public-api.md](docs/public-api.md)\n- Configuration reference: [docs/config-reference.md](docs/config-reference.md)\n- CLI reference: [docs/cli-reference.md](docs/cli-reference.md)\n- How RocheDB differs from typical NoSQL: [docs/nosql-positioning.md](docs/nosql-positioning.md)\n- Concept: [docs/rochedb-concept.md](docs/rochedb-concept.md)\n- Detailed design: [docs/rochedb-design.md](docs/rochedb-design.md)\n- Feature status / roadmap: [docs/rochedb-status.md](docs/rochedb-status.md)\n- Release checklist: [docs/release-checklist.md](docs/release-checklist.md)\n- GitHub release draft: [docs/github-release-v0.2.0.md](docs/github-release-v0.2.0.md)\n- Driver / FFI roadmap: [docs/rochedb-driver-roadmap.md](docs/rochedb-driver-roadmap.md)\n- Driver installation guide: [docs/driver-installation.md](docs/driver-installation.md)\n- FAISS versioning policy: [docs/faiss-versioning.md](docs/faiss-versioning.md)\n- Vector backend selection: [docs/vector-backends.md](docs/vector-backends.md)\n- Protocol compatibility: [docs/protocol-compatibility.md](docs/protocol-compatibility.md)\n- Universe sync: [docs/universe-sync.md](docs/universe-sync.md)\n- Threat model: [docs/threat-model.md](docs/threat-model.md)\n- Benchmark notes: [docs/rochedb-bench.md](docs/rochedb-bench.md)\n- Cloud operations metrics: [docs/cloud-operations.md](docs/cloud-operations.md)\n- Topology configuration reference: [docs/topology-config.md](docs/topology-config.md)\n- Topology pattern catalog: [docs/topology-examples.md](docs/topology-examples.md)\n- Shelfer integration boundary: [docs/rochedb-shelfer-integration.md](docs/rochedb-shelfer-integration.md)\n- Halo capture design: [docs/rochedb-halo-capture.md](docs/rochedb-halo-capture.md)\n- Changelog: [CHANGELOG.md](CHANGELOG.md)\n- Third-party notices: [THIRD_PARTY_NOTICES.md](THIRD_PARTY_NOTICES.md)\n- Contribution policy: [CONTRIBUTING.md](CONTRIBUTING.md)\n\n## Installation\n\nRocheDB v0.2.x is a technical preview. The Nim package is available through\nNimble, while non-Nim language packages are still repository-local foundations.\n\nPrerequisites:\n\n- Nim `2.0.0` or newer\n- `git`\n- `gcc` or another C compiler supported by Nim\n\nInstall the CLI and Nim library:\n\n```sh\nnimble install rochedb\nroche --help\n```\n\nClone the repository when you want to run the full source test suite, examples,\nor driver smoke tests:\n\n```sh\ngit clone https://github.com/puffball1567/rochedb.git\ncd rochedb\nscripts/test_core.sh\nnimble install -y\n```\n\nNimble installs binaries into `~/.nimble/bin` by default. If `roche` is not\nfound, add it to your shell PATH:\n\n```sh\nexport PATH=\"$HOME/.nimble/bin:$PATH\"\n```\n\nFor server-style installs, build locally and install the binaries into\n`/usr/local/bin`, the usual source-install location for database tools:\n\n```sh\nnim c -d:release --nimcache:/tmp/nimcache_roche -o:bin/roche src/rochecli.nim\nnim c -d:release --nimcache:/tmp/nimcache_roched -o:bin/roched src/roched.nim\nsudo install -m 0755 bin/roche /usr/local/bin/roche\nsudo install -m 0755 bin/roched /usr/local/bin/roched\n```\n\nSee [docs/installation.md](docs/installation.md) for PATH and system install\ndetails.\n\nUse RocheDB from a Nim program in this repository by importing the public module:\n\n```nim\nimport rochedb\n```\n\nFor command-line tools and demos that need repo-local binaries, build them under\n`bin/`:\n\n```sh\nnim c -d:release --nimcache:/tmp/nimcache_roche -o:bin/roche src/rochecli.nim\nnim c -d:release --nimcache:/tmp/nimcache_roched -o:bin/roched src/roched.nim\n```\n\nBasic CLI document workflow:\n\n```sh\nroche put --data=data --ring=docs/japan --payload='{\"title\":\"Hello\"}'\nroche list-ring --data=data --ring=docs/japan\nroche get --data=data --id=RAW_ID\n```\n\nOptional FAISS vector backend:\n\n```sh\nscripts/fetch_faiss.sh\nscripts/setup_faiss_toolchain.sh   # only needed when system CMake is too old\nscripts/build_faiss_bridge.sh\nroche doctor\n```\n\nThe built-in exact vector backend works without FAISS. FAISS is recommended for\nproduction-style broad vector reads when the bridge is available. See\n[docs/driver-installation.md](docs/driver-installation.md) for language drivers\nand [docs/faiss-versioning.md](docs/faiss-versioning.md) for FAISS version\ncontrol.\n\n## Quickstart: Embedded Mode\n\n```nim\nimport rochedb\n\nvar db = rochedb.open(dataDir = \"data\")   # persistent; omit dataDir for memory-only\ndb.setGalaxyDescription(\"Product and support knowledge\")\ndb.setRingDescription(\"docs/japan\", \"Japanese product documentation and support articles\")\n\nlet id = db.put(\"hello\", ring = \"docs/japan\")\necho db.get(id)\necho db.atlas()                           # galaxy/ring map for agents and tools\n\necho db.locate(id)                        # current owner, computed locally\necho db.locate(id, at = 120.0)            # future owner, also computed locally\n```\n\n`get(id)` is the fastest path when the application already has a RocheDB ID. If\nthe ID is not known, start from a ring.\n\n```nim\nimport rochedb\n\nvar db = rochedb.open(dataDir = \"data\")\n\ndiscard db.put(\"\"\"{\"slug\":\"hello\",\"title\":\"Hello\"}\"\"\", ring = \"docs/japan\")\ndiscard db.put(\"\"\"{\"slug\":\"refund\",\"title\":\"Refund guide\"}\"\"\", ring = \"docs/japan\")\n\nfor item in db.listByRing(\"docs/japan\"):\n  echo item.payload\n```\n\nFor vector/RAG-style lookup, search the ring directly:\n\n```nim\nlet hits = db.retrieve(@[1.0'f32, 0.0'f32], ring = \"docs/japan\", budget = 3)\n\nfor hit in hits:\n  echo hit.payload\n```\n\nIf the right ring is not obvious, use `atlas()` and ring descriptions to choose\nthe search scope first. RocheDB is designed to avoid ID-less global scans when a\nring coordinate is available.\n\n## Why It Helps Web Systems\n\nRocheDB is useful outside AI workflows when the application naturally has\nlocality boundaries.\n\n- Tenant locality: `ring = \"tenant/acme/orders\"` keeps query scope, dump scope,\n  backup scope, and future authorization scope aligned.\n- Smaller responses: `query(id, \"{ title status }\")` returns only requested\n  fields, so large JSON documents do not need to cross the process or network\n  boundary on every read.\n- Import routing: JSONL exports from MongoDB-like stores can be imported and\n  routed by fields such as `tenant`, `category`, `region`, or `date`.\n- Galaxy isolation: separate services can use separate galaxies, data\n  directories, credentials, and clusters while using the same implementation.\n- Explainable location: `locate(id)` and `locate(id, at=...)` make placement\n  observable without a directory service.\n- Incremental adoption: start with embedded `open(dataDir=...)`, then move to\n  cluster `connect(...)` when the service needs separate nodes.\n\n## Drivers\n\nThe public driver surface is intentionally small. External drivers can use\nhigh-level wire frames such as `PUTR`, `GETID`, `QRYID`, `BGET`, and\n`RETRIEVE`; they do not need to reimplement RocheDB's ring-key, orbit, or ID\nrules.\n\nThe table below lists current repository-local driver foundations. Publication\npriority for language packages is tracked in\n[docs/rochedb-driver-roadmap.md](docs/rochedb-driver-roadmap.md).\n\n| Language / runtime | Driver path | Current mode | Smoke status |\n|---|---|---|---|\n| Nim | `src/rochedb.nim` | Native embedded and cluster API | core tests |\n| C ABI | `include/rochedb.h` | Embedded / cluster foundation for bindings | contract smoke |\n| Python | `drivers/python` | Native TCP wire driver | unittest wire smoke |\n| Node.js / TypeScript | `drivers/node` | Native TCP wire driver, ESM | `node --test` |\n| Bun | `drivers/node` | Node-compatible TCP wire driver | `bun test` |\n| Go | `drivers/go` | C ABI wrapper | `go test` |\n| PHP | `drivers/php` | FFI / C ABI wrapper | Docker smoke |\n| Swift | `drivers/swift` | SwiftPM C ABI wrapper | Linux Docker smoke |\n| C# | `drivers/csharp` | Generic .NET C ABI wrapper | contract smoke |\n| C++ | `drivers/cpp` | C++17 C ABI wrapper | contract smoke |\n| Kotlin/JVM | `drivers/kotlin` | JNI / C ABI wrapper | Docker smoke |\n\nRust is the first external driver publication target and is being split out of\nthe core repository. Its package link will be added when published.\n\nDetailed setup notes are in\n[docs/driver-installation.md](docs/driver-installation.md). Nimble package\nregistration is complete. Package publishing to npm, PyPI, Cargo, Composer,\nNuGet, Maven, and other non-Nim registries remains a post-v0.2 roadmap item.\n\n## Cluster Mode\n\nRun `roched` nodes with the same peer list:\n\n```sh\nroched --id=0 --peers=h1:7301,h2:7301,h3:7301 --data=/var/lib/roche\n```\n\nThen connect with the same API shape:\n\n```nim\nvar db = connect(\"h1:7301,h2:7301,h3:7301\")\nlet id = db.put(%*{\"title\": \"RocheDB\", \"author\": {\"name\": \"Ada\"}}, ring = \"docs\")\necho db.query(id, \"{ title author { name } }\")\necho db.locate(id, at = epochTime() + 60)\n```\n\nThe core placement rule is deterministic:\n\n\u003e data location = deterministic function `E(id, t) -\u003e node`\n\nEvery node can compute where a record is now, and where it will be later,\nwithout a directory lookup. Handoffs are scheduled from ephemeris state rather\nthan from a central rebalance service.\n\nCanonical data should normally live in one galaxy/ring. Multiple views should be\nmodeled with hierarchy, naming conventions, import rules, retrieval profiles, or\nprojection. RocheDB core does not try to keep duplicate logical records in\nmultiple galaxies perfectly synchronized.\n\nFor asynchronous maintenance across rings, RocheDB has a minimal `warp` queue.\nA warp job scans specified rings over time and drops a patch into matching\ndocuments. It is closer to a maintenance asteroid belt than a relational join:\njobs have attempts, retry timing, acknowledgements, and dead-letter state, and\ntheir state is persisted in the WAL. Rich scheduling, backoff policy, audit\nhistory, and flow orchestration are intended to live in adapters such as the\nfuture `rochedb-flow` integration.\n\n## Retrieval, Memory, and Token Reduction\n\nRocheDB's strongest benchmark story is working-set reduction. Local reads are\nalso in the same broad latency class as existing databases, but the larger claim\nis that RocheDB can reduce how much data is touched before ANN, rerank, LLM, or\napplication processing.\n\n| Benchmark | Setup | Result |\n|---|---|---|\n| Working-set | 100 rings / 10k docs | scanned/query `10000 -\u003e 100` (99% reduction) |\n| Memory-pressure | 100 rings / 100k docs / 512B payload | candidate memory/query `93.079 MiB -\u003e 0.931 MiB` (99% reduction) |\n| Synthetic RAG | fixed recall | recall `1.000`, scanned/query `8000 -\u003e 1000`, tokens/query `3960 -\u003e 657.8` |\n| AI/RAG case study | generated JSONL, 400 docs / 6 rings | recall `1.000`, scanned/query `400 -\u003e 40`, tokens/query `615.2 -\u003e 231.6` |\n| API minimum test | 2 rings / 4 vectors | `skippedVectors` and `candidateReduction` confirm pre-filtered search scope |\n\nReference latency results are tracked in\n[docs/rochedb-bench.md](docs/rochedb-bench.md). The short version is:\n\n- RocheDB 3-node TCP with persistence enabled measured `45.6 us` per single-key\n  read and `49.2 us` per single-key write in the local smoke benchmark.\n- PostgreSQL 14 on the same machine measured `84 us` for primary-key read and\n  `77 us` for `synchronous_commit=off` single-row write in the referenced\n  comparison.\n- A Docker Redis smoke test measured RocheDB TCP `BGET` at `1.56 us/op` and\n  Redis pipeline GET at `3.56 us/op` under the documented local conditions.\n\nThese are not universal performance claims. They show that the local read path\nis already competitive enough for the working-set reduction story to matter.\n\n## C ABI\n\n`include/rochedb.h` plus `lib/librochedb.so` is the foundation for non-Nim\nbindings.\n\n```c\nroche_init();\nif (roche_abi_version() != ROCHE_ABI_VERSION) return 1;\n\nvoid *db = roche_connect(\"h1:7301,h2:7301,h3:7301\");\nroche_id id;\n\nroche_set_galaxy_description(db, \"Product and support knowledge\");\nroche_set_ring_description(db, \"docs\", \"Documentation ring\");\nroche_put(db, \"docs\", \"hello\", 5, \u0026id);\n\nfloat v[2] = {1.0f, 0.0f};\nroche_put_vec(db, \"docs\", \"hello\", 5, v, 2, \u0026id);\n\nroche_batch_result *b = roche_batch_get(db, \u0026id, 1);\nroche_batch_get_free(b);\n\nroche_retrieve_result *r = roche_retrieve(db, v, 2, \"docs\", 8, 0, 0);\nroche_retrieve_free(r);\n\nsize_t n;\nchar *j = roche_query(db, id, \"{ title }\", \u0026n);\nroche_free(j);\n\nchar *a = roche_atlas(db, v, 2, 8, \u0026n);\nroche_free(a);\n\nint node = roche_locate(db, id, -1.0);\n```\n\n## Build and Verification\n\n### Core Test Suite\n\n```sh\nscripts/test_core.sh\nscripts/test_all_smoke.sh\n```\n\nInclude driver compatibility checks when local toolchains are available:\n\n```sh\nROCHE_TEST_DRIVERS=1 scripts/test_all_smoke.sh\n```\n\n### Simulation And Mechanism Benchmarks\n\n```sh\nnim c -d:danger -o:bin/rochesim src/rochesim.nim\nbin/rochesim all\n\nnim c -d:danger -o:bin/rochebench src/rochebench.nim\nbin/rochebench\n```\n\n### Working-Set, Memory, And RAG Benchmarks\n\n```sh\nnim c -d:release -o:bin/roche src/rochecli.nim\nroche working-set-bench --n=100000 --rings=100 --queries=50 --budget=20\nroche memory-pressure-bench --n=100000 --rings=100 --queries=50 --budget=20 --payload-bytes=512\nRUN_REDIS=0 examples/memory_pressure_case_study.sh\nexamples/ai_rag_case_study.sh\n```\n\n### Redis Comparison\n\nUse an existing local Redis server:\n\n```sh\nroche redis-bench --n=100000 --payload-bytes=100 --redis=127.0.0.1:6379\n```\n\nOr use the Docker-based smoke comparison:\n\n```sh\nexamples/redis_bench.sh\nROCHED=1 examples/redis_bench.sh\n```\n\n### Server Options\n\n```sh\nnim c -d:release -o:bin/roched src/roched.nim\nnim c -d:release -o:bin/roche src/rochecli.nim\n```\n\nStrong durability mode:\n\n```sh\nbin/roched --id=0 --peers=127.0.0.1:7301 --data=/var/lib/roche --durability=strong\n```\n\nRing-prefix authorization:\n\n```sh\nbin/roched --id=0 --peers=127.0.0.1:7301 --user=alice --password=secret --allow-ring=allowed\n```\n\nMinimal RBAC plus ring-prefix authorization:\n\n```sh\nbin/roched --id=0 --peers=127.0.0.1:7301 \\\n  --role=reader:read:reader:allowed \\\n  --role=writer:write:writer:allowed \\\n  --role=admin:admin:admin:allowed\n```\n\nEncrypted backup / restore:\n\n```sh\nroche backup-encrypted --data=data --backup=backup.enc --passphrase=change-me\nroche restore-encrypted --backup=backup.enc --data=restored --passphrase=change-me\n```\n\n### Driver Checks\n\n```sh\npython3 -m unittest discover -s drivers/python/tests\nnode --test drivers/node/test/*.test.js\n```\n\nCluster demo:\n\n```sh\n./examples/cluster_demo.sh\n```\n\nUniverse sync demo:\n\n```sh\n./examples/universe_sync_demo.sh\n./scripts/universe_sync_remote_smoke.sh\n```\n\nThis shows a WAL-backed eventual sync outbox, idempotent apply, ack/prune, and\nthe CLI handoff boundary between two local data directories or a remote RocheDB\nserver. See [docs/topology-examples.md](docs/topology-examples.md) for topology\npatterns.\n\n### C ABI\n\n```sh\nnim c --app:lib -d:release -o:lib/librochedb.so src/rochedb_capi.nim\ngcc examples/demo.c -Iinclude -Llib -lrochedb -Wl,-rpath,'$ORIGIN/../lib' -o bin/demo\nbin/demo\n```\n\n### FAISS Vector Backend\n\n```sh\nscripts/fetch_faiss.sh\nscripts/setup_faiss_toolchain.sh\nscripts/build_faiss_bridge.sh\nroche doctor\nexamples/vector_backend_bench.sh\n```\n\nBy default this fetches the configured FAISS tag, currently `v1.14.3`, and\nrecords the actual commit in `third_party/faiss.version`. It does not enforce an\nexact commit unless `ROCHE_FAISS_COMMIT` is set. See\n[docs/faiss-versioning.md](docs/faiss-versioning.md) for tag overrides, exact\ncommit pinning, upgrades, downgrades, and security update handling.\n\nFAISS is the recommended production vector backend when the bridge is available.\nRocheDB's built-in exact backend remains useful as a dependency-free fallback\nfor tests, small embedded deployments, and environments where FAISS cannot be\ninstalled. See [docs/vector-backends.md](docs/vector-backends.md) for the backend\nselection rule and local smoke benchmark.\n\nRocheDB forces Nim ARC through `config.nims`. Avoiding reference cycles is a\nstructural constraint of the codebase, not just a style preference.\n\n## Project Layout\n\n```text\nsrc/rochedb.nim        public API for embedded and cluster modes\nsrc/roched.nim         node server: scale-out, persistence, handoff\nsrc/rochecli.nim       CLI, demos, benchmarks, maintenance commands\nsrc/rochedb_capi.nim   C ABI\nsrc/roche/core.nim     ephemeris fast layer: Orbit, ArcTable, encounters\nsrc/roche/select.nim   GraphQL-like projection\nsrc/roche/store.nim    particle store plus append-only WAL\nsrc/roche/wire.nim     wire protocol and persistent client\nsrc/rochesim.nim       PoC verification CLI\ndrivers/               language drivers and wrappers\ninclude/rochedb.h      C header\nexamples/              C demo, cluster demo, benchmark scripts\nexamples/compose/      Docker Compose topology demos\ntests/                 unit and smoke tests\n```\n\n## License\n\nRocheDB core and the OSS drivers are released under Apache-2.0; see\n[LICENSE](LICENSE).\n\nThird-party dependency and tooling notices are tracked in\n[THIRD_PARTY_NOTICES.md](THIRD_PARTY_NOTICES.md). Security assumptions and known\ngaps are tracked in [docs/threat-model.md](docs/threat-model.md).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpuffball1567%2Frochedb","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpuffball1567%2Frochedb","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpuffball1567%2Frochedb/lists"}