Skip to main content
Hostwares

Can you use a custom domain with self-hosted Supabase?

Yes: on a self-hosted stack the API URL is whatever hostname your reverse proxy answers to, so a custom domain is a DNS record and a certificate rather than a paid feature. Supabase Cloud sells the same thing as a per-project add-on, and its feature page lists it as not applicable to self-hosted deployments, because there is nothing to sell. A dedicated Supabase instance on Hostwares comes with its own stable hostname and HTTPS; if you need the API itself on your brand, run the stack on a full-root Cloud Instance where you own the proxy and attach the domain there.

Step by step

  1. 1

    Ask whether the API hostname needs to be branded

    Users see your app's domain, not the Supabase URL; the API hostname only appears in network requests and in sign-in email links. For most apps, a branded app domain plus a stable instance URL is enough, and the email links are fixed by the Site URL setting in Auth.

  2. 2

    Option A: dedicated instance, branded app

    Dashboard → Supabase → New: the instance is provisioned with Postgres, Auth, Storage, Realtime and Studio, keys generated, and a hostname with HTTPS. Put your custom domain on the frontend site (Domains tab or add_domain) and set the Auth Site URL to that domain so every email link carries your brand.

  3. 3

    Option B: your own proxy on a Cloud Instance

    Dashboard → Instances → New: a full-root instance. Install the official docker-compose stack, put Caddy or nginx in front of Kong on port 8000, and attach api.example.com on the instance's domain panel. The certificate is issued once DNS resolves. Agents can run the setup commands through site_terminal, one command per call.

    Caddyfile

    api.example.com {
      reverse_proxy localhost:8000
    }
  4. 4

    Set the URL in every client and in Auth

    Point SUPABASE_URL (or VITE_SUPABASE_URL / NEXT_PUBLIC_SUPABASE_URL) at the hostname you chose, keep the keys the same, and set Site URL and Redirect URLs in Auth to the app's domain. Over MCP, set_env writes the variables and the site rebuilds.

  5. 5

    Verify

    curl https://<host>/rest/v1/ with the anon key should answer; a sign-in email should link to your app domain; verify_ssl over MCP checks the certificate on the site.

    Check the API

    curl -s https://api.example.com/rest/v1/ -H "apikey: <anon key>"

What breaks, and the fix

Sign-in emails link to the wrong host
Set Site URL and add the app's domain to Redirect URLs in Auth; the API hostname does not control email links.
Storage URLs embedded in old rows still point at the old host
They are plain strings; update them with one SQL statement after the move.

What it costs

  • Option A: a dedicated Supabase pack from $5/mo; the app's domain on a Frontend pack from $1/mo.
  • Option B: a Cloud Instance from $2/mo, running the stack yourself.
  • No custom-domain add-on on either option.

App

$1/mo

Starter Frontend pack, 1 vCPU / 1 GB RAM / 10 GB

Database, users and files

$5/mo

Smallest dedicated Supabase pack; several projects fit on one

For comparison

  • Supabase Cloud custom domain add-on, per project per month: $10/mo (checked 2026-11-06, supabase.com)
  • Supabase Cloud Pro, required before add-ons: $25/mo (checked 2026-11-06, supabase.com)

Questions

Does Supabase Cloud charge for a custom domain?+

Yes, as a per-project add-on on paid plans. Supabase's feature page lists the add-on as not applicable to self-hosted deployments.

Does a dedicated instance on Hostwares take a custom domain on the API URL?+

The instance ships with its own stable hostname and HTTPS; a custom domain is attached to your frontend site. If the API hostname itself must be branded, run the stack on a Cloud Instance and attach the domain there.

Do my users ever see the Supabase URL?+

Only in network requests. Email links come from the Auth Site URL, which you point at your app's domain either way.

Can I change the API hostname later?+

Yes. The keys stay the same; update the URL variable in each client and redeploy. Storage URLs stored in your own tables are strings you update with SQL.

Is a wildcard or multiple domains possible?+

On your own proxy, as many hostnames as you configure. On a dedicated instance, the hostname is one per instance.

What does it cost?+

A dedicated Supabase pack from $5/mo, or a Cloud Instance from $2/mo if you run the stack yourself. No add-on for the domain.