timacdonald/has-parameters
Laravel package for attaching flexible key-value parameters to Eloquent models, stored as JSON. A clean API lets you get, set, check, and remove parameters without extra tables or migrations.
Architecture fit. A small, framework-native Laravel package that attaches arbitrary key/value parameters to route definitions and exposes them through Laravel's standard route parameter bag — no new service, storage engine, or runtime. As a TPM, the leverage is that it turns a recurring class of product asks — "make behavior differ per route/tenant/experiment without changing the URL" — into a definition-time concern rather than a schema or endpoint redesign. It is a contextual metadata primitive, not a feature-flag platform: no evaluation SDK, no admin UI, no caching, no targeting rules. That ceiling is fine as long as we frame it as plumbing that product logic reads from, not as the flag system itself.
Integration feasibility. High. For a Laravel team this is a composer require plus route-definition changes; a spike is an afternoon. There is no infrastructure work, no data migration risk if the route-scoped semantics hold, and no coupling to our config, cache, or experiment layers — though it overlaps with all three, so the boundary must be stated explicitly: parameters are route-scoped context, not application config.
Technical risk. Low-to-moderate, and mostly not about this release.
Key questions.
Stack fit. Native Laravel, composes cleanly with existing models, middleware, and route groups. It does not compete with our config or cache layers, but it can drift into them — so we should state the rule once: parameters are route-scoped, read-time context; anything that must be queried, audited, or toggled by non-engineers belongs elsewhere.
Migration path. Greenfield addition; no migration from an existing system. Sequence:
^1.5 and confirm the constraint resolves on our target Laravel branch.billing.flow, exp.checkout_v2), documented value types, and a short registry of known keys. This substitutes for the schema and governance the pattern does not provide.Compatibility. v1.5.3 is backward-compatible with v1.5.2 by construction (constraint widen only). Verify the composer.lock diff on upgrade — if other packages move, review that, not this one. Confirm our CI matrix actually covers the PHP/Laravel pair the release note references rather than trusting the "Laravel 13" framing.
Sequencing. Treat the v1.5.3 bump as an upgrade-window enabler, not a feature to schedule: slot it into the next routine dependency-refresh train, no dedicated workstream. Gate broader adoption of the pattern on the pilot and the key-registry convention landing first — otherwise each squad will invent its own keys.
Maintenance. Near-zero run cost: no daemon, no cron, no config surface. The real obligation is governance — without a key registry and a "new key requires registry entry" review rule, parameters become an undocumented shadow configuration that product and support cannot reason about or safely remove. Budget a lightweight review rule, not engineering time.
Support. Community-supported, single maintainer, no SLA. Acceptable for non-critical contextual plumbing; not acceptable if it becomes load-bearing for entitlements, pricing, or access control. If it does, plan to vendor the (small) source and own it.
Scaling. Two axes:
Failure modes.
| Mode | Impact | Mitigation |
|---|---|---|
| Key collisions / typos across squads | Silent wrong behavior, hard to trace | Namespaced key registry; documented types |
| Values invisible to logs/analytics | Slow incident diagnosis | Log resolved parameters at the read site, not the definition |
| Route-cache mismatch (prod cached, CI cleared) | Divergent behavior between envs | Include route-cache rebuild in the deploy checklist; verify parity |
| Drift into a de-facto flag system | Reinvents a flag platform badly | Explicit "context, not flags" rule; buy/keep the real flag system |
| Maintainer abandonment | No security patches | Monitor for >12 months dormancy; vendor/fork if load-bearing |
| Upgrade pinning at next Laravel major | Blocked framework upgrade | v1.5.3 already addresses this — keep the constraint wide |
Ramp-up. Hours for a mid-level Laravel engineer — the API is a handful of methods. The ramp-up cost for the organization is the convention: teams need the key registry and the "don't use this as your feature-flag system" rule stated up front, or each will independently rediscover the anti-pattern. Ship those two documents alongside the pilot.
How to measure leverage. Track (a) count of "make it configurable" asks closed without a schema or endpoint change, (b) lead time on those asks vs. baseline, and (c) number of distinct parameter keys vs. registry entries — the gap is your governance debt. Ship the pilot, baseline those three, and re-decide adoption breadth at the next dependency-refresh window.
Assessment status. New assessment, no prior baseline. The v1.5.3 release introduces no risk and does not change the recommendation. Proceed with a scoped spike and a one-page key registry.
How can I help you explore Laravel packages today?