# Use your own domain

Serve a game from an address your fans recognise, such as `play.myclub.com`, as
well as its own Gamestage address. You add a CNAME and a TXT record; Gamestage issues the
certificate, renews it, and checks the records for you.

```
$ gamestage domain add club-quiz play.myclub.com
Added play.myclub.com to club-quiz.
Create the records shown where you manage DNS for myclub.com:
  CNAME  play  ->  domains.gamestage.ai
  TXT  _gamestage.play  ->  gamestage-verify=3ef6a274-29bd-49b8-920c-51a9a7bb105d
Then run: gamestage domain status club-quiz --watch
```

Custom domains come with the Publisher plan, which includes one, and with
Enterprise by contract. On Starter a game keeps its own address,
`https://<game id>.apps.gamestage.ai`.

## Add a domain

1. In Stage, open the game, then **Settings**, then **Custom domain**. Or run
   `gamestage domain add <game> <hostname>`.
2. Create both records shown: the CNAME and the TXT at `_gamestage.<hostname>`, where your domain's DNS is managed. If
   somebody else manages it, **Copy instructions** gives you a message to send
   them.
3. Leave the panel open, or run `gamestage domain status <game> --watch`. The
   records are usually found within minutes of being added, and the certificate
   follows a few minutes later.

The game's Gamestage address keeps working throughout and afterwards.

| Type | Name | Value |
| --- | --- | --- |
| `CNAME` | `play` or `play.myclub.com` | `domains.gamestage.ai` |
| `TXT` | `_gamestage.play` or `_gamestage.play.myclub.com` | `gamestage-verify=3ef6a274-29bd-49b8-920c-51a9a7bb105d` |

These values show the shape for `play.myclub.com`. Copy your own TXT value from
Stage or the CLI, because each claim gets a new token. Some DNS hosts ask for
the short name; others ask for the full name.

Keep the TXT record in place after your domain is live. It is checked again
whenever Gamestage starts serving the hostname, including when you claim it
again. Removing and adding the domain gives you a new token, even in the same
workspace, so replace the old TXT value with the new one.

If your CNAME is right but the TXT is missing or has the wrong value, Stage
stays at **Waiting for DNS** and names `_gamestage.play.myclub.com` as the missing
TXT record. Add the value shown, then press **Check now**. The CLI also prints
the TXT reason and both records; run `gamestage domain status club-quiz --watch`
to check again. After 72 hours the status becomes **Failed** and Stage offers
**Try again**.

**Subdomains only.** A CNAME cannot sit on a domain's own name, so
`myclub.com` itself cannot point at Gamestage yet. Use `play.myclub.com` or
`www.myclub.com`.

**CAA records.** If your domain has CAA records, add one allowing
`amazon.com`, because the certificate is issued by Amazon. Without it the
certificate fails and the panel says so.

## What each status means

| Status | Means | What to do |
| --- | --- | --- |
| Waiting for DNS | The CNAME does not point to `domains.gamestage.ai`, or your claim’s TXT value is missing. The panel names the missing record. | Add the record, or correct it. |
| Issuing certificate | Both records are right and the certificate is on its way. | Nothing. It usually takes a few minutes. |
| Live | The game is served at your domain. | Nothing. |
| Not pointing | It was live, and the record has since gone or changed. We email the workspace owner once. | Restore the record. |
| Failed | No record for 72 hours, the certificate failed, or the hostname is attached to another CloudFront distribution. The reason is shown. | Fix what it names, then press **Try again**. |

A domain Gamestage was already serving, or issuing a certificate for, before 21
October 2026, when the TXT record was introduced, keeps working without one. If
you remove it and claim it again, add the TXT value shown for the new claim.

## Move or remove a domain

Publisher includes one domain per workspace, on one game. To put it on another
game, open that game's panel and press **Move it here**, or run
`gamestage domain add <game> <hostname> --move`. Moving the same hostname keeps
its certificate and token within your workspace.

**Remove domain**, or `gamestage domain remove <game>`, stops serving the game
at that address straight away. Fans on it stop reaching the game; its own
address keeps working.

## Reference

| Command | Does |
| --- | --- |
| `gamestage domain add <game> <hostname> [--move]` | Adds the domain and prints both records. `--move` takes your plan's domain off its other game. |
| `gamestage domain status <game> [--watch]` | Checks the records and the certificate now. `--watch` checks every 15 seconds until live or failed. |
| `gamestage domain remove <game>` | Removes the domain. |

Every command takes `--json`.
