Everything is set on the `init()` config, or centrally per-site in the dashboard
(dashboard config is **merged over** `init()`). Only `siteId` is required, and
the license key usually supplies it.

## Core options

| Option                   | Type                   | Default          | Notes                                                                                                |
| ------------------------ | ---------------------- | ---------------- | ---------------------------------------------------------------------------------------------------- |
| `siteId`                 | `string`               | —                | Usually supplied by the license key.                                                                 |
| `key`                    | `string`               | —                | License key; normally baked into the script URL.                                                     |
| `apiBase`                | `string`               | hosted edge      | Base URL of the Lightning Worker.                                                                    |
| `theme`                  | name or tokens         | `"light"`        | [Appearance](/configure/appearance/). Tokens take an optional `base` (`"auto"`/`"light"`/`"dark"`).  |
| `privacyPolicyUrl`       | `string`               | —                | Shows a privacy-policy link in the modal. [Appearance](/configure/appearance/#privacy-policy-link).  |
| `categories`             | `CategoryId[]`         | all four         | [Categories](/configure/regulations/).                                                               |
| `position`               | `BannerPosition`       | `"bottom"`       | Banner anchor.                                                                                       |
| `showFloatingButton`     | `boolean`              | `true`           | Persistent re-open button.                                                                           |
| `floatingButtonPosition` | `FabPosition`          | `"bottom-left"`  | FAB anchor.                                                                                          |
| `geo`                    | `"auto"` or regulation | `"auto"`         | [Regulations](/configure/regulations/).                                                              |
| `googleConsentMode`      | `boolean`              | `true`           | [Consent Mode](/configure/consent-mode/).                                                            |
| `bridges`                | `BridgeConfig`         | —                | [Bridges](/integrations/bridges/).                                                                   |
| `respectGpc`             | `boolean`              | `true`           | Honour Global Privacy Control.                                                                       |
| `experiment`             | `boolean`              | `false`          | [A/B testing](/guides/ab-testing/).                                                                  |
| `consentExpiryDays`      | `number`               | `0` (never)      | Re-prompt after N days.                                                                              |
| `locale`                 | `string`               | document lang    | BCP-47 locale.                                                                                       |
| `copyStarter`            | `CopyStarter`          | `"professional"` | Base copy for the banner and preferences modal. [`text` overrides it](/configure/copy-and-locales/). |
| `text`                   | `CmpText`              | —                | [Copy overrides](/configure/copy-and-locales/).                                                      |
| `hideBranding`           | `boolean`              | `false`          | White-label.                                                                                         |
| `debug`                  | `boolean`              | `false`          | [Debug logging](/guides/verifying/).                                                                 |
| `onReady`                | `(state) => void`      | —                | Fires once init completes.                                                                           |
| `onConsentChange`        | `(state) => void`      | —                | Fires on every change incl. initial load.                                                            |

## Enum values

- **`CategoryId`** — `necessary` \| `preferences` \| `statistics` \| `marketing`.
- **`BannerPosition`** — `bottom` \| `top` \| `bottom-left` \| `bottom-right`.
- **`FabPosition`** — `bottom-left` \| `bottom-right` \| `top-left` \| `top-right`.
- **`CopyStarter`** — `professional` \| `clear` \| `friendly` \| `concise`.
- **Regulation** — `gdpr` \| `ccpa` \| `none`.

:::note[Source of truth]
The authoritative schema with JSDoc lives in `packages/shared/src/config.ts`.
This table is being kept in step with `docs/INSTALL.md` §
_“Configuration reference.”_
:::