Mostly code snippets, links to videos/docs, and other bits and bobs that help me learn and build.
If they help you too - let me know. If I could be doing anything better - definitely let me know! (:
June 12th, 2025
The First Talk of Laravel Live 2025 - Introducing Filament 4 with Dan Harrin
Filament is a Laravel admin package powered by Livewire. It essentially consists of PHP config objects that are translated into UI components, such as form or layout elements. We can quickly and easily create interactive forms and tables without writing any HTML.
Dan’s talk was a great summary of Filament and its current capabilities, as well as a preview of what’s coming in the next release (which he launched the beta for at the end of his talk!).
Having since looked at the full upgrade guide, I can see that Filament v4 is packed with new features. We covered a few highlights, including:
A new Code Editor Field with language syntax highlighting, and a Slider component (input range)
A new way to display repeater content within a Table view
A new type of relationship select: ModalTableSelect - when selecting, options are shown in a table within a modal, with search and sort capabilities. A much nicer UI!
The Rich Text Editor (RTE) has been rebuilt using TipTap for more dynamic functionality. For example, it now supports using images from private files within RTEs by using a data attribute on the image to generate a temporary URL.
Merge tags within the RTE - placeholder tags that are replaced with dynamic values upon HTML render. Perfect for personalized email content!
Custom Blocks for page or email content, e.g. a header with a title and subtitle. When adding the block, data can be added and previewed directly within the RTE.
The ability to inject your own extensions and custom plugins into the RTE for further customization.
One of the key upgrades in v4 is performance.
Dan showed us examples comparing the speed of v3 and v4, highlighting improvements in network requests and load times.
This was largely achieved by optimizing internal Blade components and reducing the number of components used, which significantly boosts performance.
We also now have the ability to:
Evaluate conditionally visible/hidden fields on the client side using JS expressions
Update the state of another field on the client side (e.g., converting a Title into a Slug) with afterStateUpdatedJs()
Integrate tables with custom data, including API sources - not just Eloquent relationships. You can even paginate this custom data with length-aware pagination, and use API calls to enable search and sort functionality.
In terms of upgrading, Dan has put a lot of thought into the upgrade guide. There’s a script to automate repetitive changes and a customised guide for the rest - just select the checkboxes for your personalised upgrade path.
What I appreciated most about Dan’s talk was how he not only explained what new features were added, but also why and how they were built. He shared use cases, explained the problems they solve, and demonstrated how the new features address those needs.
He also shared insights from his experience building Laravel packages:
Stick to conventions - but don’t enforce them too strictly. Use things as they’re intended so developers can find their way easily, but stay flexible, since every developer has their own preferences.
Provide stable extension points. The package won’t suit every need out of the box, so allow developers to extend and modify confidently. And ensure updates don’t break their customizations. Be documented, flexible, and predictable.
Use neutral designs that work across various use cases.
Offer useful default behaviors - for example, Filament’s simple CRUD functionality.
Maintain deep integration with Laravel, leveraging its existing codebase where possible (e.g., respecting policies and permissions).
I’m currently building my first Filament project: an admin dashboard with a Livewire front end. What I’ve found most useful is how relationships work - when I select a company from the Companies table, I can read and update that company’s info, and also view the users that belong to it.
It was super quick and easy to get started. I’ve used schemas to keep my code readable and reusable across resources and relational managers. I’ve even passed parameters into my schema - for example, a bool $isRelationalManager
to show different data depending on the context (e.g., skipping the company name when viewing users via the Company relation manager).
You can even set the default company to be the current record when creating a new user through the relational manager. I’m also using roles and permissions to control visibility and custom actions for users, along with Pest for testing.
While I’m still just dipping my toe in, I’ve found the package great to work with. The new features and performance boosts will only improve the experience. And with Tailwind v4 support, I can upgrade other parts of my stack - Laravel to v12 and Flux to v2!
Thanks, Dan and the entire Filament team - I’m super excited about the future of Filament!