mrpunyapal/filament-infinite-select
Filament Infinite Select adds a searchable, paginated select field for Laravel Filament forms and tables, letting users search large datasets asynchronously without loading every option. Improve performance and UX with infinite scrolling, customizable queries, and easy integration.
Select degrades: slow form hydration, truncated result sets, or a search box that only works if the user already knows the exact name. InfiniteSelect swaps that for a paged, scrollable lookup that issues roughly 15-row queries per interaction instead of rendering everything up front.perPage, preloadFirstPage, searchDebounce, scrollThreshold). MIT license means no procurement cycle. The fallback (forking a small package, or reverting to native searchable()) should be written into the decision, not discovered later.Select, rollback is a one-line change per field. That reversibility is the strongest argument for a time-boxed pilot rather than a blanket standard.searchable() is already sufficient, which is the cheaper answer for most fields.getSearchResultsUsing already handles, typically with better keyboard and screen-reader behaviour.php artisan filament:assets must run in every deploy that can change package versions, not just on first install. A 404 on that path yields a select that renders and silently never loads, so this is a deployment-pipeline decision to make before rollout.Adopt only when all of these hold:
getOptionLabelUsing / getOptionLabelsUsing on every field. Without them, edit forms render raw IDs, which is a visible data-quality bug, not an optional nicety.$search on every page and use the documented limit + 1 pattern rather than a separate count() query (the first documented example doubles round-trips per page).LIKE '%term%' turns a payload win into a query-cost regression.Look elsewhere when:
Select::make()->searchable() is simpler and better supported.getSearchResultsUsing already covers it./js path is served through a CDN or non-standard public root, which is a common silent failure for this class of package.For executives: This is a small, MIT-licensed UI component that fixes one concrete admin performance problem, unusable pickers on high-volume forms, without a platform rework. Cost is low: one dependency, one query closure per field, one asset step in deploys. The risk is dependency maturity, not technical difficulty: roughly 10 stars, zero dependents, one maintainer. Recommendation: a time-boxed pilot on a single high-volume field, measured on form load time and task completion, before any wider standardisation. Keep the fallback (native searchable select) one line away.
For engineering: Swap the field to InfiniteSelect, provide a paginated closure returning options and hasMore, and apply $search on every page using the limit + 1 pattern rather than a separate count(). Add label resolvers for single and multi-select; this is a release blocker, not follow-up work. Tune perPage, searchDebounce, and scrollThreshold. Add php artisan filament:assets to every deploy step and smoke-check that the asset path resolves in the deployed environment. Extract the closure into a reusable, unit-tested data-provider class per entity so scoping, indexing, and hasMore correctness are enforced in one place instead of copy-pasted. Pin the version, note the Filament v4 constraint, and wrap usage in a thin internal adapter so reverting is a single-file change.
Verdict: Pilot, not org-wide standard. Adopt where browse-heavy, high-cardinality fields are a genuine UX failure; skip where native searchable selects already work. Watch two signals during the pilot, closure latency and invocation volume per form, which together catch the most likely failure modes: runaway hasMore, unindexed search, and request amplification.
How can I help you explore Laravel packages today?