Features

What works today — and what doesn't yet

This page keeps the two apart. A feature only moves to the upper list once it is actually implemented.

Available

Banner and detail view

Four layouts (banner bottom, banner top, modal, slide-in), a second level with categories, services and cookie tables, fully keyboard operable, rendered in the Shadow DOM.

Script blocking

Declarative via type="text/plain" data-consented="…" and pattern-based via a MutationObserver that already starts in the stub — before the runtime is loaded.

Google Consent Mode v2

Default signals are set in the stub, before GTM. Once the visitor decides, a consent update follows with the category → signal mapping.

Multiple languages

32 languages in the catalogue, complete texts for German and English, a fallback chain across browser language, HTML lang and the default language.

Service management

A searchable catalogue with provider, purpose, cookies and blocking patterns, plus any number of your own services with a full form.

Third-country watch

For services whose participation in the EU-US Data Privacy Framework is on record, we hold the status against the U.S. Department of Commerce participant list every week. If a certification lapses or is withdrawn, the operator gets a message. Five catalogue entries carry that record (as of 14 August 2026) — it is made editorially, not by matching names, and every other entry visibly reads “not recorded”.

Design editor

Colours, radii, layout and custom CSS with a live preview in a sandboxed iframe and an automatic WCAG contrast check.

Consent log

Every decision with a timestamp, config version, language and an HMAC-pseudonymised IP. Changes never overwrite anything, they are appended.

Hash chain over the log

Every entry in the consent log carries the hash of the one before it, and every finished day is condensed into a Merkle root as defined by RFC 6962. A row changed, deleted or slipped in afterwards therefore shows up when the sums are redone; bin/verify-chain ships with the project. For now the seals live only in the instance's own database — the chain shows a change, it does not prevent one.

Analytics

Acceptance rates by domain, language, country and layout, over time. Plus a pseudonymous export of the consent record as CSV or JSON — the IP only as an HMAC, the page URL only as a SHA-256.

A/B tests

Up to three banner variants with traffic split and deterministic assignment — the same visitor always sees the same banner. Each variant gets the full design editor including banner texts, previews side by side, and an analysis that only claims a difference from 100 decisions per variant and p < 0.05.

Versioning

Every publish freezes the configuration as an immutable snapshot — so you can trace which visitor saw which version.

Domain verification

Via DNS TXT or file upload. Unverified domains are restricted when the banner is served.

Roles and invitations

Owner, admin, editor and viewer with a documented permission matrix, invitations by e-mail, changes recorded in the audit log.

Data subject rights

A public lookup by consent ID: see the stored record and have it deleted on request — no account needed.

Two-factor authentication

TOTP per RFC 6238 with ten recovery codes. The secret is stored encrypted, and the same code cannot be used twice.

Self-hosting

The same source code, PHP and MariaDB, no build step, no Node on the server.

In progress

IAB TCF v2.3 planned

The TC string encoder/decoder is done and tested against the official IAB test vectors. Still open: GVL sync, vendor layer, publisher restrictions — and above all the CMP registration with IAB Europe, without which no TC string may be emitted. See the note below.

Cookie scanner planned

A headless crawler that measures before and after consent and exposes tracking that fires too early.

GPP and US regions planned

The __gpp API and six sections (USNat, California, Virginia, Colorado, Utah, Connecticut) are done and tested against the official IAB test vectors. Still open: the USNat section requires Multi-State Privacy Agreement signatory status per the specification — a business decision, not a technical gap. See the note under settings.

About TCF
consented.eu is built for TCF v2.3, but is not yet registered as a CMP with IAB Europe. Without its own CMP ID, a banner may not emit TC strings inside the framework. Until that is settled, the TCF switch in the dashboard stays disabled — a switch that promises something that isn't true yet would be worse than no switch at all.