Custom domains
Bring your own hostname. Managed TLS handles cert provisioning automatically.
Every app gets a free *.vibehost.space URL by default. Add a custom hostname when you want to ship it under your own brand.
Add a domain
vibehost domain add www.example.com --app my-siteOutput:
{
"ok": true,
"data": {
"hostname": "www.example.com",
"verificationCnameTarget": "cname.vibehost-dns.com",
"status": "pending_verification"
}
}Configure DNS
Add a CNAME record at your DNS provider:
CNAME www cname.vibehost-dns.comThe target is a shared edge hostname on our SaaS DNS zone, not the per-app <app>.vibehost.space URL. One CNAME target works for every custom domain — our edge routes by Host header, not by which tenant the CNAME points at.
vibehost domain add www.example.com --app my-site prints the current target the API expects (it can change if we migrate zones), so prefer copying from the CLI output over hard-coding this string.
- Open the zone for your domain.
- DNS → Add record.
- Type:
CNAME. Name:www. Target:cname.vibehost-dns.com. - Proxy status: DNS only (grey cloud) initially — let VibeHost provision the cert directly. You can flip to proxied (orange cloud) later if you want Cloudflare in front of VibeHost.
- SSL/TLS encryption mode → Full or Full (strict). Avoid Flexible — it breaks HSTS.
- Open the hosted zone.
- Create record.
- Record type:
CNAME. Record name:www. Value:cname.vibehost-dns.com. TTL: 300.
The DNS spec doesn't allow CNAME at the apex of a zone. Pick one:
- ALIAS / ANAME / flattened CNAME — Cloudflare, Route 53,
DNSimple all support a non-RFC
ALIAS/ANAMErecord that behaves like CNAME at apex. Target it atcname.vibehost-dns.com. - Redirect apex →
www— set apex to redirect tohttps://www.example.com(most DNS providers do this for free) and CNAMEwwwtocname.vibehost-dns.comas above.
Verify and provision the cert
vibehost domain verify www.example.com --app my-siteThe verifier checks DNS resolution, then provisions a Let's Encrypt cert on demand. Usually completes in under a minute. Status transitions:
pending_verification → dns_verified → cert_provisioning → activeIf it stalls in dns_verified for >5 minutes, the cert issuer probably hit a rate limit. Run vibehost domain verify again in 10 minutes.
Manage
vibehost domain list --app my-site
vibehost domain remove www.example.com --app my-siteRemoving a domain stops routing immediately but doesn't revoke the cert (Let's Encrypt revocation is rate-limited; we let certs expire).
Multiple domains per app
You can attach as many hostnames as you like:
vibehost domain add example.com --app my-site
vibehost domain add www.example.com --app my-site
vibehost domain add example.net --app my-siteAll resolve to the same deployment. The primary URL in app.url stays as the alias *.vibehost.space — custom hostnames are additional, not replacing.
Redirects
vibehost redirects list --app my-site
vibehost redirects add /old-path /new-path --app my-site
vibehost redirects remove <ruleId> --app my-siteFor bulk changes, upload a JSON file of rules and then sync (which diffs the file against the live rules and applies the difference):
vibehost redirects upload ./redirects.json --app my-site
vibehost redirects sync --app my-siteDNS provider walkthroughs
- Open the zone for your domain at dash.cloudflare.com.
- DNS → Add record.
- Type:
CNAME. Name:www. Target:cname.vibehost-dns.com. - Proxy status: start as DNS only (grey cloud). Let VibeHost provision the cert first.
- SSL/TLS encryption mode: choose Full or Full (strict). Avoid Flexible — it strips HTTPS between Cloudflare and VibeHost and breaks HSTS.
- After cert provisions, you can flip the proxy to proxied (orange cloud) if you want Cloudflare's CDN in front of VibeHost — but you'll need Full strict and you may double-cache.
Verify with the following — it should return cname.vibehost-dns.com.:
dig +short CNAME www.example.com @1.1.1.1- Console → Route 53 → Hosted zones → your domain.
- Create record.
- Record name:
www. Record type:CNAME. Value:cname.vibehost-dns.com. TTL:300. - Create records.
For apex (example.com with no www), Route 53 Alias only points at AWS resources (CloudFront, ALB, S3 websites) — it can't target an external host like cname.vibehost-dns.com. Two paths instead: (a) use Route 53 to redirect apex → www (via an S3 website bucket + Alias, the classic pattern), then CNAME www to cname.vibehost-dns.com; or (b) move the zone to a provider with true ANAME / CNAME flattening (Cloudflare, DNSimple, Porkbun).
Verify:
dig +short CNAME www.example.com @ns-XXX.awsdns-XX.com- Domain List → Manage next to your domain.
- Advanced DNS tab.
- Add New Record.
- Type:
CNAME Record. Host:www. Value:cname.vibehost-dns.com.(trailing dot is optional but Namecheap shows it). TTL: Automatic. - Save.
For apex, switch to Namecheap's URL Redirect Record to redirect bare → www (Namecheap doesn't support CNAME at apex).
- Domain dashboard → DNS for the domain.
- Add → CNAME.
- Name:
www. Value:cname.vibehost-dns.com. TTL: 1 hour. - Save.
GoDaddy's free DNS doesn't support CNAME flattening at apex — either move to Cloudflare for free, or use GoDaddy's Forward (HTTP 301) to redirect apex → www.
Google sold Google Domains to Squarespace; the underlying DNS panel is similar.
- DNS → Manage custom records.
- Create new record.
- Host:
www. Type:CNAME. TTL: 3600. Data:cname.vibehost-dns.com. - Save.
- Manage DNS for the domain.
- Add Record.
- Type:
CNAME. Host:www. Answer:cname.vibehost-dns.com. TTL: 600. - Save.
Porkbun supports ALIAS records at apex — use that to point example.com → cname.vibehost-dns.com directly.
The DNS spec doesn't allow CNAME at the apex of a zone, and we don't terminate apex traffic via an A record — there's no fixed VibeHost IP to point at. Two workarounds:
- ALIAS / ANAME / flattened CNAME — Cloudflare (flattening built-in), DNSimple (ANAME), Porkbun (ALIAS), Hetzner (ALIAS). These behave like CNAME at apex and can target external hosts like
cname.vibehost-dns.com. (Route 53's Alias is AWS-resources-only and can't target us directly — see the Route 53 tab.) - HTTP redirect from apex to
www— most registrars (Namecheap, GoDaddy, Porkbun) offer a free "URL forward" that 301sexample.com→https://www.example.com. Pair with a normal CNAME onwww.
Recommendation: option (1) on a provider that supports it, otherwise (2) for simplicity. If vibehost domain add example.com --app my-site rejects the apex, that's the API enforcing this — error message names the same two paths.
Verification failure modes
vibehost domain verify returns one of three precise codes instead of a generic VALIDATION_FAILED:
| Code | What it means | What to do |
|---|---|---|
DOMAIN_VERIFY_RECORD_NOT_FOUND | DNS resolved to NXDOMAIN / ENODATA | Record not published yet, or DNS hasn't propagated. Wait 5–15 min and retry. |
DOMAIN_VERIFY_RECORD_MISMATCH | CNAME exists but points elsewhere | Compare details.observed vs details.expected. Update the record to match. |
DOMAIN_VERIFY_DNS_TIMEOUT | Resolvers didn't respond inside 3s × 3 tries | Transient. Retry shortly. |
All three remain HTTP 400 / CLI exit code 3. Use the code to branch your retry logic; the human message is for display only.
Subdomain takeover protection
If you vibehost domain add www.example.com then never publish the matching DNS record, the hostname stays in pending_verification indefinitely — we don't accept traffic to it. This prevents "dangling CNAME" subdomain-takeover attacks (where you delete an app but leave the CNAME pointing at us).
When you remove a domain (vibehost domain remove), the cert stops serving immediately. If you later re-add the same hostname, you go through pending_verification → active again.
Concurrent claims on the same domain
If two workspaces both try to verify the same hostname concurrently (e.g. a misconfigured DNS pointing at someone else's app), the second one will get 409 RECLAIM_LOST_RACE. The losing side should re-check whether their CNAME actually points where they think it does.
Limits
| Constraint | Default cap |
|---|---|
| Hostnames per app | 25 |
| Hostnames per workspace | 250 |
| Redirects per app | 500 |
vibehost domain verify retries / min | 30 |
Higher caps available on Enterprise plans.
Troubleshooting
| Symptom | Likely cause | Fix |
|---|---|---|
vibehost domain add returns cannot add a hostname under the platform's own domain | You tried *.vibehost.com / *.vibehost.space | Pick a hostname you own at a public registrar |
pending_verification for >10 min | DNS not propagated, or record mismatch | dig CNAME <host> to compare; re-run domain verify |
Cert stays in cert_provisioning for >5 min | Let's Encrypt rate-limit hit (rare) | Wait 10 min, retry verify. Email contact@vibehost.com if it repeats |
Cloudflare error 525 on the user-facing domain | CF proxy + Full strict, cert mismatch | Switch CF SSL to Full (not Full strict) initially; bump to Full strict once cert is active |
Site loads on apex but not www (or vice versa) | Only one hostname added | vibehost domain add both, or set a URL Forward from one to the other at the registrar |