built for agent-driven development · 100% vanilla Postgres · in your VPC

Postgres branching, in your cloud.

An isolated, production-like database for every pull request, preview deployment, and coding agent — writable, disposable, ready in seconds. The whole platform deploys into your own cloud account with one terraform run.

Deploy to your cloud → See how branching works one deploy = your org · everything stays in your VPC
bash — zettab · psql
# fork production at version v3 — ready in seconds, no data copied $ zettab branch create agent-run-4711 --from main@v3 ✓ ready postgresql://gateway:5432/agent-run-4711 # a real, writable Postgres — test anything, break anything $ psql -h gateway -d agent-run-4711 agent-run-4711=# ALTER TABLE orders ADD COLUMN risk_score real; # walk away — idle branches go to sleep on their own # come back — the first query wakes it. same connection string.
Use cases

One production database. Hundreds of agents, previews, and experiments that want to touch it.

To test, experiment, and execute safely, every agent and pipeline needs an isolated database with production-like data — created in seconds, discarded without ceremony.

coding agents

Let agents work on real data, risk-free

Every agent run gets its own writable branch of production — real schema, real data, zero blast radius. It verifies its migration actually works, not that it parses. Branch goes wrong? Delete it. Goes quiet? It sleeps by itself.

previews & ci

A database per pull request

Migrations, backfills, and integration tests run against production-like data on every PR. The branch sleeps when review goes quiet and wakes the moment someone opens the preview.

dev & experiments

Fork production, not staging

Every developer works on their own fork of production instead of a shared, drifting staging database. Version before a risky change, rewind when it goes sideways, fork a teammate's branch to reproduce a bug.

rag & vectors

Branch your RAG store, embeddings and all

With pgvector, the vector index lives inside Postgres — so a branch clones the whole RAG store in seconds: documents, embeddings, index. Try a new chunking or embedding model on a fork, compare retrieval side by side, promote the winner. Idle experiments sleep like any other branch.

Branch · version · sleep

Fork in seconds. Version everything. Idle branches sleep on their own.

To test safely, every developer and agent needs its own database with real data — without multiplying storage, and without a graveyard of forgotten copies.

hot
branch

Instant branching

Fork any database in seconds, regardless of size. A branch shares data with its parent and stores only what changes — and it's a real, writable Postgres, not a read-only replica.

warm
version

Versions & time travel

Tag versions as you work; recovery points accumulate automatically in between. Fork from any version — or from any moment in time — and revert without losing what came after.

cold
sleep

Sleep & wake

Idle branches power down by themselves — compute off, data moved to object storage by the storage engine itself, block by block. What's asleep is still a database, not a backup file. The first query wakes it: same connection string, no restore job.

At scale

Awake on NVMe. Asleep on object. Nothing in between.

A branch runs at full speed on NVMe with its own compute. Go quiet, and the whole branch hibernates — compute off, NVMe released, everything on object storage — until the first query brings it back. Your working set stays small while the fleet grows.

A fleet of branches, over one afternoon 0 awake · 0 asleep — using no compute, no NVMe
awakecompute + NVMefull speed

idle → the whole branch hibernates ↓ · ↑ wakes on the first query

asleepobject storage onlyzero compute · zero NVMe

Compute and NVMe are released together — a sleeping branch occupies neither. The storage engine carries it to object storage whole, automatically, with no lifecycle rules and no migration jobs — and what's asleep is still a live database, not a backup; waking attaches it, nothing is imported.

Built for an organization

Teams, tokens, guardrails — the platform, not just the trick.

Projects, quotas & tiers

Give each team a project with a storage budget and a bronze, silver, or gold performance tier. Limits are enforced by the platform — a runaway agent can't slow production down.

Wake on first query

Connect to a sleeping branch and it answers. The gateway holds your connection while the branch wakes — no errors, no retry loops, one stable connection string for life.

Console, API, or kubectl

Create, fork, version, revert, sleep, wake — from the web console, the REST API, or plain Kubernetes resources your CI already speaks. Scoped tokens let every team self-serve safely.

Time travel, nothing to configure

Point-in-time recovery is built in — no bucket to create, no archiving to babysit. Fork the database as it was at 9:03, or rewind a branch to just before the bad migration.

Nothing to lose

Every branch and version is labeled in the data itself and stored durably. Even if the control plane disappears, your whole branch tree can be rebuilt from the data alone.

It's just Postgres

100% upstream Postgres. Every extension, every driver, every ORM and tool that works with Postgres works on a branch. Nothing to migrate to, nothing to migrate back from.

What one deploy brings

The whole platform, one terraform run, your account.

your apps & agents
Plain postgresql:// connections — psql, ORMs, CI, coding agents. Nothing to install client-side.
branching control plane
Creates, forks, wakes, and guards every branch. Web console, REST API, scoped tokens. Runs in your cluster — your data never leaves your account.
Postgres
Every branch is a stock Postgres cluster with native high availability, managed by CloudNativePG.
data orchestration
Connects each branch to its data, and moves idle branches to object storage — automatically, no jobs to schedule.
storage engine
MayaScale: instant copy-on-write forks on NVMe, with an object tier the engine reads and writes natively — data moves between them as incremental block changes, never as backup files. Replicated and highly available, deployed by terraform in your account.

terraform apply → storage · Postgres · control plane · GCP · AWS · Azure

The full stack for your organization. One deployment is one org — not a slice of someone's multi-tenant service. Inside it, cooperative multi-user sharing: projects for every team, users and scoped tokens, per-project quotas and performance tiers. Need hard isolation? That's simply another deploy.
org → projects → branches · users & tokens · quotas · tiers
 
Hosted serverless PG
Zettabranch
Where it runs
Their cloud, their meter
Your VPC · your cloud credits
Control plane
Vendor-hosted — even on "BYOC" plans
Self-hosted, in your cluster · your data stays in your VPC
Multi-user model
Multi-tenant — strangers share the platform
One org · cooperative multi-user — projects, users, tokens
Postgres
Forked / managed engine
100% vanilla Postgres, any extension
Idle branches
Premium SSD · metered forever
Asleep on object storage · only actual changes kept
Per-branch guardrails
Compute tier only
Storage quotas + performance tiers, enforced
Your data
Leaves your account
Never leaves your VPC
The bonus · storage growth, tamed

Branches multiply. Zettabranch puts the idle ones to sleep.

Every pull request, agent run, and experiment leaves a branch behind — and on premium SSD, that growth never stops. Zettabranch tames it with no archival jobs, no migrations, and nothing deleted: idle branches and their versions move to object storage by themselves — carried by the storage engine as incremental block changes, not exported by a backup tool. What lands there is still a live database, and it wakes on the first query.

100 branches of a 100 GB database
DIY clones — dump & restore, RDS copies
Hosted branching platforms
Zettabranch
Storage per branch
100 GB — a full copy each
~3 GB of changes
~3 GB of changes
Total storage
10 TB
~400 GB
~400 GB
Where idle branches live
Premium SSD
Premium SSD — forever
Object storage, automatically
Compute
24/7, every copy
While in use
While in use — wakes on first query

Dormant branches move to economical storage by themselves — no lifecycle rules, no migration jobs.

Getting started

Step 1

Deploy in your account

One terraform run stands up the whole platform in your own cloud — storage, Kubernetes, Postgres, and the branching control plane. Nothing hosted, nothing to sign up for.

Step 2

Connect your team & tools

Load your data, then branch from the web console, the REST API, or Kubernetes resources your CI already speaks. Apps and agents connect with plain postgresql:// — nothing to install.

Step 3

Scale with org controls

Add projects for every team, scoped tokens, storage quotas, and performance tiers as branches multiply. The idle ones go to sleep on their own — growth stays tamed.

$ git clone github.com/zettalane-systems/pg-branch-platform && cd pg-branch-platform/terraform && terraform init && terraform apply
Explore the full workflow on GitHub →
New to Zettabranch? Start here: 1. Deploy to your cloud 2. Create your first branch 3. Talk to us

The full branching platform, deployed in your account.

One terraform run stands up storage, Postgres, and the branching control plane — projects for every team, branches for every developer and agent. Every piece runs in your account, the control plane included.