stogon/unleash-bundle
Symfony bundle for integrating the Unleash feature flag service into your application. Define and manage feature toggles, run gradual rollouts, and target users with flexible activation strategies through a simple, configurable API.
Package profile. A Laravel service-provider wrapper around the Unleash PHP SDK. It binds an HttpClientInterface implementation and a FeatureRepository into the service container so application code can evaluate feature toggles via DI or a facade. The package is at v1.0.1 — a patch release with no new surface area, no deprecations, and no breaking changes.
Architecture fit. The package follows conventional Laravel package shape (service provider, publishable config, env-driven settings), so it slots into a standard Laravel application without imposing structural change. The architectural question is not how it integrates but where it executes: if isEnabled() calls perform synchronous HTTP against the Unleash API on the request path, the package inserts a network dependency into every request that reads a flag. That is the single most important design consideration and it is not resolved by this release.
Integration feasibility. High. Expected effort is hours, not weeks: composer require, publish config, set env vars (UNLEASH_URL, UNLEASH_API_TOKEN, environment/app name), inject the repository. No data migration, no schema change, no existing-code rewrite.
Technical risk. Moderate, concentrated in maturity rather than design:
FeatureRepository binding used an invalid named argument, and UnleashHttpClient received the wrong HttpClientInterface instance. Read together, these indicate that v1.0.0 could fail to resolve its own dependencies at boot, or resolve them to the wrong implementation. A package whose first tagged release cannot reliably construct its own object graph has not been exercised end-to-end in a realistic host app.Key questions.
Stack fit. Laravel 9/10/11 on PHP 8.1+ (named arguments require PHP 8.0+, and the fix confirms the codebase depends on that behavior). Composer-native, no sidecar or infrastructure change beyond reachable access to an Unleash instance and an API token.
Migration path. Greenfield: install ^1.0.1 and explicitly exclude 1.0.0 if any lockfile or internal template pins it. Brownfield: if 1.0.0 is already deployed, this is a drop-in patch with no config or API changes — but it should be treated as a required upgrade, since the prior version's defects are boot-time defects, not cosmetic.
Compatibility. Confirm three constraints before committing: the package's illuminate/support range against your Laravel version, the transitive Unleash SDK version, and whether the container binding pattern survives Laravel's container changes across majors. Since the binding is the part that broke, this is not a theoretical check — validate it in your actual app skeleton, not just in the package's own tests.
Sequencing.
FeatureRepository and UnleashHttpClient from the container and assert the correct concrete classes and configured base URI. This directly targets both v1.0.1 fixes and is the cheapest guard against recurrence.Maintenance. Low ongoing code cost, but non-zero ownership: pinning, changelog review, and re-running the container smoke test on every SDK or Laravel upgrade. The named-argument binding makes minor-version upgrades of the upstream SDK a potential breaking event, so upgrade policy should be "test then bump," not "auto-merge Dependabot."
Support. Community/open-source. No commercial backing implied. Escalation path is upstream issues, which is acceptable for a feature-flag client but should be reflected in the internal tiering — this is not a dependency to place on the critical path of a revenue system without a fallback.
Scaling. Two dimensions:
Failure modes to instrument and alert on.
| Failure | Symptom | Mitigation |
|---|---|---|
| Unleash unreachable | Latency spike, or flags silently return default (usually false) → features go dark |
Timeout budget, cached last-known-good, default-value discipline |
| Container resolution failure at boot | Hard failure on deploy (the v1.0.0 class of bug) | Boot smoke test in CI |
Wrong HttpClientInterface bound |
Auth/base-URI misconfiguration; 401s or calls to the wrong host that mimic server outages | Assert concrete class and config in the smoke test |
| SDK upgrade renames a constructor parameter | Fatal error on container build | Avoid/vendor-audit named-argument bindings; upgrade with test |
| Stale cache | Toggle changes not taking effect; misleading incident debugging | Documented TTL, kill-switch procedure |
| Default-on for a risky flag | Feature enabled for all users before intended | Convention: risky flags default false, gated review |
Ramp-up. A Laravel developer is productive in under a day — the API is small and the wiring is conventional. The real ramp is flag hygiene: naming conventions, lifecycle and removal dates, default-value policy, and knowing which flags are safe to leave in code. Budget for that as process work owned by a TPM or tech lead, not as package training. Given the v1.0.0 boot defects, also budget a short spike to characterize degraded-mode behavior before the first production flag — that is the one thing this release does not tell us.
How can I help you explore Laravel packages today?