Experimental Preview

Manage a million databases like it's one.

Building production-ready multi-tenant apps has never been easier.

acme-corp
pinnacle-io
northwind
contoso
fabrikam
tailspin
woodgrove
adatum
coho-winery
alpine-ski
blue-yonder
fourth-coffee
litware
proseware
treyresearch
wideworldimporters
adventure-works
datum-corp
+999,982 more

What's included

Data API

Query and mutate tenant databases over HTTP

Platform API

Create tenants, manage templates, run migrations

TypeScript SDK

Type-safe client for Node.js and the browser

CLI

Initialize, push schemas, manage tenants

Authentication

Coming soon

Storage

Coming soon

Realtime

Coming soon

Vectors

Coming soon

Templates keep everything in sync.

Define your schema once as a template. Every tenant database is created from that template and stays in sync automatically.

Need to add a column? Update the template and push. The migration engine updates every database—whether you have 10 tenants or 10,000.

No more writing migration scripts per database. No more schema drift. No more "works on my tenant but not yours."

saas-app template
5 tables · v12 · 2,847 databases
acme
pinnacle
northwind
contoso
+2,843
analytics template
3 tables · v8 · 1,203 databases
acme
fabrikam
tailspin
+1,200
sandbox template
2 tables · v3 · 89 databases

Auth built for multi-tenancy

Coming soon...

SDK

Create tenants and query data

app.ts
import { createClient } from "@atomicbase/sdk";

const db = createClient({
  url: "http://localhost:8080",
  apiKey: "your-api-key",
});

// Create a tenant database
await db.tenants.create({
  name: "acme",
  template: "saas-app"
});

// Query like any database
const acme = db.tenant("acme");
await acme.from("users").select();

Schema

Define once, use everywhere

schemas/saas.schema.ts
import { defineSchema, defineTable, c }
  from "@atomicbase/schema";

export default defineSchema("saas", {
  users: defineTable({
    id: c.integer().primaryKey(),
    email: c.text().notNull(),
    name: c.text(),
  }),

  projects: defineTable({
    id: c.integer().primaryKey(),
    name: c.text(),
    ownerId: c.integer(),
  }),
});

CLI

Manage from the terminal

terminal
$ npx atomicbase init
✓ Created atomicbase.config.ts

$ npx atomicbase templates push
✓ Pushed saas-app template

$ npx atomicbase tenants create \
    acme --template saas-app
✓ Created tenant: acme