Private bi-temporal AI memory. Built for teams that can't use the cloud.
Kronroe is the embedded temporal graph database that keeps every fact, every change, and every uncertainty on-device or on-prem — with zero network calls and a full immutable audit trail.
Hybrid BM25 + vector retrieval, native uncertainty modelling, and eleven MCP tools — so your agents reason accurately over evolving facts.
DuckDB didn't do SQLite better — it redesigned the engine for analytical workloads. Kronroe makes the same move for temporal knowledge graphs. Time isn't a feature bolted on top. It's the foundation every other capability is built on.
What does bi-temporal mean?
Every fact carries four timestamps: valid_from, valid_to, recorded_at, and expired_at. The valid-time axis tracks when something was true in the world; the transaction axis tracks when you learned it.
alice.employer = "Acme"
You know what's true now. You don't know what was true last month. If it changes, the old value is gone. Tracking history requires separate audit tables or application-layer hacks — none of which give you consistent point-in-time queries.
alice works_at Acme
valid: 2023-06 → 2024-01
recorded: 2024-03-14
You know what's true, when it was true, and when you learned it. Nothing is ever deleted — history is preserved. Correct a fact and the original remains in the record, timestamped when the correction was made. Query as of any past moment.
how it works in practice →
graph.assert_fact("alice", "works_at", "Acme", valid_from="2023-06")
Stored with valid_from=2023-06 and recorded_at=now. Nothing is overwritten — this is the first entry in a living record.
graph.correct_fact(fact_id, "TechCorp")
The old fact is expired, not deleted — its expired_at is stamped. A new fact is recorded with recorded_at=now. Full audit trail preserved.
graph.facts_at("alice", at="2024-01-01")
Returns "Acme" — the truth as it was on that date, regardless of when you run the query. History is exact and immutable.
graph.current_facts("alice")
Returns "TechCorp" — the current state. No history was lost. Both snapshots are always available, queryable at any point in time.
Why Kronroe?
Temporal memory without the server tax
Kronroe treats time as a first-class primitive. It keeps history intact, runs on-device, and gives private apps a clearer engine for memory, search, and correction.
Bi-temporal by design
valid_from, valid_to, recorded_at, expired_at. Query any point in real-world time or transaction time and keep the audit trail intact when facts change.
No server required
Single .kronroe file. No Neo4j, no Docker, no network. Runs embedded inside your app or in-browser via WebAssembly.
iOS · Android · WASM
The Rust engine ships natively across iOS, Android, Python, and WASM. Everything stays on-device, and every target shares the same storage model.
No LLM required
Storage and retrieval stay engine-native, so you do not spend tokens just to remember facts.
Engine-native contradiction detection
Allen's interval algebra catches conflicting facts at write time. You can allow, warn, or reject contradictions without calling an LLM.
BM25 + vector + hybrid search
BM25 and vector search are fused with temporal filtering, so current and historical facts stay distinct while results stay relevant.
Built for teams that can't use the cloud
Kronroe is for teams that cannot move sensitive memory into a cloud service, and for apps that need private memory on device.
AI agent memory
Persistent memory for agents that need to remember how knowledge changes over time. Assert structured facts, query any point in time, and surface relevant memories with hybrid recall.
Privacy-first mobile apps
Healthcare, education, legal, and care apps get AI memory without sending sensitive records to a server. Ships for iOS, Android, Python, Rust, and WASM, and works offline when the network is not available.
MCP tool memory
Drop-in memory for Claude Desktop, Cursor, and other MCP clients. See all 11 MCP tools, then keep facts across sessions in a local .kronroe file.
Enterprise-grade privacy & compliance
Kronroe was designed from the ground up for organisations where sending sensitive data to the cloud is not an option — regulated industries, client-confidential environments, and air-gapped systems. The engine eliminates risk at the storage layer: everything stays in a single local file with zero network calls.
True zero-egress engine
100% on-device or on-prem. No servers, no APIs, no telemetry — ever. Confirmed across every binding: Rust, iOS, Android, Python, and WASM.
Immutable bi-temporal audit trail
Every fact carries valid time + transaction time. Facts are never deleted — only invalidated. Reconstruct exactly what the system knew at any past moment.
Contradiction detection + uncertainty model
Engine-native Allen's interval algebra catches conflicts at write time. Age decay and source authority weights let agents reason over evolving knowledge with measurable confidence scores.
Hybrid retrieval — no LLM required
BM25 + vector search with full temporal filtering. Two-stage RRF fusion and intent-gated reranking — completely local, no tokens spent on recall.
Memory-safe, minimal attack surface
Pure Rust, no C dependencies, no external processes. The entire engine compiles from a single cargo workspace with zero unsafe FFI in core.
Encryption at rest Q2 2026
Planned AES-256 / XChaCha20-Poly1305 encryption using your own master key. Data stays protected even if the device or server is physically accessed.
Who Kronroe is built for
| Industry | Primary use case | Key regulations |
|---|---|---|
| Healthcare & life sciences | Patient timelines, evolving clinical notes, care-home AI | HIPAA, GDPR Art. 9 |
| Legal & professional services | Case memory, privilege tracking, matter evolution | Attorney-client privilege, SOC 2 |
| Financial services | Transaction histories, relationship graphs, fraud patterns | PCI-DSS, GDPR |
| Government & defence | Air-gapped or classified AI agent memory | Data sovereignty |
| Education & care | Student and resident records with private AI assistance | FERPA, UK GDPR |
Open source under AGPL-3.0 for community use. Commercial licences available for closed-source deployments with priority support and custom compliance features. hi@kronroe.dev
Under the hood
Pure Rust. ACID storage. No C, no network, no LLM.
Retrieval
BM25 + vector + hybrid search
Full-text search via the Kronroe lexical engine with BM25 ranking and fuzzy matching. Cosine vector search stays bi-temporal, so invalidated facts drop out of current queries but remain available for historical point-in-time lookups. Hybrid mode fuses both channels with Reciprocal Rank Fusion and a two-stage intent-gated temporal reranker. The full tool surface is documented in the MCP tools reference.
Integrity
Contradiction detection
Register predicates as singletons and Kronroe detects conflicting facts at write time using Allen's interval algebra. Conflict severity is graded by temporal overlap. Write-time policies let you allow, warn, or reject contradictions without an LLM.
Confidence
Uncertainty model
Every fact carries a base confidence score. At query time, Kronroe applies age decay and source authority weights so volatile predicates like job titles decay faster than stable ones like date of birth. The math stays in Rust and is recomputed at read time.
Storage
ACID, no C dependencies
Backed by Kronroe's native append-log storage engine with atomic fact, registry, and embedding persistence. File-backed or fully in-memory. Every fact gets a Kronroe Fact ID for lexicographically sortable, monotonic insertion order. No C dependencies, no external processes, no separate database server to manage.
Platforms
Rust, Python, iOS, Android, WASM
One engine, every platform. Use the core Rust crate directly, the PyO3 Python bindings, a Swift Package on iOS, a JNI library on Android with a Kotlin wrapper, or the WebAssembly build in-browser. Every target shares the same bi-temporal engine and ACID storage model.
Try it live
Pure Rust compiled to WebAssembly — the same bi-temporal graph engine that runs on iOS, Android, and native Rust. Every fact is stored and queried entirely inside your browser, with nothing sent to a server.
Click a TRY chip or run the Time-travel demo to begin.