- BYO domain — use a hostname you already control (recommended when you manage DNS).
- Gifted subdomain — get a
*.hyperspeedapp.comhostname 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 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.
.env, set CADDY_PUBLIC_HOST to the hostname only — no scheme, no trailing slash:3
Set CORS_ORIGIN
Set The value must match precisely. A trailing slash, a different scheme, or a missing/extra port will cause CORS failures in the browser.
CORS_ORIGIN to the exact origin users type in the browser — scheme, host, and port if non-default:4
Set PUBLIC_API_BASE_URL
Set Do not include a trailing path. The API appends
PUBLIC_API_BASE_URL to the same origin. The API uses this when constructing absolute URLs for features like IDE preview iframes:/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: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 underhyperspeedapp.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 forhyperspeedapp.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.
Configuration
Add these three variables to your.env:
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:
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.