guava/filament-icon-picker
Filament Icon Picker adds an icon picker form field and matching table column to Filament panels. Choose from any installed blade-icons kit, Heroicons included by default—ideal for custom navigation, model, and frontend icons. Token-secured endpoints, configurable caching.
Architecture fit
Guava\IconPicker\Forms\Components\IconPicker) and one table column (Guava\IconPicker\Tables\Columns\IconColumn). It introduces no models, migrations, or persistence of its own — the stored value is a single icon identifier string on your existing table. That keeps blast radius small and makes the package trivially removable.blade-icons as the icon registry, so the "domain" of selectable icons is whatever icon sets are installed in the app. Heroicons ship by default with Filament, so the field is useful with zero additional icon dependencies.Integration feasibility
composer require guava/filament-icon-picker) plus php artisan filament:assets. Package is on Packagist, MIT licensed, with a changelog and tagged releases.@source '../../../../vendor/guava/filament-icon-picker/resources/**/*'; line must be added to theme.css so Tailwind scans the package's views. This is a build-pipeline change, not a code change, and it's the step most likely to be missed and to fail silently in production./_icon-picker/index and /_icon-picker/svgs) secured by an encrypted per-field token. This is a meaningful architectural decision: icon delivery moved out of Livewire into normal HTTP requests. It's better for performance and caching, but it means the package now owns URL namespace and request surface inside your app.--tag=filament-icon-picker-config) exposes route prefix, middleware, and cache settings — the escape hatch for anything the defaults get wrong.Technical risk
_icon-picker prefix on a globally registered route group. Needs verification against existing route names, WAF/CDN rules, and any middleware that assumes authenticated-only paths.icon-picker.cache.* to filament-icon-picker.cache.*, CanBeCacheable removed, icon labels changed, getIcon() now returns null for missing files). Expect to pay an upgrade tax with each Filament major.Key questions
blade-icons kits sufficient? Default to the latter unless there's a product requirement._icon-picker routes carry — web, auth, panel middleware — and does our WAF allow the prefix?Stack fit
@source directive). Teams already running a custom Filament theme will absorb this in minutes; teams on the stock theme will need to stand one up first, which is the real cost.Migration path
Compatibility
composer.json and document the Filament-major mapping in the repo. Never let a composer update cross a Filament major and the plugin major simultaneously — that couples two unrelated risk surfaces.Sequencing
@source line, get one form field and one column rendering in a local panel. This surfaces the theme-pipeline risk immediately and cheaply.php artisan filament:assets runs in the deploy pipeline and that the Tailwind build includes the vendored package path. This is the most common production-only failure.Maintenance
Support
Scaling
/_icon-picker/*. These are per-session, per-picker requests; without browser/CDN caching tuned via config they become a steady background load on the app tier. Size the icon sets and set cache TTLs intentionally.Failure modes
getIcon() returns null and the column renders blank. Silent and user-visible. Use the column's placeholder support and monitor for nulls.filament:assets to the release process and assert it.@source line missing from theme.css → unstyled picker; the Tailwind build silently excludes package classes.APP_KEY rotation) → icons fail to load. This is a non-obvious coupling worth documenting in the runbook alongside key-rotation procedures.Ramp-up
How can I help you explore Laravel packages today?