Skip to main content
Every Hyperspeed deployment runs on your own infrastructure. You choose how users reach it:
  • BYO domain — use a hostname you already control (recommended when you manage DNS).
  • Gifted subdomain — get a *.hyperspeedapp.com hostname from Hyperspeed when you have no domain of your own. DNS points at your server; TLS still runs on your machine.
In both cases, the Hyperspeed stack (API, web, Postgres, object storage) runs on your server. Hyperspeed does not host customer application stacks.

BYO domain

1

Create a DNS A record

Point your hostname at your server’s public IP address. For example, to use app.example.com, create an A record (or AAAA for IPv6) that resolves to your server’s IP. A CNAME to another hostname that ultimately resolves to that IP also works.Verify propagation with:
2

Set CADDY_PUBLIC_HOST

In your .env, set CADDY_PUBLIC_HOST to the hostname only — no scheme, no trailing slash:
Caddy uses this to select the site block and automatically obtains a Let’s Encrypt certificate via HTTP-01. DNS must already resolve to your server before you start the stack, or the challenge will fail.
3

Set CORS_ORIGIN

Set CORS_ORIGIN to the exact origin users type in the browser — scheme, host, and port if non-default:
The value must match precisely. A trailing slash, a different scheme, or a missing/extra port will cause CORS failures in the browser.
4

Set PUBLIC_API_BASE_URL

Set PUBLIC_API_BASE_URL to the same origin. The API uses this when constructing absolute URLs for features like IDE preview iframes:
Do not include a trailing path. The API appends /api/... paths itself.
5

Restart the stack

Apply the new environment:
Caddy will obtain the TLS certificate on first start. Check Caddy logs if the certificate request fails:

Caddyfile example

The repository Caddyfile is minimal for local development. For production with a real hostname, Caddy handles TLS automatically using the site block format:
Adjust api and web to match your Compose service names. The reverse_proxy directives automatically handle WebSocket upgrades for realtime features.

Gifted subdomain

If you don’t have a domain, Hyperspeed can provision a subdomain under hyperspeedapp.com (e.g. acme.hyperspeedapp.com) that points to your server. Hyperspeed creates the DNS A record; TLS is obtained on your server by Caddy using the same HTTP-01 challenge.
This requires Hyperspeed to issue you install credentials. Contact Hyperspeed to receive PROVISIONING_INSTALL_ID and PROVISIONING_INSTALL_SECRET.

How it works

Hyperspeed operates a provisioning gateway (a public edge service) that holds the DNS credentials for hyperspeedapp.com. Your API never receives those credentials — only the install-scoped credentials below. The gateway validates your request using an HMAC signature, then creates the DNS record via the Hyperspeed control plane.
Never add Cloudflare API tokens or the Hyperspeed control-plane bearer to your .env. Your install only uses the three provisioning variables listed below. Those other credentials live exclusively on infrastructure Hyperspeed operates.

Configuration

Add these three variables to your .env:
When all three are set, the API reports provisioning_enabled: true in GET /api/v1/public/instance.

Claiming a subdomain

After configuring the provisioning variables and restarting the stack, an authenticated user can claim a subdomain from the setup wizard or workspace settings. You can also call the endpoint directly:
The API signs the request to the provisioning gateway on your behalf. Possible error codes returned by the gateway: After a successful claim, set CORS_ORIGIN and PUBLIC_API_BASE_URL to https://acme.hyperspeedapp.com and restart the stack so Caddy can obtain the TLS certificate for that hostname.

CORS_ORIGIN must be exact

Regardless of whether you use a BYO domain or a gifted subdomain, CORS_ORIGIN must be the exact origin the browser uses: The SPA is built to call /api/... on the same origin as the page (no separate VITE_API_URL in Docker). The browser’s address bar origin must match CORS_ORIGIN exactly.

Validation checklist

Run this after pointing any public hostname at your instance and after any change to DNS, IP address, or TLS termination.