wallacemartinss/filament-icon-picker
A beautiful, modern icon picker for Filament v5 powered by blade-icons. Features a modal grid with real-time search, icon set filtering, infinite scroll, and previews. Works in forms, table columns, and infolists, with support for Heroicons, FontAwesome, Phosphor, Material, and more.
Architecture fit
IconPickerField), a Table column (IconPickerColumn), and an Infolist entry (IconPickerEntry) — rather than a generic picker you must wire yourself. That is the correct architectural surface for this problem.blade-ui-kit/blade-icons, the de facto abstraction for SVG icon sets in Laravel. This is the single most important design decision: it means the package stores an icon name string in your database, not an asset, and icon rendering stays a Blade concern you can swap out later.Icon helper). The Icon helper is the strategically important piece — it gives autocomplete-free, generation-free icon referencing, which is the low-risk integration path.Integration feasibility
@source directive pointing at the package's vendor views), and deploy automation (icon cache + enum generation). A team that skips the Tailwind step gets a functionally working picker with a visually broken modal — the highest-probability first-week failure.@source syntax implies a Tailwind CSS v4 build, consistent with Filament v5 theming. Teams still on a Tailwind v3 pipeline need to confirm their theme build before scoping.filament-icon-picker:install-icons command is interactive by design. Non-interactive CI/CD must use --all or explicit composer require lines in composer.json. Interactive prompts in a deploy script is a known footgun; pin icon packages declaratively and never let a pipeline run the interactive form.--all pulls roughly 29k SVG files into vendor/. This is a real image-size, CI-cache, and cold-build cost that must be a deliberate decision, not a default.Technical risk
PHP 8.2+, Laravel 12+, Filament 5.0+. Any Filament patch release that touches the form-component contract can break this with no upstream pressure to fix quickly. Budget for you being the fixer.Wallacemartinss\FilamentIconPicker\Enums\Heroicons. If these are written into the package's own src/Enums, they are destroyed by composer install/update and absent on any environment where the generator never ran — class-not-found at runtime, in production, on a fresh container. This is the single most consequential ambiguity in the package and must be resolved before adoption. Mitigation: standardize on the Icon static helper and do not adopt generated enums at all.@source silently strips the picker's styles at build time. It fails visually, not with an exception, so it can reach production.Key questions
vendor/ or into the host app's namespace? Is there a configurable target path, and are they expected to be committed to VCS?icons:cache artifact committed, or generated at deploy? What invalidates it when icon packages update?Stack fit
@source addition is a two-line change in resources/css/filament/*/theme.css and fits the existing build cleanly.TextInput + a select without a data migration.Migration path
App\Support\Forms\IconField::make()) that returns the package component with your house defaults (allowedSets, modalSize, searchable). Every resource then references your wrapper, not the vendor class. This converts a package swap into a one-file change and is the cheapest insurance available against bus factor 1.heroicon-o-* names are stable and readable by other tooling.Compatibility
composer.json. Do not rely on install-icons --all in CI — it makes your dependency graph a function of a vendor's interactive prompt.composer.lock and treat icon-set upgrades as deliberate changes with a visual diff, not incidental patch bumps. An icon rename upstream turns into silently blank cells in production.Sequencing
@source step; it is where the integration fails if it fails.Icon helper. Only revisit if the enums are provably written into app-owned, VCS-tracked code.allowedSets narrowed to the icon sets design has approved. Do not ship "all installed sets" to end users — a 10k-icon Material set alongside 1.3k Heroicons is a UX and payload decision, not a free one.php artisan icons:cache and php artisan optimize:clear in the deploy runbook, and add a smoke test asserting a known icon renders in the admin panel.Maintenance
Support
Scaling
--all is ~29k SVGs, which affects container image size, CI cache size, and cold deploy time. Curate to one or two sets.php artisan icons:cache is the mitigation for per-request SVG resolution and should be treated as mandatory in production, not optional as the README presents it. It creates a deploy artifact that must be regenerated whenever icon packages change — a cache-invalidation concern that will bite exactly once, in production.spin/pulse animation on every row of a large table column is a per-row CSS animation — fine for tens of rows, unwise for thousands. Reserve animations for status indicators, not list-wide decorations.Failure modes
@source → modal renders unstyled. Silent at build time, discovered by users. Highest likelihood, low severity.Class "Wallacemartinss\FilamentIconPicker\Enums\Heroicons" not found in any environment where the generator did not run (fresh CI, new container, post-composer update). Silent until runtime, hits production. Highest severity — this is why the recommendation is to not adopt enums.icons:cache → newly installed icons do not appear in the picker; looks like a bug in the package.install-icons run interactively in a pipeline → hung deploy waiting on stdin.allowedSets → users sift through tens of thousands of icons; perceived as unusable.Ramp-up
@source step and the theme rebuild are the non-obvious parts. Write a three-step internal onboarding note covering install, @source, and the Icon helper — that note is what prevents every future developer from rediscovering the same failure.allowedSets and choosing house defaults (modal size, searchable, placeholder) is a product decision that determines whether this feels like a polished admin panel or a raw component. Assign that before rollout, not after.Verdict. A well-designed, well-documented, narrowly-scoped component that is a good fit if and only if the application is already on Filament v5. Adopt it behind an app-local wrapper, with a curated single icon set, the Icon helper instead of generated enums, and icons:cache in the deploy runbook. The dominant risks are ecosystem immaturity and bus factor 1 — both manageable with the wrapper boundary and by not depending on generated artifacts.
How can I help you explore Laravel packages today?