# Custom Branding

FastSchema ships a single dashboard bundle embedded in the server binary, yet

Source: https://fastschema.com/docs/custom-branding

FastSchema ships a single dashboard bundle embedded in the server binary, yet
each deployment can present its own brand. The server exposes the brand through
a public endpoint and the dashboard applies it at runtime, so you can white-label
the login screen, sidebar, browser tab, and favicon without rebuilding anything.

Branding is configured entirely through environment variables. Point several
deployments at the same image and give each one a different brand.

## Environment variables

| Name | Default | Description |
| ---- | :------ | :---------- |
| APP_BRAND_NAME | `APP_NAME` (falls back to `FastSchema`) | Brand name shown on login, setup, the sidebar, and the browser tab title |
| APP_BRAND_DESCRIPTION | - | Tagline shown under the brand name in the sidebar, and used as the page meta description |
| APP_BRAND_LOGO | - | Brand logo as a URL, data-URI, or inline SVG string |
| APP_BRAND_FAVICON | - | Favicon as a URL, data-URI, or inline SVG string |

Any variable left empty keeps the built-in FastSchema default for that field.

## Example

<Tabs items={["data/.env","Docker"]}>
<Tab value="data/.env">

```ini
APP_BRAND_NAME=Acme
APP_BRAND_DESCRIPTION=Internal Platform
APP_BRAND_LOGO=https://acme.example/logo.svg
APP_BRAND_FAVICON=https://acme.example/favicon.png
```

</Tab>
<Tab value="Docker">

```bash
docker run \
  -e APP_BRAND_NAME=Acme \
  -e APP_BRAND_DESCRIPTION="Internal Platform" \
  -e APP_BRAND_LOGO=https://acme.example/logo.svg \
  -p 8000:8000 \
  -v ./data:/fastschema/data \
  ghcr.io/fastschema/fastschema:latest
```

</Tab>
</Tabs>

## Logo and favicon formats

`APP_BRAND_LOGO` and `APP_BRAND_FAVICON` each accept three forms:

1. **URL** - `https://acme.example/logo.svg`. Prefer HTTPS: an HTTP asset on an
   HTTPS dashboard triggers mixed-content blocking.
2. **Data-URI** - `data:image/svg+xml;base64,...` or `data:image/png;base64,...`.
   Self-contained and immune to mixed-content issues.
3. **Inline SVG** - a raw string starting with `<svg ...>...</svg>`.

Inline SVG is sanitized on the client before it is rendered (script tags, event
handler attributes, and external references are stripped) as a defense-in-depth
measure. Because these values come from your deployment environment and not from
end users, the risk is low, but the sanitizer still runs.

## Theme color

There is no separate brand color setting. The dashboard does not recolor its
chrome per brand: adjust color by supplying a logo/favicon asset that already
uses your brand colors.

## Known limitation: initial flash (FOUC)

The embedded `index.html` carries the static FastSchema tab title and favicon.
The custom brand is fetched and applied by JavaScript once the dashboard loads,
so on the very first paint the browser tab may briefly show the FastSchema title
and favicon before switching to your brand. This flash is expected and only
affects the tab title and favicon, not the in-page UI.

The PWA manifest (`manifest.json`) name is static and is not affected by these
environment variables.
