Give every customer their own database. Operate them like one.

An isolated database per tenant on PostgreSQL, MySQL, MongoDB and Redis, with the operations that usually stop teams already built in: provisioning, schema rollout, credentials, backups, limits, and moving a tenant to its own hardware. Your application keeps its existing drivers.

4 Database Engines in 1 Platform

THE THING NOBODY PLANNED TO BUILD

Somewhere along the way, you started running a second platform.

It began with one script to create a database for a new customer. Then a migration runner. Then a backup job. Then a table mapping tenants to connection strings. None of it is your product, and all of it is on call.

It began with one script to create a database for a new customer. Then a migration runner. Then a backup job. Then a table mapping tenants to connection strings. None of it is your product, and all of it is on call.

It began with one script to create a database for a new customer. Then a migration runner. Then a backup job. Then a table mapping tenants to connection strings. None of it is your product, and all of it is on call.

The questionnaire arrives

A prospect’s security team asks, in writing, how their data is kept separate from other customers.

Deletion takes a week

A customer leaves, and removing their data becomes a careful manual project across many tables.

One customer slows everyone

A report run by a single account shows up as latency for the whole platform.

Migrations happen on weekends

Schema changes are scheduled out of hours because the blast radius is every customer at once.

TenantsDB is that second platform, already built and operated.

TenantsDB is that second platform, already built and operated.

infra/tenants/

provision_tenant.sh

migrate_all_tenants.py

backup_tenant.sh

restore_tenant.sh

rotate_credentials.py

tenant_connection_map.sql

delete_customer_data.py

check_schema_drift.py


last edited by: whoever was on call

test coverage: none

owner: everyone

provision_tenant.sh

migrate_all_tenants.py

backup_tenant.sh

restore_tenant.sh

rotate_credentials.py

tenant_connection_map.sql

delete_customer_data.py

check_schema_drift.py


last edited by: whoever was on call

test coverage: none

owner: everyone

THE REAL ALTERNATIVE

You could build this. Most teams start to.

Creating a database per customer is a few lines of SQL. Running hundreds of them is the work.

BUILD IT YOURSELF

WITH TENANTSDB

Tenant to database catalogue

You write it, you run it

Built in

Connection routing

You write it, you run it

Built in

Provisioning and teardown

A script per engine

One API call

Schema rollout to every tenant

Custom scripts, custom safety net

One command

Backup and restore per customer

You write it, you run it

Built in

Resource limits per customer

You write it, you run it

Built in

Credentials and access control

You design it and defend it

Enforced by the engine

Moving a customer to dedicated hardware

A project

One command

None of it is impossible. Together it is a platform maintained next to your product, forever.

Zero Cold Starts.

Every tenant database is always running. No wake-up latency. No connection delays. No RLS policies. Queries execute on first request.

Infrastructure Lifecycle

Design your schema

Connect and design your schema

Design your schema

Connect and design your schema

Version the blueprint

Track DDL changes internally

Version the blueprint

Track DDL changes internally

Deploy to the fleet

Provision isolated databases

Deploy to the fleet

Provision isolated databases

Schema Management

One schema change. Every customer. One command.

You change the schema once in a workspace, using your normal client. Each change is captured as a numbered blueprint version, and deployment applies that version across the fleet with per-tenant status.

Automatic schema versioning

One command deploys to all tenants

DDL blocked on tenant connections

Zero schema drift across tenants

Per-tenant status: applied, pending, failed

WorkspaceDDL_COMMITBlueprint v1.4VERSIONED>_tdb deploy --alltenant A✓ SYNCEDtenant B✓ SYNCEDtenant C✓ SYNCED
DEPLOY TO 1,000+ TENANTS WITH ZERO SCHEMA DRIFT
TENANTSDB_PROXY
TENANT_01
wayne
HOSTpg.tenantsdb.com
DBorders__wayne
USERtdb_bff82659
✓ FULLY_ISOLATED
TENANT_02
globex
HOSTpg.tenantsdb.com
DBorders__globex
USERtdb_bff82659
✓ FULLY_ISOLATED
TENANT_03
wayne
HOSTpg.tenantsdb.com
DBorders__wayne
USERtdb_bff82659
✓ FULLY_ISOLATED
ONE ENDPOINT • OWN DATABASE • ZERO DATA BLEED

Tenant Isolation

The boundary is the database, not your code

In a shared table, separation holds as long as every query carries the right filter. Here there is no shared table to filter: each customer has their own database and their own credentials, so a query that forgets the filter still only sees one customer.

Own database, own credentials

No tenant_id, no RLS policies

Wrong credential refused at handshake

Permissions enforced by the engine

Works with your existing drivers

Migrations

Start shared. Move to dedicated when the contract asks for it.

Every customer already has their own database on shared infrastructure. When one outgrows it, a single command moves that database onto a machine of its own, using native replication. The application keeps serving during the copy.

Native replication, no intermediate storage

Measured cutover: under 2 seconds

Connection string never changes

Safety backup before every move

Failed replication leaves the tenant untouched

>tdb tenants migrate tenant_B --level 2 --blueprint App1
SHARED_L1ACTIVE
tenant_tenant_B
⚡ < 2s
CUTOVER_WINDOW
MIGRATING...
DEDICATED_L2ACTIVE
tenant_tenant_B
ZERO DOWNTIME PROVISIONING • NATIVE REPLICATION • INSTANT CUTOVER

Frequently asked questions.

Frequently asked questions.

What databases does TenantsDB support?

Do I need to change my application code?

What is a workspace?

What is a blueprint?

What is the difference between L1 and L2 isolation?

How does schema migration work across tenants?

Is there any downtime when migrating a tenant to dedicated infrastructure?

Can one tenant have multiple databases?

What is OmniQL?

How are resource limits enforced?

Can I migrate my existing shared database into TenantsDB?

Is my data safe during a migration?

What databases does TenantsDB support?

Do I need to change my application code?

What is a workspace?

What is a blueprint?

What is the difference between L1 and L2 isolation?

How does schema migration work across tenants?

Is there any downtime when migrating a tenant to dedicated infrastructure?

Can one tenant have multiple databases?

What is OmniQL?

How are resource limits enforced?

Can I migrate my existing shared database into TenantsDB?

Is my data safe during a migration?