nowo-tech/cookie-consent-bundle

Symfony bundle providing a GDPR cookie consent modal with category toggles and optional consent logging

Maintainers

Package info

github.com/nowo-tech/CookieConsentBundle

Type:symfony-bundle

pkg:composer/nowo-tech/cookie-consent-bundle

Transparency log

Statistics

Installs: 637

Dependents: 0

Suggesters: 1

Stars: 0

Open Issues: 0

v1.9.1 2026-08-18 09:32 UTC

README

CI Packagist Version Packagist Downloads License PHP Symfony GitHub stars Coverage

Found this useful? Install from Packagist · Give it a star on GitHub so more developers can find it.

Symfony bundle that renders a GDPR cookie consent modal with category toggles, optional per-cookie selection, cookie inventory, AJAX form submission, optional consent logging, and configurable Doctrine table prefix. Frontend behavior is implemented in TypeScript and built with Vite (make assetssrc/Resources/public/nowo-consent-modal.js).

FrankenPHP Friendly Worker Mode

This bundle is FrankenPHP worker mode friendly.

Features

  • GDPR modal — category toggles, optional per-cookie selection, AJAX submit, TypeScript + Vite (nowo-consent-modal.js) and standalone CSS (nowo-cookie-consent.css, CSP-friendly).
  • Themesui_theme: bootstrap (default) or tailwind; dual FrankenPHP demos.
  • Cookie inventory — definitions in YAML and/or Doctrine; optional consent logging with configurable table prefix.
  • Admin UI/cookie-consent-config (profile, behavior, appearance, modals, route targeting) plus CRUD for cookie definitions.
  • Preferences bubble — reopen consent after the first choice.
  • Route targetingrender_routes / skip_render_routes; helper nowo_cookie_consent_should_embed_modal().
  • Database configuse_database_config so the admin UI can override YAML at runtime.
  • Cold-start — cooperates with SiteBackupBundle when the schema is not ready yet.

Quick start

composer require nowo-tech/cookie-consent-bundle
# config/packages/nowo_cookie_consent.yaml
nowo_cookie_consent:
    doctrine:
        table_prefix: 'app_'   # optional; yields app_dashboard_cookie_log
    use_logger: true
{# templates/base.html.twig #}
{% if nowo_cookie_consent_should_embed_modal() %}
    {{ render(path('nowo_cookie_consent.show_if_not_set')) }}
{% endif %}

Install public assets:

php bin/console assets:install

Demo

make -C demo up-symfony8
# Bootstrap demo: http://localhost:8014

make -C demo up-symfony8-tailwind
# Tailwind demo: http://localhost:8015
  • demo/symfony8/ — FrankenPHP Symfony 8 app with Bootstrap 5
  • demo/symfony8-tailwind/ — same demo with Tailwind CSS and ui_theme: tailwind

See Demo with FrankenPHP for development vs. production worker mode.

Documentation

Additional documentation

Tests and coverage

Language Lines (approx.) Command
PHP 100% line coverage on src/ (run make coverage-check to refresh). See docs/COVERAGE.md. make coverage-check
TypeScript ~94% make test-ts
make test
make coverage-check
make test-ts
make assets
make release-check

PHP coverage target is ≥99% lines (prefer 100%; see Release and docs/COVERAGE.md). TypeScript coverage enforces a minimum of 90% (Vitest thresholds + .scripts/ts-coverage-percent.sh).

License

This bundle is released under the MIT License.