Building Laravel + FilamentPHP admin panels in 2026
How I ship FilamentPHP v3 admin panels with 40+ resources, multi-tenancy, RBAC and real-time Livewire widgets — the stack I use in every project this year.
Why FilamentPHP won my 2026 stack
FilamentPHP v3 has quietly become the default admin panel for serious Laravel apps. The reasons are mundane and important: it ships with a real form / table / action DSL, it does not fight you when you need a custom page, and Livewire 3 keeps the interactive parts fast without a JavaScript build step.
Every new Laravel project I start in 2026 gets a Filament admin panel before the first business feature ships. Here is how.
The baseline setup
- Laravel 11 with strict types and
declare(strict_types=1) - FilamentPHP v3 with the default panel builder
- Spatie Permissions for RBAC — never hand-roll roles
- Spatie Activity Log for audit trails
- Filament Shield for policy scaffolding
- Horizon for background jobs, Redis for cache
Filament ships with sensible defaults, but the moment your admin panel grows past ten resources you want two conventions in place:
- Resources live under
App\Filament\Resourcesand never contain business logic — they call service classes. - Every write action goes through a dedicated action class so bulk operations, imports and audit logs share the same code path.
Multi-tenancy without the pain
Filament v3 has first-class multi-tenancy. I use it in three flavours:
- Team scoping (most common): current user picks a team, all queries scope by
team_id. RLS-style, enforced in a global scope. - Domain scoping: separate subdomains per tenant, one panel, shared code.
- DB-per-tenant: rare, but Filament handles the tenant-model contract cleanly.
The mistake I see teams make is enforcing tenancy only in Filament. Do it in a global scope on the Eloquent model — Filament will pick it up automatically, and any command / job / API endpoint stays safe too.
Real-time widgets with Livewire 3
Filament widgets are Livewire components under the hood. Two patterns pay for themselves within a week:
- Poll-driven dashboards:
$this->pollingIntervalon stat widgets for near-real-time counters without Websockets. - Reverb-driven feeds: for activity streams, wire Livewire to Reverb (or Pusher) so events push instead of poll.
For most CRMs the poll pattern is enough. For anything with agents watching queues (support desks, dispatch tools), push wins.
What I would skip
- Do not build custom form fields until the stock ones truly do not fit. Ninety percent of the time
Forms\Components\Groupplus a couple of hidden state fields does the job. - Do not over-invest in Filament themes early. A neutral panel that ships this week beats a themed one that ships next quarter.
The takeaway
FilamentPHP in 2026 is boring in the best way. The v3 API is stable, the ecosystem covers the 90 percent, and the parts that need custom code fit cleanly next to your Laravel service layer. Every internal tool I would have built in Retool a few years back now ships as a Filament panel that the same team can extend.