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

Nova Multiselect Filter Laravel Package

optimistdigital/nova-multiselect-filter

A Laravel Nova package that adds a multiselect filter to resource indexes, letting users filter records by multiple options in a single filter. Configurable options and simple integration for Nova admin panels.

View on GitHub
Deep Wiki
Context7

Product Decisions This Supports

  • A build-vs-buy call on a genuinely tiny surface. The scope is one UI control: turn a single-select Nova filter into a multi-select that applies selections as a whereIn. The realistic alternative is a day of internal engineering plus permanent ownership of a local filter class. This is a decision a PM can approve at the team level without convening a platform review.
  • Testing whether filter friction is real before funding the big thing. If support, ops, or finance staff currently double-run filters, export to CSV, or eyeball paginated tables to answer "show me Draft or Archived," this is a cheap instrument for measuring that. Frame it as an experiment with a before/after (time-to-find-record, filter interactions per session), not a feature launch.
  • Sequencing the advanced-filtering roadmap. Adopting this lets you defer the expensive "saved views / query builder / advanced search" initiative while still shipping a visible productivity win. Six weeks of usage data becomes the evidence for whether the larger investment is justified — or the reason to kill it before it eats a quarter.
  • Scoping specific operational queues where multi-value is the actual need. Triage by status/priority, moderation backlogs by category, refund and order queues by payment state, account segmentation by region or tier. These are the screens where a PM should hunt for the pattern; a one-off request on a single admin page probably doesn't merit a dependency.
  • Standardizing on a Nova vendor. If the team already carries outl1ne packages, the marginal cost is near zero. If this is the first, the PM is opening a new maintenance relationship and should say so out loud rather than let it surface in an audit six months later.
  • Budgeting dependency and upgrade-cadence cost as a product cost. Adoption means one Composer line and a permanent checkpoint on every Nova-major upgrade. Small, but real — and it needs a named owner, not a drive-by composer require.

When to Consider This Package

Consider it when:

  • You're already on Laravel Nova and the gap is specifically multi-value selection on an existing filterable field — status, enum, belongs-to, many-to-many, tag, tenant, payment method.
  • The audience is internal staff, where speed of delivery outranks bespoke polish.
  • Multi-select filtering is a recurring pattern across several resources, not one request on one screen. That's when a dependency earns its keep.
  • The requirement is bounded: a handful of static options, or a modest relationship list that renders cleanly into a dropdown. Options are not searchable server-side — this is a client-side filter over what's already loaded, with no async paginated loader.
  • Blast radius is genuinely low. The filter is additive, lives entirely in the admin presentation layer, and comes out by deleting one line from filters().
  • You can time-box a spike to verify the component actually mounts and the query semantics are correct against your Nova and PHP versions.
  • Someone can own it: read a ~40-line contract, pin an explicit version, and fork if upstream stalls (MIT makes that legal and cheap).

Look elsewhere when:

  • You're not on Nova, or you're on a Nova major the package doesn't explicitly support. Nova's asset pipeline has silently broken third-party filter components across majors before. A green composer require proves nothing about rendering; the failure mode is a filter that appears but never fires.
  • Nova's built-in SelectFilter already covers it in your version. Confirm that first — it's the cheapest possible outcome, and a PM should insist on the check.
  • The need is one or two filters. A local filter class is a few dozen lines; at that volume the dependency is more overhead than it saves.
  • The option set can't fit in a dropdown (thousands of rows, or a 50k-row table where someone clicks "select all" and generates a pathological query). Wrong tool.
  • Adoption would be zero-signal vanity. 46 stars and zero dependents means you are effectively the QA department. That's acceptable for a low-stakes admin filter; it is not acceptable for anything user-facing or load-bearing for reporting.

How to Pitch It (Stakeholders)

To executives — one paragraph: This is a small, MIT-licensed add-on for our existing admin panel that lets staff select several values in a single filter instead of one at a time. It costs hours, not weeks, touches no customer-facing code, and is removed by deleting one line. If our internal teams are working around single-select filters today, this buys back real staff time for almost nothing; if they aren't, we'll know that in a week and drop it. Either way it produces the evidence we need before committing to a larger filtering initiative.

To engineering — the honest version: It's a thin subclass of Nova's Filter with four methods (options(), apply(), column(), key()), a precompiled Vue component, no service provider, no config, no asset build. The trade-offs are equally short: 46 stars, no dependents, and a namespace that moved from optimistdigital/... to outl1ne/... — most tutorials still show the old one, so verify against Packagist, not a blog post. Pin an explicit version, commit the lockfile, and add "re-verify the component mounts" to the Nova upgrade checklist. Two hard rules in the filter code: guard the empty selection so whereIn([]) never reaches the query (an empty table reads to admins as lost data), and keep business logic out of apply() — it produces a constraint, nothing more. Test apply() directly with [], null, and a populated array; you don't need a browser for that. Write the removal path down while installing it: composer remove, delete the class, delete one line from filters(). If any of those three is hard, something has leaked out of the admin layer, and we should fix that before it calcifies.

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.
se7enxweb/flysystem
lampwick/laravel
jeslage/statamic-emojis
micahdshackelford/rmap-laravel
draftsmaninc/draftsman
square-bit/laravel-volition
himito/laravel-mailman
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