em411/sylius-feature-flag-bundle-plugin
Manage em411/feature-flag-bundle flags from the Sylius admin panel. Flags become a Sylius resource with a grid to create, edit and delete them, each with a code, enabled toggle, optional value and description. A Doctrine-backed provider overrides code-defined @AsFeature flags of the same code.
Architecture fit. This is a Sylius-specific plugin, not a general Laravel package despite the PHP/Laravel framing in the assessment brief. It wires em411/feature-flag-bundle into Sylius by promoting feature flags to a Doctrine-backed Sylius resource, exposed in the admin grid, and registering a high-priority Doctrine provider in the flag resolution chain. It is only viable if the target application is a Sylius storefront already using (or willing to adopt) the ajgarlag/em411 feature-flag bundle stack. For a plain Laravel or non-Sylius Symfony app it is not applicable without significant rework.
Integration feasibility. Mechanically straightforward for a Sylius shop: composer require, register two bundles in config/bundles.php, import admin routing, and run the Doctrine schema migration. The resource-based admin CRUD is idiomatic Sylius, which reduces bespoke code. The real question is whether the resolved dependency graph (Sylius version, Symfony version, Doctrine) can actually be satisfied by composer on the target project.
Technical risk (high).
@AsFeature code flag of the same code. That is a powerful and easy-to-misuse behavior in production and should be treated as a governance concern, not just a config detail.Key questions before adoption.
composer.json constraints on sylius/sylius, symfony/*, and doctrine/orm, and do they resolve on our target Sylius version?em411/* and ajgarlag/feature-flag-bundle, and what is the security disclosure path?Stack fit. Assume Sylius ~1.8–1.11 on Symfony 4.4/5.x as the only credibly supported band. Verify against the actual composer.json; do not assume. If the storefront is on Sylius 1.12+/2.x, treat this as a research spike, not a drop-in.
Migration path.
Ajgarlag\FeatureFlagBundle and Em411\SyliusFeatureFlagPlugin.@AsFeature code flags migrate to DB or stay code-owned — the high-priority provider means DB silently wins, so do not run both for the same code without a rule.Compatibility. Pin exact versions in composer.lock. Add the package behind a feature branch and run the full storefront test suite (checkout, admin, API) — a Sylius plugin touching admin resources and Doctrine can affect fixtures, serialization, and grid caching.
Sequencing. Land behind a kill switch: adopt the flag bundle without the Sylius plugin first (code-driven flags), then add admin-managed flags for a narrow, low-blast-radius surface (e.g., one non-critical UI toggle), then broaden. Do not put pricing, checkout, or payment gates behind this until the audit/override behavior is proven.
Maintenance. Bus factor of one, no downstream dependents, and an EOL-leaning support matrix. Budget for a fork if upstream stalls; MIT makes that legally trivial but operationally non-free (you own the CI and Sylius upgrade treadmill). The "last release 2026-05-26" date should be reconciled with the stated PHP/Symfony matrix before trusting release cadence.
Support. README-only documentation; no community forum, no known production users. Internal ownership must be named. Expect to read the source to answer provider-priority and resource-configuration questions — a few hours, not weeks, given Sylius familiarity.
Scaling. DB-backed flags resolved per check can add read pressure; if the provider queries on each flag evaluation, expect per-request overhead under load. Mitigate with request-level caching and a small flag count. Admin grid is standard Sylius and scales like the rest of the admin.
Failure modes to plan for.
@AsFeature with the same code is an easy footgun; enforce a naming convention or forbid code flags for DB-managed codes.Ramp-up. Low for a team already fluent in Sylius resources and Doctrine; moderate-plus for everyone else. Estimate one engineer-day to spike dependency resolution and one to two days to wire, migrate, and validate in staging — contingent entirely on the composer constraints resolving. Recommendation: conditional go for evaluation on a Sylius ≤1.11 shop; no-go for production-critical gating or Sylius 2.x until upstream compatibility and maintenance are confirmed.
How can I help you explore Laravel packages today?