← Back to writing
3 min read

Building Modern Laravel Frontends with Inertia v3 + React

Laravel React Inertia Learning

Leah Thompson (DevRel Engineer, Laravel) is on the Laravel core team. At Laravel Live UK 2026 she gave a talk on building modern frontends with Inertia v3 and React, a near-identical version of the talk she gave at React Day 2025.

The RILT stack

RILT = React, Inertia, Laravel, Tailwind. Sometimes written as LITTR when TypeScript is included. TypeScript is now the default in Laravel's official starter kits.

Your controller returns Inertia::render('PageComponent', $data), that data arrives as props in the React component, and routing stays in web.php. No separate API or second repository needed.

References:

Inertia v3 vs Livewire

Both solve the problem of reactive UI without a separate API, but in different ways.

Livewire stays in PHP. User interaction triggers a server re-render, the DOM gets patched, minimal JavaScript required. Inertia means the UI layer is fully in React/Vue/Svelte with state living in the browser and access to the full npm ecosystem.

Both shipped major versions in early 2026 (Livewire 4 in January, Inertia v3 in March). Livewire is generally faster to build with for straightforward UI. Inertia suits more complex, app-like interfaces where a JS framework is already being used.

References:

Inertia v3 - what changed

Stable release March 2026.

Axios dropped - replaced with a built-in XHR client. An Axios adapter is available for projects that need it.

Vite plugin (@inertiajs/vite) - replaces the previous boilerplate of resolve/setup callbacks and a separate SSR entry point. createInertiaApp() now works with no arguments. SSR works in dev mode without running a separate Node process.

useHttp hook - for HTTP requests that should not trigger a page visit (search endpoints, JSON calls). Returns the same reactive state as useForm: processing, errors, progress, isDirty.

Optimistic updates - chain .optimistic() before a router visit. The UI updates immediately and rolls back automatically on a non-2xx response.

Instant Visits - page component renders immediately using shared props while the server request is in flight. Full data merges in on response.

Layout Props - useLayoutProps / setLayoutProps for passing data from a page into its persistent layout.

Breaking changes

  • PHP 8.2+, Laravel 11+, React 19+ required
  • qs no longer bundled - install directly if used
  • Inertia::lazy() removed - use Inertia::optional()
  • router.cancel() becomes router.cancelAll()
  • Config file changed - republish: php artisan vendor:publish --provider="Inertia\ServiceProvider" --force

References:

Live code highlighting in demos

There was line-by-line code highlighting during the demos. Most likely Slidev, which supports per-line highlighting and is common in the Laravel community. Could also be Slides.com. Check the recording when it is published.

React as a Laravel frontend

On the controller side the change from Blade is minimal. Inertia::render() instead of view(), with data becoming props. The frontend is standard React with hooks and TypeScript.

Laravel 13's official React starter kit ships with React 19, TypeScript, Tailwind 4, shadcn/ui, and Inertia 3.

References:

Does Laravel use React or Vue internally?

Vue was the historical default. Both are now equally first-class in Laravel 13's starter kits. Leah Thompson, as a team member, publicly focuses on React + Inertia.


Notes from Laravel Live UK 2026.