Custom Domains NEW
Every public service gets a free https://{service}-{slug}.swisblade.com URL. If you own a domain, you can point it at that service too — without giving up control of your DNS. No nameserver delegation, no API keys to hand over: just one CNAME record in your own DNS provider.
Enabling it
Add custom_domain to a public app service:
{
"name": "my-project",
"services": {
"api": {
"type": "app",
"source": { "repo": "github.com/you/api.git", "ref": "main" },
"runtime": "node",
"port": 3000,
"public": true,
"custom_domain": "app.yourcompany.com"
}
}
}
You can also set this from the dashboard: Project → Settings → Custom Domains, without touching stack.json directly.
Setup flow
- Save the domain (via
stack.jsonor the dashboard). This triggers a one-time deploy of your project to prepare it for the new domain — a few seconds, isolated to your own project. - Create a CNAME in your DNS provider's dashboard:
Find your exact free URL on the project's Public Endpoints card. If your DNS provider proxies traffic by default (e.g. Cloudflare's orange cloud), turn that off for this record — Swisblade needs to see the real connection to issue a certificate and route traffic.Type: CNAMEName: app.yourcompany.com (or your root domain)Value: api-{your-slug}.swisblade.comProxy: DNS only (not proxied)
- Click "Verify & Activate" in Settings once the CNAME has propagated. Swisblade checks that the domain actually resolves to its servers, then activates routing and requests a dedicated TLS certificate — automatically, no further action needed.
If verification fails, the error tells you what the domain currently resolves to, so you can check your DNS record.
Why no nameserver delegation
Some platforms ask you to point your domain's nameservers at them, taking over all of its DNS. Swisblade doesn't — you keep managing your own zone (email, other subdomains, everything) and just add one record. This is the same model used by most major hosting platforms.
TLS certificates
Your free *.swisblade.com URL and your custom domain use separate certificates, both from Let's Encrypt, both renewed automatically. There's nothing to manage.
Using it with Authentication
If the service also has auth enabled, your custom domain inherits the same login protection as the free URL. One extra step: add your custom domain's callback URL to your OAuth provider's client configuration alongside the existing one, e.g. for Google:
- Authorized redirect URI:
https://app.yourcompany.com/oauth2/callback - Authorized JavaScript origin:
https://app.yourcompany.com
Most providers let you register multiple redirect URIs on the same OAuth client — you don't need a second one.
Removing a custom domain
Clear the custom_domain field (or use the dashboard) and redeploy. The free *.swisblade.com URL keeps working regardless — it's never removed.