stephenjude/filament-feature-flags
Filament Feature Flags is a Filament plugin for managing Laravel Pennant feature flags from your admin panel. Create and toggle flags, define scopes and conditions, and roll out features per user, team, or custom segment without code changes. Integrates with Filament resources and dashboards.
Architecture fit. The package is a Filament panel plugin that provides a UI layer over Laravel Pennant. That places it squarely in the TALL-stack admin tier: Pennant owns flag state and evaluation, Filament owns presentation and access control, and this package glues the two. It is a convenience surface, not infrastructure — the actual decisioning remains in first-party Laravel code. That is the right architecture, and it means the package is cheap to replace if it is abandoned. It also means it adds no value outside a Filament panel; teams using Nova, plain Blade admin screens, or a separate back-office app get nothing from it and should use Pennant directly.
Integration feasibility. Low-to-moderate. Expected steps: require Laravel Pennant, publish and run Pennant's features table migration, select the database store, require this package, publish its migrations (segment storage, if any) and config, register the plugin on the relevant Filament panel(s), and define the flag/segment model. A competent Laravel engineer with Filament familiarity should complete a first working slice in one to two days. The genuine unknowns are version constraints against Filament major versions and whether the package's segment model is additive to Pennant or a parallel reimplementation.
Technical risk. Three concerns, in order:
The release date shown (2026-06-24) is anomalous; verify actual publication history on Packagist and the commit log before trusting the maintenance signal.
Key questions to resolve before adoption.
resolveScopeUsing), or is it single-scope (user-only)?Stack fit. Adopt only if the application already runs, or plans to run, Filament as its admin panel and Laravel 10+ on the Pennant-supported path. If Filament is present, marginal cost is near zero. If Filament is not present, do not introduce Filament to get feature flags — use Pennant directly and a small custom screen.
Migration path. Two entry states. (a) No Pennant in use: install Pennant, adopt the database store, define flags in code, then add this package as the operator UI. (b) Pennant already in use with the database store: install additively, and confirm the package does not alter the features table contract. In both cases, backfill: export current config-file or hardcoded flag values into Pennant state before flipping any code paths to read from flags, and run a period where flag state is asserted against the old behavior.
Compatibility. Pin both Filament and Pennant to explicit major constraints in composer.json, and treat a Filament major bump as a scheduled migration item, not a surprise. Confirm PHP version and the package's own constraint floor. Add a CI job that installs the lowest and highest supported dependency sets.
Sequencing. (1) Spike in a branch: install, register plugin, define two flags, toggle from the UI, verify a flag check in application code and in a queued job. (2) Confirm authorization: restrict the plugin to a gate/permission and, if possible, to non-production or to a named release-manager role. (3) Decide the segment strategy and confirm the package matches it. (4) Wire flags into code behind a thin internal wrapper (e.g. App\Flags) so no application code calls the package or Pennant directly — this is the single highest-leverage decision, because it makes the UI replaceable and standardizes naming and default behavior. (5) Roll out one low-risk flag to production as a pilot. (6) Document a flag lifecycle: owner, intended removal date, cleanup.
Maintenance. Expect to own it. Budget a small recurring cost: reviewing the package on each Filament major release, and keeping a fork-ready posture (it is small and MIT, so forking is viable). Assign a named engineer as maintainer-of-record in the repo's dependency register, and pin the version rather than floating it.
Support. GitHub issues only — no SLA, no vendor. Escalation path is "read the source, patch, fork." That is acceptable for an admin convenience; it would not be for anything in the request critical path, which is why the wrapper in step 4 matters.
Scaling. The package's load is negligible — it runs on admin page loads, not on application traffic. The scaling risk lives in Pennant: with the database store, flag checks can issue queries unless results are cached per scope. Confirm the app's Pennant caching configuration, use eager loading for known check sets, and ensure the UI's toggle action invalidates the relevant cache. For high-fanout checks (per-request, per-job), measure before and after.
Failure modes.
App\Flags helper with an explicit, documented default (fail-closed for risky paths, fail-open for cosmetic ones).Ramp-up. Low. A Laravel developer with Filament experience is productive in under a day; a Laravel developer without Filament, roughly one to two days including panel conventions. The larger onboarding cost is not the tool but the discipline: teams need a written convention for flag naming, default values, ownership, and removal, or the flag inventory accumulates into permanent, undocumented branching. Product management should treat the flag registry as a governed artifact with a periodic review, not as a set of switches.
How can I help you explore Laravel packages today?