Inertia 515,106 (https://github.com/inertiajs/inertia 8,124 ) is a protocol with two halves: a server adapter, inertiajs/inertia-laravel 3.3.4, and a client adapter, @inertiajs/react (or vue3, svelte) 3.7.1. php artisan inertia:middleware creates HandleInertiaRequests for the web group; its share() adds props to every page. The root view holds <x-inertia::app />, and a controller returns Inertia::render('books/show', ['book' => [...]]) instead of a view. A normal visit gets HTML with the page object embedded; the client's own visits send X-Inertia: true and the asset version $V, and get just the JSON (folded at 95 columns):
$ curl -s $URL | grep -o '<script data-page.*</script>' | fold -w 95
<script data-page="app" type="application/json">{"component":"books\/show","props":{"errors":{}
,"book":{"isbn":"9780000000001","title":"The PHP Handbook","price":24.5,"stock":7}},"url":"\/bo
oks\/9780000000001","version":"c358b646378bbc557f3e561cba3810c7","sharedProps":["errors"]}</scr
ipt>
$ curl -s -H 'X-Inertia: true' -H "X-Inertia-Version: $V" $URL | fold -w 95; echo
{"component":"books\/show","props":{"errors":{},"book":{"isbn":"9780000000001","title":"The PHP
Handbook","price":24.5,"stock":7}},"url":"\/books\/9780000000001","version":"c358b646378bbc557
f3e561cba3810c7","sharedProps":["errors"]}
$ curl -s -o /dev/null -w '%{http_code}\n' -H 'X-Inertia: true' -H 'X-Inertia-Version: old'
$URL
409version is the xxh128 hash of public/build/manifest.json. After a deploy, a stale client gets 409 with an X-Inertia-Location header and reloads once to fetch the new assets. Every prop lands in the page source, so pass arrays or API resources, never whole models (Eloquent Models).