A FIELD GUIDE TO LARAVEL · VOLUME II · THE ECOSYSTEM
ENTRY II.37 · FRONTEND BRIDGE
Inertia
Inertia · Package · first recorded 10 August 2019, inertia-laravel v0.1.0 on Packagist; the tree places it at Inertia 2 (2024). Docs read are v3
React, Vue or Svelte pages served by Laravel controllers, with no API in between. The first visit is HTML; every visit after is an XHR answered with a JSON page object. Inertia 3 entered beta in March 2026 and was stable by the end of that month.
Specification
Kind Protocol and two adapters: a server package and a client package
Protocol X-Inertia: true; JSON of component, props, url and version
Client @inertiajs/react, vue3 or svelte; the <Link> component and router
Installed by composer require inertiajs/inertia-laravel · inertia:middleware
Voice inertia:middleware · inertia:start-ssr · inertia:stop-ssr
Scales by Stateless requests; SSR is a separate Node process when wanted
Range Cloud: yes; Inertia SSR is a toggle on the App cluster
Forge, VPS: yes; SSR runs as a Node daemon (a Forge toggle, under Supervisor)
Vapor: yes, without SSR: Lambda's constraints rule it out
Neighbours
Livewire builds the interactive page in PHP and Blade, with no JavaScript of your own. The React, Vue and Svelte starter kits are Inertia apps, with Wayfinder typing their routes. Inertia's distinction: Laravel keeps the routing and controllers, and the JavaScript framework draws the page.
Field marks
resources/views/app.blade.php
HandleInertiaRequests middleware
resources/js/pages/
Inertia::render() in a controller
Fig. II.37.1 · One visit, as JSON
Parts
1 Controller. Inertia::render('Event/Show', ['event' => $event]): routing, auth and data loading stay in PHP.
2 Middleware. HandleInertiaRequests adds shared props and the asset version() to every response.
3 Page object. component, props, url, version: in the first HTML, a data-page script; after that, the whole response.
4 Version check, when assets changed: a 409 with X-Inertia-Location sends the browser on a full reload. GET only.
5 Link. An anchor that visits by XHR with X-Inertia: true; a partial reload names the props it wants.
Hidden joinery
The page object is serialised with slashes escaped, so a </script> in props cannot close the tag early. A version mismatch returns 409 on GET only; a POST is never bounced. Partial reloads apply only when the destination is the same component; props marked always come back regardless. encryptHistory is sent only when true.
Every line checked on 2026-10-08 against inertiajs.com/docs/v3, Packagist, npm and the Cloud, Forge, Vapor docs.
TITLE
Inertia · the page object
SOURCES
inertiajs.com/docs/v3/core-concepts/the-protocol · inertiajs.com/docs/v3/installation/server-side-setup · inertiajs.com/docs/v3/installation/client-side-setup · inertiajs.com/docs/v3/data-props/partial-reloads · inertiajs.com/docs/v3/advanced/asset-versioning · inertiajs.com/docs/v3/advanced/server-side-rendering · packagist.org/packages/inertiajs/inertia-laravel · www.npmjs.com/package/@inertiajs/react · laravel.com/cloud/docs/compute#inertia-ssr · laravel.com/forge/docs/sites/laravel · docs.vapor.build/projects/development · laravel.com/docs/13.x/starter-kits · Monitor 595, 684
STATUS
Verified · 2026-10-08
SHEET
II.37 of 48
REV
A · 2026-10-08
DRAWN
BS
FINISH
All faces, including the back