daguilarm/livewire-combobox
A lightweight Livewire component for searchable select and dropdown inputs. Add an autocomplete-style combobox to Laravel forms with server-side searching and dynamic options, without building custom JavaScript.
What it is. A Blade/Livewire component that renders a cascade of dependent <select> inputs. Changing a parent triggers a server round-trip that repopulates child options from Eloquent, with recursive rendering to support arbitrary nesting depth and configurable model/column mappings. It is a presentation-layer component only — it owns no schema, no migrations, no persistence.
Architecture fit. Fits a Laravel monolith already committed to Livewire for form/filter UI. Not applicable to Inertia/Vue/React front ends or API-only backends — every interaction is a Livewire round-trip. Best-fit use cases are admin/back-office filters, address pickers, and category/taxonomy trees where the depth is genuinely unbounded. Poor fit for anonymous, high-traffic public forms where a round-trip per select change is unacceptable.
Integration feasibility. Low-to-moderate. The codebase is small enough to audit fully, and MIT licensing permits forking and vendoring. The real obstacle is vintage: last release 2021-05-12 puts it squarely in the Livewire 2 era. Livewire 3 changed wire:model to deferred-by-default, renamed lifecycle hooks, replaced $emit with dispatch, and requires a single root element in views — all of which this package's Blade templates are likely to violate. Verify composer.json constraints before estimating; if it pins livewire/livewire:^2.0, adoption forces a framework-wide version freeze.
Technical risk. High relative to value:
Key questions.
Verdict. Do not adopt as a production dependency. Score 0.13 alongside an archived repo and a 2021 timestamp means this is a reference implementation, not a package. Its value is as a worked example of recursive dependent-select rendering.
Stack fit. Laravel + Livewire + Blade only. If the application is on Livewire 3 or later, plan on rewriting the component regardless of what composer require reports — the Blade markup and event wiring will not survive as-is.
Migration path — three options, in preference order:
app/Livewire/ and resources/views/livewire/ under the MIT license. Modernize for the target Livewire version: convert to wire:model.live, swap $emit for $this->dispatch(), collapse views to a single root element. Small enough to complete in days, and it eliminates the archived dependency entirely.updated() hook that clears descendants and reloads the next level. Use the package's recursion approach as the design reference.Compatibility checks before committing to any path.
composer.json constraints on livewire/livewire, illuminate/*, and PHP.$listeners, $emit, or Livewire::listen — all signals of Livewire 2 idioms.wire:model uses deferred or live binding; the cascade is non-functional if deferred.->get() on unbounded option queries — an N+1 and payload-size problem regardless of version.Sequencing.
Maintenance. Effectively zero upstream. Every bug, framework-compatibility break, and security issue is yours to fix. The fork needs a named owner and a line in the maintenance budget; an unowned fork is worse than the original dependency because it looks maintained. Archived status also means no security advisory channel — you must proactively assess the option-query code against your own authorization model.
Support. No vendor, no SLA, no release notes beyond a README. Expect to read source to answer edge-case questions. Community support is negligible at 26 stars, so plan on internal documentation of the config surface and the recursion contract.
Scaling. The dominant cost is round-trips: each select change is a full Livewire request, and a user traversing five levels generates five requests, each potentially issuing a query per level. Mitigations:
Cache::remember option lists keyed by (parent_id, level), invalidated on write to the underlying table.Failure modes.
Ramp-up. The API surface is small; a competent Laravel developer is productive in under a day. The hidden cost is the tribal knowledge around the fork — version pins, the recursion contract, and the caching invalidation rules. Budget half a day of documentation at fork time to avoid re-deriving it every time the component is touched.
How can I help you explore Laravel packages today?