- Unified action namespace. ALL actions import from
Filament\Actions\*— neverFilament\Tables\Actions\*orFilament\Forms\Actions\*. These old namespaces DO NOT EXIST in v5. - Table methods changed. Use
->recordActions()not->actions(). Use->toolbarActions()not->bulkActions(). The v3 method names DO NOT EXIST in v5. - No BadgeColumn. Use
TextColumn::make('status')->badge()->color(...).BadgeColumnwas removed. - Schemas package. Layout components come from
Filament\Schemas\Components\*(Section, Grid, Tabs, Wizard). Form fields stay inFilament\Forms\Components\*. Infolist entries stay inFilament\Infolists\Components\*. - No business logic in Resources. Custom actions delegate to project Action classes:
->action(fn ($record) => app(SomeAction::class)->execute($record)). - Schema/Table class extraction. Resources delegate to separate schema and table classes for maintainability. Keep
form()andtable()methods as one-liners that callSomeForm::configure($schema). - Filters stay in Tables namespace.
Filament\Tables\Filters\*is correct. Only actions moved to the unified namespace.
Filament v5 Admin Panel
MANDATORY FIRST RESPONSE PROTOCOL
Before writing ANY Filament code, you MUST complete this checklist:
- Read
references/namespaces.mdto understand the v5 import map - Identify the task type from the routing table below
- Read the matching reference file(s)
- Only then begin implementation
Writing Filament code without reading the reference = wrong namespaces, wrong methods, rework.
Routing Table
| Task | Read |
|---|---|
| Understanding v5 namespace changes from v3 | references/namespaces.md |
| Creating or editing a Resource | references/resources.md |
| Form fields, validation, layout | references/forms.md |
| Table columns, sorting, searching | references/tables.md |
| Table/page/bulk actions, modals, confirmations | references/actions.md |
| Filters (select, ternary, custom) | references/filters.md |
| Relation managers, relationships in forms | references/relationships.md |
| Widgets (stats, charts) | references/widgets.md |
| Navigation, panels, theming | references/panels.md |
| Notifications (flash, database, broadcast) | references/notifications.md |
| Testing Filament resources and pages | references/testing.md |
| Infolists (read-only detail views) | references/infolists.md |
Multiple tasks? Read multiple files.
Quick Rules
These repeat the critical guardrails for context-window resilience:
- ALL actions:
use Filament\Actions\{Action, EditAction, DeleteAction, BulkAction, BulkActionGroup, ...}— one namespace. - Table methods:
->recordActions([...]),->toolbarActions([...]),->headerActions([...])— never->actions()or->bulkActions(). - Badge columns:
TextColumn::make('field')->badge()->color(fn ($state) => ...)— noBadgeColumnclass. - Layout:
Filament\Schemas\Components\{Section, Grid, Tabs, Wizard}. - Form fields:
Filament\Forms\Components\{TextInput, Select, Toggle, ...}. - Infolist entries:
Filament\Infolists\Components\{TextEntry, IconEntry, ...}. - Table columns:
Filament\Tables\Columns\{TextColumn, IconColumn, ImageColumn, ...}. - Filters:
Filament\Tables\Filters\{Filter, SelectFilter, TernaryFilter}. - Custom actions delegate to Action classes — no business logic in Resources.
- Policies are auto-detected — no manual authorization wiring needed.
v5 Breaking Changes from v3 (Quick Summary)
| v3 | v5 | Notes |
|---|---|---|
Tables\Actions\EditAction |
Filament\Actions\EditAction |
Unified action namespace |
Tables\Actions\Action |
Filament\Actions\Action |
Same class, different namespace |
Tables\Actions\BulkActionGroup |
Filament\Actions\BulkActionGroup |
Unified |
Tables\Actions\DeleteBulkAction |
Filament\Actions\DeleteBulkAction |
Unified |
->actions([...]) |
->recordActions([...]) |
Table method renamed |
->bulkActions([...]) |
->toolbarActions([BulkActionGroup::make([...])]) |
Bulk actions live in toolbar |
->headerActions([...]) |
->headerActions([...]) |
Unchanged |
Tables\Columns\BadgeColumn |
TextColumn::make()->badge() |
BadgeColumn removed |
Forms\Components\Section |
Filament\Schemas\Components\Section |
Layout → Schemas package |
Forms\Components\Grid |
Filament\Schemas\Components\Grid |
Layout → Schemas package |
Forms\Components\Tabs |
Filament\Schemas\Components\Tabs |
Layout → Schemas package |
Form $form (in resource) |
Schema $schema |
Type hint changed |
$form->schema([...]) |
$schema->components([...]) |
Method renamed |