an embedded, multi-modal database for AI applications
vectors · BM25 full-text (CJK-native) · geo · graph · TTL — one transactional, zero-dependency Rust engine
one engine · one frozen C ABI · eleven language bindings · one release cascade
every badge above is live — each registry is published by the same one-tag cascade
cargo add corvid-dbuse corvid::{Db, Metric, Value, field};
let db = Db::open("memory.corvid")?;
let docs = db.collection("docs");
// Store a document (any JSON-like value; embeddings are first-class).
let mut doc = std::collections::BTreeMap::new();
doc.insert("category".into(), Value::Text("blog".into()));
doc.insert("body".into(), Value::Text("rust embedded database design".into()));
doc.insert("embedding".into(), Value::Vector(vec![0.1, 0.9, 0.2]));
docs.insert(b"post-1", &Value::Map(doc))?;
// Hybrid query: filter + vector + text, fused and reranked, in one call.
let rows = docs
.query()
.filter(field("category").eq(Value::Text("blog".into())))
.vector("embedding", vec![0.1, 0.9, 0.2], 100, Metric::Cosine)
.text("body", "rust embedded database", 100)
.rerank_mmr(0.7)
.limit(10)
.run()?;
# Ok::<(), corvid::Error>(())Not a Rust shop? Same engine, same query, your language — keep scrolling.
| 🧭 Vector | exact kNN + HNSW ANN · cosine / euclidean / dot · binary quantization |
| 🔤 Full-text | BM25 ranking · dictionary-free CJK tokenization · phrase queries |
| 🌐 Geo | radius / bbox / nearest-k, haversine kilometres |
| 🔗 Graph | edges, multi-hop traversal, delete cascade |
| ⏱ Time & shape | TTL expiry · secondary + compound indexes · aggregations |
| 🛡 Engine | transactional · single file or in-memory · zero required dependencies · #![forbid(unsafe_code)] |
| Language | Install | Repo |
|---|---|---|
| Rust (the engine) | cargo add corvid-db |
corvid |
| JavaScript — browser/Worker, wasm + OPFS | npm i corvid-js |
corvid-js |
| Node.js — prebuilt platform binaries | npm i corvid-node |
corvid-node |
| Python | pip install corvid-python |
corvid-python |
| Kotlin / Java (JVM) | io.github.corvid-db:corvid-jvm |
corvid-jvm |
| Android | io.github.corvid-db:corvid-android (AAR, jniLibs bundled) |
corvid-jvm |
| Swift — iOS + macOS | SPM: https://github.com/corvid-db/corvid-swift.git |
corvid-swift |
| Dart / Flutter | dart pub add corvid |
corvid-dart |
| PHP | composer require corvid/php-corvid |
corvid-php |
| Go | go get github.com/corvid-db/corvid-go |
corvid-go |
| C / C++ / Zig | link corvid.h + the platform cdylib from the release archive |
corvid-c · corvid-cpp · corvid-zig |
Every binding repo ships a runnable six-example tour — quickstart, hybrid RRF+MMR, vector-index families, text search incl. CJK, graph, geo — executed on every CI leg, and the docs site embeds all six, per language, with an API-at-a-glance for each.
🧪 Proof, not promises
- One golden suite, eleven replays. The engine's 267-executable-line fixture suite runs through every binding's public API on every CI run — against the exact artifacts each binding ships (downloaded from the pinned engine release, checksum-verified).
- A locked ABI. 124 symbols,
FFI_VERSION = 1, enum values frozen, symbols append-only; the contract (docs/FFI.md) is enforced by drift gates, sanitizers, and a C smoke suite on three OSes. - One tag, every registry. Engine release → PRs to all eleven bindings → tags → publishes — and the cascade verifies every fired release run's verdict. Nothing publishes half-way.
📚 Where to go
- The docs — task-oriented tutorial, the corvid-language reference, index/vector/geo/FTS/graph guides, administration, performance, the full C ABI, and one page per binding.
- The engine — the Rust crate, the C ABI, the MCP sidecar.
- Bindings overview — the full matrix with correctness stories.
- Contributing — per-repo plans, the golden-suite floor, and the ABI contract.
corvid is pre-1.0: APIs may change, but breaks are loud, coordinated, and ride the release cascade — never a surprise.