How SupaHost works
SupaHost runs the official open-source Supabase stack as a managed service. One plan gives you one instance, and one instance holds all of your projects.
Instance
One Supabase stack — Postgres, Auth, Realtime, Storage, Edge Runtime and Studio — on its own VM (Pro, Business) or on shared infrastructure (Builder). It lives at yourname.supahosting.com.
Project
An isolated backend inside your instance: its own database, API URL, keys, auth users, storage buckets and functions. Builder includes 5, Pro 15, Business 30.
Auth MAUs, Realtime connections, Edge Function invocations and basic MFA are unlimited on every plan. You pay for the infrastructure, not for usage.
Quickstart
- Pick a plan and start your trial. Every plan starts with a 14-day free trial. Compare plans.
- Name your instance. Choose a subdomain and a region. Your instance is provisioned at
acme.supahosting.comwith HTTPS in about a minute. - Create a project. Each project gets its own database and an API URL like
app-one.acme.supahosting.com, plus an anon key and a service-role key. - Connect your app with any Supabase client library, using the project’s URL and anon key.
import { createClient } from '@supabase/supabase-js'
// Project URL and anon key from your SupaHost dashboard
const supabase = createClient(
'https://app-one.acme.supahosting.com',
process.env.SUPABASE_ANON_KEY
)
const { data, error } = await supabase.from('todos').select('*')Everything that works with Supabase works with SupaHost — the client libraries, Row Level Security, Auth providers, Realtime channels and Storage APIs are the same open-source code.
Projects
Every project on your instance is a separate Postgres database. Requests are routed to the right project by its subdomain.
Each project gets
- Its own API URL —
app-one.acme.supahosting.com - Its own anon and service-role keys
- Its own auth namespace (separate users)
- Its own storage buckets
- Its own Edge Functions
- Its own, fully isolated database
All projects share
- The instance’s CPU and RAM
- Your plan’s database quota
- Your plan’s file storage quota
- Your plan’s egress quota
Need more projects than your plan includes? Extra projects are $3 per project per month, or you can upgrade to a plan with more included.
Connecting your app
Over HTTPS
Use the project URL and anon key in the browser or mobile apps. Keep the service-role key on your server — it bypasses Row Level Security.
Directly to Postgres (Pro and above)
Pro, Business and Enterprise instances expose Postgres directly on port 5432 and through the connection pooler on port 6543. Use the pooler for serverless and edge environments. Your connection strings are in the dashboard.
# Direct connection
postgres://USER:PASSWORD@HOST:5432/DATABASE
# Pooled connection (serverless)
postgres://USER:PASSWORD@HOST:6543/DATABASEEdge Functions
Deploy Deno functions from the dashboard or the Platform API. Invocations are unlimited on every plan and there’s no per-call pricing.
curl -X POST "$SUPAHOST_API/functions/deploy" \
-H "Authorization: Bearer $SUPAHOST_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"instance_id": "INSTANCE_ID",
"function_name": "hello",
"source_code": "Deno.serve(() => new Response(\"Hello\"))",
"verify_jwt": true
}'List, delete and read logs for functions with the endpoints in the API reference.
SQL migrations
Run SQL migrations from the dashboard or the API. Each migration is saved with a name, so you can see the history of what ran on your instance.
curl -X POST "$SUPAHOST_API/manage/INSTANCE_ID/migrations" \
-H "Authorization: Bearer $SUPAHOST_TOKEN" \
-H "Content-Type: application/json" \
-d '{ "name": "create_todos", "sql": "create table todos (id bigint primary key generated always as identity, title text);" }'Custom domains
Serve your API, Auth and Storage from your own domain. Certificates are issued and renewed automatically through Cloudflare — no load balancer or certificate setup on your side.
- Add the domain in your dashboard, for example
api.yourcompany.com. - Create a CNAME in your DNS provider pointing
api.yourcompany.comto your SupaHost subdomain. - Click Verify. We check the CNAME and issue an SSL certificate.
- Done. Traffic flows through Cloudflare (SSL + CDN) to your instance.
Custom domains per plan: Builder 1, Pro 3, Business 10, Enterprise unlimited.
Plans & limits
| Builder | Pro | Business | Enterprise | |
|---|---|---|---|---|
| Price | $25/mo | $49/mo | $99/mo | Custom |
| Projects | 5 | 15 | 30 | Unlimited |
| Compute | Shared · 2 GB | 2 vCPU · 4 GB | 4 vCPU · 16 GB | Custom |
| Database | 2 GB | 10 GB | 25 GB | Unlimited |
| File storage | 5 GB | 50 GB | 100 GB | Unlimited |
| Egress / mo | 10 GB | 100 GB | 250 GB | Unlimited |
| Container logs | Last 1h | Last 24h | Last 7d | Full |
| Pausing | After 7 days idle | Never | Never | Never |
Need more on any plan? Add extra custom domains ($2/mo each), database storage, file storage, egress or compute as add-ons from Settings → Usage & billing — quotas rise immediately, no plan change needed.
Full details on the pricing page.
Usage & billing
- Every plan starts with a 14-day trial through Stripe Checkout.
- Database size, file storage and egress are measured every hour across all your projects, and shown live in your dashboard.
- You’ll get alerts at 80%, 90% and 100% of each quota. We never throttle or shut down your instance for going over.
- Overage is added to your invoice at the published rates, then billed with your plan at the end of the cycle.
- If a payment fails, your account enters a 7-day grace period. Instances still unpaid after the grace period are terminated.
Security
- Isolation. Pro and Business instances run on their own VM. Builder instances share a VM with Postgres role-based isolation between tenants. Every project has its own database.
- Network. Firewall rules restrict which ports are reachable on every instance.
- Encryption in transit. Cloudflare provides SSL for every subdomain and custom domain.
- Secrets. Keys and passwords are generated server-side and never logged.
- Access control. All platform data is protected by Row Level Security — you only ever see your own instances and projects.
Business plans include SOC 2; Enterprise adds VPC peering and a BAA for HIPAA workloads. Questions? [email protected].
Platform API
Everything in the dashboard is available over a REST API. Authenticate with your SupaHost access token:
curl "$SUPAHOST_API/instances" \
-H "Authorization: Bearer $SUPAHOST_TOKEN"Instances
| Method | Route | Description |
|---|---|---|
| POST | /instances | Create an instance. Body: subdomain, plan, region |
| GET | /instances | List your instances |
| GET | /instances/:id | Instance details |
| PATCH | /instances/:id | Upgrade or downgrade. Body: plan |
| DELETE | /instances/:id | Terminate an instance and all its projects |
Projects Coming soon
| Method | Route | Description |
|---|---|---|
| POST | /projects | Create a project within an instance |
| GET | /projects/:instance_id | List projects on an instance |
| GET | /projects/:id | Project details and credentials |
| DELETE | /projects/:id | Delete a project (drops its database) |
Edge Functions
| Method | Route | Description |
|---|---|---|
| POST | /functions/deploy | Deploy a function. Body: instance_id, function_name, source_code, verify_jwt |
| GET | /functions/:instance_id | List functions |
| DELETE | /functions/:instance_id/:function_name | Delete a function |
| GET | /functions/logs/:instance_id/:function_name | Function logs |
Instance management
| Method | Route | Plan | Description |
|---|---|---|---|
| POST | /manage/:instance_id/migrations | All | Run a SQL migration. Body: name, sql |
| GET | /manage/:instance_id/migrations | All | List saved migrations |
| GET | /manage/:instance_id/logs | Tiered | Container logs (retention depends on plan) |
| GET | /manage/:instance_id/connection | All | Connection strings |
| GET | /manage/:instance_id/api-logs | Pro+ | API request logs |
| GET | /manage/:instance_id/containers | Pro+ | Container status |
| POST | /manage/:instance_id/restart | Pro+ | Restart a container. Body: container |
| GET | /manage/:instance_id/system | Pro+ | CPU, RAM and disk |
Custom domains
| Method | Route | Description |
|---|---|---|
| POST | /dns/custom-domain | Add a domain. Body: instance_id, domain |
| POST | /dns/verify | Re-check CNAME and SSL. Body: domain_id |
| DELETE | /dns/custom-domain/:id | Remove a domain |
| GET | /dns/custom-domains/:instance_id | List domains |
Usage & billing
| Method | Route | Description |
|---|---|---|
| GET | /usage/:instance_id | Usage against limits, with projected overage |
| POST | /billing/checkout | Start a Stripe Checkout session. Body: instance_id, success_url, cancel_url |
| POST | /billing/portal | Open the billing portal. Body: instance_id, return_url |
| GET | /billing/plans | All plans and pricing (no auth required) |