Documentation

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

  1. Pick a plan and start your trial. Every plan starts with a 14-day free trial. Compare plans.
  2. Name your instance. Choose a subdomain and a region. Your instance is provisioned at acme.supahosting.com with HTTPS in about a minute.
  3. 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.
  4. 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/DATABASE

Edge 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.

  1. Add the domain in your dashboard, for example api.yourcompany.com.
  2. Create a CNAME in your DNS provider pointing api.yourcompany.com to your SupaHost subdomain.
  3. Click Verify. We check the CNAME and issue an SSL certificate.
  4. Done. Traffic flows through Cloudflare (SSL + CDN) to your instance.

Custom domains per plan: Builder 1, Pro 3, Business 10, Enterprise unlimited.

Plans & limits

BuilderProBusinessEnterprise
Price$25/mo$49/mo$99/moCustom
Projects51530Unlimited
ComputeShared · 2 GB2 vCPU · 4 GB4 vCPU · 16 GBCustom
Database2 GB10 GB25 GBUnlimited
File storage5 GB50 GB100 GBUnlimited
Egress / mo10 GB100 GB250 GBUnlimited
Container logsLast 1hLast 24hLast 7dFull
PausingAfter 7 days idleNeverNeverNever

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.
Tip: manage your payment method, invoices and plan changes in the billing portal from your dashboard.

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

MethodRouteDescription
POST/instancesCreate an instance. Body: subdomain, plan, region
GET/instancesList your instances
GET/instances/:idInstance details
PATCH/instances/:idUpgrade or downgrade. Body: plan
DELETE/instances/:idTerminate an instance and all its projects

Projects Coming soon

MethodRouteDescription
POST/projectsCreate a project within an instance
GET/projects/:instance_idList projects on an instance
GET/projects/:idProject details and credentials
DELETE/projects/:idDelete a project (drops its database)

Edge Functions

MethodRouteDescription
POST/functions/deployDeploy a function. Body: instance_id, function_name, source_code, verify_jwt
GET/functions/:instance_idList functions
DELETE/functions/:instance_id/:function_nameDelete a function
GET/functions/logs/:instance_id/:function_nameFunction logs

Instance management

MethodRoutePlanDescription
POST/manage/:instance_id/migrationsAllRun a SQL migration. Body: name, sql
GET/manage/:instance_id/migrationsAllList saved migrations
GET/manage/:instance_id/logsTieredContainer logs (retention depends on plan)
GET/manage/:instance_id/connectionAllConnection strings
GET/manage/:instance_id/api-logsPro+API request logs
GET/manage/:instance_id/containersPro+Container status
POST/manage/:instance_id/restartPro+Restart a container. Body: container
GET/manage/:instance_id/systemPro+CPU, RAM and disk

Custom domains

MethodRouteDescription
POST/dns/custom-domainAdd a domain. Body: instance_id, domain
POST/dns/verifyRe-check CNAME and SSL. Body: domain_id
DELETE/dns/custom-domain/:idRemove a domain
GET/dns/custom-domains/:instance_idList domains

Usage & billing

MethodRouteDescription
GET/usage/:instance_idUsage against limits, with projected overage
POST/billing/checkoutStart a Stripe Checkout session. Body: instance_id, success_url, cancel_url
POST/billing/portalOpen the billing portal. Body: instance_id, return_url
GET/billing/plansAll plans and pricing (no auth required)