VibeHost
Guides

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-site

Output:

{
  "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.com

The 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.

  1. Open the zone for your domain.
  2. DNSAdd record.
  3. Type: CNAME. Name: www. Target: cname.vibehost-dns.com.
  4. 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.
  5. SSL/TLS encryption mode → Full or Full (strict). Avoid Flexible — it breaks HSTS.
  1. Open the hosted zone.
  2. Create record.
  3. 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:

  1. ALIAS / ANAME / flattened CNAME — Cloudflare, Route 53, DNSimple all support a non-RFC ALIAS/ANAME record that behaves like CNAME at apex. Target it at cname.vibehost-dns.com.
  2. Redirect apex → www — set apex to redirect to https://www.example.com (most DNS providers do this for free) and CNAME www to cname.vibehost-dns.com as above.

Verify and provision the cert

vibehost domain verify www.example.com --app my-site

The 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 → active

If 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-site

Removing 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-site

All 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-site

For 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-site

DNS provider walkthroughs

  1. Open the zone for your domain at dash.cloudflare.com.
  2. DNSAdd record.
  3. Type: CNAME. Name: www. Target: cname.vibehost-dns.com.
  4. Proxy status: start as DNS only (grey cloud). Let VibeHost provision the cert first.
  5. SSL/TLS encryption mode: choose Full or Full (strict). Avoid Flexible — it strips HTTPS between Cloudflare and VibeHost and breaks HSTS.
  6. 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
  1. Console → Route 53 → Hosted zones → your domain.
  2. Create record.
  3. Record name: www. Record type: CNAME. Value: cname.vibehost-dns.com. TTL: 300.
  4. 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
  1. Domain List → Manage next to your domain.
  2. Advanced DNS tab.
  3. Add New Record.
  4. Type: CNAME Record. Host: www. Value: cname.vibehost-dns.com. (trailing dot is optional but Namecheap shows it). TTL: Automatic.
  5. Save.

For apex, switch to Namecheap's URL Redirect Record to redirect bare → www (Namecheap doesn't support CNAME at apex).

  1. Domain dashboard → DNS for the domain.
  2. AddCNAME.
  3. Name: www. Value: cname.vibehost-dns.com. TTL: 1 hour.
  4. 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.

  1. DNSManage custom records.
  2. Create new record.
  3. Host: www. Type: CNAME. TTL: 3600. Data: cname.vibehost-dns.com.
  4. Save.
  1. Manage DNS for the domain.
  2. Add Record.
  3. Type: CNAME. Host: www. Answer: cname.vibehost-dns.com. TTL: 600.
  4. Save.

Porkbun supports ALIAS records at apex — use that to point example.comcname.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:

  1. 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.)
  2. HTTP redirect from apex to www — most registrars (Namecheap, GoDaddy, Porkbun) offer a free "URL forward" that 301s example.comhttps://www.example.com. Pair with a normal CNAME on www.

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:

CodeWhat it meansWhat to do
DOMAIN_VERIFY_RECORD_NOT_FOUNDDNS resolved to NXDOMAIN / ENODATARecord not published yet, or DNS hasn't propagated. Wait 5–15 min and retry.
DOMAIN_VERIFY_RECORD_MISMATCHCNAME exists but points elsewhereCompare details.observed vs details.expected. Update the record to match.
DOMAIN_VERIFY_DNS_TIMEOUTResolvers didn't respond inside 3s × 3 triesTransient. 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_verificationactive 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

ConstraintDefault cap
Hostnames per app25
Hostnames per workspace250
Redirects per app500
vibehost domain verify retries / min30

Higher caps available on Enterprise plans.

Troubleshooting

SymptomLikely causeFix
vibehost domain add returns cannot add a hostname under the platform's own domainYou tried *.vibehost.com / *.vibehost.spacePick a hostname you own at a public registrar
pending_verification for >10 minDNS not propagated, or record mismatchdig CNAME <host> to compare; re-run domain verify
Cert stays in cert_provisioning for >5 minLet'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 domainCF proxy + Full strict, cert mismatchSwitch 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 addedvibehost domain add both, or set a URL Forward from one to the other at the registrar

On this page