Memory engine, not a shared cluster.
One isolated engine per customer.
DBX holds working state and vector memory in the same process — and that process belongs to one tenant. Isolation is a directory, a WAL, and an HNSW index. Not a prefix you hope nobody forgets.
- Isolated engines
- RESP :6380
- 100 tenants / node
- BSL 1.1
harbor
lumen
Browser sketch of the product, not a live node. GET on harbor cannot see acme’s session.
Why it exists
Shared clusters make tenancy your job.
The stores you already run assume one pool. You bolt customers on with names. That works until it doesn’t.
-
01
Tenancy is a key prefix
One missing
tenant:{id}:in one query is a cross-customer data leak. -
02
Two systems drift
Session in a cache, embeddings in a vector DB. Dual writes. Two pages at 3am.
-
03
Backup is cluster-wide
You cannot restore one customer. You snapshot the whole machine.
-
04
Delete-my-data is a sprint
A scan, a prefix sweep, a blast radius. Off-boarding becomes a project.
-
05
Noisy neighbor eviction
One busy tenant evicts a quiet tenant’s working set from a shared pool.
Sketch · not a live node
A forgotten prefix leaks. A tenant worker cannot.
Two isolation models, side by side. Left is the accident on a shared cluster. Right is DBX: AUTH switches process, not a key name. This widget does not talk to a node.
Tenancy is a prefix
One KEYS user:* returns alice and bob. The prefix was the only wall.
Tenancy is a process
AUTH switched workers. Bob’s engine never held alice’s keys.
What has to stay true in the code
The tenant is the unit of everything.
Five claims. RESP is how you connect, not why you buy.
Tenant is a first-class object
POST /api/provision creates a live isolated engine — own data directory, WAL, HNSW, snapshots. Backup and delete hit exactly one customer.
State and memory in one engine
KV with TTL and HNSW vectors, one process, one connection, one directory, one backup archive. Recall is VSEARCH, VSIM, and VFUSE on that tenant — embeddings stay with the caller.
Cost scales with active tenants
SQ8 mmap vectors. Idle tenants sit in page cache. You pay for who is awake, not who signed.
Self-hosted single binary
Dashboard, console, explorer, playground — compiled in. Embeddings never leave the network.
Isolation Kernel
Linux production seals each tenant as its own process with a Landlock-restricted filesystem, an encrypted WAL and index, and a Unix socket only the orchestrator can open.
redis-py, ioredis, go-redis already speak RESP. Useful for trying DBX. Not a substitute for a tuned shared KV cluster.
Operational upgrades
Keep serving while memory changes.
DBX gives a per-tenant memory system two practical escape hatches: build a replacement vector index while the current one serves, and inspect the retained state behind an earlier retrieval.
VMIGRATE — shadow index promotion
Stream caller-generated vectors into a non-empty shadow index, then swap it into service. Current reads continue during the build; cancellation keeps the live index.
AS_OF — historical vector search
Replay retained vector WAL history into a temporary index to reproduce an audit or RAG incident. It is slower than current search and bounded by retention.
Recall · in-browser
VSIM, SPACE, and VFUSE on toy vectors.
Six 3-d stand-ins. Cosine in the browser. Not HNSW, not a live node, not a model. The wire on a real engine is the same shape.
Certified ANN p50 on the published profile is 2.304 ms. This widget does not measure that. Embeddings stay with the caller; DBX does not run CLIP or MiniLM.
Operator UI, in the binary
This is the console you actually get.
Not a mock. Screens from the embedded dashboard: the vector playground, tenants, overview, and the RESP console. Click the numbered pins on the playground.
Semantic is VSEARCH with a query vector. Similar-to-id is VSIM — load that stored row, exclude self. Multimodal is VFUSE across named SPACE graphs. DBX does not run CLIP or MiniLM.
This capture is VSIM test_index alpha. The engine reads the stored embedding for alpha and ranks everyone else in that tenant index.
MIN_SCORE drops weak cosine. EF is HNSW search breadth for this query only. SPACE selects a named graph in the same tenant directory.
Live ranks: bravo 36.69, charlie 10.88. Cosine × 100. Self (alpha) is excluded. Not a screenshot of random floats.
Fit
Who it is for. Who it is not.
Build this if
- AI agent platforms — each end-customer’s agent needs private recall
- Vertical AI SaaS — legal, medical, support, finance RAG per client
- On-prem / regulated — one binary inside their network
- Teams tired of running a cache and a vector DB
Walk away if
- One tenant, one workload
- You need billion-vector ANN, sharding, or heavy filtering
- You want a fully managed vector service with no infrastructure
- You need SQL, joins, or a system of record
| If you need | Use | Why not DBX |
|---|---|---|
| Peak shared KV throughput | Redis / Dragonfly | Their design target. Ours is isolation. |
| Billion-vector ANN | Qdrant / Milvus | DBX is sized for per-tenant working sets. |
| Fully managed vectors | Pinecone | DBX is software you run. Deliberately. |
| System of record | Postgres + pgvector | DBX sits in front of the system of record and underneath the agent. |
Idle cost
Density is RSS, not a price list.
Isolation Kernel strict idle workers sit in the 14–17 MiB band. This slider multiplies the midpoint. No invented dollar figure.
CI soaks 12 idle / 4 active. Operators run make soak (100 idle / 25 active). That is not a 100-orchestrator-process soak.
Fit check
Four questions. A verdict, not a lead form.
Operator walkthrough
The dashboard, frame by frame.
Real screens from the embedded UI. No stock footage. Advance with the arrows or sit with the loop.
BSL 1.1
Install it in your rack. Measure it on your hardware.
Free to self-host, including inside your own SaaS. Cannot offer managed DBX to third parties without a commercial deal.