One language for similarity, structure, time, and proof —
on one deterministic substrate where answers replay, explain, or refuse.
Note
Latest binary release: v0.8.1. Pre-1.0 by design: the public API is not frozen, and we do not publish yardstick latency/throughput until measured with methodology and losing runs (VERSIONING.md). The board is live status.
Linux x86_64:
curl -L https://github.com/kyzodb/kyzo/releases/download/v0.8.1/kyzo -o kyzo
chmod +x kyzo
./kyzoThirty seconds later you have a REPL. A join is shared variables — not JOIN:
Or skip the typing and run the ops-world demo that seeds incidents, privilege edges, HNSW, claims, and coverage, then asks the knowing question:
# with a release binary on PATH, or after: cargo build -p kyzo-bin --release
./examples/readme/demo.shEmbed like SQLite — no server; a database is a file handle:
Other targets: cargo build -p kyzo-bin --release.
Keeping facts, vectors, graph, text, and history in sync is the second product nobody asked for. KyzoDB collapses them to one query, one transaction, one snapshot.
Vector DBs don’t join. Graph DBs don’t mean. Audit logs don’t query. KyzoScript (Datalog) treats search hits as relations — so similarity, recursion, negation, and privilege closure compose in one program.
Near this alert · live · prod · has a runbook · no claim yet · and the attacker can still reach
db-customers. That is retrieval as knowing, not a fan-out pipeline.
The same program shape also joins full-text hits the same way — hybrid retrieval is a join, not a
fusion microservice. See examples/readme/demo.sh for a runnable seed of this world.
Correct the record; as-of the incident date still returns what was believed then — a seek, not a
change-log archaeology project. Same ops memory: customer C-77 was trial when the incident
fired, enterprise after the correction:
Anyone who has run a vector database knows the failure: fill k, then filter, watch the set go empty
at low selectivity. Here the filter is inside the search; k counts matches:
Ask it to prove a recursive answer against its own oracle — or hit a budget and get a typed refusal. Same facts and budget also produce byte-identical answers across thread counts:
KyzoDB ships its own adversary: a deliberately naive reference oracle that speaks the whole language. Generated workloads are answered twice; the answers must match.
- Oracle — stratified Datalog semantics as an executable, slow, obviously-correct evaluator.
::verify— user surface: match, budgeted refusal, or a reproducible mismatch bundle.- Determinism — seeded campaigns at multiple thread counts demand byte-identical answers and refusals.
- Typed refusals — wrong shape, exceeded budget, unsafe program → named error, never panic.
- One law — memcomparable keys: binary order equals semantic order, so every access path is a range scan on one substrate.
When an agent must not get it wrong, a derived fact names the premises that entailed it — re-checked by an independent checker that imports nothing from the evaluator:
KyzoScript compiles to relational algebra and evaluates with semi-naive, stratified, magic-set
Datalog. Storage is fjall behind a memcomparable encoding —
the invariant that lets relational, graph, vector, text, and time share one ordered store. Pure Rust
end to end: embedded, server, or browser — no C/C++ in the build.
Not a petabyte warehouse. Not a distributed OLTP cluster. KyzoDB is for one body of knowledge that must answer as facts, graph, similarity, text, and history — consistently, accountably, in one place.
Feature-complete for its scope and correctness-proven (serializable transactions, crash recovery,
oracle-verified query semantics, shipped ::verify). Still pre-1.0: expect API churn; empty
scoreboards do not belong on this page. See VERSIONING.md. The
board is live status.
KyzoDB began as a fork of CozoDB by Ziyang Hu and the Cozo Project Authors. Full story and attribution: FORK.md.
Multi-licensed; LICENSING.md is the authoritative map. Engine/hosts are
MPL-2.0; agent tooling under .claude/ is BSL-1.1. See
CONTRIBUTING.md.
