Introduction
What Customdomain is, the connect → secure → serve → monitor loop, and where to go next.
Open-source custom-domain onboarding for multi-tenant SaaS — DNS auto-configuration, automatic SSL, and a reverse proxy, in one self-hostable stack. Let your customers point their own domain at your product in minutes, with a drop-in widget and a REST API.
What it does
- Connect — a customer enters their domain; the engine detects their DNS provider and applies the records through the best available rail — OAuth into the provider, Domain Connect, a scoped API token, or guided-manual — then watches propagation.
- Secure — the edge issues a TLS certificate on demand during the
handshake, but only for hostnames a live/propagating connection has authorized.
(Certificates come from Let's Encrypt staging — not browser-trusted — until
the edge is run with
EDGE_ACME_PROD=1.) - Serve — the edge reverse-proxies the custom domain to your origin.
- Monitor — webhooks, a developer console, usage metering, and DNS-drift detection keep you informed after go-live.
The two planes
Two independent planes share one database and talk over HTTP:
- Connect plane (the control-plane) — the
/v1REST API, the connect rails, the propagation poller, quotas/metering, and webhooks. - Edge plane — on-demand TLS termination + reverse proxy, gated by a single
internal
askcall to the control-plane.
See Concepts for the full model and Self-hosting to run both planes.
Start here
| If you want to… | Read |
|---|---|
| Connect your first domain end to end | Quickstart |
| Understand connections, rails, and status | Concepts |
| Authenticate API calls and the widget | Authentication |
| Embed the connect modal | The widget SDK |
| Add email records / merge SPF safely | Email DNS |
| Call the API | API Reference |
| React to events | Webhooks |
| See which DNS providers auto-configure | DNS providers |
| Run the stack yourself | Self-hosting |
| Understand the security model | Security |
| Configure plans and quotas | Plans & quotas |
| Look up enums, env vars, error codes | Reference |
| Fix a stuck connection | Troubleshooting |
For AI agents
A machine-readable index of this documentation is at
/docs/llms.txt, with a full-text version at
/docs/llms-full.txt. Every page is also available as raw
Markdown at /llms/<page-slug>.