nowo-tech/cookie-consent-bundle
A PHP package for adding customizable cookie consent banners and privacy preference controls to web applications. Configure consent categories, manage scripts, and support compliance with a lightweight, integration-friendly setup.
Architecture fit — unchanged and still the deciding factor: poor for a Laravel target. Nothing in v1.19.0 alters the package's shape. It remains a Symfony Bundle whose value is delivered through Symfony-specific glue: a Bundle class, a DI Extension with a Configuration tree, compiler passes, Twig templates, form types, and an admin controller. The release actually deepens the Symfony coupling — the headline change is that CookieDefinitionAdminController now receives Symfony's form.factory through constructor autowiring rather than pulling it from the container. That is a genuine improvement in Symfony-side design, and it simultaneously hardens the dependency on symfony/form. Laravel has no counterpart to autowired form factories, DI extensions, or Twig extensions; the surface area that must be discarded or rewritten did not shrink, it grew slightly.
What is actually reusable — unchanged. The bounded subset identified before still holds: the consent-category model and toggles, the cookie-consent record shape, and the optional consent-logging persistence logic. The Doctrine entity and HttpFoundation\Request couplings are untouched, so an Eloquent repository and a request shim are still prerequisites for any use in a Laravel service provider.
Integration feasibility — still conditional, medium effort, and now with a versioned exit cost. Composer installs it; installing is not integrating. The realistic path remains a 1–2 day source audit followed by a choice between porting ~300–600 lines of domain logic or reimplementing. The new @final markings add a consideration: services, controllers, form types, the Twig extension, and non-extension-point DI classes are now @final (real final in 2.0), with CookieConsentConfigFullSettingsType and the bundle class deliberately left open. That is good hygiene upstream, but it tells you the maintainer is actively closing extension surfaces. Any fork-and-patch strategy becomes more brittle with each release, and 2.0 will be a breaking major.
Technical risk — meaningfully rebalanced, not eliminated. The prior assessment's central doubt was execution evidence. This release substantially answers that, and the answers are better than the star count implied:
make test-coverage enforces a 99% line-coverage floor and fails the build below it. The earlier "zero tests in a compliance path is a stop signal" concern is withdrawn — there is a suite, a coverage gate, and published measured coverage in the README.release-check chains ensure-up, validate-translations now enforces key parity against en (translation drift is a common failure in consent banners, where a stale string produces legally incorrect copy in one locale), the release security checklist gains an AI security audit item, and the changelog carries requirement IDs (REQ-PHP-001, REQ-SF-003, REQ-TEST-008) implying a spec-traced process with an UPGRADING.md.dunglas/frankenphp:1-php8.5-alpine and the changelog calls PHP 8.5 "the newest PHP allowed by require.php." A package with 0 stars, a single maintainer, a 99% coverage gate, requirement-ID traceability, an AI security audit checklist, i18n parity gates, and PHP 8.5 targets is internally inconsistent with its own adoption profile. Either this is a very new or private-then-published project with heavy internal process, or the registry metadata is unreliable. Verify tag history, CHANGELOG, and the PHP/symfony/* constraints declared in composer.json before trusting any of the above as a stability signal. Note again the release date (2026-10-18) sits in the future relative to normal cadence.@final today, real final in 2.0, is an explicit deprecation clock. If you fork, you inherit a merge that will conflict. If you depend, you inherit a major upgrade in a compliance path.Key questions — revised.
symfony/* floors in composer.json — PHP 8.5 demo images suggest a very high floor, which may itself be a Laravel compatibility problem given Laravel's own Symfony component versions.UPGRADING.md#to-1190 fully enumerate the @final changes, and is there a published 2.0 timeline? An imminent major break matters for any port decision.TPM recommendation — unchanged in direction, firmer in reasoning: do not adopt as a runtime dependency. The rejection now rests on architecture (Symfony-only, deepening), not on suspected sloppiness. Use it as a reference implementation, and treat its UPGRADING/requirements documentation as a free specification input for an in-house build.
Stack fit — mismatch, narrow salvage path, unchanged. There is still no supported route to mounting a Symfony bundle inside Laravel. The only viable integration remains a port: extract the category configuration schema and the consent-record contract, rebuild the UI in Blade/Vue/Livewire, and rebuild logging in Eloquent. Budget as greenfield with a reference, not as an integration. Do not carry Symfony form.factory, Twig, or Doctrine across the boundary.
Migration path. Nothing is deployed against this package (0 dependents), so the decision remains build-vs-adopt and the correct framing remains: adopt the design, build the code.
UPGRADING.md give you a map — but does not change the effort.@final trajectory guarantees the fork diverges.Compatibility checks — one new item. PHP floor (likely high, given PHP 8.5 demo images — confirm it does not exceed your fleet), Symfony component versions if you reuse any standalone piece such as symfony/http-foundation (must align with Laravel's own transitive Symfony versions or Composer will conflict), Twig vs Blade (do not introduce Twig), Doctrine vs Eloquent (do not introduce a second ORM). New: review UPGRADING.md#to-1190 for the @final list — if you lift code from any now-@final class, record the version you copied from, because upstream will not preserve that surface.
Sequencing. Unchanged and still the critical path: audit → decision gate → (if build) privacy/legal review of taxonomy and consent copy → implementation → consent-log schema and retention policy → QA asserting no third-party script loads pre-consent → legal sign-off → ship. Legal review runs in parallel with the audit spike; category taxonomy and default states are policy decisions. Treat the consent banner as a hard dependency for EU/UK traffic, not a feature to sequence behind a launch.
Preferred alternative — unchanged. A thin in-house implementation (config-driven category list, first-party cookie with timestamp + policy version, middleware gating known third-party scripts, append-only consent log) plus a maintained Laravel consent package for the UI. 1–2 weeks, and you own the compliance narrative. The translation key-parity gate in this release is a good idea worth copying into your own i18n pipeline if you ship in more than one locale.
Maintenance — still the dominant concern, but for a different reason. Previously the concern was that a low-quality package would become yours to fix. Now the concern is that a well-engineered, actively maintained package is one you cannot consume, because it is maintained on a framework you do not run and is deliberately narrowing its extension points. Either way you end up owning the code; the new evidence just means you would be forking something worth forking — which is a more expensive kind of fork.
Support. Still no community, no vendor, no SLA, no documented escalation. The release notes show an internal process (requirement IDs, security checklist, coverage gates) but not an external support surface. Internal engineers own the Symfony-to-Laravel translation permanently — a recurring knowledge tax on a Laravel shop.
Scaling. Unchanged physics:
Failure modes and blast radius.
@final → real final in 2.0. If you forked, the merge is adversarial; if you depended, the upgrade is a compliance-path change.Ramp-up. Small codebase — 1–2 days for a mid-level engineer to read. Interpreting it still requires Symfony bundle fluency (DI extension, config tree, compiler passes) that a Laravel team likely lacks. The release does not change this and adds a small amount of surface (symfony/form autowiring, @final conventions, requirement-ID cross-references). Weigh that ramp-up against the ~2-week in-house build; the differential remains smaller than it appears, and the in-house version leaves you with on-stack, maintainable code and a compliance story you can defend without caveats.
Net operational position: v1.19.0 is a credible release from a project that is being run more professionally than its adoption metrics suggest, and it resolves the "is there any test discipline" objection outright. It does not move the one thing that matters: a Symfony bundle cannot be operated inside a Laravel application without becoming your code. Adopt the pattern and the process — the coverage gate, the translation-parity check, the requirement traceability, the security checklist — reject the dependency. Reassess only if a framework-agnostic core is published, or if external production adoption appears.
How can I help you explore Laravel packages today?