Documentation

Everything you need to run ZenoCookieConsent, manage sites in it, wire it into your pages and document it for your DPO.

Manuals

Operations manual

For whoever runs the server: requirements, the installer and its options, configuration reference, S3 storage, reverse proxy and TLS, backups and restores, updates, monitoring, nightly maintenance, security hardening and the admin CLI.

docs/operations-manual.mdSysadminsDevOps

Organization manual

For the people using the dashboard: signing in and invitations, organizations and roles, adding domains, banner design, texts in seven languages, the cookie declaration, publishing revisions, installing and verifying the banner, the consent log, files, members and the audit log.

docs/organization-manual.mdSite ownersAgenciesDPOs

Integrations

For developers: placement of zeno.js, blocking markup, categories, the window.Zeno API and events, Google Consent Mode v2, the cookie declaration, single-page apps and Content Security Policy, plus a guide per platform, framework and vendor (listed below).

docs/integrations/README.mdDevelopers

Legal guide

For DPOs and counsel: an overview of EU law, national rules, a compliance matrix, a site-owner checklist, product recommendations and templates for a cookie policy and a data processing agreement. Not legal advice.

docs/legal/README.mdDPOsLegal

Architecture

Components, repository layout, the publishing model with immutable revisions, and the stable public client contract (v1) that every integration builds on.

docs/architecture.mdDevelopersOperators

Examples

Minimal runnable integrations for plain HTML, React (Vite), Vue (Vite), SvelteKit, Astro and the Next.js App Router, each checked in a real browser.

examples/README.mdDevelopers

Integrations

A guide for your stack.

Each guide builds on the shared concepts in the integrations overview and ends with a browser checklist.

Sites and platformsCovers
Plain HTMLStatic sites, server-rendered templates (PHP, Rails, Django, …)
WordPressfunctions.php, mu-plugin, plugins that inject scripts, caching plugins
Shopifytheme.liquid, Customer Privacy API
Webflow, Squarespace, WixCustom code injection and its limits
FrameworksCovers
Next.jsApp Router and Pages Router, why not next/script
React (Vite)useConsent hook
Vue 3 and NuxtPlugin and composable, Nuxt 3/4
Angularindex.html and ConsentService
Svelte and SvelteKitapp.html and a store
Astrois:inline, view transitions
Gatsbygatsby-ssr head ordering
Remix and React Router v7root.tsx
Tags and vendorsCovers
Google Tag ManagerConsent Mode v2, consent checks, dataLayer events
Google Analytics 4Consent Mode vs fully blocked
MatomoCookieless vs consent-gated cookies
Meta PixelBlocking, consent API, Conversions API
YouTube and VimeoClick-to-load placeholders
Hotjar and Microsoft ClarityBlocking, Clarity consent API
HubSpotTracking code, forms, chat

Quick reference

The public client contract (v1).

Stable across releases. The full contract lives in the architecture document and the integrations overview.

MarkupEffect
data-gcmOn the script tag: emit Google Consent Mode v2 default (all denied) at once and update on every choice
data-lang="de"On the script tag: force the banner language instead of the browser's
data-zeno="…"On a blocked script, iframe or image: the categories that must all be granted (necessary is always released)
data-zeno-declarationOn any element: filled with the cookie declaration, also when added later. Use ="manual" to fill it yourself with renderDeclaration
html.zeno-marketingClasses zeno-<category> and zeno-no-<category> on <html> for CSS placeholders
window.ZenoDescription
show()Open the preferences panel
accept(...categories)Grant categories from a page control, e.g. "Load video"
getConsent()Current state per category, or null
hasConsent(c)true if category c is granted (always for necessary)
onChange(fn)Call fn now (if chosen) and on every change; returns an unsubscribe function
receiptId()The visitor's consent receipt id
renderDeclaration(el)Render the cookie declaration into el (queued until the config has loaded)

Events on document: zeno:ready when the API is available, zeno:consent with the state in event.detail, fired after released scripts have run. Categories: necessary, functional, analytics, marketing.