edulazaro/wirelist
Wirelist is a Laravel package for quickly building interactive Livewire-powered lists and data tables. It offers search, sorting, pagination, and customizable columns with minimal setup, helping you ship clean, responsive admin interfaces faster.
composer require edulazaro/wirelist, then publish whatever the README instructs — typically a config tag and a views tag (php artisan vendor:publish --tag=wirelist-config, --tag=wirelist-views). Confirm the exact tag names from the README; the package's published docs are thin and the release note for 1.1.0 is an empty compare link, so treat the README and the published config file as the authoritative API surface.@livewireStyles / @livewireScripts. Wirelist is Livewire-driven for search, sort, and pagination, so nothing works without the Livewire runtime. Note the description also mentions Alpine — the layout/grid toggles are likely client-side, so make sure Alpine is booting in the same layout.config/wirelist.php after publishing (default page size, column definitions, view paths, layout mode), and the component class itself. The config file is the fastest way to learn what is configurable versus what requires a subclass.<livewire:wire-list :query="$users" />
resources/views/vendor/... or your own namespace, and point the component at your copy. This is where you put per-row actions, status pills, and links.$this->authorize(...) or Gate::allows(...). The package renders a list; it does not know your authorization model. Centralize this in a base subclass so every list in the app inherits the check.wire:model (or wire:model.live on Livewire 3) so the list re-queries on update, and let the component's query-string support make filtered views bookmarkable. This is the single biggest day-to-day ergonomic win: shareable filtered list URLs.App\Livewire\BaseList). Every screen then uses your wrapper, and swapping or forking the package later is a one-file change rather than a grep across the codebase.Livewire::test(YourList::class)->set('search', 'foo')->assertSee(...) covers search, sort, and pagination behaviour cheaply. Do this once per list component — it protects you against upstream behaviour changes on upgrade.$refresh so the list re-queries. wire:poll works for near-real-time lists but watch the query load on busy screens.composer.json constraint for livewire/livewire before you write anything. If you are on Livewire 3 and the package targets 2 (or vice versa), stop — this is a hard incompatibility, not a workaround.vendor:publish --force cannot silently destroy them.DB::listen or Laravel Debugbar on a realistic dataset. This is the bug most likely to reach production.LIKE '%term%', which cannot use an index. Fine at a few thousand rows; painful at a hundred thousand. Know your table size before shipping and consider a full-text index or a scope that limits searchable columns.x-data.php artisan config:cache after changing config/wirelist.php in production; use config:clear locally when a config change appears to have no effect.DB::listen to count queries per interaction, and assertSee/assertSet in a Livewire test to pin behaviour. If the component renders but does not react, it is almost always missing Livewire scripts in the layout or an outdated published view.1.0.1...1.1.0 diff before upgrading, pin the exact version during evaluation, and configure Renovate/Dependabot to require manual approval for this package specifically. Auto-merge is not appropriate for a single-maintainer UI package with no release notes.How can I help you explore Laravel packages today?