Skip to content

ConsentLayer and c15t

c15t is an open-source consent management platform for JavaScript and the project closest to ConsentLayer. The two overlap, but they solve different parts of the problem. c15t collects consent: it ships the banner, stores each choice and loads third-party scripts once they are allowed. ConsentLayer acts on consent: you bring the banner, and it loads the analytics providers and sends your events to them, in the browser and from your server.

This page compares the two as of October 2026. The c15t column is based on its repository and documentation, not on running it; check them for anything that has changed since.

Area c15t ConsentLayer
Banner and settings UI Prebuilt banner, preference dialog and theme system, plus headless hooks A banner in the script tag only. On npm you build your own on useConsentController()
Translations 35 languages English, with every string overridable
Consent records A hosted service (Inth) with a dashboard and audit history, or a self-hosted backend on PostgreSQL, MySQL or SQLite Appended to your own database through a store, with built-in stores for Supabase, Prisma, Drizzle and Upstash. No dashboard
Integrations More than 40 script loaders: analytics, ad pixels, chat, monitoring and embeds 9 providers, plus your own with definePlugin()
Tracking API Loads each vendor’s script; you call each vendor’s API One track, page and identify API, translated for each provider, with auto-tracking
Server-side events Not in its documentation GA4 Measurement Protocol, Meta Conversions API, TikTok Events API and server-side GTM, with consent checked on the server
IAB TCF A full CMP for TCF 2.4 and GPP Reads the choice of a TCF CMP on the page; it is not a CMP
Global Privacy Control Supported Supported
Google Consent Mode v2 Supported Supported
Rules per visitor region Built in, such as opt-in in the EU and opt-out in some US states Planned; the defaults follow the opt-in model everywhere
Frameworks React, Next.js, Vue, Nuxt, Astro, TanStack Start, Svelte, SvelteKit and a script tag React, Next.js, Vue, Nuxt, Svelte, SvelteKit, Solid, SolidStart, Angular and a script tag
Runtime dependencies Not stated None
License Apache 2.0 MIT
Maturity About 2,000 GitHub stars and more than 2,100 sites, maintained by a company (Inth) A new 1.0 release with little production history
  • A finished consent UI on every framework, themed and translated into 35 languages. With ConsentLayer you design and translate the banner yourself, unless you use the script tag.
  • A consent platform you don’t have to run: hosted consent records with a dashboard and audit history. ConsentLayer writes records to your database and leaves querying, retention and deletion to you.
  • A full IAB TCF and GPP implementation. Its documentation describes using Inth’s registered CMP ID with the hosted service and its stock IAB components; other setups need their own registration with IAB Europe. ConsentLayer only reads a CMP’s decision.
  • Rules per visitor region, which ConsentLayer has only on its roadmap.
  • Over four times as many integrations, including chat widgets, embeds such as YouTube and Google Maps, and pixels for LinkedIn, Reddit, Snapchat, X and Microsoft.
  • Support for Astro and TanStack Start.
  • A track record: it is used in production by thousands of sites and maintained by a company. ConsentLayer has no production history yet.

Each of these features, including hosted consent records, is on the roadmap.

  • One tracking API for every provider. analytics.track('purchase', ...) reaches GA4, Meta, TikTok and PostHog, each in its own format and only while its consent category is granted.
  • Server-side events. The same events are forwarded to GA4, Meta, TikTok and server-side GTM from your server, which can accept only the consent the visitor’s signed consent cookie proves.
  • Support for Solid, SolidStart and Angular, which c15t’s documentation does not list.
  • No runtime dependencies and no backend to host. Consent records are optional.

c15t can collect consent while ConsentLayer tracks. When c15t runs as an IAB TCF CMP, the tcf() adapter reads its decision and ConsentLayer follows it. This combination has not been tested; the adapter is tested against a simulated __tcfapi. Without TCF mode, call analytics.consent.update() whenever c15t reports a change.

Neither project makes a setup comply with a law; see the legal notice.