Skip to content

Filament Atelier

Filament v3 to v5 was the toll for touching Atelier at all

28 August 2026 2 min read

This site ran Filament v3.3.54 and Livewire v3 with Volt. Atelier needs Filament v5, and Livewire v4 would not install next to Filament v4, so two version jumps landed in one commit. Sixteen admin resources had to survive it without a single behaviour change.

Before I could put my own plugin on my own site, I had to get off Filament v3.

This portfolio has run on Filament since before Atelier existed, and it had drifted two major versions behind: v3.3.54, Livewire v3.8.2, Volt components for the two interactive forms on the public side. Atelier needs Filament v5. There was no shortcut around the upgrade, only through it.

The plan that didn't survive contact

The plan was two steps: Filament v3 to v4, confirm nothing broke, then v4 to v5 with Livewire v3 to v4 alongside it, since Filament v5 requires Livewire v4.

Step one worked. Step two didn't start the way I wrote it. composer require livewire/livewire:^4.0 while still on Filament v4 failed outright: Filament v4 pins to Livewire v3. Livewire v4 and Filament v5 arrived together on purpose, and nothing lets you have one without the other.

So the two steps became one. Filament v4 to v5 and Livewire v3 to v4, in the same commit, with no intermediate state to test against. Sixteen admin resources, all of them, had to come out the other side working or the deploy doesn't happen.

What Livewire v4 actually changed

Volt is gone in v4. Both Volt components on the public side, the service contact form and the resource subscribe form, became plain Livewire classes: a mount(), a couple of public properties, a submit() method, a Blade view. Functionally identical, no template difference a visitor would notice.

The part that broke quietly: Livewire v4 ships RequireLivewireHeaders middleware. A hardening test that fired a raw POST at a Livewire update endpoint, to confirm it rejected malformed requests, started failing. Not because the hardening broke, but because the test itself no longer looked like a genuine Livewire request. It needed an X-Livewire header and postJson() instead of a plain post(). The middleware was doing exactly what it should. The test just predated it.

The package that didn't make it

bezhansalleh/filament-google-analytics has no release for Filament v4 or v5. I checked the repo, checked the issues, no branch in progress. It came out. Google Analytics itself didn't go anywhere, it just moved from a Filament dashboard widget to where it already lived on the public site: script tags in the layout head. One less admin panel dependency, same analytics.

Two migrations that assumed too much

A settings table migration failed on a fresh install because it assumed the table didn't already exist, which was true the first time this app was migrated and false on every CI run since. Guarded with Schema::hasTable(), and it stopped mattering how many times the suite ran.

rmsramos/activitylog changed its namespace between the version this app was pinned to and v3. One use statement, caught by the test suite immediately, not by staring at a diff.

Where it stands

Filament v5.7.6, Livewire v4.4.2, zero Volt components, zero regressions across sixteen admin resources and the public site both. This is the boring part of the story, the part where nothing visible changed. Atelier needed a v5 host to land on, and now this site is one.