---
title: Custom Domains
description: Serve your docs from your own domain instead of the default *.jamdesk.app subdomain. DNS setup for subdomains and apex domains, SSL, and verification.
---

Serve your docs from your own domain instead of the default `*.jamdesk.app` subdomain.

## Setup Overview

<Steps>
  <Step title="Add domain in dashboard">
    Go to your project **Settings** → **Domain** and enter your domain (e.g., `docs.example.com` or `example.com`).
  </Step>
  <Step title="Configure DNS">
    Add the DNS records shown in the dashboard to your DNS provider. The records depend on your domain type (see below).
  </Step>
  <Step title="Verify and wait">
    Jamdesk verifies ownership and provisions an SSL certificate automatically.
  </Step>
</Steps>

## Hosting Options

When adding a domain, choose your hosting mode:

### Standard Domain

Your documentation is served directly from Jamdesk at your custom domain:

```text
docs.example.com → acme.jamdesk.app
```

DNS points to Jamdesk, and SSL certificates are handled automatically.

### Host at /docs (Proxy-Based)

Your documentation is served at a subpath on your existing website:

```text
example.com/docs → acme.jamdesk.app/docs
```

You configure a proxy (Cloudflare, Vercel, nginx, etc.) to forward `/docs/*` requests to Jamdesk. See [Subpath Hosting](/deploy/subpath-hosting) for setup guides.

<Note>
Toggling "Host at /docs" triggers an automatic rebuild since the URL structure changes.
</Note>

## DNS Configuration

The records you need depend on whether you're using a subdomain or an apex (root) domain.

### Subdomains (e.g., docs.example.com)

| Type | Name | Value |
|------|------|-------|
| CNAME | `docs` | `cname.jamdesk.com` |
| TXT | `_jamdesk.docs` | *(shown in dashboard)* |

The "Name" field is just the subdomain portion. For `docs.example.com`, enter `docs`.

### Apex Domains (e.g., example.com)

| Type | Name | Value |
|------|------|-------|
| A | `@` | `76.76.21.21` |
| TXT | `_jamdesk` | *(shown in dashboard)* |

Apex domains use an A record instead of CNAME because DNS standards (RFC 1034) prohibit CNAME records at the zone apex.

<Note>
DNS changes can take up to 48 hours to propagate, though most complete within minutes. Check status at [whatsmydns.net](https://www.whatsmydns.net/).
</Note>

## Verification

After adding DNS records, Jamdesk automatically:

1. Detects your DNS records (CNAME or A record, plus TXT)
2. Verifies domain ownership via the TXT record
3. Provisions an SSL certificate via Let's Encrypt
4. Routes traffic to your documentation

Check verification status in **Settings** → **Domain**. Status shows as:
- **Pending** - Waiting for DNS propagation
- **Active** - Domain verified and serving traffic
- **Needs Attention** - Configuration mismatch or conflict (check email notification)
- **Error** - Configuration issue (see details in dashboard)

Click **Refresh** in the dashboard to manually check verification status.

## SSL Certificates

SSL certificates are provisioned automatically and renewed before expiration. HTTPS is required, so HTTP requests redirect to HTTPS.

No manual certificate configuration needed.

## Root Domains

Root (apex) domains like `example.com` are fully supported. The dashboard automatically shows the correct records: an A record pointing to `76.76.21.21` instead of a CNAME, since DNS standards prohibit CNAME records at the zone apex.

If you prefer a subdomain like `docs.example.com`, that works too.

## Multiple Domains

Each project supports one custom domain. For multiple domains pointing to the same docs:

1. Set up your primary domain in Jamdesk
2. Configure additional domains to redirect to the primary at the DNS/CDN level

## Removing a Domain

To disconnect a custom domain:

1. Go to **Settings** → **Domain**
2. Click **Remove Domain**
3. Your docs remain accessible at the `*.jamdesk.app` subdomain

<Warning>
Removing a domain that had "Host at /docs" enabled will trigger a rebuild to update URL paths.
</Warning>

## Cloudflare Users

If using Cloudflare as your DNS provider:

1. Set proxy status to **DNS only** (gray cloud icon) during domain verification
2. Let Vercel handle SSL: disable Cloudflare's "Always Use HTTPS" for the docs subdomain
3. After verification completes, you can re-enable proxying (orange cloud)

<Note>
**Using a Cloudflare Worker?** The DNS record must be proxied (orange cloud) for the Worker to run. Use gray cloud only during verification, then switch back. See [Cloudflare Workers setup](/deploy/cloudflare) for details.
</Note>

## Troubleshooting

| Issue | Solution |
|-------|----------|
| Domain stuck on "Pending" | Check DNS records with `dig` (CNAME for subdomains, A for apex) |
| SSL certificate errors | Ensure no CAA records block Let's Encrypt |
| Redirect loops | If using Cloudflare, set to gray cloud during verification (see [Cloudflare Users](#cloudflare-users) above) |
| CNAME not resolving | Verify record at DNS provider, wait for propagation |
| Domain already in use | Domain is registered in Vercel from a previous setup; verification usually completes automatically |

### Verify DNS with dig

```bash
# Check CNAME record (subdomains)
dig CNAME docs.example.com

# Check A record (apex domains)
dig A example.com

# Check TXT record
dig TXT _jamdesk.example.com
```

For detailed diagnostics, see [DNS Troubleshooting](/help/troubleshooting/dns-issues).

## What's Next?

<Columns cols={2}>
  <Card title="Subdomains" icon="sitemap" href="/deploy/subdomains">
    Configure subdomain-specific settings
  </Card>
  <Card title="Subpath Hosting" icon="route" href="/deploy/subpath-hosting">
    Host docs at example.com/docs
  </Card>
  <Card title="DNS Troubleshooting" icon="server" href="/help/troubleshooting/dns-issues">
    Diagnose DNS configuration issues
  </Card>
</Columns>
