Database
Every branch within a project is a fully provisioned Postgres database, isolated and ready to use.
export default defineSchema({ tasks: table({ title: string(), completed: boolean().default(false), }),})Build agent-native apps on one realtime backend for Postgres, auth, permissions, state, storage, workflows, and AI.

Every branch within a project is a fully provisioned Postgres database, isolated and ready to use.
export default defineSchema({ tasks: table({ title: string(), completed: boolean().default(false), }),})Add secure sign ups, logins, sessions, and access controls without building identity infrastructure.
Store durable JSON key/value state with strongly consistent reads and writes.
Store and serve files, media, and application assets through S3-compatible object storage.
Build multiplayer and collaborative experiences with live maps, streams, and presence.
Run typed durable compute with retries, scheduling, and state that survives failures and restarts.
Understand and shape product behavior with flags, cohorts, dashboards, and Web Vitals.
And more...
Unified model routing, metering, and billing.
Meter usage, billing, and entitlements in real time.
Isolated compute, ready when your workloads need it.
Give agents secure access to your tools and data.
Inspect logs, traces, and runtime health in one place.
const { data } = substrate .read({ from: Tasks() }) .where(Tasks().completed().eq(false)) .orderBy(Tasks().createdAt().desc()) .limit(10) .use()A small API surface is easy to learn, while reusable operations let humans and agents share the same logic everywhere.
// ⚡ Realtime task tracking// ---------------------------// Updates instantly. Works offline."use client"import { useSubstrate } from "@substratedb/react"import { Tasks } from "@substratedb/generated/schema"import { TaskList } from "@/components/task-list"export default function TasksPage({ projectId }: { projectId: string }) { const substrate = useSubstrate() // 1. Read — live, offline, and permission-aware const { data: tasks = [] } = substrate .read({ from: Tasks() }) .where(Tasks().project().eq(projectId)) .use() // 2. Write — optimistic and automatically synced const addTask = (title: string) => substrate .write({ from: Tasks() }) .create({ project: projectId, title, ownerId: substrate.auth.user!.id }) .run() // 3. Render — ordinary React return <TaskList tasks={tasks} onAdd={addTask} />}Define your schema, permissions, and workflows alongside your app.
Generated handles type every read, write, and result.
Work in isolated Postgres branches. Review every change before you push.
Changes appear instantly. Substrate reconciles with the server and rolls back automatically if a write is rejected.
Reads stay current across every client. No polling, refresh buttons, or subscription plumbing.
Keep reading and writing without a connection. Everything syncs automatically when you’re back.
Whether you’re building a side project or your next big thing, start with Substrate for free. Your projects never pause, commercial use is always allowed, and you can collaborate with your team before scaling to millions of users.
Everything you need to start building.
More capacity for growing products.
Everything in Free, plus…
Five times Pro capacity for demanding products.
Everything in Pro, plus…
Custom rates and limits for your organization.