optimus/bruno
Bruno is a Laravel package by Optimus that provides a simple, fluent way to manage and organize your application's data, helping developers build cleaner, more maintainable Laravel projects with less boilerplate.
Consider it when: you have a cluster of near-identical Eloquent list endpoints; your filters are simple column comparisons and your includes are Eloquent relationships; you want one documented query grammar shared by SPA, mobile, and partners; and you're comfortable owning the code if the maintainer disappears (the package is small enough to vendor or fork).
Look elsewhere when:
spatie/laravel-query-builder has far more adoption, more operators, and healthier maintenance; it should be your default comparison.Adoption guardrails either way: pin the version, and wrap it behind your own ApiController so a swap is a one-file change.
For executives (30 seconds): "A free, MIT-licensed Laravel component that gives every list endpoint consistent sorting, filtering, eager loading, and pagination straight from the URL — no per-endpoint code. It removes roughly one to three engineer-weeks of boilerplate per API surface and lets us ship filterable APIs in days. There's no service to run and no license cost; the risk is that it's a small single-maintainer project, so we'll pin the version and isolate it behind our own base class."
For engineering: small surface area, Laravel-native (Eloquent + the standard paginator), no runtime dependency, and an easy exit. Worst case we vendor a few hundred lines. We isolate it behind an internal base controller so migrating to spatie/laravel-query-builder later touches one file, not every feature. Known limits to accept up front: simple filter operators, Eloquent-relationship includes only, and no built-in per-field authorization.
Recommendation: pilot on one internal API, measure the boilerplate actually avoided, then either standardize or swap — with the wrapper in place from day one so the decision stays reversible.
How can I help you explore Laravel packages today?