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

Searchable Select Laravel Package

williamug/searchable-select

A feature-rich searchable dropdown component for Laravel Livewire 3 & 4, built with Alpine.js and Tailwind CSS. Supports real-time search, multi-select with tags, grouped options, dark mode, full keyboard accessibility, and cascading dependent dropdowns.

View on GitHub
Deep Wiki
Context7

Product Decisions This Supports

  • Form UX investment vs. build-it-yourself: The recurring "long dropdown problem" (country pickers, skill taxonomies, customer lists, cascading location fields) is a known source of drop-off in onboarding and checkout flows. This package lets you close that gap in a sprint instead of a quarter, making it a build vs. buy vs. defer decision you can actually price: a Composer require and a Tailwind @source line versus roughly 2–4 engineering weeks for a custom, accessible, multi-select component with keyboard support and dark mode.
  • Feature and roadmap scoping: Its feature surface — single/multi-select with tag badges, grouped options, cascading dependent dropdowns, custom value/label keys, disabled/clearable flags — maps directly onto common roadmap items (multi-tag filtering, role/skill assignment, region-gated availability). Use it to convert abstract backlog tickets like "improve filter UX" into a concrete, low-effort scope you can commit to a release.
  • Consistency and design-system decisions: Because it ships Tailwind classes with dark mode and ARIA baked in, it becomes a lever for standardizing select behavior across the app rather than letting three teams hand-roll three different dropdowns. That is a design-system governance decision, not just a component decision.
  • Reuse across Livewire 3 and 4: Declared compatibility with both Livewire majors means it supports a phased framework upgrade rather than forcing a big-bang migration — useful input to a platform-upgrade roadmap decision.
  • Data-shape decisions for engineering: The optionValue / optionLabel props and support for Eloquent collections, arrays, and grouped structures give you a cheap way to avoid N+1-driven custom endpoints; you can ship a working select against an existing model query without backend API design work.

When to Consider This Package

Adopt it when most of the following hold:

  • Your stack is already Laravel 11–13 + Livewire 3/4 + Tailwind 3/4 + Alpine — this is a zero-new-dependency component, so it adds no operational surface. If you are on Vue/React/Inertia or Blade without Livewire, it is not for you.
  • You need a form-input searchable select where the options fit comfortably in a page payload (hundreds to low thousands of records loaded on mount). Filtering is client-side, which is a deliberate product tradeoff: instant "as you type" feedback with no network latency, at the cost of bounded list size.
  • Accessibility and mobile are non-negotiable requirements. Full keyboard navigation plus ARIA attributes is a compliance input, and hand-rolled dropdowns are a classic audit failure.
  • You want cascading dependent dropdowns (country → region → city) without building state-machine plumbing; the updatedPropertyName() pattern in the docs is a complete implementation recipe.
  • You are prototyping or shipping an internal tool / MVP where a 2-star, 0-dependent package is an acceptable risk in exchange for speed.

Look elsewhere — or budget to vendor/fork — when:

  • Scale exceeds client-side filtering: tens of thousands of options, or a need for server-side search, pagination, or async remote loading. That is an architectural requirement this component does not satisfy.
  • Supply-chain and longevity risk is unacceptable: 2 GitHub stars, 0 dependents, and a single maintainer is a concentration risk. If this element sits on a revenue-critical or long-lived surface, treat it as code you are adopting, not a dependency you are consuming — publish the views (vendor:publish) and be prepared to own the fork.
  • You need heavy customization: rich option rendering (avatars, multi-line, async-loaded images), virtualized lists, or a create-new-option affordance. You will spend more fighting the Blade view than writing your own.
  • Your build pipeline can't easily add a Tailwind @source/content entry — the component renders unstyled or invisible without it, which is a support-ticket generator if your teams own CSS separately.
  • You require enterprise support, SLAs, or a security review trail. There is none here.

How to Pitch It (Stakeholders)

To executives: This is a small, free, MIT-licensed UI component that fixes a well-understood conversion and usability problem — the unsearchable dropdown — across our Livewire forms. It replaces weeks of custom front-end work with an afternoon of integration, adds no new third-party runtime dependency (it uses Alpine and Tailwind, which we already ship), and comes with accessibility and dark mode handled, which reduces our compliance and design-consistency exposure. The tradeoff to acknowledge plainly: it is a young, low-adoption open-source project maintained by one person, so we should adopt it as vendored code with a named internal owner for anything business-critical, and cap its use to standard-form selects rather than building deep product functionality on top of it.

To engineering: Integration is composer require, plus one Tailwind @source (v4) or content (v3) line and an asset rebuild — that Tailwind step is the single most common failure mode, so it belongs in the PR checklist, not the wiki. The API is a thin Blade component (<x-searchable-select wire:model="..." :options="$model" />) with props for multiple, grouped, optionValue/optionLabel, disabled, and clearable; it uses $wire.entangle() for two-way binding, so no manual :selected-value wiring. Cascading selects are handled conventionally via updatedX() hooks and resetting child state on parent change. Known boundary: filtering is client-side, so do not point it at unbounded queries — paginate or pre-filter in the Livewire component. Recommended posture: pin the version, publish the views into the repo so we control the markup, add one smoke test around the select in our own suite, and treat the component as internal code we happen to have sourced from open source.

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.
roundly-consulting/kubernetes-api-for-laravel
roundly-consulting/plausible-for-laravel
gvp/gvp-laravel-template
metasyncsite/laravel-metasync-client
roundly-consulting/onboarding-for-laravel
andydefer/laravel-notification
adachsoft/cli-process-tester
jhaskell13/laraflow
sebastienheyd/boilerplate-media-manager
ccast/tagixo-primix
pretendtrue/laravel-builder
sawmainek/laravel-scout-tntsearch-driver
tomshaw/laravel-calendar-table
dibakar/laravel-ownership
steadrun/laravel-monitor
labyrinthe/connect-laravel
elmogy/layan
drewdan/sentinel-client
dskripchenko/laravel-llm
fatryst/nuonuo