We finished moving eleven production panels from Filament v3 to v4 last month. The headline is reassuring: most panels needed less than a day. The time we did spend went almost entirely into three changes, and none of them were the ones we had budgeted for.
Schemas replaced forms as the layout language
Layout components moved out of Filament\Forms\Components and into Filament\Schemas\Components. Sections, tabs, grids and inline actions all shifted namespace. A project-wide find and replace covers ninety percent of it; the remainder is the handful of places where a form component and a layout component shared a name and the import was ambiguous.
Static property signatures now fail at autoload
The navigation properties on resources and pages accept enums as well as strings, so ?string $navigationIcon is no longer a valid declaration. This one bites hard because it surfaces as a fatal error during class loading rather than a deprecation warning at runtime. Widen the type to string|BackedEnum|null and the error disappears.
Table action methods were renamed
Row actions moved from actions() to recordActions(), and action modals now take schema() where they used to take form(). Tests written against callTableAction() need rewriting against the new TestAction helper.
What we would do differently
Upgrade the panel with the smallest surface first and keep the diff open in a second window while you do the next one. By the third panel the changes are muscle memory. And run the full test suite between each namespace sweep — a missed import in a rarely visited resource is invisible until someone opens that page in production.
Tagged
Comments
Sign in to join the discussion.