A FIELD GUIDE TO LARAVEL · VOLUME II · THE ECOSYSTEM
ENTRY II.35 · SERVER-DRIVEN UI
Livewire
Livewire · Package · first recorded 15 April 2019, v0.0.1 on Packagist; the tree places it at Livewire 3 (2023). Docs read are 4.x
Interactive pages written as PHP classes and Blade, with no JavaScript of your own. The browser sends an action and a snapshot; the server rebuilds the component, runs the method, renders again, and the DOM is morphed to match.
Specification
KindPackage, in-process. A PHP class per component
ProtocolJSON by fetch POST to /livewire-{hash}/update; snapshot in, snapshot and HTML out
ClientLivewire's own JS with Alpine bundled, injected automatically
Scales byStateless: the snapshot travels with every request, nothing is held
RangeCloud: yes. Ordinary HTTP; nothing resident Forge, VPS: yes, the same: ordinary HTTP Vapor: yes. Each update is one short request; large uploads go direct to S3
Neighbours
Inertia is the other first-party route: React, Vue or Svelte draw the page and Laravel controllers serve props. Volt is a single-file way of writing a Livewire component, not a rival to it. Livewire's distinction is that you stay in PHP and Blade, with state carried in a snapshot.
config/livewire.php resources/views/components/⚡*.blade.php app/Livewire/ wire:model, wire:click in Blade
Fig. II.35.1 · One action, round trip
Parts
1Component. A class with public properties and render(): single-file, multi-file, or a class in app/Livewire.
2Snapshot. The public state and a memo (name, id), written into wire:snapshot on the root element at first render.
3Update. A fetch sends the snapshot and a calls list; a fresh instance is hydrated, save() runs, render() again.
4Morph. The new HTML is walked against the old; only changed elements are touched, so focus and input values survive.
5Page. Plain HTML with wire:click and wire:model; Alpine, bundled, handles what never needs the server.
Hidden joinery
The asset and update routes carry a hash of APP_KEY, unique to each install, so scanners find no fixed path. Assets are injected only on pages that contain a component. Protected properties never reach the browser and are not kept between requests. Livewire bundles and starts Alpine itself; a second copy breaks initialisation.
Every line checked on 2026-10-08 against livewire.laravel.com/docs (4.x), the 4.x source and Packagist.