achillesp/laravel-filterable
Laravel Filterable brings reusable, request-driven filtering to Eloquent models. Declare the filters a model supports, then let query string parameters shape results without cluttering controllers. A lightweight way to keep list endpoints tidy, consistent, and easy to extend as your app grows.
Evidence base. The 1.0 release note reads in full: “Fully working initial release.” There is no changelog, no upgrade guide, no README snapshot, no composer.json, and the supplied data set is empty. This assessment is therefore provisional and should be read as a due-diligence plan plus a set of decision gates, not a verdict on the codebase. No claim below should be treated as verified until the artifacts in Key questions are in hand.
Architecture fit. The only defensible signal from a 1.0 tag is intent: the maintainer considers the public API stable enough to commit to semantic versioning. For a TPM, that matters more than feature breadth, because it determines whether we can pin to ^1.0 and absorb patch releases without a code review per bump. What remains unknown is the package's shape — whether it is a thin service-provider wrapper (low coupling, easy to swap), a framework-extending package that reaches into the container or Eloquent internals (higher coupling, harder exit), or an opinionated scaffold that wants to own a domain layer. That shape, not the version number, drives the fit decision. Until the service provider, config surface, and published migrations are reviewed, treat architecture fit as unrated.
Integration feasibility. Unassessable without a dependency manifest. The blocking unknowns are the PHP and Laravel version constraints in composer.json, whether the package declares conflicts, and whether it ships migrations, config publishing, or facades that imply a wider blast radius than a typical library. Feasibility should be timeboxed to a spike: install into a throwaway branch of one non-critical application, run the suite, and record install friction, config/publish steps, and any service-provider boot ordering requirements.
Technical risk. Primary risk is informational, not technical: a one-line release note is itself a governance signal. Projects that document releases poorly tend to document breaking changes poorly, so our exposure is less “will it work” and more “will we find out in production.” Secondary risks: a 1.0 with no prior public 0.x history may mean the API was never battle-tested outside the author's own use; a single-maintainer bus factor; and no stated security disclosure process. All are mitigable via pinning, a private fork, and an internal review gate — but only if the license permits a fork.
Key questions.
php and illuminate/* constraints, and does it declare conflict/replace?Stack fit. Confirm alignment against our supported Laravel and PHP versions first; this is a hard gate, not a preference. Where the package's constraints sit below our floor, we either upgrade the package, patch a fork, or reject. Where they sit above, it becomes a driver for a framework upgrade and should be sequenced accordingly rather than smuggled into a feature branch.
Migration path. There is no incumbent to migrate from, so the path is greenfield adoption rather than replacement. The relevant question is reversibility: adopt behind a first-party interface (our own wrapper class or contract) so the package is an implementation detail, not a dependency smeared across the codebase. That preserves an exit ramp and lets us substitute a fork without touching call sites.
Compatibility. Verify three layers: framework version, dependency graph (run composer why-not and check for transitive conflicts), and runtime surface (queue workers, Octane, and any long-lived process if the package holds state in singletons — a common Laravel failure mode). Test under Octane specifically if we run it; container singletons that cache request state break there and nowhere else.
Sequencing.
composer.json, license, CI status, issue history. Resolve the seven questions above. Gate: proceed only if license, maintenance signal, and version constraints are acceptable.composer remove). No data migrations in the pilot.Maintenance. Ownership must be explicit: a named maintainer, a pinned constraint strategy (~1.0 or ^1.0 depending on observed release discipline), and a standing quarterly review of upstream activity. Add the package to the dependency-review queue with a note that the 1.0 release was undocumented. Budget roughly half a day per minor release for review until the project demonstrates a changelog habit — that estimate should be revised once two or three release cycles have been observed.
Support. Upstream support is unverified. Assume community-only (GitHub issues) with no SLA until a support statement is found. Internally, document a fork path and confirm the license allows it before adoption, not after — retrofitting fork rights during an incident is the failure mode to avoid.
Scaling. Two dimensions. Vertically, watch for stateful singletons under Octane and for packages that add per-request container resolution. Horizontally, check whether the package introduces synchronous external calls (HTTP, filesystem, cache) on hot paths; a package that is fine at low volume can become the bottleneck under load. Both require the code review that the release note does not give us. Load-test the pilot path before promotion if it sits on a high-traffic route.
Failure modes.
illuminate/* line becomes a security liability. Check this explicitly before adoption.Ramp-up. Engineer time: roughly one day for the spike, one day for the wrapper and tests, half a day for documentation and the runbook. The team needs no new skillset — this is standard Laravel package integration — but should be briefed on the wrapper convention so the package is not called directly from controllers. The real ramp-up cost is the evidence gathering: a package with a one-line release note transfers documentation burden to us, and that should be priced in as a recurring tax, not a one-off.
Recommendation. Conditional. Do not adopt on the strength of the 1.0 tag alone. Run the Week 1 evidence gate; if license, version constraints, and maintenance signal clear, proceed to the spike and pilot. If the version constraints block our security patching posture, reject regardless of functionality. Re-issue a full assessment once composer.json, the license, and the CI status are available — the current document is a plan, not a decision.
How can I help you explore Laravel packages today?