Policy Packs

Policy packs configure how c15t handles regional consent — which model (opt-in, opt-out, none), which categories, and what UI to show. The backend resolves the right policy automatically based on the visitor's location.

For most apps, you just need a ConsentManagerProvider pointing at your backend with presets configured there. The frontend receives the resolved policy via the /init response — no client-side policy config required.

When a backend isn't available — local development, static previews, Storybook, automated tests, or as a resilience fallback during a temporary outage — you can pass policies directly to the provider via offlinePolicy.policyPacks and c15t resolves them locally.

Info

For QA and testing, use the c15t DevTools to simulate different regions and policy responses against your real backend, rather than switching to offline mode.

When using inth.com or a self-hosted backend, the provider connects automatically. No policy configuration is needed on the frontend:

The backend resolves the correct policy based on the visitor's geo data and returns it in the /init response. Configure your presets on the backend side.

Offline Presets (Development and Fallback)

Use offline presets mainly for local development, Storybook, deterministic tests, or temporary backend outages:

Available presets:

PresetModelMatches
europeOptIn()opt-inEEA + UK countries + geo fallback
europeIab()iabEEA + UK countries + geo fallback (TCF 2.3)
californiaOptOut()opt-outUS-CA region
quebecOptIn()opt-inCA-QC region
worldNoBanner()nonedefault fallback

Next.js Example (Hosted)

Point the provider at your backend — policy resolution happens server-side:

For production Next.js apps, you can optionally hydrate the first /init response with the server-side utilities.

Offline / Fallback

For local development, previews, automated tests, or when the backend is temporarily unreachable, pass policies directly:

Provider Shape

Configure packs through offlinePolicy.policyPacks. Add offlinePolicy.i18n when you want local previews or fallback behavior to mirror hosted policy-profile language behavior:

With that setup, offline mode resolves language the same way as hosted mode:

  • the active policy profile defines the allowed language set
  • each profile can define its own fallbackLanguage
  • built-in translations only fill missing keys for the selected language

Fallback Behavior

ConfigurationResult
offlinePolicy.policyPacks omittedSynthetic opt-in fallback banner (also used for hosted network fallback)
offlinePolicy: { policyPacks: [] }Explicit no-banner mode
Non-empty pack, no match, no defaultExplicit no-banner mode

Omitting the option gives you a safe opt-in default for local development and outage scenarios. Providing it tells c15t you want deterministic preview or fallback behavior exactly as configured.

QA and Debugging

The best way to test regional consent behavior is with the c15t DevTools. The DevTools Policy panel lets you simulate different countries, regions, and GPC signals against your real backend — no code changes needed.

For deeper inspection:

  • Read policy and policyDecision from useConsentManager() to see the resolved config
  • Open the DevTools Policy panel to inspect matcher resolution and fingerprints
  • Compare your frontend preview with the backend /init response before shipping

If you need fully deterministic resolution without a backend during testing or preview work (for example, in automated tests or Storybook), pair offlinePolicy.policyPacks with overrides:

Info

For the full concept model (matchers, scope modes, re-prompting), see Policy Packs concepts. For backend setup, see the self-host guide.