Unbase escape Supabase lock-in
Escape Supabase lock-in.
Unbase migrates your database, storage, and auth off Supabase and onto infrastructure you own. Any Postgres, any S3-compatible bucket, and Better Auth. Read-only at the source, verified at the target.
unbase guided migration
$
◆ unbase migrate off Supabase
planconfig ok · target reachable
extract42 tables · 1.24M rows
storage8,134 objects → r2
rewrite3,201 urls repointed
load42/42 tables · counts verified
auth9,402 users · passwords preserved
done in 3m12s
$
What comes with you
Database
Introspects your schema + foreign keys, streams every row, and loads it into any Postgres in FK-safe order. Composite keys, enums, arrays, pgvector handled. Counts verified at the end.
Storage
Mirrors every object from Supabase Storage to R2, S3, GCS, or MinIO. Resumable, in parallel, optionally converting images to WebP, then rewrites the URLs in your data to the new home.
Auth
Moves users and OAuth identities to Better Auth, preserving the original bcrypt password hashes so nobody has to reset their password.
Seven phases, one snapshot
plan→
extract→
storage→
rewrite→
load→
auth→
verify
Extraction and loading are decoupled through a portable on-disk snapshot which doubles as a backup. Resume at any phase.
Read-only at the source
Unbase never writes to your Supabase project. Worst case, you re-run it.
Passwords just work
Bcrypt hashes are preserved verbatim. Migrated users log in without a reset.
Verified
Per-table row-count reconciliation, with a strict mode for fresh targets.
Resumable
Everything flows through a portable on-disk snapshot. Stop and resume any phase.
Your data, your infrastructure.
Run the guided migration, or drive each phase yourself from the CLI. Nothing executes until you confirm.