Appearance
Custom domains Pro
Serve a project on your own domain instead of (or alongside) your-slug.apco.space. Certificates are issued and renewed automatically — you only create two DNS records.
Add a domain
Dashboard → your project → Settings → Custom domains, or:
bash
apco domains add app.example.comYou'll get two DNS records to create at your domain provider:
| Type | Name | Value | Purpose |
|---|---|---|---|
TXT | _apco.app.example.com | apco-verify=<token> | Proves you own the domain |
CNAME | app.example.com | edge.apco.space | Routes traffic to APCO |
For an apex domain (example.com), most DNS providers don't allow a CNAME at the root — create an A record pointing at the IP shown in the dashboard instead (or an ALIAS/ANAME record to edge.apco.space if your provider supports those).
APCO checks DNS automatically for up to 48 hours (every minute at first, backing off to every 30 minutes). Once the TXT record is found, the domain flips to Verified and starts serving your project. Use Re-check in the dashboard (or apco domains verify <domain>) to retry immediately after editing DNS, or to open a fresh 48-hour window after a failure.
The HTTPS certificate is issued automatically on the first visit after verification — the first request may take a second or two, everything after is instant.
Choose a deployment channel
Each attached domain can independently route to the project's current Production, Preview, or Dev deployment. Choose Disabled to keep ownership verification and DNS instructions while stopping all service on that hostname.
Use the Route to selector in Dashboard → project → Settings → Custom domains, or:
bash
apco domains route app.example.com production
apco domains route staging.example.com preview
apco domains route dev.example.com dev
apco domains route old.example.com disabledPreview and Dev selections follow the channel's current active deployment. You can save the selection before that channel has a deployment; the domain waits and activates automatically after the next successful Preview or Dev deploy. New and existing domains default to Production.
Disabled domains do not serve the app, receive new APCO TLS certificates, create an automatic www redirect, or count traffic in project analytics. Re-enable the domain by selecting a channel; no DNS or ownership-verification changes are needed.
www redirects
Add the bare domain (example.com) and www.example.com automatically redirects to it (permanent 308) — just point the www DNS record at APCO too (CNAME to edge.apco.space). If you'd rather serve on www.example.com itself, add that as the domain instead.
Using Cloudflare
Cloudflare-proxied domains (orange cloud) work — the dashboard shows "Routed via Cloudflare" instead of a direct-DNS confirmation. Set the Cloudflare SSL/TLS mode to Full (strict): APCO obtains a real certificate for your domain, so strict mode verifies correctly. Don't use Flexible (it causes redirect loops).
Behavior notes
- Password protection, rate limits, and stopped pages follow the selected channel. Project suspension serves the suspended page on every enabled custom domain.
- Traffic on custom domains counts toward your plan's request/bandwidth quotas and appears in the project's analytics.
- Renaming a project's slug does not break custom domains — the CNAME target
edge.apco.spaceis rename-independent. - Removing a domain stops it from serving immediately. Your DNS records are yours to clean up.
- Domain limits are per project and set by your plan (
apco domains lsshows the limit).
CLI
bash
apco domains ls # list domains + status + pending DNS records
apco domains add app.example.com # attach a domain, print the records to create
apco domains route app.example.com preview # follow the active Preview deployment
apco domains verify app.example.com # re-run verification now
apco domains rm app.example.com --yes # detach a domainAll commands accept --project <slug|id> and --json.