Release v1.0.0
Uni 1.0
Uni was a graph database with vector search. As of 1.0, it's a reasoning engine.
Write rules. Attach probabilities to your edges. Uni propagates them through the graph — recursively, correctly — and gives you not just answers but confidence scores backed by full evidence chains.
Graph structure, vector similarity, logical inference, probabilistic reasoning. One embedded library. No server. pip install uni-db.
Probabilistic Locy
Locy already let you define recursive inference rules over your graph. Now those rules handle uncertainty.
MNOR combines independent risks — the probability that at least one of several causes fires. Three independent 30% failure modes give 65.7% combined risk, not 90%.
MPROD combines requirements — the probability that all conditions hold. Log-space arithmetic keeps it stable through long dependency chains.
Both converge correctly through recursive graph cycles.
Exact mode. When two proof paths share a base fact, independence is the wrong assumption. Enable exact_probability and Uni uses BDD-based weighted model counting for shared-evidence groups, fast path for everything else.
Provenance. Every derived fact carries its full proof trail — base facts, rules, paths, per-path probability. Request top_k_proofs and get the most probable derivation chains. When someone asks "why did the system flag this?" — you hand them the receipts.
Also new: PROB annotations, IS NOT complement semantics, strict_probability_domain mode, configurable convergence epsilon.
Three worked notebooks ship with 1.0: supply chain risk scoring, patent freedom-to-operate, regulatory impact cascades.
Stable API
We redesigned the public API around sessions and transactions — reads through sessions, writes through explicit transactions. Plus ~20 typed exceptions, cursor streaming, prepared statements, and a fluent schema builder. Modeled after rusqlite, Neo4j, and DuckDB.
uni_db.Database(path) → uni_db.UniBuilder.open(path).build()
db.query(...) → session = db.session(); session.query(...)
db.execute(...) → tx = session.tx(); tx.execute(...); tx.commit()
locy_evaluate(...) → session.locy(...)
except Exception → except uni_db.UniSchemaError / UniParseError / ...
Breaking change from 0.2 — and the last one we plan to make.
Correctness
Locy engine hardened. 9 runtime bugs found and fixed through the probabilistic work, including fold aggregation, recursive convergence, and projection correctness. 7,400 lines of new test scenarios. Locy TCK: 242/242. OpenCypher TCK: 3,896/3,897.
similar_to() now respects your distance metric. Was hardcoding cosine — L2 and dot product rankings were wrong. Fixed.
FTS sees unflushed writes. L0 buffer now merged into full-text results.
properties(n) returns current values after SET. L0 overlay applied in both schema and schemaless paths.
Under the Hood
- Storage goes through a pluggable
StorageBackendtrait — Lance is the only backend, but the coupling is gone - Lance 1→3, Arrow 56→57, DataFusion 50→52
- 56 Rust↔Python API gaps closed — full parity, type stubs grew from ~180 to ~985 lines
pip install uni-db · uni-db = "1.0.0" in Cargo.toml
[Docs](https://rustic-ai.github.io/uni-db) · [GitHub](https://github.com/rustic-ai/uni-db)
Built by [Dragonscale Industries](https://dragonscale.ai), part of [The Rustic Initiative](https://rustic.ai). Apache 2.0.
Full Changelog: v0.3.0...v1.0.0