andrewdwallo/filament-selectify
Filament Selectify is a Laravel/Filament package that upgrades standard select fields into a more flexible, searchable dropdown experience, helping you build cleaner forms and admin panels with less custom code. It integrates smoothly with Filament resources and forms.
Architecture fit. andrewdwallo/filament-selectify remains a presentation-layer plugin for Filament forms. It does not touch persistence, authorization, or domain logic — it swaps the default Select rendering for segmented toggle/radio-style controls that bind to the same underlying state path. Architecturally "shallow," which is what you want from a UI convenience package: no migrations, no model concerns, no service container churn. The v3.0.0 release does not change this — it changes which Filament major the package tracks. The release splits the package into two explicit compatibility lines: v2.x for Filament v3, v3.0.0 for Filament v4. That is now the dominant factor in fit. If our admin surface is Filament v3-era, the relevant artifact is still v2.0.9 and v3.0.0 is a non-event for us. If we are on or moving to Filament v4, the package just cleared its single biggest adoption blocker.
Integration feasibility. Unchanged mechanically: composer require, field-level usage, optional panel-provider registration, asset/view publishing if we run a custom Tailwind theme. Fields extend Filament's own field classes, so validation, ->required(), ->reactive(), ->live(), ->afterStateUpdated(), and relationship semantics are inherited. Effort is hours, not sprints. The real cost remains standardization, not installation. What changes is the constraint on the install step: the version we pin is now determined by our Filament major, not by "latest."
Technical risk.
Select) is a one-line change and nobody is blocked by this package.Key questions.
Stack fit. Requires PHP + Laravel + Filament. Zero database footprint, zero queue/worker implications, no external services. The only new consideration: the package version must match our Filament major, so the "stack fit" question is now a two-dimensional matrix (package line × Filament version) rather than a single yes/no. We should confirm the matrix against our composer.lock, not the README.
Migration path. Still nothing to migrate at the data layer; adoption remains incremental and reversible at the field level. The install step is now version-gated:
composer.lock.v2.x for Filament v3, v3.0.0 for Filament v4. Do not use a floating constraint here; a floating constraint will happily pull v3.0.0 onto a v3 Filament install and break the panel.resources/views to Tailwind content paths and publish assets, then rebuild. Re-verify the glob paths on the v4 line specifically.Compatibility. Now two explicit axes plus one:
Sequencing.
Select. Treat a failure here as a "wait for v3.0.x" signal, not a "fork now" signal.App\Filament\Fields\* classes so call sites import our namespace, not the vendor's. This was already the highest-leverage decision; with a version-line split it becomes the thing that lets us swap lines without touching call sites.Build vs. buy. Still buy. Nothing in v3.0.0 changes the economics — if anything, a maintainer shipping a v4 port is evidence the "buy with a wrapper" posture is working. The decision remains "buy with a wrapper," now with an explicit version-line pin.
Maintenance. Low steady-state, spiky at Filament upgrades — and the spike pattern has now been realized once, which is useful calibration. During any Filament v3→v4 transition window we may carry two package lines across different panels/branches; that is a coordination cost, not an engineering cost, but it belongs in the migration plan. Budget roughly a half-day of engineering attention per Filament major upgrade plus a visual QA pass. Pin the version explicitly in composer.json and let Dependabot surface changes for review rather than auto-merging — automated merging is now materially more dangerous because a Dependabot bump from v2.x to v3.0.0 would be a breaking change hidden behind a semver-looking jump.
Support. Still no commercial support, no SLA. Internal support routes through whoever owns the Filament layer. Blast radius remains a single form field — a Select fallback restores service. Document that fallback explicitly in the runbook, and add a one-line triage note: "check the pinned package version against the Filament major before debugging." That single check will resolve most future incidents faster than any code reading.
Scaling. Effectively free. Rendering is client-side HTML/CSS over Livewire-managed state; no per-request server cost beyond standard form render. The two real limits are unchanged and are design constraints, not infrastructure ones: (a) option count — segmented controls do not wrap gracefully and become unusable past ~6–8 options, especially on narrow viewports; (b) form density — many toggle groups on one screen increase visual noise and cognitive load. Codify a "when not to use" rule in our component docs.
Failure modes.
| Failure | Symptom | Detection | Blast radius |
|---|---|---|---|
| Version-line mismatch (v3.0.0 pulled onto Filament v3, or v2.x retained on v4) | Field renders unstyled, errors on render, or falls back to raw select markup | composer.lock review, visual QA on deploy |
One field type, potentially a whole panel |
| Fresh v4 port regression in nested contexts | Selection does not persist or resets on re-render in repeaters/modals/wizards | Functional test on nested contexts | Affected form |
| Filament upgrade breaks view override (future majors) | Field renders unstyled or falls back | Visual QA, screenshot diff | One field type |
| Assets not published / Tailwind not rebuilt | Buttons render but CSS missing | Visual QA on deploy | Affected panel |
| Accessibility regression introduced by the v4 view rework | Keyboard users cannot change value; screen reader announces wrong role | Manual a11y audit / axe scan per version line | Affected form, compliance exposure |
| Maintainer abandons package | No fix for the next Filament major | Composer update friction | Contained by wrapper + fork option |
Ramp-up. Near zero for developers fluent in Filament's field API — components are used like any other field. The learning cost is judgment, not syntax: knowing when a segmented control helps (small, mutually exclusive, high-frequency choices like status or visibility) versus when it hurts (long i18n labels, many options, dense forms). Spend onboarding on a short internal pattern doc with do/don't screenshots rather than API documentation. Add one operational line to that doc: which package line we run and why.
Bottom line for the TPM. v3.0.0 is a meaningful release for the project's health — it retires the specific "will this survive the next Filament major?" objection and brings a second contributor — but it is not a drop-in upgrade. It is a compatibility fork: v2.x for Filament v3, v3.0.0 for Filament v4. The correct action is to pin deliberately against our Filament major rather than to bump. If we are on v3, do nothing and log the end-of-line. If we are on or moving to v4, this unblocks adoption — gate it on a spike against v3.0.0 that re-verifies accessibility and nested-field behavior, since those were reworked. The original evaluation score (0.935) still overstates maturity for a low-star, single-maintainer package, and the v4 line in particular has near-zero production exposure; treat it as a good bet with an explicit exit plan and a wrapper, not a platform commitment.
How can I help you explore Laravel packages today?