asignua/filament-themes
asignua/filament-themes adds theme management to Filament admin panels, letting you register, organize, and switch between custom themes. It provides a straightforward way to integrate theme selection into your Filament resources and pages.
#rrggbb picker give us a user-facing appearance setting in a sprint rather than a quarter.#rrggbb input can produce non-compliant combinations, so decide whether to restrict or warn on custom colours for regulated tenants.theme_settings table vs user model columns: choose the table when themes are shared and the user table is already wide; choose columns when you want no extra join on every request.canChangeTheme maps directly to entitlement — e.g. custom themes for paid tiers, Default-only for free users. Treat it as packaging, not a boolean.hasnayeen/themes contract, so a brand theme becomes a class plus swatches that the design team can own.Consider it when:
Look elsewhere when:
#rrggbb path yourself.Adoption checklist: pin the version, review the theme_settings migration, confirm the canChangeTheme hook point, verify the 10 locales include ours, and run the package's contrast tests in our CI alongside our own tokens.
Executives: A small, finished feature we would otherwise build. Customers get six professionally designed themes, per user or per panel, with accessibility contrast enforced by automated tests — one less compliance risk and one less custom build. It also gives us a clean paywall hook (canChangeTheme) to reserve custom branding for higher tiers. The cost is a package dependency, not a project.
Engineering: v1.0.0 ships the Themes page (preview cards, light/dark, primary colour swatches, free hex), six built-in themes with WCAG AA tests, per-user and panel-wide scope, per-panel theme lists, a permission gate, a PHP-class theme contract, two storage strategies, and 10 locales. It replaces the homegrown switcher we'd otherwise maintain. Known risks: first release, single maintainer, and free-form hex can break contrast — so we pin the version and constrain the picker.
How can I help you explore Laravel packages today?