v16.3.0-canary.96
- [sourcemaps] Use file: sourcemaps for Turbopack to improve dev performance: #95946
- Give RouteCacheEntry a single hidden class across its lifecycle: #96164
- Keep optimistic-route param handling monomorphic: #96169
- Store RouteTree slots in a Map to keep slot access monomorphic: #96168
- Make reifyRouteTree object literals match the canonical RouteTree key order: #96162
- Keep VaryPath monomorphic by making isRootParam required: #96122
- docs: expand and modernize the Single-Page Applications guide: #95860
- docs: navigation interrupts after streaming has started (notFound, forbidden, unauthorized): #95851
- docs: reframe prefetching around automatic vs. controllable behavior: #95896
- docs(view-transitions): fix the skill install command: #96142
- Include additional prerender metadata about build-time routes: #96080
- Optimize app page entry analysis: #96058
- [ts-plugin] Preserve TypeScript quick info metadata: #95863
- [turbopack] Import Webpack's tests for tree-shaking: #95811
- [turbopack] Drop dead
require()calls: #95718 - [turbopack] Track usage of modules imported with
require(): #95717 - Return plain text 404 for non-document requests to unknown paths: #95930
- [RSC HMR] Fix a flurry of refetches when a editing component imported from many routes: #96102
- [turbopack] Track re-exports in
import_usageinside ofcompute_import_usage: #95989
Huge thanks to @gaearon, @acdlite, @aurorascharff, @gnoff, @timneutkens, @devjiwonchoi, and @sampoder for helping!
v7.0.2
- FEATURE: Restored Bootstrap 5 support (originally omitted from v7) (#8040)
- FIX: Vue 3 types for template ref for
getApi(#8086) - FIX: Angular DOM-insertion JS error with
#eventContent(#8085)
Release 2026-07-24 17:14
Release 2026-07-24 17:14
- router: final-review regressions, changeset, and byte recovery (#7883) (baa18cd913) by @Sheraff
- router: address lane loader regressions (#7880) (90a7f3923c) by @Sheraff
- router-core: harden lane loading lifecycle (#7869) (1f271022b5) by @Sheraff
- router-core: complete lane match loader rewrite (#7858) (423f905df8) by @Sheraff
- preload always releases its borrowed lease (da5cb82da9) by @Sheraff
- react-router not found ambiguous assertion (bf9060267c) by @Sheraff
- solid Transitionner unsub cleanup before early return (fb21a428b0) by @Sheraff
- lane match loader rewrite (ceaa4d26f2) by @Sheraff
- router: reduce SSR lane loading overhead (#7875) (03a1fde261) by @Sheraff
- migrate to typescript 7 (#7887) (88f366ab8e) by @schiller-manuel
- router-core: lane match loader final byte-shave (#7885) (55ceb3a3e4) by @Sheraff
- add React Start basic Rsbuild example (#7729) (21a8597952) by @SyMind
- @tanstack/arktype-adapter@1.167.1-pre.0
- @tanstack/react-router@1.170.19-pre.0
- @tanstack/react-router-devtools@1.167.1-pre.0
- @tanstack/react-router-ssr-query@1.167.2-pre.0
- @tanstack/react-start@1.168.33-pre.0
- @tanstack/react-start-client@1.168.17-pre.0
- @tanstack/react-start-rsc@0.1.32-pre.0
- @tanstack/react-start-server@1.167.23-pre.0
- @tanstack/router-cli@1.167.22-pre.0
- @tanstack/router-core@1.171.16-pre.0
- @tanstack/router-devtools@1.167.1-pre.0
- @tanstack/router-devtools-core@1.168.1-pre.0
- @tanstack/router-generator@1.167.22-pre.0
- @tanstack/router-plugin@1.168.24-pre.0
- @tanstack/router-ssr-query-core@1.169.2-pre.0
- @tanstack/router-vite-plugin@1.167.24-pre.0
- @tanstack/solid-router@1.170.19-pre.0
- @tanstack/solid-router-devtools@1.167.1-pre.0
- @tanstack/solid-router-ssr-query@1.167.2-pre.0
- @tanstack/solid-start@1.168.33-pre.0
- @tanstack/solid-start-client@1.168.17-pre.0
- @tanstack/solid-start-server@1.167.23-pre.0
- @tanstack/start-client-core@1.170.15-pre.0
- @tanstack/start-plugin-core@1.171.25-pre.0
- @tanstack/start-server-core@1.169.18-pre.0
- @tanstack/start-static-server-functions@1.167.20-pre.0
- @tanstack/start-storage-context@1.167.18-pre.0
- @tanstack/valibot-adapter@1.167.1-pre.0
- @tanstack/vue-router@1.170.18-pre.0
- @tanstack/vue-router-devtools@1.167.1-pre.0
- @tanstack/vue-router-ssr-query@1.167.2-pre.0
- @tanstack/vue-start@1.168.32-pre.0
- @tanstack/vue-start-client@1.167.20-pre.0
- @tanstack/vue-start-server@1.167.23-pre.0
- @tanstack/zod-adapter@1.167.1-pre.0
@tanstack/vue-router-ssr-query@1.167.2-pre.0
- Updated dependencies [
baa18cd]:- @tanstack/vue-router@1.170.18-pre.0
- @tanstack/router-ssr-query-core@1.169.2-pre.0
@tanstack/vue-start@1.168.32-pre.0
- Updated dependencies [
baa18cd]:- @tanstack/vue-router@1.170.18-pre.0
- @tanstack/start-client-core@1.170.15-pre.0
- @tanstack/start-plugin-core@1.171.25-pre.0
- @tanstack/start-server-core@1.169.18-pre.0
- @tanstack/vue-start-client@1.167.20-pre.0
- @tanstack/vue-start-server@1.167.23-pre.0
@tanstack/vue-start-client@1.167.20-pre.0
- Updated dependencies [
baa18cd]:- @tanstack/router-core@1.171.16-pre.0
- @tanstack/vue-router@1.170.18-pre.0
- @tanstack/start-client-core@1.170.15-pre.0
@tanstack/vue-router@1.170.18-pre.0
-
#7883
baa18cd- Rewrite match loading around a lane-based scheduler that tracks each navigation, preload, and background reload as an ordered unit of work. This fixes pending/redirect/retry state leaking between overlapping navigations, restores correct SSR status codes for redirects, errors, and not-found responses, and closes hydration gaps where the client re-ran work the server had already completed.- Route
headers()now only runs on the server, matching the documented behavior — it is no longer invoked during client-side asset projection. - Default
gcTimeandpreloadGcTimeare reduced from 30 minutes (1_800_000) to 5 minutes (300_000).
Removed / changed public API
RouterStateno longer includesloadedAt,isTransitioning,statusCode, orredirect. Usematch.updatedAtin place ofloadedAt; subscribe torouter.state.status/router.state.isLoadingin place ofisTransitioning; server response status and redirect handling are now internal to the server loader and are no longer exposed onrouter.state.RouteMatch.fetchCounthas been removed, with no replacement — it was purely informational.RouteMatch.statusno longer includes'redirected'(it remains'pending' | 'success' | 'error' | 'notFound') — redirected matches are dropped from the match list instead of being rendered.RouteMatch.globalNotFoundhas been renamed and privatized to the internal_notFoundfield. Usematch.status === 'notFound'instead.- Removed
RouterCoremembersgetMatch(),updateMatch(),cancelMatch(), andcancelMatches()— read matches fromrouter.state.matches(e.g.router.state.matches.find((m) => m.id === id)); there is no replacement for mutating or cancelling an individual in-flight match from outside the router. - Removed
hasNotFoundMatch()— userouter.state.matches.some((m) => m.status === 'notFound'). - Removed
looseRoutesById— useroutesById. - Removed
isPrerendering(),isViewTransitionTypesSupported, andviewTransitionPromise, with no replacement. - Removed
getParsedLocationHref()andclearExpiredCache(), with no replacement — expired cache entries are now reconciled automatically as part of match commit. - Removed
latestLoadPromiseandbeforeLoad(), with no replacement. commitLocationPromiseandpendingBuiltLocationare now private (_commitPromise,_pendingLocation) and no longer part of the publicRouterCoresurface.- Removed the exported
GetMatchFnandUpdateMatchFntypes, along with the methods they typed. - Removed the standalone
getMatchedRoutes()export from@tanstack/router-core— use therouter.getMatchedRoutes()instance method instead. MatchRoutesOpts.preloadandMatchRoutesOpts.desthave been removed.StartTransitionFnis now(fn, expected, urgent?) => Promise<boolean>(previously(fn) => void). This only affects custom framework adapters that implementstartTransition.
- Route
-
Updated dependencies [
baa18cd]:- @tanstack/router-core@1.171.16-pre.0
@tanstack/zod-adapter@1.167.1-pre.0
- Updated dependencies [
baa18cd]:- @tanstack/react-router@1.170.19-pre.0
@tanstack/vue-start-server@1.167.23-pre.0
- Updated dependencies [
baa18cd]:- @tanstack/router-core@1.171.16-pre.0
- @tanstack/vue-router@1.170.18-pre.0
- @tanstack/start-server-core@1.169.18-pre.0