Does self-hosted Supabase cost less than Supabase Cloud?
Self-hosting removes the Supabase Cloud plan fees, but it does not remove the bill. The Pro plan on the Supabase pricing page starts from $25 per month, and the Free, Team and Enterprise plans carry their own terms. Those fees go away when you run the stack yourself, but you take on the servers, storage, backup tooling, upgrades and the people who respond when something breaks. The honest answer depends on how many projects you run, how much data they hold and how much availability the business needs. A small number of low-traffic projects can be cheaper to run yourself, while a set of production projects with strict uptime targets often is not, once staff time is counted.
Start with the infrastructure floor. The Docker self-hosting guide lists minimum requirements of 4 GB RAM, 2 CPU cores and a 40 GB SSD, and recommends 8 GB RAM, 4 cores and 80 GB. Those figures describe one stack, and self-hosted Supabase runs as a single project, so each additional project means another full set of containers, another database and another Studio instance. Ask your team to model compute and disk per project, then add separate environments for staging and recovery testing. Costs that recur monthly include cloud or hardware, egress, storage growth and any licensed monitoring you add. The guide also says unused services such as Realtime, Storage, imgproxy or Edge Runtime can be removed from docker-compose.yml, which can lower the footprint if your app does not need them.
The cost you are least likely to model is operations. Supabase's self-hosting docs state that self-hosted Supabase is community-supported through GitHub Discussions, GitHub Issues, Discord and Reddit, and enterprises are directed to contact Supabase's Growth Team. Budget for on-call time, security patching, testing each Docker configuration release before rollout, and rebuilding backups and point-in-time recovery, which the platform handles for you on paid plans. Before comparing totals, confirm with Supabase whether any paid support is available to your organization, and write the operating hours and recovery targets you need into the comparison so the numbers reflect the same service level.
Which cost components move when you self-host Supabase
This table sets each Supabase Cloud cost component against the matching self-hosted cost, and marks whether it is one-time or recurring. Read the commercial column for what the plan bundles and the self-hosted column for what you buy, run and staff yourself. The main takeaway is that self-hosting removes the subscription line but moves compute, backups, upgrades and on-call time onto your own budget.
| Cost component | Supabase Cloud (commercial side) | Self-hosted Supabase (your side) | One-time or recurring |
|---|---|---|---|
| Subscription or plan fees | Paid plans such as Pro and Team are billed through Supabase; confirm current rates on the pricing page before modeling | No Supabase subscription for the open-source stack (Apache-2.0); any support contract is separate and optional | Recurring for cloud; none for the license |
| Per-project compute | Compute size is chosen per project and billed by Supabase | Servers you provision run all services in Docker Compose; one self-hosted instance serves one project | Recurring infrastructure cost |
| Disk and database storage | Database disk is billed by Supabase as part of the project | Disk on your servers or block storage; the guide lists 40 GB SSD as a minimum and 80 GB as recommended | Recurring, grows with data |
| Monthly active users | Auth user volume can affect plan terms; confirm the MAU allowance in your plan | No per-user fee; user growth shows up as more compute and database load | Recurring, usage-driven |
| Egress and bandwidth | Egress is metered by Supabase; confirm included allowances and overage rates | Egress billed by your cloud or data center provider; ask for the rate in writing | Recurring, usage-driven |
| PITR and managed backups | Included or add-on by plan; Supabase runs point-in-time recovery | Not available in self-hosted Supabase; you build backups, WAL archiving and tested restores | One-time build, recurring storage and testing |
| Team and Enterprise support | Support tiers and SLAs are set by the plan you buy; confirm terms in writing | Community support through GitHub, Discord and Reddit; enterprise support must come from another contract | Recurring if purchased |
| Servers, storage and networking | Included in the hosted service | Hardware or VMs, load balancers, object storage and DNS, each billed or depreciated by you | Mostly recurring, some one-time setup |
| Upgrades and maintenance | Applied by Supabase | You pull new Docker configuration releases, test them and roll them out; some releases require a database backup before updating | Recurring labor |
| Implementation and migration | Migration work is your team or a partner, with Supabase documentation as the guide | Initial setup, data restore, Storage copy and JWT and auth reconfiguration; scope it in writing before work starts | One-time |
| Internal skills and on-call time | Lower operational load; the team still owns schema and app logic | Staff who can run Postgres, Docker, secrets, monitoring and incident response, often on call | Recurring staff cost |
What moves the comparison most
Six inputs decide whether self-hosted Supabase costs less than Supabase Cloud for your workload. Most of them change the answer in both directions, so model each one against your own usage before comparing invoices with infrastructure and staff time.
Number of projects
Self-hosted Supabase runs as a single project per Studio, and Studio does not support multiple organizations or projects. Each additional app or environment you want to isolate therefore means another Docker Compose stack, with its own Postgres, Auth, Storage and secrets to run. Count your apps, staging and preview environments before estimating, because on Supabase Cloud those extra projects are billed as separate units.
Data volume and Storage size
Database size and Storage objects drive disk, backup capacity and transfer time on your side. The Docker guide's minimum of 40 GB SSD and recommended 80 GB are starting points, not capacity plans, so size disks for growth, WAL archives and backup copies. Cloud storage pricing and included disk depend on your plan, so ask for the current figures and compare them with your own storage and backup volume.
Monthly active users and egress
Auth activity, API traffic, Realtime connections and Storage downloads all generate load and outbound data. On a hosted plan these show up as MAU and egress charges, while self-hosted they become bandwidth on your contract with your data center or cloud provider. Measure real peak connections and download volume for a month before deciding, since the cost direction changes sharply with heavy file delivery.
Availability and recovery targets
Supabase Cloud's managed backups and point-in-time recovery are not available when you self-host, so a stricter recovery point or faster restore requirement means you build and test that capability yourself. Replicas, failover and monitoring become your work or a partner's retainer. Write the recovery point and recovery time your business needs first, then price the tooling and drills that meet them.
Plan tier you would otherwise buy
The cost you avoid depends on the Supabase Cloud plan you would otherwise need, including Pro, Team or Enterprise, and which add-ons come with it. Features such as HIPAA, SOC 2 reports, SLAs and branching are plan- or add-on-specific, so each one you need to keep must be rebuilt, documented or dropped on the self-hosted side. Compare against the tier your requirements actually force, not the cheapest one.
Team Postgres and Docker skills
Self-hosting moves patching, upgrades, secret rotation and incident response to your staff. Supabase's self-hosting docs describe the stack as community-supported, so troubleshooting depends on your own team or a paid implementation partner. Count the people who can run Postgres backups, restores and Compose upgrades, and the on-call hours they cover. Staff time is usually the largest and least visible line in the comparison.
Which managed features you rebuild and which you go without
Self-hosted Supabase does not include managed backups or point-in-time recovery, so the recovery posture you had on Supabase Cloud becomes a set of jobs and tests you own. The usual rebuild is a scheduled logical dump of the Postgres database, plus WAL archiving if you need recovery to a point between dumps. The self-hosting docs do not offer these as managed features, so treat them as build tasks in your plan.
- Scheduled pg_dump runs: Dump the database on a schedule to storage outside the host, with retention periods your recovery objectives set.
- WAL archiving: Ship write-ahead logs to separate storage to narrow the recovery window, which is the gap point-in-time recovery fills on the hosted plan.
- Tested restores: A backup you have never restored is unproven. Restore to a scratch environment on a schedule and record how long each step takes.
- Restore path: Supabase's restore guide covers moving a platform project into a self-hosted instance, and you can adapt its steps to your own backup set.
Confirm who signs off on recovery objectives, where backup copies are kept, and whether the restore path has been run end to end against current data.
Storage objects and logs are the two areas where the self-hosted stack gives you the most direct control, but they are also where the hosted features are easiest to underestimate. Object files are copied out of the platform bucket and into your own S3-compatible store, and log and analytics services are optional parts of the Compose stack. Advanced metrics are the gap, so monitoring has to be designed around the containers you run.
- Storage object copies: Move bucket contents from the platform to your own S3-compatible store using the documented copy path, then verify object counts and checksums.
- Storage service dependency: The Storage service and imgproxy can be removed from the Compose file only if no application depends on uploads or image transforms.
- Logflare and Vector: Both are optional analytics and log services in the Compose stack, so decide where logs go before you go live.
- Metrics gap: Advanced metrics are unavailable when self-hosting, so add exporters and dashboards for Postgres and the containers from your existing monitoring stack.
Check that alerts exist for disk growth on the database and Storage volumes, because the hosted platform handled that capacity work for you.
The self-hosting docs list several platform features as unavailable: branching, managed backups and point-in-time recovery, advanced metrics, analytics and vector buckets, ETL and the Management API. Each one either needs a substitute you build and operate or a decision to drop it from your workflow. The right answer depends on which of these your team uses today, so audit usage before you estimate the migration.
- Branching: Preview databases created from branches are not part of the self-hosted offering, so staging becomes a separate deployment you maintain.
- Management API: Automation that drives the hosted control plane has no direct equivalent, so scripts must work against the containers and configuration files.
- ETL: Platform ETL pipelines are unavailable, so move those jobs into your existing data tooling and schedule them there.
- Analytics and vector buckets: These platform storage types are unavailable, so decide whether your application still needs them or whether a self-managed alternative covers the same workload.
List every feature your applications and pipelines call today, mark each as rebuilt, replaced or dropped, and confirm the list with the team that owns the product.
The self-hosted Docker configuration bundles specific upstream service versions, and you pull and recreate them yourself. Studio manages a single project, so organizations and multiple projects are not available in the same way. Updates carry their own risks, because some releases ship security fixes and one-way data migrations, so the update process is part of the operating model from day one.
- Single project in Studio: Studio does not support multiple organizations or projects, so each Supabase project needs its own deployment and its own resources.
- Pinned upstream versions: The 0.8.3 Docker configuration pins Auth v2.197.0, PostgREST v14.18 and Realtime v2.143.3, and each release brings its own set of versions.
- One-way migrations: The self-hosted Docker changelog flags security fixes for Storage and Realtime, and Storage database migrations are one-way, so take a backup before updating.
- Community support: Support runs through GitHub, Discord and Reddit, so upgrade and incident time comes from your own staff or a retained partner.
Confirm the host sizing against the documented minimum and recommended specifications, and require a staging run of each upgrade before production.
How to build the comparison with your own numbers
This sequence turns Supabase Cloud invoices and your own load data into a side-by-side cost model that covers both recurring and one-time costs. The output is a worksheet you can take to finance and to a quote request.
Export twelve months of Supabase Cloud invoices
Finance or the account owner downloads the invoices for the last 12 months and lists every line item: per-project compute, disk, monthly active users, egress, point-in-time recovery, Team plan seats and any add-ons. Keep the plan name and billing period beside each line so that changes in plan or usage are visible. The step is done when every month is accounted for and each line can be traced to a project and an owner.
Map each line to a self-hosted component
The platform owner pairs each Supabase Cloud line with the self-hosted cost it replaces, such as a compute host for Postgres, disk for the database and Storage volumes, egress from your network, and backup tooling for the features that PITR and managed backups provided. Mark the lines that have no self-hosted equivalent, including branching, managed backups, PITR and the Management API, as gaps. The output is a two-column table with a gap column that someone must sign off on.
Size servers from the documented minimums and your load tests
Start from the minimum requirements in Supabase's Docker self-hosting guide, which are 4 GB RAM, 2 CPU cores and a 40 GB SSD, and the recommended 8 GB RAM, 4 cores and 80 GB. Then run load tests against a staging copy using your real query patterns, peak connections and Storage traffic to find the size you need. Remove services you do not use, such as Realtime or imgproxy, as the guide allows. The output is a sized environment for production and staging, with the test results attached.
Price backup tooling and object storage with your provider
Because managed backups and PITR are not available when self-hosting, the infrastructure lead prices the replacement: database dump or WAL archiving tooling, an off-site backup target, retention storage and any monitoring that alerts on failed jobs. Price Storage object storage separately, since Supabase Storage objects must be kept in a store you run or rent. Ask your cloud or data center provider for written rates for compute, block storage, object storage and outbound transfer. The output is a line-item quote for each component.
Estimate upgrade and on-call hours for your team
The platform lead estimates recurring operating time for upgrades, security patches and on-call coverage, based on how often the Docker configuration and its pinned service versions change in your environment. The Supabase changelog flags security fixes and one-way Storage database migrations that require a backup before updating, so each release needs a test in staging and a rollback plan. Community support means your team carries the troubleshooting that a paid plan would otherwise cover. The output is an hours-per-month estimate by role, reviewed by the team that will be on call.
Add one-time migration and rebuild costs
The project lead lists one-time costs separately from recurring ones: the migration itself, rebuilding features you will not carry over, hardening and secret setup, and testing. Use Supabase's documented platform-to-self-hosted path as the migration scope and confirm with a implementation partner or internal team what the effort involves. Record these costs once, so that they do not inflate the recurring monthly comparison. The output is a one-time cost sheet with the assumptions written beside each figure.
Request written quotes and confirm current plan terms
Ask Supabase in writing for the current pricing and Team or Enterprise terms that apply to your projects, since plan features and fees change, and check the public pricing page before you rely on any figure. Request written quotes from your infrastructure provider and from any implementation partner, based on the same written scope so that the numbers are comparable. The sequence is complete when the worksheet shows recurring cost, one-time cost, gaps and assumptions, and each figure cites its quote or invoice.
What recurring work starts after you switch
Switching to self-hosted Supabase moves a set of routine operations from Supabase's team to yours. The first is applying Docker configuration releases. The self-hosted Docker configuration reached 0.8.3 on October 16, 2026, and its changelog flags security fixes for Storage and Realtime. It also notes one-way Storage database migrations that require a database backup before you update. Each release pins specific upstream versions of Auth, PostgREST and Realtime, so your team pulls and recreates those containers itself. Plan a recurring patch window, keep a staging copy to test each release, and take and verify a database backup before every update that touches Storage.
The second category is credential and key management. The Docker guide warns never to start with the placeholder values in .env.example, and it provides scripts that generate secrets and the JWT key pair. Those secrets now belong to you. Rotating them means changing the JWT keys, service keys and database passwords, then confirming that Auth, PostgREST, Storage and Realtime all accept the new values. Studio is protected with HTTP basic auth through DASHBOARD_PASSWORD, so that credential needs the same rotation discipline. Monitoring is the third item: you need alerts on container health, disk growth in the Postgres volume and Storage bucket size, because the optional Logflare and Vector analytics services are not a complete monitoring program on their own.
Restore testing is the work teams most often skip. Self-hosted Supabase does not include managed backups or point-in-time recovery, so a backup you have not restored is not yet a recovery plan. Schedule restores to a separate environment, time them, and check that Storage objects come back with the database. Support is also self-directed. Supabase's self-hosting docs describe the stack as community-supported through GitHub Discussions, GitHub Issues, Discord and Reddit, and direct enterprises to contact Supabase's Growth Team. Ask that team what commercial support covers before you assume it is available for your deployment.
Common questions about Supabase self-hosting costs
How much does self-hosting Supabase cost compared with Pro or Team plan fees?
Self-hosting replaces a subscription with your own infrastructure and staff time, so the comparison depends on your footprint, not a single number. Supabase's pricing page lists the hosted plans, and you should pull current Pro and Team fees from it before modeling. On the self-hosted side, the cost drivers are servers or cloud instances, disk for the database and Storage, backup storage and the engineering hours to patch and monitor the stack. The Docker guide's minimum requirements are 4 GB RAM, 2 CPU cores and a 40 GB SSD, with 8 GB RAM, 4 cores and 80 GB recommended. Ask your team to price those instances, backups and on-call time against the plan you would otherwise pay for.
How long does moving from Supabase Cloud to self-hosted Supabase take?
The duration depends on database size, the number of Storage objects, how many Edge Functions and auth providers you run, and how much of the setup you automate. Supabase documents the platform-to-self-hosted path as a dump and restore with the Supabase CLI and psql, a copy of Storage objects over S3, and then reconfiguration of JWT keys, auth providers, Edge Functions and domains. Plan a rehearsal restore into a staging environment before any cutover, because the timing of a production restore is what you need to measure. No public duration is given here, so ask any partner for a timeline tied to your data volumes in the written scope.
Can our team self-host Supabase without an outside partner?
A capable platform team can run self-hosted Supabase alone if it has Docker Compose, Postgres, reverse proxy and TLS experience, and it can own secrets, upgrades and restores. Supabase describes self-hosted Supabase as community-supported through GitHub Discussions, GitHub Issues, Discord and Reddit, so there is no vendor support queue for production incidents. Skills you need include Postgres administration, backup and restore testing, JWT and key management, and monitoring. Assess those skills in your team first, then decide whether to hire, train or bring in outside help for the initial build and runbooks.
What recurring work do Supabase upgrades create when self-hosting?
Upgrades are the largest recurring task because each Docker configuration release bundles specific upstream service versions that you pull and recreate yourself. The self-hosted changelog shows release 0.8.3 on October 16, 2026, which flagged security fixes for Storage and Realtime, and it notes that certain Storage database migrations are one-way and require a database backup before updating. Build a routine that reads each changelog, takes a fresh backup, applies the update in staging, runs your smoke tests and only then changes production. Budget that effort as a recurring line item, not a one-time project.
Is self-hosting cheaper for one small project or for many projects?
For one small project, self-hosting is rarely cheaper once you count engineering time, because the fixed cost of backups, monitoring, upgrades and on-call stays the same regardless of load. Self-hosted Supabase runs as a single project, and Studio does not support multiple organizations or projects, so each new app means another stack to deploy and maintain. Consolidation changes the math: if many apps can share one well-run environment, the operating overhead spreads out. Model both cases using your own project count, then compare against the Pro or Team fees for the same workload.
What managed features will we lose or have to rebuild after self-hosting?
The main losses are the features Supabase runs for you on its platform. Supabase's self-hosting docs list branching, advanced metrics, managed backups, point-in-time recovery, analytics and vector buckets, ETL and the Management API as unavailable when self-hosting. Backups and PITR must be rebuilt with your own tooling, such as pg_dump, WAL archiving and tested restores, and Storage needs its own backup plan. Confirm each feature you rely on in the current self-hosting documentation, then decide whether to rebuild it, drop it or keep it on the hosted plan.
What should we ask a partner for in a fixed-scope quote for self-hosted Supabase?
Ask for a written scope that names the environment, the Supabase components you will run, and the features you are replacing. A useful quote lists deliverables such as the Docker or Kubernetes deployment, secret generation, TLS, Studio access controls, backup and restore design with a tested restore, the Storage migration, the cutover plan and runbooks for upgrades and incidents. Ask which items are one-time and which are retainers for ongoing support, upgrades and testing. Confirm acceptance criteria, data handling responsibilities and what happens if the migration finds issues in your data. Note that DeployOpen does not publish a price list, and a quote follows from the written scope.
What a migration adds to the one-time budget
Moving from Supabase Cloud to self-hosted Supabase is a one-time project on top of the infrastructure bill. The documented route is platform-to-self-hosted: export roles, schema and data with the Supabase CLI, restore them into your own Postgres with psql, and copy Storage objects across over the S3-compatible interface using the approach in the Supabase self-hosting guide for copying Storage objects. Plan for someone to own each of these steps and to check row counts and object counts after each restore, because a partial restore is harder to spot than a failed one.
The larger share of the effort is usually what the dump does not carry. You will generate new secrets and a JWT key pair, then reconfigure every client, service and Edge Function that depends on the old keys. Auth providers, redirect URLs, custom domains and Edge Functions all need to be re-entered or redeployed in your environment. Hosted features that have no self-hosted equivalent, such as branching, managed backups and point-in-time recovery, must be replaced by tooling you choose and test. Confirm with your own team which of these items your application actually uses before you estimate the work.
Rehearse the cutover on a copy of production before the planned date. A rehearsal shows how long the restore takes on your hardware, which Storage objects fail to copy, and which client configurations still point at the old project. Ask any implementation partner for a written scope that lists the rehearsal, the cutover window and the rollback steps, since those define most of the one-time cost. For step-by-step detail, read the Supabase platform-to-self-hosted restore guide alongside the export and migration pages in this group.
What to put in a written quote for self-hosting
A quote for self-hosting Supabase should follow a fixed sequence, from an inventory of what you run today to a tested restore and a handover, so that each cost line maps to a deliverable you can check. The order matters because sizing, backup design and support terms all depend on what the current project actually uses.
Inventory the current Supabase Cloud project
Start by listing what the project uses: Postgres schema and row volume, Auth users and providers, Storage buckets and object counts, Edge Functions, Realtime channels, custom domains, and the Supabase features you rely on today, such as branching, PITR or daily backups. The inventory is produced jointly by your team and the implementation partner, and it is done when every feature is marked as carried over, rebuilt or dropped. Ask the vendor for your current plan and add-ons so the comparison reflects what you pay for now.
Define the target architecture
Describe where the self-hosted stack will run, including the cloud account, data center or air-gapped network, the number of environments, how traffic reaches Kong or the Envoy gateway, and how Studio access is restricted. The quote should name each service in the Docker Compose stack that will run and any services you will remove because they are unused. It is complete when a diagram and a service list have been reviewed and signed off by your security and platform owners.
Size compute, storage and network
Sizing turns the inventory into hardware or cloud instance requirements for Postgres, Storage, Realtime and the other services. Supabase's self-hosting guide gives minimum and recommended starting points, which the quote should treat as a baseline to be checked against your actual load. Ask for the sizing assumptions in writing, including growth and peak concurrency, and for the egress and disk figures that drive recurring infrastructure costs.
Design backup and a tested restore
Self-hosted Supabase does not include managed backups or point-in-time recovery, so the quote must cover what replaces them: database dumps or WAL archiving, Storage object backups, retention periods set by you, and where copies are stored. The step closes only when a full restore has been run into a separate environment and the result has been checked against row counts, Auth user counts and sample Storage objects. Ask for the restore runbook and the recorded results, not just a description of the backup job.
Write the upgrade runbook
Docker configuration releases bundle specific upstream versions of Auth, PostgREST and Realtime, and some changes are one-way, such as Storage database migrations that require a backup before updating. The runbook should cover how a release is staged in a non-production copy, how the backup is taken first, how rollback is handled, and who approves production changes. Ask for the runbook to be tested on a staging copy before the first production upgrade, and for the test record to be delivered with it.
Hand over and document the system
Handover covers the deployed environment, secrets and JWT key handling, access accounts, monitoring and alerting, the backup and upgrade procedures, and a list of known gaps against the hosted features. Your team should run at least one restore and one upgrade with the partner present so that ownership is shared, not assumed. The step is complete when your engineers can perform the routine operations from the documentation alone.
Agree support terms in writing
Community support is the default for self-hosted Supabase, so a quote should state what extra support you are buying, if any: response expectations, who handles on-call, how incidents are escalated, and whether upgrades and continuous testing are included as a retainer. DeployOpen scopes engagements in writing before work starts and does not publish a price list, so the quote follows from this written scope. Ask for every support, security patch and upgrade item to be a named line with its own deliverable.
How DeployOpen scopes a fixed-price Supabase self-hosting engagement
DeployOpen is a Chainscore Labs company that plans, implements, hardens, backs up and documents self-hosted open-source platforms inside your own cloud accounts, data centers or air-gapped networks. For Supabase cloud cost vs self-hosted Supabase, we start by putting your current Supabase Cloud bill, the features your apps depend on and your operating constraints in writing before any work begins.
How we scope
- We inventory the Supabase Cloud plan, projects, compute size, storage, egress and features your apps actually use today.
- We list which managed features, such as backups, PITR and branching, must be rebuilt or accepted as gone.
- We agree the written scope, deliverables and timeline with you before any work starts, since most engagements are fixed-scope.
How we build
- We deploy the self-hosted Supabase Docker Compose stack in your infrastructure, with secrets generated rather than left at placeholder values.
- We size the Postgres, Storage and Realtime services against your measured load, and remove services your apps do not use.
- We configure Studio access control, TLS, logging and a backup job, then test the stack against your application workloads.
How we hand over
- We document the deployment, upgrade steps for each Docker configuration release, and the rollback path before any production cutover.
- We run a tested restore of the database and Storage objects and record the results as evidence for your team.
- We walk your engineers through day-to-day operations, the runbook and the list of open risks you still own.
How we support
- Ongoing support, upgrades and continuous testing are available as a retainer, scoped separately from the build.
- A retainer can cover monitoring review, applying upstream security fixes and testing backups on a schedule you agree.
- Ask for a quote built from the written scope, and confirm with us which costs your own staff and cloud accounts will carry.

