2–3× faster table rendering, built-in MFA, TipTap rich editor, nested resources, and client-side JS helpers that eliminate server round-trips — Filament just got a serious upgrade.
If you’ve built a Laravel admin panel or internal tool in the last few years, you’ve probably used Filament. It’s the most popular Laravel UI framework by a wide margin, and for good reason — it lets you build data-rich admin panels entirely in PHP, without writing a line of HTML or JavaScript.
Filament v4 landed in mid-2025 as the biggest, most feature-packed release in the project’s history. By January 2026, v5 followed — integrating Livewire 4 and adding the Filament Blueprint AI tool. The project is currently at v5 (v4.9+ line) and actively shipping.
Here’s everything that changed and why it matters.
Performance: 2–3× Faster Table Rendering
This is the headline improvement in v4. Large tables — the most common performance bottleneck in Filament apps — render 2–3× faster by default, with zero code changes required.
How it was achieved: Filament v4 overhauled how Blade templates render HTML. Instead of including new view files for each component, the framework uses PHP objects to render HTML directly. Combined with extracting repeated Tailwind class groups into dedicated CSS classes, the HTML payload shrinks significantly and the number of files that need to be loaded drops dramatically.
Real benchmark: a table showing 100 rows from 10,000 orders in the database went from 2.38 seconds to about 1 second — a 2.38× improvement with no code changes, just the upgrade script.
Additional performance improvements in v4:
Partial rendering — table action modals no longer trigger a full table re-render. Previously, clicking an action button forced the entire table to re-render on the server. Now only the modal renders.
Client-side JS helpers — new methods that evaluate expressions in the browser instead of making a round-trip to the server, covered below.
Tailwind CSS v4 + OKLCH Color System
Filament v4 upgrades to Tailwind CSS v4, bringing the same benefits we covered in Day 55: the Oxide Rust engine, CSS-first configuration, and significantly faster builds.
The color system upgrades to OKLCH, enabling more vibrant and perceptually uniform colors across themes. Custom themes in Filament now use CSS custom properties directly, making it easier to build your own design system at scale.
Built-In Multi-Factor Authentication
MFA is now part of Filament’s auth system — no third-party packages, no custom implementation:
// config/filament.php or panel config
->authMiddleware([
Authenticate::class,
])
->multiFactorAuthentication([
AppAuthentication::make(), // TOTP (Google Authenticator, Authy)
EmailAuthentication::make(), // Email OTP
])
Users authenticate with a TOTP app (Google Authenticator, Authy, 1Password) or receive a one-time code by email. The registration and verification flows are handled entirely by Filament.
In v4.5, the setup became even simpler with dedicated traits on your User model:
use Filament\Auth\MultiFactor\App\Contracts\HasAppAuthentication;
use Filament\Auth\MultiFactor\App\Concerns\InteractsWithAppAuthentication;
use Filament\Auth\MultiFactor\App\Contracts\HasAppAuthenticationRecovery;
use Filament\Auth\MultiFactor\App\Concerns\InteractsWithAppAuthenticationRecovery;
class User extends Authenticatable implements
FilamentUser,
HasAppAuthentication,
HasAppAuthenticationRecovery
{
use InteractsWithAppAuthentication;
use InteractsWithAppAuthenticationRecovery;
// That's it — traits handle columns, casting, hidden attributes, and interface methods
}
TipTap Rich Editor
The old Trix editor is replaced with a modern, extensible TipTap-powered rich editor:
use Filament\Forms\Components\RichEditor;
RichEditor::make('content')
->toolbarButtons([
'attachFiles',
'blockquote',
'bold',
'bulletList',
'codeBlock',
'heading',
'italic',
'link',
'orderedList',
'redo',
'strike',
'table',
'underline',
'undo',
])
Key improvements over Trix:
Merge tags — define dynamic placeholders that editors can insert into content:
RichEditor::make('email_template')
->mergeTags([
'first_name',
'last_name',
'company_name',
'invoice_number',
'due_date',
])
Custom blocks — drag-and-drop content blocks for complex layouts:
RichEditor::make('page_content')
->blocks([
Block::make('hero')
->schema([
TextInput::make('heading'),
TextInput::make('subheading'),
FileUpload::make('background_image'),
]),
Block::make('cta')
->schema([
TextInput::make('button_text'),
TextInput::make('button_url'),
]),
])
HTML or JSON storage — store content as HTML for direct rendering, or as JSON for structured data that you can transform server-side.
Mentions (added in v4.5) — type @ to search and insert user mentions:
RichEditor::make('comment')
->mentions([
MentionProvider::make('users')
->getSearchResultsUsing(fn (string $search) =>
User::where('name', 'like', "%{$search}%")
->pluck('name', 'id')
)
->url(fn (User $user) => route('users.show', $user))
])
Client-Side JS Helpers
One of the most practical improvements for building reactive forms. These new methods evaluate expressions in the browser instead of making a network request:
// Hide/show based on another field — no Livewire round-trip
TextInput::make('company_name')
->hiddenJs("$get('account_type') === 'personal'")
->visibleJs("$get('account_type') === 'business'")
// Run logic after a field updates — in the browser
Select::make('country')
->options(Country::pluck('name', 'id'))
->afterStateUpdatedJs("
$set('state', null);
$set('city', null);
")
// Dynamic labels that update as user types
TextInput::make('slug')
->label(new JsContent("
'URL: /' + ($get('title') || '').toLowerCase().replace(/[^a-z0-9]+/g, '-')
"))
The result: reactive form UIs that feel instant, because they don’t hit the server for every interaction.
Nested Resources
One of the longest-requested features. Nested resources let you manage child models in the full context of their parent — full-page create/edit forms for related models, not just modals.
# Create a resource nested under CategoryResource
php artisan make:filament-resource Product --nested
// app/Filament/Resources/Categories/Resources/Products/ProductResource.php
class ProductResource extends Resource
{
protected static ?string $parentResource = CategoryResource::class;
// Edit products in the context of their category
// Category breadcrumb shows in the header
// Category ID automatically scoped in all queries
}
Use cases: course → lessons, project → tasks, invoice → line items, category → products. Any relationship where you want a full editing experience in context rather than a cramped modal.
Static Table Data (No Model Required)
Previously, Filament tables required an Eloquent model. Now you can pass static data directly:
use Filament\Tables\Table;
public function table(Table $table): Table
{
return $table
->records([
['id' => 1, 'name' => 'Alice', 'role' => 'Admin', 'status' => 'active'],
['id' => 2, 'name' => 'Bob', 'role' => 'Editor', 'status' => 'inactive'],
['id' => 3, 'name' => 'Carol', 'role' => 'Viewer', 'status' => 'active'],
])
->columns([
TextColumn::make('name'),
TextColumn::make('role'),
BadgeColumn::make('status')
->colors(['success' => 'active', 'danger' => 'inactive']),
])
This works with all standard Filament table features: sorting, filtering, searching, pagination, bulk actions.
Practical uses: display data from an external API, show aggregated metrics, render configuration data from a static file.
New Form Components
Several new components shipped in v4:
Slider — numeric range inputs:
Slider::make('price_range')
->min(0)
->max(1000)
->step(10)
->helperText('Select a price range in dollars')
Code Editor — syntax-highlighted code input with support for HTML, CSS, JavaScript, PHP, and JSON:
CodeEditor::make('custom_css')
->language('css')
->helperText('Override panel styles')
Table Repeater — repeater items displayed in a table layout:
TableRepeater::make('line_items')
->columns([
TextInput::make('description'),
TextInput::make('quantity')->numeric(),
TextInput::make('unit_price')->numeric()->prefix('$'),
])
ModalTableSelect — select records from a full Filament table in a modal (ideal for relationships with thousands of records):
ModalTableSelect::make('assigned_to')
->relationship('assignee', 'name')
->searchable()
->preload()
Schemas: The Server-Driven UI Foundation
v4 introduces a unified schema() API that works consistently across forms, infolists, and pages. Everything is defined in PHP as structured configuration objects — no HTML, no JavaScript:
public function form(Form $form): Form
{
return $form
->schema([
Section::make('Customer Details')
->schema([
TextInput::make('name')->required(),
TextInput::make('email')->email()->required(),
Select::make('country')
->options(Country::pluck('name', 'id'))
->searchable(),
])
->columns(2),
Section::make('Order')
->schema([
TableRepeater::make('line_items')
->columns([
TextInput::make('product'),
TextInput::make('qty')->numeric(),
TextInput::make('price')->prefix('$'),
]),
Placeholder::make('total')
->content(new JsContent("
'$' + ($get('line_items') || [])
.reduce((sum, item) => sum + (item.qty * item.price), 0)
.toFixed(2)
")),
]),
])
}
Filament v5 — Livewire 4 Integration
Filament v5 shipped in January 2026, just one week after Livewire 4’s release. It adds Livewire 4 support with no additional changes over v4. The upgrade is intentionally minor:
composer require filament/filament:"~5.0" -W
php artisan filament:upgrade
The separate major version exists to avoid unexpectedly breaking custom Livewire components in projects that depend on livewire/livewire directly. Both v4 and v5 continue receiving features.
Upgrading from v3
The upgrade script handles most of the mechanical changes:
composer require filament/upgrade:"~4.0" -W --dev
vendor/bin/filament-v4
# Follow the output instructions
composer require filament/filament:"~4.0" -W
composer update
Key manual steps:
- Tailwind CSS v3 → v4 if you have a custom theme (see the Tailwind CSS migration guide)
- Review uses of
$this->form->fill()and$this->form->getState()— some signatures changed - Update any direct
doctrine/dbalusage if you removed it from dependencies
Optional but recommended — migrate to the new directory structure:
php artisan filament:upgrade-directory-structure-to-v4 --dry-run
# Review the proposed changes, then:
php artisan filament:upgrade-directory-structure-to-v4
Filament Blueprint — AI-Assisted Development
Alongside v5, the team launched Filament Blueprint — a tool that helps AI coding agents (Claude, Cursor, Copilot) produce better Filament implementation plans.
You give Blueprint a description of your application and it generates a structured plan including precise configuration chains, reactive field specifications, sensible layout choices, and complete action definitions. The result is AI-generated Filament code that actually reflects how Filament works — not hallucinated variations that don’t run.
Final Thoughts
Filament v4 and v5 represent the framework growing into its full potential. The performance improvements alone — 2–3× faster table rendering, partial re-renders, client-side JS helpers — make upgrading from v3 worth it for any production application.
The new features (TipTap, nested resources, built-in MFA, static table data, new form components) expand what you can build without leaving PHP. And the schema-first, server-driven UI philosophy makes the resulting panels more maintainable, because all your UI logic lives in one place.
If you’re building admin panels for Laravel applications in 2026, Filament v5 is where you want to be.
Building full admin panels in pure PHP, faster than ever.
