Millions of databases.
One cluster.

A transactional document database with a logical database per tenant, and one commit across all of them.

Proof: 1,000,001 namespaces created on one cluster →
Apache 2.0 · Built on FoundationDB · RESP2/RESP3 wire protocol
one transaction · two databases · two models
BEGIN

# The tenant's own database: a new order.
NAMESPACE USE tenants.acme
BUCKET.INSERT orders DOCS '{"item": "keyboard",
  "qty": 2, "price": 49.99}'

# A shared database, same commit: metered usage.
NAMESPACE USE billing
ZINC.I64 acme:requests 1

COMMIT
Multi-model with Bucket and ZMap Vector search built in Strictly serializable by default
Why Kronotop

Every tenant needs its own database. Most stacks make you choose.

Kronotop gives each tenant or app an isolated database on one shared cluster. A transaction can cross any number of them.

The usual tradeoff

Shared database: a tenant_id on every query. One missing filter leaks one tenant's data into another's.

Database per tenant: clean isolation, but few teams can run thousands of separate databases.

Scaling out: sharding a shared database by hand, or operating a fleet of small ones.

The Kronotop model

A logical database is a prefix in the keyspace, which Kronotop calls a namespace, so creating one costs almost nothing. Isolation lives in the keyspace, so application code carries no tenant filter. Millions of namespaces run on one horizontally scalable cluster.

One transaction boundary

Many isolated databases and models. One transaction.

Isolated databases usually cannot share a transaction. Crossing them means two-phase commit, sagas, or eventual consistency. In Kronotop one commit covers every namespace it touches and both data models, documents and ordered key-value. FoundationDB detects conflicts.

NAMESPACES KRONOTOP acme globex initech BucketZMap BucketZMap BucketZMap + millions more one transaction Primary Standby atomic commit FoundationDB ACID transactions
Concepts

Inside a logical database

Each namespace is a full database: documents, an ordered key-value store, secondary indexes, and vector search.

In one query

Filter by structure, or recall by similarity

BQL matches on field values. Vector search ranks by embedding distance.

Structured filter with BQL

BUCKET.QUERY
NAMESPACE USE tenants.acme
BUCKET.QUERY orders '{"qty":
  {"$gte": 1}}'

1# "cursor_id" => (integer) 1
2# "entries"   => 1) {"_id": "...",
   "item": "keyboard",
   "qty": 2,
   "price": 49.99}

Vector similarity with a structured filter

BUCKET.VECTOR
BUCKET.VECTOR products embedding
  '[0.10, 0.09, 0.88]' FILTER
  '{"in_stock": true}' TOP 3

1) 1# "score" => (double) 0.9981
   2# "entry" => {"_id": "...",
      "name": "Wireless Headphones"}
Clients

A Python client, or any RESP client

Kronotop speaks RESP2 and RESP3. The Python client, kronotop-py, exposes the Kronotop commands, manages sessions and transactions, and decodes BSON documents into dicts. From other languages, an existing RESP client such as node-redis sends the commands as they are.

# pip install kronotop-py
from kronotop import Kronotop

client = Kronotop()  # localhost:5484

with client.session() as session:
    session.bucket.create("orders", if_not_exists=True)
    session.bucket.insert(
        "orders",
        {"item": "keyboard", "qty": 2, "price": 49.99},
    )

    # Documents come back as dicts, decoded from BSON
    with session.bucket.query("orders", {"qty": {"$gte": 1}}) as cursor:
        for doc in cursor.batch:
            print(doc)
Use cases

What Kronotop is built for

AI agents

Agent context store

Namespace-level isolation, vector search, and transactional updates for agent memory.

Documents

Transactional document store

A horizontally scalable document store backed by strictly serializable transactions.

Coordination

Distributed coordination

Lease-based locks with atomic acquire, safe release, and fencing tokens from versionstamped commits.

Key-value

Ordered key-value

Range scans, counters, and conflict-free atomic mutations on the ZMap model.

Benchmarks

Read-only Bucket queries, one transaction per query, 50,000 documents

23,008 queries/sec, sorted reads
2.88 ms p99 latency

Measured with Kronotop v2026.06-1 in June 2026, FoundationDB in single-redundancy mode on EC2. See the full results and deployment setup.

QueryThroughputp99
Indexed equality11,751 qps6.12 ms
Compound index11,082 qps6.49 ms
Sort + limit 1023,008 qps2.88 ms
Full scan (unindexed)1,958 qps50.02 ms
Get started

Spin up a local cluster

Copy two commands and you have a local cluster running.

Kronotop is in developer preview. The core architecture and transaction model are stable; APIs and internal formats may change before the first stable release.

bash
$ curl -O https://kronotop.com/kronotop-quickstart.yaml
$ docker compose -f kronotop-quickstart.yaml up
Community

Developed in the open