Livewire 4
Livewire 4: Revolutionary Features That Transform Laravel UIs
Discover Livewire 4's game-changing features including the Blaze compiler (20x faster rendering), Islands architecture, single-file components, and PHP 8.4 property hooks support.

Hoceine El Idrissi
Full Stack Developer
Livewire 4: Revolutionary Features That Transform Laravel UIs
Caleb Porzio unveiled Livewire 4 at Laracon US 2025, and it's nothing short of revolutionary. With the Blaze compiler delivering 20x faster rendering and Islands architecture enabling partial page loading, Livewire 4 is the biggest leap forward since the framework's creation.
Note: Livewire 4 is currently in beta. While production-ready for many use cases, expect some refinements before stable release.
The Blaze Compiler: 20x Faster Rendering
The headline feature is Blaze, a new optimization layer that pre-renders static content at compile time:
How It Works
Blaze performs "code folding" - pre-rendering static parts of your Blade templates so they don't need to be processed on each request.
Laracon Demo Results:
Before Blaze: 329ms render time
After Blaze: 19ms render time
Real-world benchmark:
- Data table with 29,000 Blade components
- Before: 1.6 seconds
- After: 131 milliseconds
Enabling Blaze
// In your Livewire component
use Livewire\Attributes\Blaze;
#[Blaze]
class UserDashboard extends Component
{
// Component code
}
Islands Architecture
Islands let you wrap expensive parts of your component to render independently:
<div>
<h1>Dashboard</h1>
{{-- This loads immediately --}}
<x-quick-stats />
{{-- This loads independently after initial render --}}
@island
<livewire:expensive-chart />
@endisland
{{-- Lazy load with loading state --}}
@island(lazy: true)
<livewire:heavy-data-table />
<x-slot:placeholder>
<div class="animate-pulse h-64 bg-gray-200 rounded"></div>
</x-slot:placeholder>
@endisland
{{-- Auto-refresh island every 5 seconds --}}
@island(poll: '5s')
<livewire:live-notifications />
@endisland
</div>
Benefits
- Non-blocking rendering - Slow queries don't block the whole page
- Progressive loading - Critical content loads first
- Independent updates - Islands refresh without affecting the page
- Automatic polling - Built-in real-time updates
Single-File Components (SFCs)
Livewire 4 introduces a view-first approach with .wire.php files:
{{-- resources/views/components/counter.wire.php --}}
<?php
use function Livewire\Volt\{state, computed, action};
state(['count' => 0]);
$increment = action(fn () => $this->count++);
$decrement = action(fn () => $this->count--);
$doubled = computed(fn () => $this->count * 2);
?>
<div>
<h2>Count: {{ $count }}</h2>
<p>Doubled: {{ $this->doubled }}</p>
<button wire:click="increment">+</button>
<button wire:click="decrement">-</button>
</div>
Class-Based SFCs
For complex logic:
{{-- resources/views/components/contact-form.wire.php --}}
<?php
use Livewire\Volt\Component;
new class extends Component {
public string $name = '';
public string $email = '';
public string $message = '';
protected function rules()
{
return [
'name' => 'required|min:2',
'email' => 'required|email',
'message' => 'required|min:10',
];
}
public function submit()
{
$this->validate();
Contact::create($this->only(['name', 'email', 'message']));
$this->reset();
session()->flash('success', 'Message sent!');
}
}
?>
<form wire:submit="submit">
<input wire:model="name" placeholder="Name">
<input wire:model="email" type="email" placeholder="Email">
<textarea wire:model="message" placeholder="Message"></textarea>
<button type="submit">Send</button>
</form>
Component Slots & Attributes
Finally, Blade-like slots in Livewire components:
{{-- Parent component --}}
<livewire:modal>
<x-slot:header>
<h2>Confirm Action</h2>
</x-slot:header>
<p>Are you sure you want to proceed?</p>
<x-slot:footer>
<button wire:click="confirm">Yes</button>
<button wire:click="cancel">No</button>
</x-slot:footer>
</livewire:modal>
{{-- Modal.wire.php --}}
<div class="modal">
<div class="modal-header">
{{ $header }}
</div>
<div class="modal-body">
{{ $slot }}
</div>
<div class="modal-footer">
{{ $footer }}
</div>
</div>
Attribute Forwarding
<livewire:input
wire:model="name"
class="custom-class"
placeholder="Enter name"
{{ $attributes }}
/>
PHP 8.4 Property Hooks
Full support for PHP 8.4's property accessors:
class Counter extends Component
{
public int $count = 0 {
set {
// Prevent negative values
$this->count = max(0, $value);
}
}
public function decrement()
{
$this->count--; // Automatically clamped to 0
}
}
Enhanced Loading States
Automatic data-loading attributes:
<button wire:click="save" class="btn">
<span data-loading:remove>Save</span>
<span data-loading:show class="hidden">Saving...</span>
</button>
{{-- Or with CSS classes --}}
<button
wire:click="save"
data-loading:class="opacity-50 cursor-wait"
>
Save
</button>
Lightning Bolt Extensions ⚡
Yes, you can use actual lightning bolts in filenames:
resources/views/components/⚡counter.wire.php
They sort to the top of your directory and clearly identify Livewire components.
Performance Benchmarks
From Laracon US 2025 demos:
| Scenario | Before | After | Improvement |
|---|---|---|---|
| Complex UI Load | 900ms | 300ms | 3x faster |
| Nested Components | 1.6s | 131ms | 12x faster |
| Interactive Response | 100ms | 10ms | 10x faster |
Migration from Livewire 3
No major breaking changes! Existing components continue to work:
composer require livewire/livewire:"^4.0"
Then gradually adopt new features:
- Enable Blaze on heavy components
- Convert repetitive components to SFCs
- Add Islands for expensive operations
- Implement slots where needed
Conclusion
Livewire 4 represents a quantum leap in Laravel's reactive capabilities. The Blaze compiler alone makes it worth upgrading, but combined with Islands architecture and single-file components, it's clear that Livewire is no longer just "good enough" - it's genuinely exceptional.
The future of Laravel frontend development has never looked brighter.