inertia

GitHub

Inertia.js lets you quickly build modern single-page React, Vue and Svelte apps using classic server-side routing and controllers.

7,981 stars TypeScript
RAW Doc

CHANGELOG

Changelog

All notable changes to this project will be documented in this file.

The format is based on Keep a Changelog,
and this project adheres to Semantic Versioning.

For changes prior to v1.0.0, see the legacy releases.

Unreleased

- Nothing yet

v3.6.1 - 2026-07-07

What's Changed

* [3.x] Change Svelte render call to be asynchronous by @buhrmi in https://github.com/inertiajs/inertia/pull/3188
* [3.x] Support raw request bodies in the built-in HTTP client by @pascalbaljet in https://github.com/inertiajs/inertia/pull/3189
* [3.x] Fix PHP 8.5 PDO deprecation notice in Playgrounds by @pascalbaljet in https://github.com/inertiajs/inertia/pull/3190
* Bump actions/cache from 5.0.5 to 6.1.0 in the github-actions group by @dependabot[bot] in https://github.com/inertiajs/inertia/pull/3181

Full Changelog: https://github.com/inertiajs/inertia/compare/v3.6.0...v3.6.1

v3.6.0 - 2026-07-02

What's Changed

* Bump the github-actions group with 2 updates by @dependabot[bot] in https://github.com/inertiajs/inertia/pull/3167
* [3.x] Improve HTTPS Vite SSR performance on Linux with small response sizes by @nckrtl in https://github.com/inertiajs/inertia/pull/3183
* [3.x] Defer forced reloads to a cancelable location event by @pascalbaljet in https://github.com/inertiajs/inertia/pull/3180
* [3.x] Add poll marker to visit for polling requests by @pascalbaljet in https://github.com/inertiajs/inertia/pull/3184
* [3.x] Send X-Requested-With header from the built-in HTTP client by @pascalbaljet in https://github.com/inertiajs/inertia/pull/3186

Full Changelog: https://github.com/inertiajs/inertia/compare/v3.5.0...v3.6.0

v3.5.0 - 2026-06-25

What's Changed

* [3.x] Fix invalid ARIA roles on default progress bar by @atymic in https://github.com/inertiajs/inertia/pull/3163
* [3.x] Support anchor target attribute by @devhammed in https://github.com/inertiajs/inertia/pull/3159
* [3.x] Prevent unhandled rejection when a view transition is superseded by @mortenhauberg in https://github.com/inertiajs/inertia/pull/3165
* [3.x] feat: Add page to titleCallback by @mrleblanc101 in https://github.com/inertiajs/inertia/pull/3160
* [3.x] Fix Svelte build failure from optional TypeScript parameters by @pascalbaljet in https://github.com/inertiajs/inertia/pull/3173
* Revert "[3.x] Fix Svelte build failure from optional TypeScript parameters" by @pascalbaljet in https://github.com/inertiajs/inertia/pull/3174
* [3.x] Bump dependencies by @pascalbaljet in https://github.com/inertiajs/inertia/pull/3169
* [3.x] Add server provided head elements by @benbjurstrom in https://github.com/inertiajs/inertia/pull/3161
* [3.x] fix(core): add async option to FormComponentOptions by @sawirricardo in https://github.com/inertiajs/inertia/pull/3157
* [3.x] fix(core): ensure robust SSR error classification by @hamdyelbatal122 in https://github.com/inertiajs/inertia/pull/3151
* [3.x] Do not throw handled useHttp validation errors by @cyphercodes in https://github.com/inertiajs/inertia/pull/3142

New Contributors

* @atymic made their first contribution in https://github.com/inertiajs/inertia/pull/3163
* @mrleblanc101 made their first contribution in https://github.com/inertiajs/inertia/pull/3160
* @benbjurstrom made their first contribution in https://github.com/inertiajs/inertia/pull/3161
* @sawirricardo made their first contribution in https://github.com/inertiajs/inertia/pull/3157
* @hamdyelbatal122 made their first contribution in https://github.com/inertiajs/inertia/pull/3151
* @cyphercodes made their first contribution in https://github.com/inertiajs/inertia/pull/3142

Full Changelog: https://github.com/inertiajs/inertia/compare/v3.4.0...v3.5.0

v3.4.0 - 2026-06-11

What's Changed

* Bump actions/checkout from 6.0.2 to 6.0.3 in the github-actions group by @dependabot[bot] in https://github.com/inertiajs/inertia/pull/3145
* [3.x] Add cached flag to the inertia:navigate event by @pascalbaljet in https://github.com/inertiajs/inertia/pull/3146
* [3.x] Add inertia:clientVisit event and visit correlation id by @pascalbaljet in https://github.com/inertiajs/inertia/pull/3147
* [3.x] Refactor visit ID to be a string by @pascalbaljet in https://github.com/inertiajs/inertia/pull/3148
* [3.x] Add page and visit id to error event detail by @pascalbaljet in https://github.com/inertiajs/inertia/pull/3152
* [3.x] Add internal request and response interceptors by @pascalbaljet in https://github.com/inertiajs/inertia/pull/3153
* [3.x] Bump Playground dependencies by @pascalbaljet in https://github.com/inertiajs/inertia/pull/3154

Full Changelog: https://github.com/inertiajs/inertia/compare/v3.3.1...v3.4.0

v3.3.1 - 2026-06-04

What's Changed

* [3.x] Vue 3 Playground: Fixes scroll + code issues by @yoeriboven in https://github.com/inertiajs/inertia/pull/3133
* [3.x] Instant visit: only preserve scroll behavior on instant visit by @yoeriboven in https://github.com/inertiajs/inertia/pull/3134
* [3.x] Bump dependencies by @pascalbaljet in https://github.com/inertiajs/inertia/pull/3137
* Dependabot cooldown + auto-merge by @pascalbaljet in https://github.com/inertiajs/inertia/pull/3138

New Contributors

* @yoeriboven made their first contribution in https://github.com/inertiajs/inertia/pull/3133

Full Changelog: https://github.com/inertiajs/inertia/compare/v3.3.0...v3.3.1

v3.3.0 - 2026-05-27

What's Changed

* [3.x] Await user-provided Form onSuccess callback before completing submission by @mattwigham in https://github.com/inertiajs/inertia/pull/3122
* [3.x] Migrate playgrounds from Prism to Laravel AI SDK by @pascalbaljet in https://github.com/inertiajs/inertia/pull/3128
* [3.x] Support network URLs for loading CSS assets in SSR dev server by @simonellensohn in https://github.com/inertiajs/inertia/pull/3121
* [3.x] Pass props to withApp callback by @CL0Pinette in https://github.com/inertiajs/inertia/pull/3125
* [3.x] Run pnpm audit on push and releases, not on PRs by @pascalbaljet in https://github.com/inertiajs/inertia/pull/3129
* [3.x] Fix Svelte infinite scroll unmount race by @hschne in https://github.com/inertiajs/inertia/pull/3127

New Contributors

* @mattwigham made their first contribution in https://github.com/inertiajs/inertia/pull/3122
* @simonellensohn made their first contribution in https://github.com/inertiajs/inertia/pull/3121
* @CL0Pinette made their first contribution in https://github.com/inertiajs/inertia/pull/3125
* @hschne made their first contribution in https://github.com/inertiajs/inertia/pull/3127

Full Changelog: https://github.com/inertiajs/inertia/compare/v3.2.0...v3.3.0

v3.2.0 - 2026-05-20

What's Changed

* [3.x] Bump pnpm by @pascalbaljet in https://github.com/inertiajs/inertia/pull/3099
* [3.x] Pin GitHub Actions to commit SHAs and harden CI workflows by @pascalbaljet in https://github.com/inertiajs/inertia/pull/3097
* Bump actions/upload-artifact from 6.0.0 to 7.0.1 in the github-actions group by @dependabot[bot] in https://github.com/inertiajs/inertia/pull/3100
* [3.x] Add mode option to router.poll by @pascalbaljet in https://github.com/inertiajs/inertia/pull/3093
* [3.x] Support dynamic data in usePoll by @pascalbaljet in https://github.com/inertiajs/inertia/pull/3098
* [3.x] Bump dependencies by @pascalbaljet in https://github.com/inertiajs/inertia/pull/3107
* [3.x] Add Inertia.once for events that fire once by @sebastiandedeyne in https://github.com/inertiajs/inertia/pull/3105
* [3.x] Fix httpException event response data type by @pascalbaljet in https://github.com/inertiajs/inertia/pull/3109
* [3.x] Skip DOM updates when <InfiniteScroll> request is cancelled by @pascalbaljet in https://github.com/inertiajs/inertia/pull/3110
* [3.x] Upgrade to TypeScript 6 by @pascalbaljet in https://github.com/inertiajs/inertia/pull/3108
* [3.x] Improve router.poll throttle semantics and stop+start handling by @pascalbaljet in https://github.com/inertiajs/inertia/pull/3114
* [3.x] Migrate from Prettier and ESLint to Oxfmt and Oxlint by @pascalbaljet in https://github.com/inertiajs/inertia/pull/3115

Full Changelog: https://github.com/inertiajs/inertia/compare/v3.1.1...v3.2.0

v3.1.1 - 2026-05-07

What's Changed

* fix: prevent explicit undefined values from overwriting visit defaults (#3018) by @Vitalcheffe in https://github.com/inertiajs/inertia/pull/3019
* [3.x] Fix Vue <Deferred> SSR crash on sibling slot transitions by @pascalbaljet in https://github.com/inertiajs/inertia/pull/3092

New Contributors

* @Vitalcheffe made their first contribution in https://github.com/inertiajs/inertia/pull/3019

Full Changelog: https://github.com/inertiajs/inertia/compare/v3.1.0...v3.1.1

v3.1.0 - 2026-05-06

What's Changed

* [3.x] Bump dependencies by @pascalbaljet in https://github.com/inertiajs/inertia/pull/3067
* [3.x] Bump CI action versions by @pascalbaljet in https://github.com/inertiajs/inertia/pull/3071
* [3.x] Additional tests for layouts in React by @pascalbaljet in https://github.com/inertiajs/inertia/pull/3073
* [3.0] Fix React useForm submitting stale data after synchronous setData by @skryukov in https://github.com/inertiajs/inertia/pull/3057
* fix(core): support nonce for progress styles by @artemxknpv in https://github.com/inertiajs/inertia/pull/3069
* [3.x] Sandbox error dialog iframe to prevent window.parent access by @pascalbaljet in https://github.com/inertiajs/inertia/pull/3078
* [3.x] Add host option to SSR server by @pascalbaljet in https://github.com/inertiajs/inertia/pull/3077
* [3.x] Block __proto__ in query string parsing by @pascalbaljet in https://github.com/inertiajs/inertia/pull/3079
* [3.x] Bump Playground dependencies by @pascalbaljet in https://github.com/inertiajs/inertia/pull/3081
* [3.x] Escape title content in SSR head output by @pascalbaljet in https://github.com/inertiajs/inertia/pull/3080
* [3.x] Add rescue slot to <Deferred> for failed deferred props by @pascalbaljet in https://github.com/inertiajs/inertia/pull/3076
* [3.x] Improve CSP support for progress bar and error dialog by @pascalbaljet in https://github.com/inertiajs/inertia/pull/3086
* [3.x] Add deferred prop rescue example to playgrounds by @pascalbaljet in https://github.com/inertiajs/inertia/pull/3089

New Contributors

* @artemxknpv made their first contribution in https://github.com/inertiajs/inertia/pull/3069

Full Changelog: https://github.com/inertiajs/inertia/compare/v3.0.3...v3.1.0

v3.0.3 - 2026-04-07

What's Changed

* [3.x] Bump Vite and Vitest by @pascalbaljet in https://github.com/inertiajs/inertia/pull/3046
* [3.x] Update TSConfig and bump CI actions by @pascalbaljet in https://github.com/inertiajs/inertia/pull/3047
* [3.x] Infer form data keys in resetOnSuccess and resetOnError by @pascalbaljet in https://github.com/inertiajs/inertia/pull/3048
* [3.x] Fix layout props callback misclassifying function-valued props as named layouts by @pascalbaljet in https://github.com/inertiajs/inertia/pull/3049
* [3.x] Fix flash event not firing when response contains errors by @skryukov in https://github.com/inertiajs/inertia/pull/3038
* [3.x] Fire flash event after full reload by @skryukov in https://github.com/inertiajs/inertia/pull/3041
* [3.x] Improve Playwright CI cache by @pascalbaljet in https://github.com/inertiajs/inertia/pull/3051
* [3.x] Add onHttpException, onNetworkError, and response to onSuccess in useHttp by @pascalbaljet in https://github.com/inertiajs/inertia/pull/3050

Full Changelog: https://github.com/inertiajs/inertia/compare/v3.0.2...v3.0.3

v3.0.2 - 2026-04-02

What's Changed

* [3.x] Populate percentage in upload progress events by @pascalbaljet in https://github.com/inertiajs/inertia/pull/3030
* [3.x] Add test for optional scroll props by @pascalbaljet in https://github.com/inertiajs/inertia/pull/3032
* [3.x] Warm up lazy-loaded page dependencies in Vite plugin by @pascalbaljet in https://github.com/inertiajs/inertia/pull/3035
* [3.x] Harden CI workflows and fix dependency vulnerabilities by @pascalbaljet in https://github.com/inertiajs/inertia/pull/3031

Full Changelog: https://github.com/inertiajs/inertia/compare/v3.0.1...v3.0.2

v3.0.1 - 2026-03-31

What's Changed

* [3.x] Update Playgrounds by @pascalbaljet in https://github.com/inertiajs/inertia/pull/3013
* [3.x] Support anonymous arrow functions as React layout components by @pascalbaljet in https://github.com/inertiajs/inertia/pull/3016
* [3.x] Fix WhenVisible crash during SSR by @pascalbaljet in https://github.com/inertiajs/inertia/pull/3021
* [3.x] Remove plain <title> when Head component sets a title by @pascalbaljet in https://github.com/inertiajs/inertia/pull/3022
* [3.x] Fix defineOptions({ layout: [...] }) type error with nested layouts by @pascalbaljet in https://github.com/inertiajs/inertia/pull/3023
* [3.x] Fix flash data re-firing on partial reloads by @pascalbaljet in https://github.com/inertiajs/inertia/pull/3024
* [3.x] Warm up SSR module graph on dev server start by @pascalbaljet in https://github.com/inertiajs/inertia/pull/3007

Full Changelog: https://github.com/inertiajs/inertia/compare/v3.0.0...v3.0.1

v3.0.0 - 2026-03-25

What's Changed

* [3.x] Drop support for Svelte 4 by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2713
* [3.x] Remove qs dependency by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2791
* [3.x] Svelte 5 Adapter based on #2586 by @puRe1337 in https://github.com/inertiajs/inertia/pull/2677
* [3.x] Drop support for React < 19 by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2712
* [3.x] Pass props as second argument to resolve() in createInertiaApp() by @HichemTab-tech in https://github.com/inertiajs/inertia/pull/2485
* [3.x] Only reset useForm processing and progress with onFinish by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2838
* [3.x] Bump Node.js to v24 + Bump GitHub CI Actions by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2847
* [3.x] Remove unused pendingVisitOptions parameter by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2853
* [3.x] Remove hideProgress() and revealProgress() exports by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2852
* [3.x] Svelte 5 improvements by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2863
* [3.x] Built-in XHR HTTP client + make Axios an optional peer dependency by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2833
* [3.x] Add useHttp hook for standalone HTTP requests by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2840
* [3.x] Generics in <Form> Component by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2849
* [3.x] Add layout props helpers by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2859
* [3.x] Upgrade Svelte playground to Svelte 5 syntax by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2868
* [3.x] Migrate future options to be new defaults by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2867
* [3.x] Add reloading slot prop to <Deferred> component by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2860
* [3.x] Rename useDataElementForInitialPage to useDataAttributeForInitialPage by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2871
* [3.x] Add preserveErrors option to preserve validation errors during partial requests by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2819
* [3.x] SSR support in Vite development mode + simplified setup by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2864
* [3.x] Rename invalid and exception events and add visit callbacks by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2869
* [3.x] Optimistic updates for router, useForm, and useHttp by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2866
* [3.x] Streamline adapter index.ts exports by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2872
* [3.x] Drop CJS builds in favor of ESM-only output by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2873
* [3.x] Use Precognition 2.x and bump all deps by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2877
* [3.x] Support for withAllErrors in useHttp by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2880
* [3.x] Add optimistic prop to <Form> component by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2881
* [3.x] Add test for named layout persistence across navigations by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2882
* [3.x] Allow calling createInertiaApp() without arguments by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2883
* [3.x] Add layout option to createInertiaApp() by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2884
* [3.x] Update Playgrounds by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2885
* [3.x] Add a singleton for the usePage function by @DavidCCoimbra in https://github.com/inertiajs/inertia/pull/2874
* [3.x] Remove legacy.useDataAttributeForInitialPage config option by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2887
* [3.x] Concurrent optimistic updates by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2898
* [3.x] Preserve URL fragment across redirects with server-side preserveFragment option by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2897
* [3.x] Hash fragment redirect support by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2899
* [3.x] Support nested dot-notation prop types by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2901
* [3.x] Add strictMode option to React's createInertiaApp by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2909
* [3.x] Fix FOUC during SSR development by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2911
* [3.x] Make clearHistory and encryptHistory optional in page object by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2908
* [3.x] Instant visits by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2907
* Include resources directory in published packages by @pushpak1300 in https://github.com/inertiajs/inertia/pull/2914
* [3.x] Consolidate SSR error handling by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2915
* [3.x] Use the popover API for the progress bar by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2917
* [3.x] Minor clean up core package by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2918
* [3.x] Fix axios adapter being required by @skryukov in https://github.com/inertiajs/inertia/pull/2926
* [3.x] Fire onHttpException for server-rendered Inertia error pages by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2927
* [3.x] Fix duplicate base path in Vite SSR CSS link URLs by @isaackaara in https://github.com/inertiajs/inertia/pull/2936
* [3.x] Populate global page store during Svelte 5 SSR by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2938
* [3.x] Stop collecting CSS sub-dependencies during SSR by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2937
* [v3.x] refactor(svelte)!: migrate useLayoutProps from stores to runes by @peaklabs-dev in https://github.com/inertiajs/inertia/pull/2944
* [3.x] fix: remove request from stream on network failure by @Anthony14FR in https://github.com/inertiajs/inertia/pull/2940
* [3.x] Support more createInertiaApp() patterns in SSR transform by @skryukov in https://github.com/inertiajs/inertia/pull/2929
* [v3.x] fix(types): module augmentation example by @peaklabs-dev in https://github.com/inertiajs/inertia/pull/2945
* [3.x] Convert Vue adapter components to Composition API by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2947
* [3.x] fix: always fire flash event regardless of partial reload equality by @Anthony14FR in https://github.com/inertiajs/inertia/pull/2941
* [3.x] Include SharedPageProps in createInertiaApp and event types by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2956
* [3.x] Add withApp callback to createInertiaApp by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2949
* [3.x] fix(type): add Record<string, string> to UrlMethodPair type by @stafast in https://github.com/inertiajs/inertia/pull/2952
* [3.x] Improve optimistic update rollback with multiple pending requests by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2958
* [3.x] Prevent useHttp from parsing empty 204 responses by @entity in https://github.com/inertiajs/inertia/pull/2967
* [3.x] Include SharedPageProps in optimistic update callback types by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2968
* [3.x] Test SSR across multiple Node.js versions in CI by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2969
* [3.x] Migrate from lodash-es to es-toolkit by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2973
* [3.x] Add Vite 8 support, drop Vite 6 by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2974
* [3.x] Fix Infinite Scroll SSR hydration by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2975
* [3.x] Simplify layout props by passing them directly as component prop by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2972
* [3.x] Improve form state stability by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2976
* [3.x] Allow overriding useHttp response type per method call by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2979
* Revert "[3.x] Allow overriding useHttp response type per method call" by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2980
* [3.x] Fix React form not re-rendering memoized children on setData by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2986
* [3.x] Update Boost skills by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2987
* [3.x] Add generic type inference for <Form> optimistic and transform callbacks by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2990
* [3.x] Cleanup of server.js by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2991
* [3.x] Clean up leftover snapshotRef in useFormState by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2992
* [3.x] Additional Vite tests by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2994
* [3.x] Svelte linting fixes by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2995
* [3.x] Rename networkError event detail key to error by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2996
* [3.x] Fix PagesOption type and make setup/withApp mutually exclusive by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2997
* [3.x] Guard against void return from useHttp optimistic callback by @pascalbaljet in https://github.com/inertiajs/inertia/pull/3001
* [3.x] Fix Svelte Form ignoring global withAllErrors config by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2998
* [3.x] Add HttpError base class by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2999
* [3.x] Rename handleErrors SSR option to formatErrors by @pascalbaljet in https://github.com/inertiajs/inertia/pull/3000
* [3.x] Remove deprecated router.cancel() method by @pascalbaljet in https://github.com/inertiajs/inertia/pull/3002
* [3.x] Bump Precognition package by @pascalbaljet in https://github.com/inertiajs/inertia/pull/3006
* [3.x] Refactor Layout Props by @pascalbaljet in https://github.com/inertiajs/inertia/pull/3005

New Contributors

* @puRe1337 made their first contribution in https://github.com/inertiajs/inertia/pull/2677
* @DavidCCoimbra made their first contribution in https://github.com/inertiajs/inertia/pull/2874
* @Anthony14FR made their first contribution in https://github.com/inertiajs/inertia/pull/2940
* @stafast made their first contribution in https://github.com/inertiajs/inertia/pull/2952
* @entity made their first contribution in https://github.com/inertiajs/inertia/pull/2967

Full Changelog: https://github.com/inertiajs/inertia/compare/v2.3.16...v3.0.0

v2.3.16 - 2026-02-24

What's Changed

* Bump @sveltejs/kit from 2.50.2 to 2.52.2 by @dependabot[bot] in https://github.com/inertiajs/inertia/pull/2904
* Add Boost Guidelines & Skills by @pushpak1300 in https://github.com/inertiajs/inertia/pull/2896

New Contributors

* @pushpak1300 made their first contribution in https://github.com/inertiajs/inertia/pull/2896

Full Changelog: https://github.com/inertiajs/inertia/compare/v2.3.15...v2.3.16

v2.3.15 - 2026-02-13

What's Changed

* Bump axios from 1.13.2 to 1.13.5 by @dependabot[bot] in https://github.com/inertiajs/inertia/pull/2888
* [2.x] Fix flash data being cleared by history.replaceState by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2889
* [2.x] Handle bfcache restoration for encrypted history by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2890
* [2.x] Bump dependencies by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2891
* [2.x] Fix InfiniteScroll loading all pages in reverse mode with flex/grid layouts by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2893
* [2.x] Improve flaky tests and test app quality by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2895

Full Changelog: https://github.com/inertiajs/inertia/compare/v2.3.14...v2.3.15

v2.3.14 - 2026-02-11

What's Changed

* [2.x] Shut down entire cluster on SSR shutdown by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2876
* [2.x] Fix useForm type inference when passing data as callback by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2878
* Add global configuration support for withAllErrors in form components by @skryukov in https://github.com/inertiajs/inertia/pull/2865

Full Changelog: https://github.com/inertiajs/inertia/compare/v2.3.13...v2.3.14

v2.3.13 - 2026-01-30

What's Changed

* Fix useForm type inference in generic wrapper components by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2851
* Support wildcard paths in validate() method by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2854

Full Changelog: https://github.com/inertiajs/inertia/compare/v2.3.12...v2.3.13

v2.3.12 - 2026-01-27

What's Changed

* Bump lodash from 4.17.21 to 4.17.23 by @dependabot[bot] in https://github.com/inertiajs/inertia/pull/2835
* Bump lodash-es from 4.17.22 to 4.17.23 by @dependabot[bot] in https://github.com/inertiajs/inertia/pull/2836
* Fix cancellation of concurrent partial reloads with query parameters by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2843
* Support for the formTarget attribute in the <Form> component by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2844
* Clear stale form errors on resubmit by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2845
* Prevent <Deferred> from rendering children with undefined props by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2846

Full Changelog: https://github.com/inertiajs/inertia/compare/v2.3.11...v2.3.12

v2.3.11 - 2026-01-20

What's Changed

* Bump and cleanup dependencies by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2822
* Add test for Precognition validation with transform key changes by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2827
* TS and console error on conflicting useForm() keys by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2823
* Allow useForm without arguments by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2830
* Pass true to inert attribute in React 19 by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2831

Full Changelog: https://github.com/inertiajs/inertia/compare/v2.3.10...v2.3.11

v2.3.10 - 2026-01-15

What's Changed

* Add async and sync options to cancelAll method by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2814
* Fix smooth scrolling in Firefox and add Firefox to CI by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2815
* Improve flaky <InfiniteScroll> test in WebKit CI by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2818
* Pass onceProps as second argument in client-side visit props callback by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2816
* Prevent converting a string response to an object by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2821

Full Changelog: https://github.com/inertiajs/inertia/compare/v2.3.9...v2.3.10

v2.3.9 - 2026-01-14

What's Changed

* Fix React Precognition Error Sync (issue #2806) by @joetifa2003 in https://github.com/inertiajs/inertia/pull/2808
* Add tests for deferred scroll props by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2811
* Fix deferred props not loading after back button navigation by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2812
* Add test for concurrent reloads by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2813
* Cancel in-flight deferred prop requests on navigation by @alexspeller in https://github.com/inertiajs/inertia/pull/2656
* fix: preserve query parameters in test server responses by @alexspeller in https://github.com/inertiajs/inertia/pull/2665
* [2.x] Add Form Context Support by @laserhybiz in https://github.com/inertiajs/inertia/pull/2671

New Contributors

* @joetifa2003 made their first contribution in https://github.com/inertiajs/inertia/pull/2808
* @alexspeller made their first contribution in https://github.com/inertiajs/inertia/pull/2656
* @laserhybiz made their first contribution in https://github.com/inertiajs/inertia/pull/2671

Full Changelog: https://github.com/inertiajs/inertia/compare/v2.3.8...v2.3.9

v2.3.8 - 2026-01-09

What's Changed

* fix: update has more state when resetting before updating page by @AydinHassan in https://github.com/inertiajs/inertia/pull/2787
* Ensure Flash Data listener is registered before event is fired by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2799
* Improve indices detection in mergeDataIntoQueryString() by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2798
* Fix <WhenVisible> re-registering observer when params change by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2804

New Contributors

* @AydinHassan made their first contribution in https://github.com/inertiajs/inertia/pull/2787

Full Changelog: https://github.com/inertiajs/inertia/compare/v2.3.7...v2.3.8

v2.3.7 - 2026-01-07

What's Changed

* Add dontRemember() method to form helper by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2792
* Only call replaceState() when page data has actually changed by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2793
* Fix @typescript-eslint/unbound-method warning when destructuring useForm() methods by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2794

Full Changelog: https://github.com/inertiajs/inertia/compare/v2.3.6...v2.3.7

v2.3.6 - 2025-12-31

What's Changed

* Bump qs from 6.14.0 to 6.14.1 by @dependabot[bot] in https://github.com/inertiajs/inertia/pull/2790

Full Changelog: https://github.com/inertiajs/inertia/compare/v2.3.5...v2.3.6

v2.3.5 - 2025-12-31

What's Changed

* Refresh the Infinite Scroll triggers after partial reload by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2784
* Fix hasAnyState() to actually check for browser history by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2785
* Handle WebKit history throttle errors by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2786
* Merge data and params props in <WhenVisible> by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2789
* Handle QuotaExceededError in WebKit by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2788

Full Changelog: https://github.com/inertiajs/inertia/compare/v2.3.4...v2.3.5

v2.3.4 - 2025-12-19

What's Changed

* Only restore Infinite Scroll state from history on back/forward navigation by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2777

Full Changelog: https://github.com/inertiajs/inertia/compare/v2.3.3...v2.3.4

v2.3.3 - 2025-12-17

What's Changed

* Add support for protocol-relative urls in url.ts by @machour in https://github.com/inertiajs/inertia/pull/2769
* Fix brackets notation qs parsing by @skryukov in https://github.com/inertiajs/inertia/pull/2722
* Support for Flash Data by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2757

New Contributors

* @machour made their first contribution in https://github.com/inertiajs/inertia/pull/2769

Full Changelog: https://github.com/inertiajs/inertia/compare/v2.3.2...v2.3.3

v2.3.2 - 2025-12-16

What's Changed

* Expose InertiaPrecognitiveForm type by @lcdss in https://github.com/inertiajs/inertia/pull/2756
* Test for loading deferred props on router.reload() without only/except by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2761
* Expose fetching in default <WhenVisible> slot by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2766
* Include submitter element value in Form component submission by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2770

Full Changelog: https://github.com/inertiajs/inertia/compare/v2.3.1...v2.3.2

v2.3.1 - 2025-12-12

What's Changed

* Test for Form + Vue Options API by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2750
* Fix for validating items in dynamic arrays by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2753
* Escape forward slashes when using useScriptElementForInitialPage by @kirk-loretz-fsn in https://github.com/inertiajs/inertia/pull/2751
* Sync Playground configs by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2754
* Fix race condition when restoring scroll regions by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2755

New Contributors

* @kirk-loretz-fsn made their first contribution in https://github.com/inertiajs/inertia/pull/2751

Full Changelog: https://github.com/inertiajs/inertia/compare/v2.3.0...v2.3.1

v2.3.0 - 2025-12-11

What's Changed

* Support for Precognition in useForm() by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2684
* Support for Precognition in <Form> component by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2700
* Improve Precognition examples in Playgrounds by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2746
* Improve flaky tests by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2747
* bugfix(whenVisible-vue): Fix loaded state when data already exists by @ClaraLeigh in https://github.com/inertiajs/inertia/pull/2748

New Contributors

* @ClaraLeigh made their first contribution in https://github.com/inertiajs/inertia/pull/2748

Full Changelog: https://github.com/inertiajs/inertia/compare/v2.2.21...v2.3.0

v2.2.21 - 2025-12-10

What's Changed

* Add viewTransition to FormComponentOptions type by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2741
* Preserve untouched Once Props on Partial Reload + Once Props in Playground by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2743
* Only preserve loaded Deferred + Once props by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2745

Full Changelog: https://github.com/inertiajs/inertia/compare/v2.2.20...v2.2.21

v2.2.20 - 2025-12-09

What's Changed

* Bump express from 5.1.0 to 5.2.0 by @dependabot[bot] in https://github.com/inertiajs/inertia/pull/2727
* Add tests for SSR server by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2730
* Preserve errors when loading deferred props by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2729
* Optimize page data size and parsing (37% size reduction!) by @bram-pkg in https://github.com/inertiajs/inertia/pull/2687
* Support for once() props by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2732
* Fix for sequential Client Side Visits by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2737
* Refactor duplicated initial page code by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2738

New Contributors

* @bram-pkg made their first contribution in https://github.com/inertiajs/inertia/pull/2687

Full Changelog: https://github.com/inertiajs/inertia/compare/v2.2.19...v2.2.20

v2.2.19 - 2025-11-27

What's Changed

* Bump dependencies by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2710
* TypeScript fix accessing error keys of optional nested object by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2718
* Use FormValue in Form component by @skryukov in https://github.com/inertiajs/inertia/pull/2709
* Fix anchor hash scrolling on initial page visit in React by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2719
* Ensure page is rendered before scrolling to top by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2721

Full Changelog: https://github.com/inertiajs/inertia/compare/v2.2.18...v2.2.19

v2.2.18 - 2025-11-17

What's Changed

* Ensure objectsAreEqual() checks all keys in both objects by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2705

Full Changelog: https://github.com/inertiajs/inertia/compare/v2.2.17...v2.2.18

v2.2.17 - 2025-11-14

What's Changed

* Reset <WhenVisible> loading state after a page reload by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2699
* Add test for reloading deferred props by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2698
* Force indices array format when submitting data using FormData by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2701

Full Changelog: https://github.com/inertiajs/inertia/compare/v2.2.16...v2.2.17

v2.2.16 - 2025-11-13

What's Changed

* Added test for defaultValue in Form component by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2685
* Prevent navigation on right-click on <Link> with prefetch="click" by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2676
* Export page component type for React adapter by @skryukov in https://github.com/inertiajs/inertia/pull/2691
* Switch useContext to use in usePage() hook by @HichemTab-tech in https://github.com/inertiajs/inertia/pull/2680
* Improve serialization in formDataToObject() when mixing numeric and non-numeric object keys by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2692
* Fix InfiniteScroll scroll preservation by @skryukov in https://github.com/inertiajs/inertia/pull/2689
* Export Inertia App component by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2695
* Ignore preserveScroll and preserveState when finding cached response by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2694
* Upgrade Express server for test apps to v5 by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2693
* Add WebKit browser testing to CI with Safari compatibility fixes by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2696
* Bump symfony/http-foundation from 7.3.4 to 7.3.7 in /playgrounds/vue3 by @dependabot[bot] in https://github.com/inertiajs/inertia/pull/2697
* Fix array keys misalignment in form data and query by @skryukov in https://github.com/inertiajs/inertia/pull/2690

Full Changelog: https://github.com/inertiajs/inertia/compare/v2.2.15...v2.2.16

v2.2.15 - 2025-10-30

What's Changed

* TS Fix for circularly references in form data by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2673
* Improve TS for config defaults by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2674
* [v2.x] feat: allow adding type to router.restore by @peaklabs-dev in https://github.com/inertiajs/inertia/pull/2545
* Configurable prefetch hover delay by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2675

Full Changelog: https://github.com/inertiajs/inertia/compare/v2.2.14...v2.2.15

v2.2.14 - 2025-10-28

What's Changed

* TS cleanup for <Link> component + View Transition prop in Svelte by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2667
* Improve support for any as form data value by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2668

Full Changelog: https://github.com/inertiajs/inertia/compare/v2.2.13...v2.2.14

v2.2.13 - 2025-10-28

What's Changed

* Support for View Transitions by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2658
* Opt-in to using data-inertia attribute in <Head> component by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2663
* Opt-in to using <dialog> for error modals by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2664
* feat: give access to underlying data as object and as form data object by @MeiKatz in https://github.com/inertiajs/inertia/pull/2605

New Contributors

* @MeiKatz made their first contribution in https://github.com/inertiajs/inertia/pull/2605

Full Changelog: https://github.com/inertiajs/inertia/compare/v2.2.12...v2.2.13

v2.2.12 - 2025-10-27

What's Changed

* Clone page props before writing it to the browser's history by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2662

Full Changelog: https://github.com/inertiajs/inertia/compare/v2.2.11...v2.2.12

v2.2.11 - 2025-10-24

What's Changed

* Configure global defaults and update during runtime by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2655
* Stabilize prop references when visiting the same page by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2657

Full Changelog: https://github.com/inertiajs/inertia/compare/v2.2.10...v2.2.11

v2.2.10 - 2025-10-23

What's Changed

* Restore uppercase Component object key in React's App.ts by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2654

Full Changelog: https://github.com/inertiajs/inertia/compare/v2.2.9...v2.2.10

v2.2.9 - 2025-10-21

What's Changed

* Use local @inertiajs/core in Playgrounds + dependencies bump by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2633
* Introduce types for Head Manager by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2634
* Fix resolving preserveScroll and preserveState in Client Side Visits by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2635
* Support for type-hinting shared Page Props by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2636
* Add globals.d.ts file to Playgrounds by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2637
* Remove wrong shouldIntercept() call in keydown event handler in <Link> component by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2638
* Introduce CancelToken and CancelTokenCallback types to replace Axios imports by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2639
* Internal TypeScript improvements by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2640
* Tests and TS improvements for the <Head> component by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2641
* Make data prop of <InfiniteScroll> required by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2642
* TS fixes in Vue adapter for useRemember and remember mixin by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2643
* Bump vite from 5.4.20 to 5.4.21 by @dependabot[bot] in https://github.com/inertiajs/inertia/pull/2647
* TypeScript improvements to createInertiaApp() and unifying it across adapters by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2648
* ESLint check for test-apps by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2560

Full Changelog: https://github.com/inertiajs/inertia/compare/v2.2.8...v2.2.9

v2.2.8 - 2025-10-09

What's Changed

* Prevent false positives in getScrollableParent() by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2626
* Restore scroll regions after navigation by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2627
* Prevent replacing history state when scroll regions are unchanged to fix popstate behavior in WebKit by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2629

Full Changelog: https://github.com/inertiajs/inertia/compare/v2.2.7...v2.2.8

v2.2.7 - 2025-10-07

What's Changed

* Preserve relative URL when <InfiniteScroll> updates query string by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2623
* Use SlotsType to type-hint Vue slots by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2620
* Fix race condition in history.ts by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2624

Full Changelog: https://github.com/inertiajs/inertia/compare/v2.2.6...v2.2.7

v2.2.6 - 2025-10-03

What's Changed

* SSR fixes for <InfiniteScroll> component. by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2616

Full Changelog: https://github.com/inertiajs/inertia/compare/v2.2.5...v2.2.6

v2.2.5 - 2025-10-02

What's Changed

* Improve <InfiniteScroll> cleanup after navigating away by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2610
* Fix for <Form> component when using React SSR by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2612
* Fix conflicting Client Side Visits by queuing the URL synchronization by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2613
* Improvements to <InfiniteScroll> in Svelte adapter by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2614

Full Changelog: https://github.com/inertiajs/inertia/compare/v2.2.4...v2.2.5

v2.2.4 - 2025-09-30

What's Changed

* Compile TS while developing + improve CLI output by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2600
* Improve testing of scroll restoration by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2602
* Fix for reloading an unrelated prop affecting infinite scroll by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2603
* Add preserve-url prop to <Link> component by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2541

Full Changelog: https://github.com/inertiajs/inertia/compare/v2.2.3...v2.2.4

v2.2.3 - 2025-09-29

What's Changed

* Preserve ScrollProp on Partial Reloads by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2597

Full Changelog: https://github.com/inertiajs/inertia/compare/v2.2.2...v2.2.3

v2.2.2 - 2025-09-28

What's Changed

* Reset ScrollProp when requested by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2595

Full Changelog: https://github.com/inertiajs/inertia/compare/v2.2.1...v2.2.2

v2.2.1 - 2025-09-28

What's Changed

* Don't restore remembered state after a refresh by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2591
* Remember Infinite Scroll state by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2592

Full Changelog: https://github.com/inertiajs/inertia/compare/v2.2.0...v2.2.1

v2.2.0 - 2025-09-26

What's Changed

* Support for merging nested prop paths by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2561
* Client-side visit helpers to update props by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2589
* Introduction of the <InfiniteScroll> component by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2580

Full Changelog: https://github.com/inertiajs/inertia/compare/v2.1.11...v2.2.0

v2.1.11 - 2025-09-24

What's Changed

* Fix flaky tests in CI by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2582
* Bump Playwright by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2585
* Progress indicator API by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2581

Full Changelog: https://github.com/inertiajs/inertia/compare/v2.1.10...v2.1.11

v2.1.10 - 2025-09-22

What's Changed

* Fix PNPM publishing by @joetannenbaum in https://github.com/inertiajs/inertia/pull/2578

Full Changelog: https://github.com/inertiajs/inertia/compare/v2.1.9...v2.1.10

v2.1.9 - 2025-09-22

What's Changed

* Fix PNPM build by @joetannenbaum in https://github.com/inertiajs/inertia/pull/2577

Full Changelog: https://github.com/inertiajs/inertia/compare/v2.1.8...v2.1.9

v2.1.8 - 2025-09-22

What's Changed

* Publish packages in CI by @joetannenbaum in https://github.com/inertiajs/inertia/pull/2575

Full Changelog: https://github.com/inertiajs/inertia/compare/v2.1.7...v2.1.8

v2.1.7 - 2025-09-18

What's Changed

* Bump axios from 1.11.0 to 1.12.0 by @dependabot[bot] in https://github.com/inertiajs/inertia/pull/2568
* Bump dependencies by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2571
* TypeScript upgrade by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2573

Full Changelog: https://github.com/inertiajs/inertia/compare/v2.1.6...v2.1.7

v2.1.6 - 2025-09-12

What's Changed

* Invalidate prefetch cache when page is received from a network request by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2567

Full Changelog: https://github.com/inertiajs/inertia/compare/v2.1.5...v2.1.6

v2.1.5 - 2025-09-05

What's Changed

* Fix race condition when combining Deferred Props with an instant Partial Reload on mount by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2562

Full Changelog: https://github.com/inertiajs/inertia/compare/v2.1.4...v2.1.5

v2.1.4 - 2025-09-03

What's Changed

* Replace html-escape with built-in function on Svelte package by @kresnasatya in https://github.com/inertiajs/inertia/pull/2535
* Update dirty state after DOM changes (React only) by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2558
* Prevent errors caused by null href value by @fritz-c in https://github.com/inertiajs/inertia/pull/2550
* Remove data from the dependency array of setDefaults by @jasonlbeggs in https://github.com/inertiajs/inertia/pull/2554

New Contributors

* @fritz-c made their first contribution in https://github.com/inertiajs/inertia/pull/2550
* @jasonlbeggs made their first contribution in https://github.com/inertiajs/inertia/pull/2554

Full Changelog: https://github.com/inertiajs/inertia/compare/v2.1.3...v2.1.4

v2.1.3 - 2025-08-27

What's Changed

* Code formatting with Prettier by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2515
* Add EditorConfig and fix some whitespace issues by @jrmajor in https://github.com/inertiajs/inertia/pull/2516
* Fix for nullable object types in useForm by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2528
* Fix for Form Component in Svelte when resetting use input/button by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2525
* Improve Link component as prop by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2524
* [v2.x] fix: type error by changing page props type to any by @peaklabs-dev in https://github.com/inertiajs/inertia/pull/2520
* Revert to back to Lodash to retain ES2020 compatibility by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2527
* Verify ES2020 compatibility in CI by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2530
* [Vue] Fixing action attribute on Form Component when using Wayfinder by @nicolagianelli in https://github.com/inertiajs/inertia/pull/2532
* Make package.json structure in Svelte package Consistent as Vue and React by @kresnasatya in https://github.com/inertiajs/inertia/pull/2529
* Remove Svelte 5-next version constraint by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2533
* improve typescript configuration by @sudo-barun in https://github.com/inertiajs/inertia/pull/2470
* Format JSON files with Prettier by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2534
* Fix warning about inert attribute in React < 19 by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2536
* Fix keyboard activation when using prefetch: 'click' by @pedroborges in https://github.com/inertiajs/inertia/pull/2538
* Fix useForm to respect manual setDefaults() calls in onSuccess and unify timing across adapters by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2539
* Run Playwright in parallel in CI by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2540
* Fix Coding Standards workflow by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2547
* bumpup axios to fix CVE-2025-7783 by @vallerydelexy in https://github.com/inertiajs/inertia/pull/2546
* Bump @sveltejs/kit version by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2548

New Contributors

* @peaklabs-dev made their first contribution in https://github.com/inertiajs/inertia/pull/2520
* @nicolagianelli made their first contribution in https://github.com/inertiajs/inertia/pull/2532
* @kresnasatya made their first contribution in https://github.com/inertiajs/inertia/pull/2529
* @vallerydelexy made their first contribution in https://github.com/inertiajs/inertia/pull/2546

Full Changelog: https://github.com/inertiajs/inertia/compare/v2.1.2...v2.1.3

v2.1.2 - 2025-08-15

What's Changed

* Fix for manipulating form after redirect in onSubmitComplete by @joetannenbaum in https://github.com/inertiajs/inertia/pull/2510
* Support for passing Wayfinder objects to router methods by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2497
* Tag-based cache invalidation for prefetch requests by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2484
* Add resetOnError, resetOnSuccess, setDefaultsOnSuccess to Form component by @joetannenbaum in https://github.com/inertiajs/inertia/pull/2514

Full Changelog: https://github.com/inertiajs/inertia/compare/v2.1.1...v2.1.2

v2.1.1 - 2025-08-14

What's Changed

* Improve Link component types and support for prefetch events by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2464
* allow passing partial errors object to setError() by @sudo-barun in https://github.com/inertiajs/inertia/pull/2461
* Add missing generic type support to PendingVisit and VisitHelperOptions by @HichemTab-tech in https://github.com/inertiajs/inertia/pull/2454
* Revamp useForm's generic types across adaptors by @Spice-King in https://github.com/inertiajs/inertia/pull/2335
* TypeScript improvements for Link component and Client Side Visits by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2472
* Further TS improvements for useForm by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2475
* Improve consistency in useForm across adapters by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2482
* Improve TypeScript support for Client Side Visit props callback by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2483
* TS improvements to Svelte's <Form> and useForm() implementations by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2489
* Typescript Improvements by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2468
* Test apps in TypeScript by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2469
* Fix empty action in <Form> component when the current URL has more than one segment by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2501
* Support uppercase method in <Form> component by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2502
* Add Form component disableWhileProcessing prop by @joetannenbaum in https://github.com/inertiajs/inertia/pull/2504
* Reset form fields by name in Form components by @skryukov in https://github.com/inertiajs/inertia/pull/2499
* Add onSubmitComplete prop to Form component by @joetannenbaum in https://github.com/inertiajs/inertia/pull/2503
* Remove failed prefetch requests from in-flight array by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2500
* Add defaults() method to Form component by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2507
* Release script by @joetannenbaum in https://github.com/inertiajs/inertia/pull/2508
* Only reset() and defaults() in onSubmitComplete by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2509

New Contributors

* @sudo-barun made their first contribution in https://github.com/inertiajs/inertia/pull/2461

Full Changelog: https://github.com/inertiajs/inertia/compare/v2.1.0...v2.1.1

v2.1.0 - 2025-08-13

What's Changed

* Support for passing custom component to as prop of Link component. by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2443
* Use nodemon to trigger new files and deleted files in test apps by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2442
* Use ReactNode type for children props by @chack1172 in https://github.com/inertiajs/inertia/pull/2385
* Allow function as children component in react Deferred and WhenVisible by @chack1172 in https://github.com/inertiajs/inertia/pull/2386
* Improve test that waits for scroll position restoration by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2473
* Introduction of the Form component by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2474
* Improve children prop of <Form> Component by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2487
* Add Form component ref support by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2496
* Make Svelte's <Deferred> not crash in an SSR environment by @dkulchenko in https://github.com/inertiajs/inertia/pull/2396
* Fix core: Queue processing when an item fails by @pintend in https://github.com/inertiajs/inertia/pull/2467
* Migrate playgrounds to Tailwind 4 by @jrmajor in https://github.com/inertiajs/inertia/pull/2369

New Contributors

* @dkulchenko made their first contribution in https://github.com/inertiajs/inertia/pull/2396
* @pintend made their first contribution in https://github.com/inertiajs/inertia/pull/2467

Full Changelog: https://github.com/inertiajs/inertia/compare/v2.0.17...v2.1.0

v2.0.17 - 2025-07-18

What's Changed

* Bump multer from 2.0.1 to 2.0.2 by @dependabot[bot] in https://github.com/inertiajs/inertia/pull/2447
* Bump vite from 5.4.12 to 5.4.19 by @dependabot[bot] in https://github.com/inertiajs/inertia/pull/2450
* Bump esbuild from 0.21.5 to 0.25.0 by @dependabot[bot] in https://github.com/inertiajs/inertia/pull/2451
* Explicit string coercion in Head component by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2453

Full Changelog: https://github.com/inertiajs/inertia/compare/v2.0.16...v2.0.17

v2.0.16 - 2025-07-18

What's Changed

* Make errorBag parameter optional by @joelstein in https://github.com/inertiajs/inertia/pull/2445

New Contributors

* @joelstein made their first contribution in https://github.com/inertiajs/inertia/pull/2445

Full Changelog: https://github.com/inertiajs/inertia/compare/v2.0.15...v2.0.16

v2.0.15 - 2025-07-17

What's Changed

* Improve GitHub issue templates by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2418
* Escape the attribute values that are passed into the Head component by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2403
* Introduce single method to reset form state and clear errors by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2414
* Use CacheForOption type in React Link component by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2426
* Improve query string merging in mergeDataIntoQueryString() by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2417
* Improve scrolling when using anchor hash by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2428
* Cancel sync request on popstate event by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2429
* Support for path traversal by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2413
* Add event callbacks to ClientSideVisitOptions by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2405
* Pass parameters to onFinish and onSuccess callbacks on Client Side Visits by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2433
* Prevent JS builds and test apps from being minified by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2424
* Migrate to pnpm by @jrmajor in https://github.com/inertiajs/inertia/pull/2276
* Fix single-use prefetching by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2440
* Change defaults values order in onSuccess callback of useForm by @yilanboy in https://github.com/inertiajs/inertia/pull/2437
* Improve reactivity of Link components by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2441

New Contributors

* @yilanboy made their first contribution in https://github.com/inertiajs/inertia/pull/2437

Full Changelog: https://github.com/inertiajs/inertia/compare/v2.0.14...v2.0.15

v2.0.14 - 2025-06-26

What's Changed

* fix: fixed type error in useForm SetDataAction type by @fxnm in https://github.com/inertiajs/inertia/pull/2395
* Call provider.update outside useEffect block to support SSR by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2397
* Improve state restore logic in useRemember by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2401

Full Changelog: https://github.com/inertiajs/inertia/compare/v2.0.13...v2.0.14

v2.0.13 - 2025-06-20

What's Changed

* Allow deepMerge on custom properties by @mpociot in https://github.com/inertiajs/inertia/pull/2344
* fix: React StrictMode breaking Inertia Head by @jordanhavard in https://github.com/inertiajs/inertia/pull/2328
* Bump multer from 1.4.4 to 2.0.1 in /tests/app by @dependabot in https://github.com/inertiajs/inertia/pull/2373
* Initialize router before components in React by @chack1172 in https://github.com/inertiajs/inertia/pull/2379
* Prevent duplicate render of the initial page in React by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2377
* Update default state when setDefault() is called right after setData() is called by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2364
* [2.x] Restore router.resolveComponent() method by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2039
* Move currentIsInitialPage variable outside of App by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2381
* Don't overwrite Vite class in Svelte playgrounds by @jrmajor in https://github.com/inertiajs/inertia/pull/2368
* Dependency update + Prevent Playwright 1.53.0 due to Svelte bug by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2382
* Update to Vite 6 by @SuperDJ in https://github.com/inertiajs/inertia/pull/2315
* Fix React scroll restoration on popState by @sebastiandedeyne in https://github.com/inertiajs/inertia/pull/2357
* feat(useForm): export granular setData types and introduce SetDataAction<TForm> by @hasib-devs in https://github.com/inertiajs/inertia/pull/2356
* Refactor mergeStrategies to matchOn by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2384
* Remove setSwapComponent method and cleanup after PR #2379 by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2383

New Contributors

* @jordanhavard made their first contribution in https://github.com/inertiajs/inertia/pull/2328
* @chack1172 made their first contribution in https://github.com/inertiajs/inertia/pull/2379
* @jrmajor made their first contribution in https://github.com/inertiajs/inertia/pull/2368
* @SuperDJ made their first contribution in https://github.com/inertiajs/inertia/pull/2315
* @hasib-devs made their first contribution in https://github.com/inertiajs/inertia/pull/2356

Full Changelog: https://github.com/inertiajs/inertia/compare/v2.0.12...v2.0.13

v2.0.12 - 2025-06-10

What's Changed

* Send Purpose: prefetch header on prefetching by @pascalbaljet in https://github.com/inertiajs/inertia/pull/2367

New Contributors

* @pascalbaljet made their first contribution in https://github.com/inertiajs/inertia/pull/2367

Full Changelog: https://github.com/inertiajs/inertia/compare/v2.0.11...v2.0.12

v2.0.11 - 2025-05-16

What's Changed

* Fix progress bar not showing on subsequent page clicks by @joetannenbaum in https://github.com/inertiajs/inertia/pull/2349

Full Changelog: https://github.com/inertiajs/inertia/compare/v2.0.10...v2.0.11

v2.0.10 - 2025-05-15

What's Changed

* Don't show progress bar on prefetch hover by @joetannenbaum in https://github.com/inertiajs/inertia/pull/2347

Full Changelog: https://github.com/inertiajs/inertia/compare/v2.0.9...v2.0.10

v2.0.9 - 2025-05-09

What's Changed

* Bump @sveltejs/kit from 2.11.1 to 2.20.6 by @dependabot in https://github.com/inertiajs/inertia/pull/2312
* Bump vite from 5.4.17 to 5.4.18 by @dependabot in https://github.com/inertiajs/inertia/pull/2307
* Fix for deferred props + prefetch links by @joetannenbaum in https://github.com/inertiajs/inertia/pull/2321
* Progress: Make hide and reveal CSP-compatible by @flexponsive in https://github.com/inertiajs/inertia/pull/2316
* Corrected URL search parameter merge logic to match behavior prior to v2.0.8 by @joetannenbaum in https://github.com/inertiajs/inertia/pull/2341
* Corrects url search parameter merge logic to match behavior prior to v2.0.8 by @CTOJoe in https://github.com/inertiajs/inertia/pull/2320
* Bump vite from 5.4.18 to 5.4.19 by @dependabot in https://github.com/inertiajs/inertia/pull/2334
* On back button, fetch from server if version hash is not current by @joetannenbaum in https://github.com/inertiajs/inertia/pull/2342
* Allow custom URL protocols by @mpociot in https://github.com/inertiajs/inertia/pull/2329

New Contributors

* @flexponsive made their first contribution in https://github.com/inertiajs/inertia/pull/2316
* @CTOJoe made their first contribution in https://github.com/inertiajs/inertia/pull/2320

Full Changelog: https://github.com/inertiajs/inertia/compare/v2.0.8...v2.0.9

v2.0.8 - 2025-04-10

What's Changed

* Add deepMerge Support for Merging Nested Arrays and Objects in Props by @HichemTab-tech in https://github.com/inertiajs/inertia/pull/2069
* fix: build error because of invalid type definitions by @fxnm in https://github.com/inertiajs/inertia/pull/2301
* fix(vue/useForm/defaults): untrack before assign by @Dsaquel in https://github.com/inertiajs/inertia/pull/2112
* Improve type checking of request data by @7nohe in https://github.com/inertiajs/inertia/pull/2304
* Remove empty payload from GET requests by @edgars-vasiljevs in https://github.com/inertiajs/inertia/pull/2305

New Contributors

* @HichemTab-tech made their first contribution in https://github.com/inertiajs/inertia/pull/2069
* @fxnm made their first contribution in https://github.com/inertiajs/inertia/pull/2301
* @Dsaquel made their first contribution in https://github.com/inertiajs/inertia/pull/2112

Full Changelog: https://github.com/inertiajs/inertia/compare/v2.0.7...v2.0.8

v2.0.7 - 2025-04-08

What's Changed

* Added missing pages to React and Svelte5 playrounds by @Verox001 in https://github.com/inertiajs/inertia/pull/2217
* chore: replace lodash to decrease bundle size by @lcdss in https://github.com/inertiajs/inertia/pull/2210
* do not pass url when storing scroll state to history by @miDeb in https://github.com/inertiajs/inertia/pull/2280
* fix: react Deferred component error on partial visits by @KaioFelps in https://github.com/inertiajs/inertia/pull/2223
* Bump vite from 5.4.16 to 5.4.17 by @dependabot in https://github.com/inertiajs/inertia/pull/2295
* [2.x] SSR clustering by @RobertBoes in https://github.com/inertiajs/inertia/pull/2206
* Allow Object type for href prop by @nckrtl in https://github.com/inertiajs/inertia/pull/2292
* Update GitHub Actions to Ubuntu 24.04 by @joetannenbaum in https://github.com/inertiajs/inertia/pull/2299
* [2.x]: Support for nested paths in forms by @joaopalopes24 in https://github.com/inertiajs/inertia/pull/2181

New Contributors

* @Verox001 made their first contribution in https://github.com/inertiajs/inertia/pull/2217
* @lcdss made their first contribution in https://github.com/inertiajs/inertia/pull/2210
* @miDeb made their first contribution in https://github.com/inertiajs/inertia/pull/2280
* @KaioFelps made their first contribution in https://github.com/inertiajs/inertia/pull/2223
* @nckrtl made their first contribution in https://github.com/inertiajs/inertia/pull/2292
* @joaopalopes24 made their first contribution in https://github.com/inertiajs/inertia/pull/2181

Full Changelog: https://github.com/inertiajs/inertia/compare/v2.0.6...v2.0.7

v2.0.6

- Deferred: More descriptive Deferred data prop error (#2284)
- Bump vite from 5.4.12 to 5.4.16 (#2288)
- Fix location return history decryption throwing error (#2282)
- Make isDirty reactive to defaults (#2236)
- Fix playground WhenVisible always (#2203)
- Wayfinder support (#2290)

v2.0.5

- Fix history state errors by nicholaspufal (#2265)
- Bump axios from 1.7.9 to 1.8.2 (#2269)
- Bump esbuild from 0.16.17 to 0.25.0 #2231 (#2231)
- Bump vite from 5.4.11 to 5.4.12 (#2201)

v2.0.4

- Fix anchor links on initial visits (#2258)

v2.0.3

- Fix: Reload on mount (#2200)

v2.0.2

- Fix SSR with scroll restoration (#2190)
- Fix for scroll + back bug (#2191)
- Backport 1.x fixes from v1.3.0 release (#2193)

v2.0.1

- Fix playground dependencies (#2070)
- Removed Vitest tests + dependencies (#2175)
- Augment vue instead of @vue/runtime-core (#2099)
- Fix prefetch missing cacheFor default value (#2136)
- Fix useForm re-renders by memoizing functions in React #2146
- WhenVisible useEffect function is not recreated when params change. (#2153)
- Ensure callback execution (#2163)
- More resilient logic for stripping the origin from page URLs (#2164)
- Add helper scripts for running tests (#2173)
- Export InertiaFormProps in React (#2161)
- Use default empty object in useForm Vue and Svelte (#2052)
- Remove data option from useForm options type (#2060)
- Take over scroll restoration from browser (#2051)

v2.0.0

Added

- Add polling
- Add link prefetching
- Add deferred props
- Add lazy loading of data when scrolling
- Add history encryption API
- Add React 19 support (#2131)
- Add client side visits (#2130)

Changed

- Removal of NProgress dependency (#2045)
- Change TypeScript module resolution in the Svelte adapter (#2035)
- Refactor createInertiaApp in Svelte adapter (#2036)

Fixed

- Fix: make Link href prop reactive (#2089)

v1.3.0

Added

- Add React 19 support (#2121)
- Add Svelte 5 support (#1970)
- Add TypeScript support to Svelte adapter (#1866, 69292e, #2003, #2005)

Changed

- Skip intercepting non-left button clicks on links (#1908, #1910)
- Changed preserveScroll to be true on initial page visit (#1360)
- Return early when using router.on() during SSR (#1715)
- Use updater function in setData in useForm hook in React adapter (#1859)

Fixed

- Fix history navigation issue on Chrome iOS (#1984, #1992)
- Fix setNavigationType for Safari 10 (#1957)
- Export InertiaFormProps in all adapters (#1596, #1734)
- Fix isDirty after form.defaults() call in Vue 3 (#1985)
- Fix scroll reset on page navigation (#1980)
- Fix scroll position restoration for [scroll-region] elements (#1782, #1980)
- Fix useForm re-renders by memoizing functions in React adapter (#1607)
- Fix doubling hash when using <React.StrictMode> (#1728)
- Fix type augmentation in Vue 3 adapter (#1958)
- Fix form helper transform return type in React adapter (#1896)
- Fix props reactivity in Svelte adapter (#1969)
- Fix <Render /> component to respect preserveState option in Svelte adapter (#1943)
- Fix 'received an unexpected slot "default"' warning in Svelte adapter (#1941)
- Fix command + click behavior on links in React adapter (#2132)
- Fix import in Svelte adapter (#2002)

v1.2.0

- Fix preserveScroll and preserveState types (#1882)
- Revert "merge props from partial reloads" (#1895)

v1.1.0

- Add new except visit option to exclude props from partial reloads (#1876)
- Deep merge props from partial reloads (#1877)

v1.0.16

- Fix Svelte 4 slot rendering issues (#1763)
- Fix accessibility warning in Svelte Link component (#1858)
- Use Omit instead of Exclude in router types (#1857)

v1.0.15

- Bump axios from v1.4.0 to v1.6.0 (#1723)

v1.0.14

- Revert "Clear errors on form reset (#1568)" (#1716)

v1.0.13

- Clear errors on form reset (#1568)
- Fix Link type in React (#1659)

v1.0.12

- Fix type of onClick for Link component in React and Vue (#1699, #1701)

v1.0.11

- Fix form helper types for setDefaults() method (React) and defaults() method (Vue) (#1504)
- Fix interface issue with useForm() in React and Vue adapters (#1649)

v1.0.10

- Fix Svelte's useForm helper (#1610)

v1.0.9

- Fix <Head> vNode handling in Vue 3 adapter (#1590)
- Add Svelte 4 support (60699c7)

v1.0.8

Fixed

- Fix <Head> vNode handling in Vue 3 adapter (#1570)
- Fix watching remembered data in Vue 3 adapter (#1571)

v1.0.7

Fixed

- Fix <Head> fragment detection in Vue 3 adapter (#1509)

v1.0.6

Fixed

- Fix usePage() null object error in Vue 3 adapter (#1530)

v1.0.5

Fixed

- Fix usePage() reactivity in Vue 2 adapter (#1527)

Changed

- Simplify the Vue 2 form helper (#1529)

v1.0.4

Added

- Added displayName to Link component in React adapter (#1512)

Fixed

- Fix usePage() reactivity in Vue 3 adapter (#1469)

v1.0.3

Added

- Added initialization callback to form helper in Vue adapters (#1516)

v1.0.2

Fixed

- Added explicit children to InertiaHeadProps (#1448)
- Exported InertiaLinkProps type (#1450)
- Improved React usePage generic type (#1451)

v1.0.1

Fixed

- Fixed Vue type overrides for $page and $inertia (#1393)
- Restored React usePage generic type (#1396)
- Prevented need to use Method enum with the Link component (#1392)
- Restored Vue 3 usePage generic type (#1394)
- Fixed export of server types (#1397)
- Updated form types to support nested data (#1401)
- Allowed stronger type support with Vue useForm (#1413)
- Fixed Vue 2 setup prop types (#1418)
- Fixed issue when passing multiple children to React Head component (#1433)

v1.0.0 - 2023-01-14

Added

- Added SSR support to Svelte library (#1349)
- Added first-class TypeScript support to React adapter
- Added first-class TypeScript support to Vue 2 adapter
- Added first-class TypeScript support to Vue 3 adapter
- Added new useForm() hook to Vue 2 adapter (ff59196)

Changed

- Renamed @inertiajs/inertia library to @inertiajs/core (#1282)
- Renamed @inertiajs/inertia-react library to @inertiajs/react (#1282)
- Renamed @inertiajs/inertia-svelte library to @inertiajs/svelte (#1282)
- Renamed @inertiajs/inertia-vue library to @inertiajs/vue2 (#1282)
- Renamed @inertiajs/inertia-vue3 library to @inertiajs/vue3 (#1282)
- Merged progress library to core and deprecated @inertiajs/progress library (#1282, 0b5f773)
- Merged server library to core and deprecated @inertiajs/server library (#1282)
- Renamed Inertia named export to router (#1282, e556703)
- Removed deprecated named exports (#1282, e556703)
- Removed deprecated app argument from createInertiaApp() in Vue adapters (#1282, 65f8a5f)
- Updated axios to 1.x (#1377)
- Simplified usePage() hook in Vue 3 adapter (#1373)
- Improved Svelte use:inertia and <Link /> component (#1344)
- Removed global visitOptions() hook (#1282, 30908c2)
- Switched bundler from Microbundle to ESbuild (f711b46, 8093713, 342312d, c9e12b3)

Fixed

- Fixed <title> tag not always being included when a title callback is defined in createInertiaApp() (#1055)
- Fixed types to include undefined as a valid FormDataConvertable option (#1165)
- Fixed issue where remembered state wasn't clear on a full page reload (769f643)

---

CONTRIBUTING

Contributing

Thank you for your interest in contributing to Inertia.js! Your contributions help make this project better for everyone.

Inertia.js is maintained as a monorepo using pnpm workspaces. Below you'll find an overview of the repository and how to get your development environment running.

Note: You'll need pnpm version 10 or higher. If you're unsure which version you have, run pnpm -v.

Repository Overview

text
inertia/
├── packages/ Core libraries and framework adapters
│ ├── core/ Framework-agnostic core library
│ ├── react/ React adapter
│ │ └── test-app/ React test application
│ ├── svelte/ Svelte adapter
│ │ └── test-app/ Svelte test application
│ └── vue3/ Vue 3 adapter
│ └── test-app/ Vue 3 test application
├── playgrounds/ Full Laravel applications for manual testing
│ ├── react/ Laravel + React
│ ├── svelte4/ Laravel + Svelte 4
│ ├── svelte5/ Laravel + Svelte 5
│ └── vue3/ Laravel + Vue 3
└── tests/ End-to-end tests and test server
├── app/ Shared Node.js backend
└── *.spec.ts Playwright test suite

Key Components

- Core Library: The framework-agnostic engine powering all adapters (packages/core).
- Adapters: Framework-specific integrations for React, Svelte, and Vue.
- Test Applications: Minimal frontend apps used for automated testing (packages/*/test-app/).
- Playwright Tests: Framework-agnostic end-to-end tests that verify behavior across adapters (tests/*.spec.ts).
- Playgrounds: Full Laravel applications for manual testing (playgrounds/). These are optional and may eventually be removed.

Getting Started

Clone the repository and install the dependencies:

sh
git clone https://github.com/inertiajs/inertia.git inertia
cd inertia
pnpm install

Then, start the development environment:

sh
pnpm dev

This builds the core library and all adapters, and starts a file watcher that will automatically rebuild each package when changes are made.

If you prefer, you can also start individual watchers from each package directory. For example:

sh
cd packages/core && pnpm dev
cd packages/react && pnpm dev

Note: The core package (packages/core) must always be running, as all adapters depend on it.

Running Tests

Inertia.js uses Playwright to run a shared end-to-end test suite against each adapter. This is how we verify that Inertia behaves the same across React, Svelte, and Vue.

Run the test suite for a specific adapter:

sh
pnpm test:react
pnpm test:svelte
pnpm test:vue

These commands automatically set a PACKAGE environment variable that tells the Node.js test server which adapter to serve. For example, when running pnpm test:react, the test server loads the React test application.

If you want to run Playwright directly, you can pass the environment variable yourself:

sh
PACKAGE=react playwright test

You may filter tests by name:

sh
pnpm test:react -g "partial reload"

Run tests in headed mode (to see the browser):

sh
pnpm test:vue --headed

Or in debug mode:

sh
pnpm test:vue --debug

How the Test Setup Works

All adapters use the same Node.js backend and Playwright test suite. The only difference is which adapter's test app is served.

text
tests/app/server.js         Shared Node.js backend
├── serves: react test app (when PACKAGE=react)
├── serves: svelte test app (when PACKAGE=svelte)
└── serves: vue test app (when PACKAGE=vue3)

tests/*.spec.ts Shared Playwright test suite

When running a test command, the correct adapter is selected automatically:

| Adapter | PACKAGE value | Test server port | App URL |
| ------- | --------------- | ---------------- | -------------------------------------------------- |
| React | react | 13716 | http://localhost:13716/ |
| Svelte | svelte | 13717 | http://localhost:13717/ |
| Vue 3 | vue3 | 13715 | http://localhost:13715/ |

Automatic Test Server Boot

You do not need to start the test server manually. When you run a test, Playwright automatically builds the frontend for the selected adapter and boots the Node.js test server before running the tests. This is configured in the Playwright config (playwright.config.ts) using the webServer option. If a server is already running (for example, during local development), Playwright will reuse it.

Running Test Applications

The test applications are the primary development environments for Inertia.js. These minimal apps cover all supported features and are used for both manual development and automated end-to-end testing.

Run all test apps at once:

sh
pnpm dev:test-app

Or start an individual one:

sh
pnpm dev:test-app:react
pnpm dev:test-app:svelte
pnpm dev:test-app:vue

Each test app runs two servers:

- A Node.js backend that automatically restarts when changed
- A Vite development server for the frontend

If you are developing a new feature or fixing a bug, you can use these test apps to develop and test your changes.

Adding Tests

If you are fixing a bug, adding a feature, or improving existing functionality, please verify that your changes work across all adapters, not just one.

1. Add Frontend Pages

Create the same frontend page in each test application:

text
packages/react/test-app/Pages/YourFeature.jsx
packages/svelte/test-app/Pages/YourFeature.svelte
packages/vue3/test-app/Pages/YourFeature.vue

Each page should provide the same behavior and functionality.

2. Add Backend Routes (If Needed)

If your change requires a backend route, add it to the shared Node.js test server:

javascript
// tests/app/server.js
app.get('/your-feature', (req, res) =>
inertia.render(req, res, {
component: 'YourFeature',
props: { foo: 'bar' },
}),
)

3. Write a Playwright Test

Add a new Playwright test to verify your change. Playwright allows us to test features across all adapters without duplicating test logic.

typescript
// tests/your-feature.spec.ts
import { test, expect } from '@playwright/test'

test('your feature works', async ({ page }) => {
await page.goto('/your-feature')
// Your assertions here
})

4. Run the Tests in All Adapters

Be sure to run your test for each adapter:

sh
pnpm test:react -g "your feature"
pnpm test:svelte -g "your feature"
pnpm test:vue -g "your feature"

Your work is not considered complete until it works consistently across all frameworks.

Using the Playgrounds (Optional)

The repository also includes several full Laravel applications that integrate Inertia.js. These are optional and mostly useful for manually exploring how Inertia works inside a real Laravel app.

The playgrounds are provided as-is and are not part of the automated test setup. They may be removed in the future.

Getting Started

To start a playground, simply run:

sh
pnpm playground:react

The playground script will automatically handle initial setup if needed:
- Installing PHP dependencies via Composer
- Installing Node.js dependencies via pnpm
- Creating the .env file from .env.example
- Generating the application key
- Setting up the SQLite database
- Running migrations with seed data

Visit the application at http://127.0.0.1:8000.

Each playground has its own pnpm script:

sh
pnpm playground:react
pnpm playground:svelte4
pnpm playground:svelte5
pnpm playground:vue

Publishing (Maintainers Only)

Releasing is handled by the included release script. You'll need both the git CLI and the GitHub CLI (gh) installed. To create a new release:

sh
./release.sh

The script will:
- Ensure you're on the master branch with a clean working tree
- Prompt you to select the type of version bump (patch, minor, or major)
- Update all package versions automatically
- Update the lockfile
- Create a git commit and tag
- Push changes and tags to GitHub
- Create a GitHub release with auto-generated notes
- Trigger the CI publishing workflow

Publishing is handled securely using GitHub + npm trusted publishing.

---

README

[](https://inertiajs.com/)

About Inertia.js

Inertia.js lets builders ship modern single-page applications in React, Vue, or Svelte without building an API. Your backend keeps doing what it already does well: routing, controllers, models, authorization, validation. Instead of returning a template, it returns a page component with its data. Inertia connects the two halves, so a click never triggers a full page reload.

It all stays in one application: one codebase, one router, one source of truth, and the single-page experience your users expect. Fewer moving parts means fewer decisions between an idea and a production application, whether a human or an agent is writing the code.

Everything a real product needs, designed to work together:

- Page visits, forms, file uploads with progress, and server-side validation
- Optimistic updates that render before the server responds and roll back if it fails
- Partial reloads, deferred props, prefetching, polling, and infinite scroll
- Server-side rendering, code splitting, and view transitions
- History encryption for pages that hold sensitive data
- DevTools that show every request, header, and hydrated prop while you build

Adapters

Inertia is the layer between your backend and your frontend, and it works through adapters. It doesn't replace the frameworks you already use, on either side. The React, Vue, and Svelte adapters all live in the inertiajs/inertia repository. On the server, the Laravel adapter is officially maintained, and community adapters cover Rails, Phoenix, Django, Symfony, AdonisJS, Go, .NET, and more.

Laravel's official React, Vue, and Svelte starter kits are built on Inertia. A new application begins with login, registration, password resets, email verification, two-factor authentication, and profile settings already working.

Learning Inertia.js

The documentation takes you from installation to how the protocol works under the hood. Prefer to read code? The demo application is a mini CRM built with Laravel and Vue, with showcase pages for forms, navigation, data loading, prefetching, state management, and error handling. Its source is in the demo-v3 repository.

Deploying Inertia.js

An Inertia application runs anywhere your backend does. The fastest path from idea to production is Laravel Cloud. Connect a repository and you can deploy a app in under a minute. There are no servers to configure, and your asset build and SSR server are handled for you. Add a managed database, cache, or object storage in seconds, with the right environment variables connected for you automatically. With Flex compute, your full stack scales to zero when it's idle and wakes in under 500 milliseconds, which means staging environments and side projects cost nothing while nobody is using them. The Starter plan is $5 a month and comes with $5 in usage credits included. Try Cloud with your first month for free.

Contributing

Thank you for considering contributing to Inertia! You can read the contribution guide here.

Code of Conduct

In order to ensure that the Laravel community is welcoming to all, please review and abide by the Code of Conduct.

Security Vulnerabilities

Please review our security policy on how to report security vulnerabilities.

License

Inertia is open-sourced software licensed under the MIT license.

---