icetalker/filament-picker
Filament Picker adds a powerful picker form field to Filament, letting users search, browse, and select records from a table or modal instead of a plain dropdown. Great for large datasets and relation fields, with a smooth, native Filament look and feel.
Architecture fit. icetalker/filament-picker is a Filament Form field — a Livewire-backed UI component registered into a form schema via Picker::make('field'). It sits purely in the presentation layer: no migrations, no service providers that touch persistence, no domain logic, no external services. For a TALL-stack Laravel application already running Filament panels, this is a leaf-node dependency with a tightly bounded blast radius. If it fails, one form field fails to render; it cannot corrupt data, affect auth, or alter queue behavior.
Integration feasibility. Low effort. The work is composer require, a source read (the package is small enough to audit in under an hour), and swapping one field in a schema. Realistic estimate: half a day for a spike and validation, one to two days to pilot and document, assuming the Filament version constraint matches.
Technical risk. The risk profile is dominated by maintenance, not correctness:
| Risk | Severity | Likelihood | Notes |
|---|---|---|---|
| Filament major-version break | Medium | Medium | Filament's form/field API churns across majors; small packages lag |
| Maintainer abandonment | Medium | Medium-High | 10 stars, effectively single-maintainer, narrow scope |
| Composer constraint conflict blocking a Filament upgrade | High | Medium | The real cost — a pin conflict can stall an entire panel upgrade, not just this field |
| Redundancy (core adds native equivalent) | Low | Medium | Benign: exit is a one-line swap back to Select |
| Supply chain / security | Low | Low | No network calls, no data handling, MIT, auditable surface |
Key questions for the maintainer / spike:
composer.json constraints, and how wide are they?Select/Radio/CheckboxList does not — cards, avatars, searchable relationships, multi-step?Verdict: acceptable as a convenience dependency, not as a foundational one. Adopt only behind an internal wrapper so the exit cost stays near zero.
Stack fit. Assumes Laravel 10/11/12 + Filament v3/v4 + Livewire 3, the standard TALL configuration. No Node build step, no additional runtime, no new infrastructure. It inherits Filament's existing auth, tenancy, and panel-scoping behavior — no new security surface to model.
Migration path.
Select/Radio on one form only, side-by-side with the native control, behind a feature flag or per-panel toggle. Compare on real data volume before committing to broader use.App\Filament\Fields\EntityPicker extends Picker) or a Blade partial. If the package is abandoned or breaks, you re-point one class to native Select rather than editing every form schema.Compatibility.
composer.lock; add Dependabot/Renovate so constraint drift surfaces early rather than at upgrade time.composer why-not filament/filament <next-major> before any panel upgrade, so this package's constraint doesn't become a surprise blocker.Sequencing.
Maintenance. Near-zero steady-state maintenance; the only recurring cost is periodic compatibility validation. Budget roughly 2–4 hours per Filament major upgrade to confirm the field still renders and behaves. Because the wrapper abstraction exists, a failure is a contained fix, not a refactor.
Support. No SLA, no vendor, one maintainer. Internal ownership must be explicitly assigned to a named engineer, with the assumption that "support" means your team reads and patches ~a few hundred lines of PHP. Do not rely on upstream responsiveness for anything on a deadline.
Scaling. Runtime scaling is a non-issue — it's a Livewire widget whose load characteristics match the surrounding Filament panel. The one thing to watch is option loading: if the picker resolves relationship options, verify it eager-loads and doesn't introduce N+1 queries under realistic record counts. Load-test with production-scale option cardinality, not fixtures.
Failure modes.
why-not CI gate is the mitigation.reactive()). Catch in the pilot with a schema test covering validation and dependent-field behavior.Ramp-up. Effectively zero for anyone already fluent in Filament form schemas — a single make() call, learned in minutes. Documentation is thin, so the onboarding artifact should be your internal wrapper's docblock plus one example schema, not the upstream README. Realistic team ramp-up: under one hour, and that hour is better spent on the wrapper convention than on the package itself.
How can I help you explore Laravel packages today?