Consent modes
Tickbox normalises every category into one of three modes. The mode determines whether the user has to opt in, whether they just need to be told, or whether the cookies fire silently.
consent
The user must opt in before scripts in this category run. Implications:
- A consent banner shows on first visit until the user makes a decision.
- Equal-prominence Accept All and Reject All on the first layer (UK ICO and EU EDPB requirement).
<script type="text/plain" data-tb-category>tags don’t execute until consent is granted.- Google Consent Mode v2 fires
consent: deniedon initial state and updates on user choice.
Used for: ad tech (Google Ads, Meta Pixel, TikTok, LinkedIn UET), session replay (Hotjar, FullStory, MS Clarity), first-party analytics that touch advertising infrastructure (Google Analytics, GTM).
notice
The user is informed but doesn’t have to opt in — the scripts run by default. Implications:
- A notice card shows on first visit with an explanation and an easy opt-out.
- Once acknowledged (or once any decision is stored), the card stays hidden.
- Scripts in
notice-mode categories run before any user action.
Used for: privacy-friendly analytics that qualify for the UK DUAA “statistical purposes” exemption — Plausible, GoatCounter, Fathom, Pirsch, Umami, server-side counters.
notice mode only exists under UK_DUAA today. Under EU_GDPR, even these vendors resolve to consent mode.
always
No consent or notice required. Implications:
- Required for site function — session cookies, CSRF tokens, language preferences.
- Toggle is force-on and disabled in the customise modal.
- Cannot be denied.
Used for: anything in the “strictly necessary” PECR exemption.
Equal prominence — what it actually means
UK ICO and EU EDPB have been explicit and have fined sites where Accept All looked dramatically more prominent than Reject All. The threshold isn’t “must be identical” — it’s “could a casual user fairly easily click Reject too.” In practice this means:
- Same visual weight (same border / fill / size)
- Same colour family — bright Accept + grey Reject is the most-fined pattern
- Same padding and font weight
- Equal positioning (Reject on the first layer, not buried behind a “Manage” link)
@tickboxhq/banner-default enforces this by giving Accept and Reject the same .tb-btn-equal class. If you build your own banner, replicate the rule.
The customise modal’s Save button can be primary-styled because the user has already engaged with a deliberate configuration flow — equal prominence applies to the decision surface, not to subsequent steps within an opted-in flow.
How modes resolve
Mode resolution happens in resolveCategories(config, jurisdiction). For each category:
- Required categories →
always. - Otherwise, look up each vendor’s rule for the active jurisdiction.
- If any vendor in the category requires
consent, the whole category becomesconsent(most restrictive wins). - If all vendors are
notice-eligible, the category becomesnotice. - If the category has no vendors listed, the jurisdiction’s
defaultModeapplies.
You can override the inferred mode by setting mode on a category, but it’s rarely needed — getting the vendor list right is usually the cleaner answer.