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
Kind Package, in-process. A PHP class per component
Protocol JSON by fetch POST to /livewire-{hash}/update; snapshot in, snapshot and HTML out
Client Livewire's own JS with Alpine bundled, injected automatically
Installed by composer require livewire/livewire
Voice make:livewire · livewire:config · livewire:convert
Scales by Stateless: the snapshot travels with every request, nothing is held
Range Cloud: 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.
Field marks
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
1 Component. A class with public properties and render(): single-file, multi-file, or a class in app/Livewire.
2 Snapshot. The public state and a memo (name, id), written into wire:snapshot on the root element at first render.
3 Update. A fetch sends the snapshot and a calls list; a fresh instance is hydrated, save() runs, render() again.
4 Morph. The new HTML is walked against the old; only changed elements are touched, so focus and input values survive.
5 Page. 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.
TITLE
Livewire · one round trip
SOURCES
livewire.laravel.com/docs/4.x/installation · livewire.laravel.com/docs/4.x/components · livewire.laravel.com/docs/4.x/hydration · livewire.laravel.com/docs/4.x/morph · livewire.laravel.com/docs/4.x/properties · livewire.laravel.com/docs/4.x/javascript · livewire.laravel.com/docs/4.x/alpine · livewire.laravel.com/docs/4.x/uploads · github.com/livewire/livewire/blob/4.x/js/request/index.js · github.com/livewire/livewire/blob/4.x/src/Mechanisms/HandleRequests/HandleRequests.php · packagist.org/packages/livewire/livewire · laravel.com/cloud/docs/changelog · docs.vapor.build/resources/storage · laravel.com/docs/13.x/starter-kits · livewire.laravel.com/docs/3.x/volt
STATUS
Verified · 2026-10-08
SHEET
II.35 of 48
REV
A · 2026-10-08
DRAWN
BS
FINISH
All faces, including the back