---
title: "Custom domains"
description: "Serve a Fillo form on your own domain by embedding the native renderer in a route you control."
group: "Customize"
order: 3
type: "feature"
keywords:
  - "custom domain"
  - "hosted form"
  - "embed"
  - "DNS"
updated: "2026-07-14"
---

Custom domains keep respondents on a hostname your product controls. Today, the way to get there is native embedding — not attaching a CNAME to the hosted `/f` page.

## Supported path

1. Create a route in your application, such as `https://app.example.com/contact`.
2. Render the published form on that route with `@usefillo/react` or `@usefillo/dom`.
3. Style the surrounding page and set its metadata in your framework.
4. Keep the form ID in application configuration, or define and sync the form in code.

```tsx
import { FilloForm } from "@usefillo/react";
import "@usefillo/react/styles.css";

export default function ContactPage() {
  return (
    <main>
      <h1>Contact support</h1>
      <FilloForm formId="your-published-form-id" showTitle={false} />
    </main>
  );
}
```

Published form IDs can load and submit without a key. If your workspace restricts browser origins for publishable-key sync, add the production origin when the embed also syncs a code-defined form.

## What's not available

Fillo doesn't currently issue or verify DNS records for a custom hosted-form hostname. There's no dashboard custom-domain setting, no automatic certificate flow, and no supported CNAME target for `/f` pages.

Don't reverse-proxy the hosted page as if it were a stable white-label HTML contract. The native renderer is the supported way to put a form under your domain, and it keeps you in control of routing, cookies, headers, metadata, and the surrounding UI.

## Plan status

Native and headless embedding are available on every plan, Free included.

## Related

- [Quickstart](/docs/embed): Install the renderer and load a published form.
- [Branding](/docs/branding): Match the form and surrounding route to your product.
- [Blocked by CORS policy](/docs/troubleshooting/cors-error): Fix an origin or custom API configuration.
