Short answer

Neon, Supabase, and Xata all support Git-style Postgres branching. Neon's branches are copy-on-write at the storage layer: a new branch starts as a pointer to the parent's state and only stores the pages it changes. That makes a branch of a 100 GB database take a few seconds and add no extra storage until you write to it.

How Neon's branching works

A branch in Neon is a writable copy of your database at a point in time. Behind the scenes:

  1. Storage is versioned at the page level. Creating a branch records a new pointer to the parent's state.
  2. A separate compute is provisioned. The branch gets its own connection string and can scale to zero independently.
  3. As you write to the branch, only changed pages are stored. The pricing docs cover the billing model: child branch storage is capped at the smaller of the delta or the parent's logical data size.

Create one from the CLI:

neon branches create --name dev/migration-test --parent main

Or branch from a past timestamp:

neon branches create --name pre-incident \
  --parent 2026-04-25T14:00:00Z

Branches per plan

  • Free: 10 branches per project
  • Launch: 10 included, then $1.50/branch-month
  • Scale: 25 included, then $1.50/branch-month

The hard ceiling is 5,000 branches per project on paid plans.

Auto-expiration

Stale branches accumulate storage cost. Set a branch expiration when you create one:

  • 1 hour, 1 day, or 7 days from the Console
  • Any RFC 3339 timestamp on the CLI (--expires-at) or API (expires_at)

The branch is deleted automatically when it expires. This pairs well with preview-per-PR workflows where branches outlive PRs unless cleanup runs.

How others compare

  • Supabase. Supabase Branching creates a separate Postgres environment per Git pull request and runs your migrations on it, but no production data is copied to the preview branch. Branches seed from a seed.sql file. Each preview branch runs its own compute add-on and is billed for hours of existence.

  • Amazon Aurora. Aurora cloning uses copy-on-write over the same distributed storage and includes parent data. Clones are full clusters within a single AWS Region, billed at cluster rates. There's no Git-style merge or built-in PR integration.

  • Amazon RDS for PostgreSQL. No native branching. The closest workflow is snapshot-and-restore, which copies the full dataset and provisions a fresh instance per environment.

Neon's branches include parent data by default, scale compute to zero independently per branch, and ship with auto-expiration so preview environments clean themselves up.

Branch your Postgres database in seconds

Free plan includes 10 branches per project.