Self-Hosted · Open Core

Manage multiple Supabase projects
from one dashboard

A drop-in upgrade to Supabase Studio that lets you spin up, manage, and monitor multiple isolated Supabase and PocketBase projects — all from a single self-hosted UI. No Supabase Cloud account. No per-project dashboards.

Self-hosting Supabase is great.
Until you need a second project.

The official self-hosted Supabase stack is built for a single project. Want a staging environment, a client project, or a separate database? You're stuck spinning up a whole new Docker stack manually and juggling multiple dashboards — or paying Supabase Cloud $25+ per project per month.

Multi-Head Studio fixes this. It replaces the standard Studio container with one that can create and manage additional Supabase stacks on demand, straight from the UI you already know.

Everything you need, nothing you don't

🗂️

Multiple projects, one UI

Create and switch between isolated Supabase projects without leaving the dashboard.

🐳

No Docker-in-Docker

Uses the host Docker socket to launch sibling containers. Clean and production-safe.

🔒

Credential isolation

Each project gets its own Postgres password, JWT secret, anon key, and service key — generated fresh.

📦

Drop-in upgrade

Already running Supabase self-hosted? One command replaces only the Studio container. Your data stays untouched.

🌐

Import remote stacks

Register existing Supabase deployments on other hosts and browse them from one place.

☁️

Migrate from Cloud

Dump your Supabase Cloud database and restore it into any self-hosted project — directly from the UI or CLI. No manual pg_dump wrangling.

💾

Automated backups

Schedule daily or weekly pg_dump backups per project. Download, restore, or delete any backup from the UI or CLI — no extra tooling needed.

🪶

Modular components

Enable only what you need. Realtime, Storage, Edge Functions, and the connection pooler are all opt-in via Docker Compose profiles — no YAML editing required.

🗄️

Embedded projects

Create a new Postgres database inside an existing project's instance — no extra containers, minimal overhead.

📦

PocketBase projects

Spin up a PocketBase backend (SQLite, REST API, auth, realtime, file storage) as a Docker Compose stack or plain docker run container.

🔄

PocketBase migration

Bi-directional data migration between PocketBase and Supabase. Move collections to tables or tables to collections — from the UI or CLI.

🔐

Authelia 2FA / SSO

Optional two-factor authentication and single sign-on in front of Studio via Authelia — one overlay file, no code changes.

Standby & failover BUSINESS

Provision warm standbys and trigger failover with one click. WAL streaming replication included.

🏗️

Cluster mode ENTERPRISE

One writable master with read replicas. Auto-promotes the highest-priority healthy replica on failure.

Port blocks. No manual config.

Each new project gets a port block automatically offset by +10. Studio writes a project registry to disk and launches a full Supabase stack as a sibling Docker Compose project. No YAML editing, no port hunting.

ServiceDefault project2nd project3rd project
Kong (HTTP)800080108020
Postgres543254425452
Pooler654365536563

Run only what you need

The docker-compose.minimal.yml overlay converts every optional service to opt-in. Start lean and add components back with a single --profile flag — no config file editing.

ProfileEnablesSkip when…
realtimeRealtime WebSocket subscriptionsYour app doesn't use supabase-js subscriptions
storageStorage API + imgproxyYour app doesn't store files
edge-functionsEdge Functions (Deno runtime)You don't use Edge Functions
poolerSupavisor (ports 5432 / 6543)You connect directly to Postgres
analyticsLogflare + Vector log pipelineYou don't need the Studio Logs tab
# Core only — minimal footprint
docker compose \
  -f docker-compose.yml \
  -f docker-compose.minimal.yml \
  up -d

# Core + storage + realtime (typical app stack)
docker compose \
  -f docker-compose.yml \
  -f docker-compose.minimal.yml \
  --profile storage \
  --profile realtime \
  up -d

# Print the right command for your selection
smh overlay storage realtime

# Add Nginx + Authelia 2FA (replaces plain nginx)
smh proxy nginx-authelia

Scheduled pg_dump backups, zero config

Every project gets its own backup schedule. Multi-Head Studio runs pg_dump inside the project's Postgres container on your chosen interval and stores the compressed dump file on the host. No cron jobs to write, no extra tools to install.

1

Open Project Settings → Backups

Each project has its own backup page. Set the schedule to Daily or Weekly, or trigger a backup on demand with Run backup now.

2

Browse and download

All backups are listed with size and timestamp. Download any backup as a .pgdump file for off-site archiving.

3

One-click restore

Pick any backup and click Restore. The dump is piped back through pg_restore inside the container. A confirmation dialog guards against accidental overwrites.

Or use the CLI:

# List backups and current schedule for a project
smh backup list <ref>

# Trigger a backup now
smh backup run <ref>

# Set a daily automatic schedule
smh backup schedule <ref> daily

# Restore from a specific backup (--confirm required)
smh backup restore <ref> <filename> --confirm

# Download a backup to disk
smh backup download <ref> <filename> --out ./my-backup.pgdump

Leave Supabase Cloud in minutes

Multi-Head Studio can dump any Supabase Cloud database and restore it into a self-hosted project in a single operation. It runs pg_dump inside the target project's Postgres container — no extra tools to install, no intermediate files.

1

Open Projects → Import from Cloud

A new tab in the Projects page. Paste your cloud database's direct connection string (find it under Project Settings → Database → Connection string → URI).

2

Pick a target project and schemas

Select which self-hosted project to restore into. Default is the public schema; you can include auth to also migrate user accounts.

3

Confirm and watch the live log

A real-time log streams pg_dump and psql output as the migration runs. Done in seconds for small databases, minutes for large ones.

Or use the CLI:

# Migrate schema + data (public schema)
smh migrate <ref> \
  --source "postgresql://postgres:[password]@db.[ref].supabase.co:5432/postgres"

# Schema only — no row data
smh migrate <ref> --source "postgresql://..." --schema-only

# Include auth users as well
smh migrate <ref> --source "postgresql://..." --schemas public,auth

⚠ Use the direct connection URL (db.<ref>.supabase.co:5432), not the pooler URL. The target project must be running before migrating. Existing objects in the selected schemas will be dropped and recreated.

Add PocketBase projects alongside Supabase

PocketBase is a self-contained backend — SQLite database, REST API, auth, realtime, and file storage — that runs as a single binary. Multi-Head Studio manages PocketBase projects the same way it manages Supabase projects: spin up, monitor, migrate, and delete from one UI.

ModeHow it runsBest for
pocketbase Docker Compose stack Full isolation; own port, own container, own volume
pocketbase-embedded Plain docker run Lighter footprint; no Compose project overhead
pocketbase-embedded --target <ref> Collection namespace inside an existing PocketBase Zero containers; logical sub-project sharing one PB instance

Create PocketBase projects via the UI or CLI:

# Full PocketBase stack (Docker Compose)
smh create "my-pb" --mode pocketbase

# Lightweight PocketBase (plain docker run)
smh create "my-pb" --mode pocketbase-embedded

# Collection namespace inside an existing PocketBase project
smh create "my-ns" --mode pocketbase-embedded --target <ref>

Bi-directional data migration

Move data between PocketBase and Supabase in either direction. Collections map to Postgres tables; types are converted automatically. Run a live migration from Project Settings → PocketBase → Migrate or the CLI.

# PocketBase → Supabase (collections → tables)
smh pb-migrate <ref> \
  --direction pb-to-supa \
  --pb-url http://localhost:8090 \
  --pb-email admin@example.com \
  --pb-password mypassword

# Supabase → PocketBase (tables → collections)
smh pb-migrate <ref> \
  --direction supa-to-pb \
  --pb-url http://localhost:8090 \
  --pb-email admin@example.com \
  --pb-password mypassword

# Poll a running migration job
smh pb-migrate status <ref> --job <job-id>

Up and running in 30 seconds

Prerequisites: Docker Engine ≥ 24 with the Compose plugin.

1

Grab the multihead folder

Sparse checkout — no full monorepo clone needed.

2

Run bash start.sh

Auto-generates secrets, detects your OS and Docker bridge IP, starts all services.

3

Open http://localhost:8000

Your multi-head Studio is live. Hit "New project" to spin up a second Supabase stack.

# Fresh install — no existing Supabase needed
git clone --filter=blob:none --sparse \
  https://github.com/flamingrubberduck/supabase-studio-multi-head.git
cd supabase-studio-multi-head
git sparse-checkout set multihead
cd multihead && bash start.sh

Already self-hosting Supabase? See the upgrade guide →

Built for self-hosters who need more

vs. Supabase Cloud & standard self-host

FeatureSupabase CloudStandard self-hostMulti-Head Studio
Multiple projects ✓ $25+/project Manual only ✓ from UI
Self-hosted
Single dashboard One per stack
Standby / failover ✓ Pro plan ✓ Business+
Read replica cluster ✓ Pro plan ✓ Enterprise
Database backups (UI + CLI) ✓ managed Manual ✓ built-in
Migrate from Cloud (UI + CLI) ✗ manual only ✗ manual only ✓ built-in
Embedded projects (shared Postgres) ✓ built-in
PocketBase projects (UI + CLI) ✓ built-in
PocketBase ↔ Supabase migration ✓ built-in
Data ownership Vendor hosted
2FA / SSO (Authelia) ✗ manual setup ✓ overlay
Monthly cost $25+ per project Your server only Your server only

Free to start. Scale when you need to.

Free
$0

For individuals and teams under $2M ARR.

  • Unlimited projects from the UI
  • Full Supabase Studio interface
  • Embedded & PocketBase project modes
  • PocketBase ↔ Supabase migration
  • Import & browse remote stacks
  • Scheduled pg_dump backups (UI + CLI)
  • Migrate from Supabase Cloud (UI + CLI)
  • Self-hosted on your own server
  • Failover & standby
  • Read replica cluster
  • Support SLA
Get started free
Business
$299 / mo

For growing teams that need high availability.

  • Everything in Free
  • Warm standby provisioning
  • One-click manual failover
  • Auto-failover on health failures
  • WAL streaming replication
  • Email support & 48 h SLA
  • Read replica cluster
  • Dedicated engineer
Get a license key
Enterprise
$1,200 / mo

For teams that need full cluster orchestration and dedicated support.

  • Everything in Business
  • Read replica cluster mode
  • Cluster-level auto-failover
  • Multi-host replica placement
  • Dedicated engineer onboarding
  • 24 / 7 support & custom SLA
  • Custom invoicing & MSA
Contact us
Free threshold: organizations with less than $2,000,000 USD ARR directly attributable to products using Multi-Head Studio may use it at no charge. See the LICENSE for full terms.

Ready to try it?

One command. No cloud account. Full control.