xuanpablo/filament-palette
Filament Palette adds a color palette picker field to your Filament forms. Choose from predefined swatches for simple, consistent color selection in admin panels, with no custom JavaScript needed. Lightweight, configurable, and easy to drop into any Laravel/Filament resource.
composer require xuanpablo/filament-palette:^2.3
php artisan vendor:publish for the palette config tag) and confirm it lands in config/. Every behaviour discussed below is driven from this file, so it's the first place to look.app/Providers/Filament/AdminPanelProvider.php), then clear cached config:
php artisan config:clear && php artisan filament:optimize-clear
Cmd/Ctrl + K), and jump to a resource or page by name. That single flow — keyboard-only navigation instead of sidebar clicking — is the 80% win; everything else is configuration on top of it.After upgrading to 2.3, the new capability to try is global-search records: flip include_global_search_results to true on a staging panel and confirm records appear under their category beneath commands.
Treat the palette as the panel's "jump to" layer. The realistic day-to-day pattern is: commands for destinations (resources, custom pages, dashboard), record search for entities. Keep the two visually distinct in your mental model — commands are static and cheap, records are a network round-trip.
Enabling record search (new in 2.3). Two preconditions, both silent if unmet:
include_global_search_results is true, andWhen both hold, typing triggers a debounced $wire round-trip that fetches matching records and renders them under their category. Tune with:
'include_global_search_results' => true,
'global_search_results_limit' => 10, // default
'global_search_debounce_ms' => 300, // default
Tune the debounce, don't fight it. 300ms is a sensible default for human typing. Raise it (e.g. 400–500) on panels backed by large or remote databases where each round-trip is expensive; lower it only if you've measured that the request is trivially cheap. The limit is a render cap, not necessarily a query cap — assume the provider may fetch more than it shows.
Roll out per panel, not per app. If you run multiple panels (admin + a lighter tenant/app panel), enable record search only where the global search provider is already well-curated. A panel whose global search returns noisy results will produce a noisy palette, and the palette is the most visible surface in the UI.
Sequence the rollout: staging panel → internal users → production. This is explicitly what the release note asks for; the record-fetch UI is new client behaviour, so verify it renders correctly with your panel's asset pipeline (theme build, Vite, cached assets) before it reaches real users.
Keep an eye on the palette's command registrations as your app grows — adding many custom commands can crowd out record results in the list; the limit above only governs records.
$wire fetch is new front-end code in 2.3. Verify: typing quickly doesn't fire a request per keystroke, results replace rather than append across successive queries, and an empty query clears the record section cleanly.include_global_search_results without php artisan config:clear (and your deploy's optimize step) will appear to do nothing.^2.3 is additive, so existing palettes behave identically until you opt in.How can I help you explore Laravel packages today?