Weave Code
Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Bruno Laravel Package

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.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

Architecture fit. Bruno is a base-controller package for Laravel: you extend (or fluently instantiate) BrunoController, declare a $resource model plus $filterable, $sortable, and $eagerLoad properties, and it translates query parameters into Eloquent query builder calls with pagination baked in. That is a legitimate REST-JSON pattern and it fits Laravel's controller/Eloquent idiom cleanly. The architectural cost is inheritance-based coupling — your API controllers become subclasses of a vendor class, which constrains any house base controller, cross-cutting middleware, and future portability. It is best suited to greenfield or self-contained API modules rather than a large monolith with an established controller hierarchy.

Integration feasibility. Composer-installable under optimus/bruno (originally esbenp/bruno), MIT licensed, and mechanically simple: no service provider complexity beyond standard registration, no schema changes, no queue or cache dependencies. The real integration work is (a) deciding whether controllers extend the vendor class or whether you wrap it in a local base class, and (b) reconciling its response envelope with your existing API contract (pagination shape, data/meta keys, transformer output). For an existing codebase, that reconciliation is the majority of the effort.

Technical risk. Moderate, driven more by ecosystem signals than by code quality. 163 stars and effectively zero tracked dependents is a thin footprint for a package whose job is to sit on the request path of every filtered endpoint, and the project's lineage (personal fork → optimus namespace, single-maintainer history) is a bus-factor concern. The last release (Jan 2025) indicates it is not abandoned, which is reassuring, but the community-standard answer to this problem today is spatie/laravel-query-builder, which has orders of magnitude more usage and maintenance depth. The opportunity score (25.2) reinforces that this is a niche fit rather than a widely-vetted default. There is also inherent risk in any query-parameter-driven filtering layer: it must whitelist columns, cap per_page, and guard include/eager-load lists, or it becomes a data-exposure and performance vector.

Key questions.

  • Which Laravel and PHP versions does the current composer.json actually constrain, and is Laravel 11/12 supported?
  • Does it integrate with Eloquent API Resources, or does it return raw models (i.e., will attributes leak without your own transformer layer)?
  • How does it handle invalid filters, sorts, and includes — silent ignore, 400, or 500?
  • Are there authorization hooks (policies/gates) per filterable field or relationship, or is authorization left entirely to the caller?
  • Who maintains the optimus fork, and what is the release cadence behind the Jan 2025 tag?
  • Does it carry a league/fractal or other transitive dependency that conflicts with our stack?

Integration Approach

Stack fit. Assumes a Laravel REST API backed by Eloquent models — a direct match if that is our shape. It does not fit non-Eloquent data sources, GraphQL, or endpoints requiring bespoke response composition. Before committing, pin the package against our exact framework/PHP matrix and confirm the pagination envelope matches our API contract; if it does not, budget for a response-mapping adapter rather than fighting the vendor class.

Migration path. Treat this as an additive, opt-in pattern, not a refactor of existing controllers. For brownfield, introduce it behind a thin local base class (e.g., App\Http\Controllers\Api\ApiController extends BrunoController) so the vendor dependency is isolated in one file and can be swapped for spatie/laravel-query-builder later without touching every endpoint. For greenfield, adopt it directly but keep the same local-subclass seam. Do not attempt a big-bang migration of existing endpoints — the value per endpoint is modest and the regression surface is the whole API contract.

Compatibility. Verify: framework constraint, PHP floor, pagination response shape, interaction with existing global scopes and soft deletes, and whether include/eager-load declarations collide with our own relationship-loading conventions. Any existing custom base controller is a hard blocker for the inheritance model and should push us toward the fluent/wrapper form instead. Test against one representative endpoint with nested includes and multiple filters before wider rollout.

Sequencing.

  1. Spike in a feature branch against a single, low-traffic endpoint (read-only list, simple filters).
  2. Validate response contract, error behavior on bad parameters, and authz coverage with automated tests.
  3. Wrap in a local base class and document the properties/conventions.
  4. Roll out module-by-module, one endpoint per PR, with contract tests.
  5. Re-evaluate against spatie/laravel-query-builder at the end of the first module — if it wins on contract fit or maintainability, the local seam makes the swap cheap.

Operational Impact

Maintenance. The package becomes part of the request path, so we own its operational risk whether or not we own the code. With a small community and few dependents, upstream fixes for framework upgrades and security issues may lag. Mitigation: isolate behind a local base class, pin the version, and budget engineering time to fork or vendor if upstream stalls. Assume we are the de facto maintainers of our usage.

Support. No commercial support; reliance on maintainer goodwill and GitHub issues. That is acceptable for a convenience layer but not for anything on a critical, high-traffic path without a fallback. Keep the swap-to-spatie path documented and tested at least once.

Scaling. Pagination itself is standard and safe (offset-based). The scaling risks are in the filter layer: filters on unindexed columns, deep pagination offset cost, unbounded include lists causing heavy eager loads, and clients requesting large per_page. Enforce a server-side cap on per_page, whitelist includes, add rate limiting, and monitor slow-query logs on filtered endpoints. Filter complexity is bounded by the whitelist, which is the package's main safety property — verify it is actually enforced.

Failure modes.

  • Invalid or malicious query parameters: silent ignore vs. 500 vs. 400 — behavior must be verified and normalized.
  • Attribute/relationship leakage if the package returns raw models rather than API Resources.
  • N+1 queries where eager loading is not declared for the relationships a client requests.
  • Authorization gaps: filtering/sorting on fields the caller should not see.
  • Contract drift: pagination envelope differences breaking clients.
  • Upstream abandonment: no fixes for a future Laravel major.

Ramp-up. Low. The property-based configuration is learnable in an afternoon, and the mental model (whitelist filters/sorts/includes, return paginated JSON) matches what most Laravel developers already expect. The onboarding cost is in conventions — naming of query parameters, pagination shape, and authz rules — which must be documented once and enforced via contract tests. Estimate roughly one sprint of one engineer to spike, wrap, document, and land the first two or three endpoints; marginal cost per endpoint thereafter is small.

Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
htinlynn/genius-helper
maco-studios/hephaestus
elmogy/larafast
xeviant/laravel-paystack
gorilladash/laravel-website-sdk
martialbe/flysystem-oss
chondal/3312client
jeroen-g/flickr
opscale-co/nova-genbi
itsjustvita/laravel-retention
tequilarapido/trackit
gregsphotography/site-builder-filament
cabaoctavio/laravel-query-log
gregsphotography/site-builder-components
io-digital/clickatell
snowsoft/laravel-admin
oxygen/auth
relicsoftware/barakah-payment-gateway
tobya/work-with-composer
equipc/laravel-email-validator