# Domains (/docs/compute/domains)

Location: Compute > Domains

Point a custom domain at a production app and the platform verifies DNS and provisions TLS for you. In beta, custom domains are production-only.

Before you start [#before-you-start]

You'll need:

* A linked project.
* A production app with a promoted, live deployment.
* Access to your domain's DNS settings.

Domain commands target the production branch. Pointing them at any other branch fails with `BRANCH_NOT_DEPLOYABLE`.

Add a domain [#add-a-domain]

  

#### bun

```bash
bunx --bun @prisma/cli@latest app domain add shop.acme.com --app web
```

#### pnpm

```bash
pnpm dlx @prisma/cli@latest app domain add shop.acme.com --app web
```

#### yarn

```bash
yarn dlx @prisma/cli@latest app domain add shop.acme.com --app web
```

#### npm

```bash
npx @prisma/cli@latest app domain add shop.acme.com --app web
```

The command prints a **CNAME** record. Add it at your DNS provider; it points your hostname at Prisma's routing. Then wait for the domain to go live:

  

#### bun

```bash
bunx --bun @prisma/cli@latest app domain wait shop.acme.com --app web
```

#### pnpm

```bash
pnpm dlx @prisma/cli@latest app domain wait shop.acme.com --app web
```

#### yarn

```bash
yarn dlx @prisma/cli@latest app domain wait shop.acme.com --app web
```

#### npm

```bash
npx @prisma/cli@latest app domain wait shop.acme.com --app web
```

`wait` polls until the domain is active, up to 15 minutes. For a single status check, use `--timeout 0`:

  

#### bun

```bash
bunx --bun @prisma/cli@latest app domain wait shop.acme.com --app web --timeout 0 --json
```

#### pnpm

```bash
pnpm dlx @prisma/cli@latest app domain wait shop.acme.com --app web --timeout 0 --json
```

#### yarn

```bash
yarn dlx @prisma/cli@latest app domain wait shop.acme.com --app web --timeout 0 --json
```

#### npm

```bash
npx @prisma/cli@latest app domain wait shop.acme.com --app web --timeout 0 --json
```

In `--json` mode, `wait` streams newline-delimited status events, so an agent can track provisioning as it progresses.

Check and fix [#check-and-fix]

  

#### bun

```bash
bunx --bun @prisma/cli@latest app domain show shop.acme.com --app web
bunx --bun @prisma/cli@latest app domain retry shop.acme.com --app web
```

#### pnpm

```bash
pnpm dlx @prisma/cli@latest app domain show shop.acme.com --app web
pnpm dlx @prisma/cli@latest app domain retry shop.acme.com --app web
```

#### yarn

```bash
yarn dlx @prisma/cli@latest app domain show shop.acme.com --app web
yarn dlx @prisma/cli@latest app domain retry shop.acme.com --app web
```

#### npm

```bash
npx @prisma/cli@latest app domain show shop.acme.com --app web
npx @prisma/cli@latest app domain retry shop.acme.com --app web
```

`show` gives you the exact state, certificate details, and any DNS hints. `retry` restarts stuck provisioning; if a domain isn't in a retryable state, it returns `DOMAIN_RETRY_NOT_ELIGIBLE`.

A domain moves through these states:

| Status             | Meaning                                                         |
| ------------------ | --------------------------------------------------------------- |
| `pending_dns`      | Waiting for your CNAME record to be visible                     |
| `verifying`        | DNS found; ownership and routing are being verified             |
| `provisioning_tls` | The TLS certificate is being issued                             |
| `active`           | The domain is fully provisioned and routing traffic to your app |
| `failed`           | Registration or provisioning failed; see the failure reason     |

Remove a domain [#remove-a-domain]

  

#### bun

```bash
bunx --bun @prisma/cli@latest app domain remove shop.acme.com --app web
```

#### pnpm

```bash
pnpm dlx @prisma/cli@latest app domain remove shop.acme.com --app web
```

#### yarn

```bash
yarn dlx @prisma/cli@latest app domain remove shop.acme.com --app web
```

#### npm

```bash
npx @prisma/cli@latest app domain remove shop.acme.com --app web
```

Removing detaches the domain from the app; pass `--yes` to skip the confirmation prompt. Prisma can't touch your DNS, so the CNAME record stays behind: delete it at your provider once you no longer need it.

Limits [#limits]

* Custom domains are production-only.
* DNS uses CNAME records.
* Up to 3 custom domains per app; more returns `DOMAIN_QUOTA_EXCEEDED`.
* There's no workspace-wide domain list in the CLI.

Next steps [#next-steps]

* [Deployments](/compute/deployments): promote a deployment to production first.
* [Known limitations](/compute/limitations): what the beta can and can't do.

## Related pages

- [`@prisma/cli`](https://www.prisma.io/docs/compute/getting-started): Deploy your first app to Prisma Compute with the @prisma/cli beta package, then learn the variations you'll need next.
- [`Branching`](https://www.prisma.io/docs/compute/branching): Branches are isolated environments that map to your Git branches, so preview work never touches production.
- [`CLI reference`](https://www.prisma.io/docs/compute/cli-reference): Every @prisma/cli command, flag, environment variable, and error code for Prisma Compute.
- [`Configuration`](https://www.prisma.io/docs/compute/configuration): Declare your deployable app in a typed prisma.compute.ts file so deploys are reproducible and monorepos work, without re-passing flags every time.
- [`Deployments`](https://www.prisma.io/docs/compute/deployments): Build, deploy, inspect, promote, and roll back app deployments on Prisma Compute.