---
title: Custom Domains
category: Projects
description: Point your own domains at Dequel projects with automatic HTTPS.
slug: domains
---

Every project gets a default URL on your base domain
(`<project-slug>.<your-domain>`). Add **custom domains** on the
project's **Domains** tab to serve the app on addresses you own, like
`app.mycompany.com`.

## Adding a domain

1. Click **Add Domain** and enter the domain.
2. For Docker Compose projects, pick the target service and port; for
   single-service projects the running container is the target.
3. Dequel shows DNS instructions. Create the record at your registrar:
   - **Subdomain** (`app.mycompany.com`): a `CNAME` pointing at your
     base domain, or an `A` record pointing at the server IP.
   - **Apex domain** (`mycompany.com`): an `A` record pointing at the
     server IP (find it under **Settings → Servers** or
     `GET /server/ip`).
4. Dequel verifies DNS in the background and marks the domain
   `verified`. Caddy then serves it with an automatic Let's Encrypt
   certificate (see [SSL](/docs/ssl)).

The Domains tab shows live status per domain: validation state, SSL
state, whether DNS resolves, and whether TLS handshakes succeed (polled
continuously).

:::note[DNS propagation]
New records can take minutes to hours to propagate. Dequel keeps
re-checking until they resolve — you don't need to click anything while
waiting.
:::

## Validation states

- **Pending** — waiting for DNS to resolve to the server.
- **Verified** — DNS matches and the route is live.
- **Failed** — records point somewhere else. Fix the DNS values and
  Dequel re-checks.

Remove a domain any time with the delete action; its route is removed
on the next Caddy reload.

## Next steps

- Read [SSL](/docs/ssl) for certificate details.
- Read [Agent Caddy Routes](/docs/agent-caddy-routes) for the routing internals.
