> ## Documentation Index
> Fetch the complete documentation index at: https://fabricate.build/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Custom Domains

> Connect your own domain to a published Fabricate app — add the domain, set DNS records, and get automatic SSL.

Every published app gets a subdomain on Fabricate's domain, but you can also connect a domain you own — like `yourcompany.com` — so your app lives at your own address. Fabricate handles custom domains through Cloudflare-for-SaaS custom hostnames, including SSL certificates.

<Note>
  You need to publish your app before connecting a custom domain. See [Deploying Your App](/deploy/overview).
</Note>

## Connecting a Domain

<Steps>
  <Step title="Open your app's domain settings">
    In your app's settings, find the custom domain section and choose to add a domain.
  </Step>

  <Step title="Enter your domain">
    Type the domain you want to use. You can connect both the apex domain (`yourcompany.com`) and the `www` subdomain (`www.yourcompany.com`).
  </Step>

  <Step title="Add the DNS records">
    Fabricate shows you the exact DNS records to create. Add them at your domain registrar or wherever you manage DNS:

    * For the **apex** domain, add the record Fabricate provides to point the root of your domain at your app.
    * For the **www** subdomain, add a `CNAME` record pointing `www` at the target Fabricate gives you.
  </Step>

  <Step title="Wait for verification">
    Once your DNS records are live, Fabricate verifies the domain. DNS changes can take anywhere from a few minutes to a couple of hours to propagate.
  </Step>

  <Step title="You're live">
    After verification, your app is reachable at your custom domain. SSL is provisioned automatically — no certificates to upload or renew.
  </Step>
</Steps>

## Apex vs www

You can serve your app from either the apex domain, the `www` subdomain, or both:

* **Apex domain** — `yourcompany.com`, the bare root of your domain.
* **www subdomain** — `www.yourcompany.com`.

Connecting both is recommended so visitors reach your app no matter which address they type. Decide which one you want as the primary address and you can have the other redirect to it.

## Automatic SSL

Fabricate provisions and renews SSL certificates for your custom domain automatically through Cloudflare. Your app is served over HTTPS from the moment the domain is verified — there's nothing to configure and nothing to renew.

<Tip>
  If your domain's DNS is already managed at Cloudflare, propagation is usually fast. Domains hosted elsewhere can take longer to verify.
</Tip>

## Frequently Asked Questions

<AccordionGroup>
  <Accordion title="Do I need to buy a domain through Fabricate?">
    No. Use any domain you already own. You add DNS records at your existing registrar — Fabricate doesn't sell domains.
  </Accordion>

  <Accordion title="My domain isn't verifying — what should I check?">
    Confirm the DNS records exactly match what Fabricate shows, with no extra characters. DNS changes also take time to propagate, so give it up to a couple of hours before troubleshooting further.
  </Accordion>

  <Accordion title="Can I connect more than one domain to an app?">
    You can connect your apex and `www` to the same app. Treat one as primary and redirect the other for a consistent address.
  </Accordion>

  <Accordion title="Does my Fabricate subdomain still work?">
    Yes. Your original `yourapp.fabricate.build` address keeps working alongside your custom domain.
  </Accordion>

  <Accordion title="What happens to my domain when I redeploy?">
    Nothing — your custom domain stays connected across redeploys. Only your app's code is updated when you publish again.
  </Accordion>
</AccordionGroup>

## Next Steps

<CardGroup cols={2}>
  <Card title="Deploying Your App" icon="rocket" href="/deploy/overview">
    Publish your app and pick a subdomain.
  </Card>

  <Card title="App Visibility" icon="eye" href="/deploy/visibility">
    Control who can access your published app.
  </Card>
</CardGroup>
