TL;DR
Use Supabase Cloud for almost every new SaaS product. Choose self-hosted Supabase only when you can name the constraint that cloud cannot satisfy. Good reasons include a contractual data-residency requirement, an isolated customer deployment, a Postgres extension or configuration that Supabase Cloud does not expose, or a mature workload where the fully loaded cloud bill and engineering time make a private deployment rational.
For the exact query "self hosted Supabase vs cloud," the short answer is:
- Default: Supabase Cloud Pro for production SaaS because it bundles managed Postgres, Auth, Storage, Edge Functions, Realtime, backups, support, and platform operations.
- Self-hosted: Docker-based Supabase that you operate yourself; the software is open source, but you own server provisioning, security hardening, upgrades, backups, monitoring, incident response, and high availability.
- Break-even: not the first $25/month. Re-evaluate only when you have compliance pressure, a dedicated infrastructure owner, or a cloud bill closer to the $200-300/month range after usage growth.
- Boilerplate implication: Supabase-based starters usually assume the cloud URL pattern, but most
@supabase/supabase-jscode can point at a self-hosted endpoint if you validate Auth, Storage, Edge Functions, and environment variables before launch.
Quick Decision Table
| Question | Pick Supabase Cloud | Consider self-hosted Supabase |
|---|---|---|
| Are you pre-revenue, validating an MVP, or under roughly $10K MRR? | Yes. Buy speed and reliability. | No, unless a contract forces it. |
| Do you need managed backups, dashboard operations, support, and platform features? | Yes. Cloud is built for this. | Only if you are ready to replace those practices yourself. |
| Do customers require dedicated infrastructure, air-gapped hosting, or strict data residency? | Sometimes, especially with the right region or Team/enterprise terms. | Yes when the requirement says data must stay on infrastructure you control. |
| Do you need a custom Postgres extension, OS-level configuration, or unusual network topology? | Usually no. Cloud restricts some low-level control. | Yes if the extension/configuration is a hard dependency. |
| Is your real pain cloud cost? | Stay cloud until usage is large enough to offset labor. | Model infra + engineering time, not infra alone. |
| Do you have DevOps or platform engineering capacity? | Not required. | Required for production. |
What Supabase Cloud Gives a SaaS Team
Supabase Cloud is the managed product: Supabase runs the infrastructure and you consume the platform. As of May 15, 2026, the public pricing page lists a Free plan, a Pro plan starting at $25/month with one project included, and a Team plan starting at $599/month with additional organization controls and compliance-oriented features. The exact pricing can change, so verify the pricing page before making a purchasing decision.
The practical value for a SaaS starter is not just the database. Cloud also gives you:
- managed PostgreSQL with hosted connection details and platform operations;
- Supabase Auth for email/password, OAuth, magic links, MFA, and user management;
- Storage, Realtime, Edge Functions, and generated APIs around the same project;
- daily backups and platform-side operational tooling on paid plans;
- support and documented service expectations that a founder does not have to build.
That bundle is why Cloud is usually the correct default. The first version of a SaaS product is constrained by product-market fit, billing, onboarding, retention, and support. Spending the first month operating a database platform rarely improves any of those.
What Self-Hosted Supabase Actually Means
Self-hosted Supabase is not "Supabase Cloud, but free." It is a Docker Compose deployment of the Supabase stack inside infrastructure you control. The official self-hosting docs describe Docker as the fastest recommended path and also call out that self-hosted Supabase differs from the managed platform.
A self-hosted deployment commonly includes:
- PostgreSQL as the database;
- Supabase Studio for the local dashboard experience;
- Kong or another API gateway layer;
- GoTrue for Auth;
- PostgREST for REST APIs over Postgres;
- Realtime for subscriptions;
- Storage API with a local or S3-compatible backend;
- Edge Functions running in your own environment;
- Supavisor and related connection-management pieces.
You also inherit the platform responsibilities that Supabase normally handles. Supabase's self-hosting docs explicitly list server provisioning, maintenance, security hardening, service configuration, Postgres maintenance, high availability, backups, disaster recovery, monitoring, and uptime as your responsibility.
That is the central tradeoff: self-hosting gives you control by moving the platform work onto your team.
Cloud vs Self-Hosted Cost Model
Cloud costs
Supabase Cloud pricing has usage-based components, but the early-stage SaaS model is simple: Cloud Pro is inexpensive relative to engineering time. The Pro plan is currently listed from $25/month with included resources and overage pricing for usage such as disk, egress, cached egress, file storage, and monthly active users.
For a starter-kit buyer, that means Cloud is normally the cheaper path through the first meaningful revenue stage:
| Stage | Typical Supabase posture | Why |
|---|---|---|
| Prototype or demo | Free or Pro | Avoid operating infrastructure while validating the product. |
| First paying customers | Pro | Managed Auth, database, storage, and backups are worth more than the monthly fee. |
| Growing SaaS with real usage | Pro plus usage monitoring | Watch MAUs, disk, egress, and file storage before blaming the whole platform. |
| Larger team or regulated deal | Team/enterprise evaluation | Compliance, access control, support, and contract terms may matter more than raw infra cost. |
Self-hosted costs
Self-hosting has two cost lines: infrastructure and labor.
A small production-ish deployment can be cheap on paper:
Single VPS or small split deployment:
App/API gateway/runtime VPS: $10-50/month
Database-capable VPS: $15-80/month
Object storage/backups: $5-30/month
Monitoring/uptime tools: $0-50/month
Total infrastructure: roughly $30-200/month
But the labor is the real bill:
Initial setup and hardening: 12-30 hours
Migration rehearsal: 4-12 hours
Monthly updates and checks: 2-4 hours/month
Incident response: unpredictable, but owned by you
Backup restore testing: at least quarterly
If one engineer-hour is worth $100, two hours of monthly maintenance is already $200/month in opportunity cost. That is why "Cloud costs $25/month; self-hosting is free" is the wrong comparison.
The Self-Hosting Break-Even Point
There is no universal numeric threshold, but this is the safest way to reason about it:
- If the reason is cost only, stay on Cloud until the bill is materially painful. A $50-150/month bill is usually still cheaper than self-hosted maintenance.
- At $200-300/month, run the model. Include VPS/database size, storage, backups, monitoring, staging, on-call time, upgrade windows, and restore testing.
- Above $500/month, self-hosting can be rational if you have the expertise. Even then, the result might be "optimize Cloud usage" or "split the database from Auth" rather than "run the whole Supabase stack."
- If the reason is compliance or isolation, the bill is secondary. A dedicated customer deployment can justify self-hosting before cloud usage is high.
For most SaaS products in their first two years, Cloud remains the better economic choice once engineering time is counted.
When Supabase Cloud Is the Right Choice
Choose Supabase Cloud when any of these are true:
- You are still validating the product, pricing, onboarding, and retention.
- You want Auth, Storage, Realtime, generated APIs, and Edge Functions without platform work.
- You do not have someone responsible for database operations.
- Your compliance requirements can be satisfied with cloud regions, contracts, and Supabase's paid-plan controls.
- You are using a commercial SaaS boilerplate that was tested against the cloud platform.
- You care more about shipping product than tuning Postgres and Docker Compose.
This is the default for Supabase-first starters such as a Next.js + Supabase boilerplate, a Supabase Auth starter, or an MVP scaffold that relies on Row Level Security.
If your main evaluation is "which backend should my starter use," compare this page with Supabase vs Neon vs PlanetScale 2026 and Best SaaS boilerplates with Supabase 2026.
When Self-Hosted Supabase Is the Right Choice
Self-hosted Supabase is justified when control is the product requirement, not a preference.
1. Contractual data residency or isolated deployments
Some customers require a dedicated instance, customer-controlled cloud account, private network, or air-gapped environment. If a sales contract says the customer's data cannot live in your shared SaaS platform, self-hosting can become part of the enterprise delivery model.
This is different from ordinary GDPR concern. Many SaaS products can meet regional and contractual requirements on managed cloud infrastructure. Self-hosting is for cases where the customer or regulator specifically requires infrastructure-level control.
2. Postgres extensions and low-level configuration
Cloud platforms intentionally limit some extensions, filesystem access, process control, and network configuration. If your SaaS requires a specific Postgres extension, unusual replication setup, custom backup strategy, or database tuning that Supabase Cloud does not expose, self-hosting may be the cleanest route.
Before you commit, prove that the feature is truly unavailable on Cloud and that another managed Postgres provider would not be simpler.
3. Dedicated customer instances
For enterprise SaaS, a dedicated Supabase deployment per customer can be a packaging strategy. You can run each customer in their own VPC, region, or account, then price the operational burden into the contract.
Do not use this pattern for ordinary SMB customers. It multiplies infrastructure, support, upgrades, secrets, and incident response work.
4. Large, stable workloads with infrastructure ownership
Self-hosting can make sense when the workload is large, stable, and owned by a platform-minded team. The key is stability: if the application shape keeps changing, the overhead of running the platform may slow product development more than it saves in usage charges.
What You Lose When You Self-Host
Self-hosted Supabase deliberately differs from the managed platform. According to Supabase's self-hosting docs, platform-only features such as branching, advanced metrics beyond logs, managed backups and point-in-time recovery, analytics and vector buckets, ETL, and the platform management API are unavailable in self-hosted configuration.
That means your self-hosting plan needs replacements for:
- Backups and restore testing: not just backup jobs, but verified restores.
- High availability: failover, replication, DNS/routing, and incident playbooks.
- Monitoring: Postgres health, API health, container health, storage health, latency, and error budgets.
- Upgrade discipline: Docker image updates, Postgres upgrades, compatibility testing, and rollback plans.
- Security hardening: network policy, secret rotation, dashboard access, least privilege, OS patching, and audit logs.
- Support path: self-hosting is primarily community-supported unless you have a separate commercial arrangement.
If these bullets sound like distractions from your SaaS roadmap, that is the point. Cloud is buying back focus.
SaaS Boilerplate Compatibility Checklist
Most Supabase boilerplates connect through environment variables and the Supabase JavaScript client. That makes them portable in theory: change the URL and keys, and the app can talk to your self-hosted instance.
In practice, validate these areas before buying or migrating a starter:
| Area | What to check |
|---|---|
| Environment variables | The starter should centralize NEXT_PUBLIC_SUPABASE_URL, anon key, service-role key, and database URL usage instead of scattering them across files. |
| Auth | Verify email/password, OAuth callbacks, magic links, MFA, and invite flows against the self-hosted Auth service. |
| Row Level Security | Confirm policies, migrations, seed data, and tests apply cleanly outside Cloud. |
| Storage | Decide whether self-hosted storage uses local disk, S3, R2, or another backend; validate uploads and signed URLs. |
| Edge Functions | Cloud runs functions as a managed feature; self-hosted functions need your deployment and logging path. |
| Realtime | Test WebSocket routing, proxy timeouts, and connection limits under realistic traffic. |
| Admin tooling | Confirm Supabase Studio is locked down and not exposed as a public admin surface. |
| CI/CD | Your deployment pipeline must update app env vars, Supabase config, and database migrations in the correct order. |
If you are comparing starters, also read Supabase RLS for SaaS boilerplates, SaaS boilerplate security checklist, and How to deploy a SaaS boilerplate to production.
Cloud-to-Self-Hosted Migration Plan
Do not migrate by changing environment variables on Friday afternoon. Treat the move like a database-platform migration.
1. Freeze the target shape
Document what moves:
- database schema and data;
- Auth users and provider configuration;
- Storage buckets and files;
- Edge Functions;
- Realtime subscriptions;
- secrets and environment variables;
- custom domains, webhooks, and callback URLs.
Then decide whether you are moving the whole Supabase stack or only the database.
2. Build the self-hosted staging environment
Create a staging deployment that mirrors production as closely as possible. It should have real TLS, realistic object storage, monitoring, backups, and the same reverse proxy pattern you plan to use in production.
Do not count a local docker compose up as production readiness.
3. Rehearse export and restore
At minimum, rehearse a pg_dump/restore flow for the database and a storage export/import flow for buckets. Verify application reads, writes, Auth callbacks, signed URLs, background jobs, webhooks, and billing events against the restored environment.
Example shape:
# Cloud database export: use your real project connection string from a secure secret store.
pg_dump "$SUPABASE_CLOUD_DATABASE_URL" \
--no-owner \
--no-acl \
--format=custom \
--file=supabase-cloud.dump
# Restore into staging self-hosted Postgres.
pg_restore \
--clean \
--if-exists \
--no-owner \
--dbname="$SELF_HOSTED_STAGING_DATABASE_URL" \
supabase-cloud.dump
Keep real connection strings out of docs, prompts, PRs, and shell history.
4. Cut over with rollback
A safe cutover has:
- a maintenance window or write-freeze plan;
- a final database dump and restore;
- storage sync completion checks;
- DNS or environment-variable switch plan;
- smoke tests for Auth, CRUD, Storage, Realtime, and billing webhooks;
- rollback criteria if the self-hosted stack fails.
5. Keep Cloud until the migration is proven
Do not delete the Cloud project immediately. Keep it read-only or paused according to your risk tolerance until backups, restores, and production monitoring have been proven over at least one normal operating cycle.
Hybrid Option: Cloud Auth, Separate Postgres
The best answer is not always all-cloud or all-self-hosted. Many SaaS teams want Supabase Auth and Storage but prefer a separate Postgres database for application data, for example Neon, Railway Postgres, Crunchy Bridge, or a self-hosted database.
This hybrid model keeps the expensive-to-rebuild pieces on Supabase Cloud while reducing database coupling. Your app uses Supabase for authentication and maybe storage, then stores core application data through a separate database client such as Drizzle or Prisma.
It is a good fit when:
- Auth is the primary reason you chose Supabase;
- your application data model needs database features or pricing that fit another Postgres provider better;
- you want lower lock-in without rebuilding login, OAuth, and user management;
- your starter already separates Auth identity from app-state tables.
It is a bad fit if the starter assumes Supabase Row Level Security for every application table. In that case, splitting the database can erase the boilerplate's biggest productivity feature.
Production Readiness Checklist for Self-Hosted Supabase
If you still want self-hosted Supabase, require this checklist before launch:
- TLS and reverse proxy configured for API, Auth, Storage, and Studio.
- Supabase Studio protected behind VPN, SSO, IP allow-listing, or another private admin gate.
- Secrets stored in a secret manager, not committed to a repo or copied into docs.
- Automated database backups configured offsite.
- Backup restore tested and documented.
- Storage backups configured separately from database backups.
- Uptime checks cover API, Auth, and critical app routes.
- Postgres monitoring covers connections, disk, locks, slow queries, and replication if used.
- Upgrade procedure tested in staging.
- Incident runbook exists for database down, Auth down, storage down, disk full, and expired certificate.
- App env vars can be rolled back quickly.
- The business case accounts for engineering time, not just server spend.
Final Recommendation
For a typical SaaS founder or boilerplate buyer, the answer is simple: start on Supabase Cloud and keep your architecture portable enough that self-hosting remains an option.
Move to self-hosted Supabase only when one of these is true:
- a customer or regulator requires dedicated infrastructure;
- the application depends on Postgres capabilities that Cloud does not provide;
- a large, stable workload makes the fully loaded economics favorable;
- you have a named owner for backups, upgrades, monitoring, and incidents.
Until then, your highest-leverage infrastructure decision is not self-hosting. It is choosing a starter with clean environment-variable boundaries, tested migrations, sane RLS policies, and a deployment path you can operate confidently.
Sources Checked
- Supabase pricing — Free, Pro, Team, included usage, and overage claims checked May 15, 2026.
- Supabase self-hosting docs — Docker recommendation, self-hosted responsibilities, and platform-only feature caveats checked May 15, 2026.
- Supabase GitHub repository — open-source project and component overview checked May 15, 2026.
Compare SaaS boilerplates by infrastructure requirements at StarterPick.
See how Supabase compares to other database choices: Supabase vs Neon vs PlanetScale 2026.
Find Supabase-specific starter options: Best SaaS boilerplates with Supabase 2026.
Stress-test your RLS model before you choose a starter: Supabase RLS for SaaS boilerplates.
