Since the initial beta release, we've shipped several improvements to Inertia v3 based on early feedback and internal testing. Here’s what changed:
Layout Props Simplified
The original beta introduced layout props with a useLayoutProps hook that layouts would call to declare defaults. We've since simplified this by removing the hook entirely. Layout props are now passed directly as component props, which means your layout is just a regular component that receives props the normal way:
Pages declare their layout props as a tuple alongside the layout component:
For dynamic updates, setLayoutProps() is still available and can be called from within the page to override layout props at any time. You may also use a callback that receives the page's props, which is useful for deriving layout state from server data:
If your app uses a default layout, the callback can return just the props, and Inertia will pass them to the default layout automatically:
We also removed setLayoutPropsFor(), which was previously used to target a specific named layout. setLayoutProps() now accepts an optional layout name as its first argument, so setLayoutPropsFor('sidebar', { collapsed: true }) becomes setLayoutProps('sidebar', { collapsed: true }). When called without a name, it targets the default layout as before.
withApp Callback
createInertiaApp now accepts a withApp callback that lets you modify the root app instance before it renders. This works in both client-side and server-side rendering, and it is the recommended way to register global plugins, provide values, or configure the app:
Vite 8 Support
Inertia v3 now supports Vite 8 and has dropped support for Vite 6. If you are still on Vite 6, you will need to upgrade before adopting v3.
Migrated from lodash to es-toolkit
We replaced lodash-es with es-toolkit, a modern, tree-shakable utility library. This also raised the minimum JavaScript target from ES2020 to ES2022.
Blade Components (Laravel Adapter)
The Laravel adapter now ships <x-inertia::app> and <x-inertia::head> Blade components as alternatives to the @inertia and @inertiaHead directives.
The <x-inertia::app> component accepts an optional id attribute (defaults to "app"), and <x-inertia::head> supports a fallback slot that renders when SSR is not available. The existing directives continue to work.
Laravel Boost
Laravel Boost ships with an UpgradeInertiaV3 prompt to help upgrade your Inertia app to v3. Check out the Boost website on how to get started with Laravel Boost.
Get Involved
Inertia v3 has already come a long way since its first beta, and we welcome your feedback, so feel free to test these changes and report issues. If you haven’t installed the latest beta yet, follow our migration guide and let us know what you think.