Key details

  1. Inertia.js v3.9.0 released October 13, 2026.
  2. History clearing flushes prefetch cache, including in-flight response protection.
  3. Previous issue could display cached protected content after logout; no server authorization bypass established.
  4. `usePoll()`/`router.poll()` gain `background` modes `throttle`, `pause`, `continue`; `keepAlive` deprecated.
  5. `navigate` event adds `type` (`initial`, `visit`, `history`).
  6. InfiniteScroll and back-button race conditions fixed.

What builders should take away

  1. Upgrade to Inertia.js 3.9.0 or later if your app uses history clearing during logout and prefetches protected pages.
  2. Test logout and Back/Forward on shared-device scenarios; clear other app-level caches where necessary.
  3. Choose `background: 'pause'` for polling that should not consume requests while a tab is hidden.
  4. Use history navigation type to refresh stale props and retest infinite-scroll filters during rapid navigation.

What changed

Inertia.js v3.9.0, released October 13, 2026, changes `router.clearHistory()` and server-directed `Inertia::clearHistory()` to flush the prefetch cache alongside encrypted browser history. Previously, a user who logged out and pressed Back could receive a prefetched copy of a protected page until that entry expired. The fix also prevents in-flight prefetch requests from repopulating the cache after a flush. Other changes add `background: 'pause' | 'throttle' | 'continue'` to `usePoll()`/`router.poll()`, expose `navigate` event `type` values to distinguish history restores, and cancel stale `<InfiniteScroll>` callbacks that could merge old results after navigation.

Why it matters

Client-side navigation caches create a separate boundary from server authentication. Even when the server denies protected requests after logout, cached UI content may remain visible on the same browser until explicitly invalidated. For shared devices or sensitive applications, a logout flow should clear local history and prefetch state together. The v3.9 fix addresses that display/cache problem; it does not establish a server-side authorization bypass. Polling and navigation fixes prevent unnecessary background requests and stale data appearing under a new route.

Logout history clearing now also clears prefetch state

Upstream PR #3307 confirms clearing encrypted history alone was insufficient. A back-button visit could be served from prefetch cache and show a previously protected page after logout. Version 3.9 flushes that cache and prevents requests already in flight from caching their results. `router.flushAll()` receives the same protection. This is a local display/privacy concern, not evidence of server authorization bypass.

Polling becomes explicit in hidden tabs

The new `background` option accepts `throttle` (default, prior one-in-ten hidden-tab polling), `pause` (no polling until visible), or `continue` (full interval). `keepAlive` remains supported but deprecated in favour of `background: 'continue'`. A paused poll resumes on visibility without indiscriminately firing on every tab switch.

Navigation restores and infinite scroll receive correctness fixes

The `navigate` event identifies `initial`, `visit` and `history` navigation, allowing apps to refresh stale props after Back/Forward restores. In-flight `<InfiniteScroll>` requests are cancelled on unmount and late callbacks ignored; previously, responses from a prior filter/sort URL could merge into a new list. Another fix prevents an in-flight page update from replacing a just-restored history page.

What to watch next

  • Follow-up fixes for logout/history cache invalidation and late prefetch responses.
  • Whether maintainers publish a security advisory or CVE.
  • App-specific tests confirming sensitive data cannot remain visible in additional client caches after logout.

Still unclear

  • This is cached client display, not a demonstrated server-side authentication bypass.
  • Sensitivity depends on prefetched data and whether the device is shared.
  • The release does not guarantee application-level caches are all cleared.

Sources

Direct reading behind this dossier.

3 sources

Discussion

Discussion is reader-contributed. Comments are not part of the BTN dossier or its editorial evidence.

0 visible comments

Join the discussion

Keep comments useful and relevant. Reader contributions may be moderated and are not BTN editorial evidence.

Sign in to comment