Update tanstack-router monorepo #118

Open
renovate-bot wants to merge 1 commit from renovate/tanstack-router-monorepo into main
Collaborator

This PR contains the following updates:

Package Change Age Adoption Passing Confidence
@tanstack/react-router (source) 1.170.17 → 1.170.46 age adoption passing confidence
@tanstack/react-router-devtools (source) 1.167.0 → 1.167.3 age adoption passing confidence
@tanstack/router-core (source) 1.171.14 → 1.171.39 age adoption passing confidence
@tanstack/router-plugin (source) 1.168.19 → 1.169.0 age adoption passing confidence

Release Notes

TanStack/router (@​tanstack/react-router)

v1.170.46

Compare Source

Patch Changes
  • #​8670 32a3360 - Reference agent skills in other packages by their intent load identifier (@tanstack/<package>#<skill>) instead of relative file links that break once packages are installed.

  • #​8671 689a7c5 - Publish the @tanstack/react-router agent skills (react-router, compositions/router-query, lifecycle/migrate-from-react-router), which were missing from the package's files list.

  • Updated dependencies [32a3360]:

v1.170.45

Compare Source

Patch Changes

v1.170.44

Compare Source

Patch Changes

v1.170.43

Compare Source

Patch Changes

v1.170.42

Compare Source

Patch Changes
  • #​8594 2413cc0 - reduce component nesting per route match

  • #​8602 efc2042 - Links of a route that the pending navigation leaves skip deriving the destination location, and clicks and preloads follow the href a Link displays. buildLocation now builds mask and routeMasks locations from the same _fromLocation as the destination.

  • #​8602 efc2042 - Fixed Link destinations that resolve to a route mask are now reused across navigations instead of being rebuilt every time. A mounted Link now follows changes to its href and reloadDocument props, and React Links no longer each subscribe to a hydration flag.

  • #​8579 d35aab4 - Cancel pending link preload timers when starting navigation to avoid redundant preloading while the destination is loading.

  • Updated dependencies [dfe3dea, dfe3dea, dfe3dea, efc2042, efc2042, dfe3dea, 663282b]:

v1.170.41

Compare Source

Patch Changes
  • #​8529 60b8ad1 - Compose only enabled route boundaries instead of rendering inactive wrapper components.

  • #​8568 614bc27 - Update TanStack Store to 0.11.2 to prevent unrelated atom reads inside subscription observers from triggering extra notifications.

  • #​8530 ff66a03 - Consolidate the root match context provider while preserving match context in the root shell.

  • #​8522 863c8a7 - Reuse Link href classification and active/inactive results across location updates while preserving live history href formatting.

  • Updated dependencies [d521abd]:

v1.170.40

Compare Source

Patch Changes

v1.170.39

Compare Source

Patch Changes
  • #​8435 73bfc15 - Avoid hydration-triggered rerenders for links that do not compare URL hashes while preserving hash-sensitive active state and ClientOnly behavior.

v1.170.38

Compare Source

Patch Changes

v1.170.37

Compare Source

Patch Changes
  • #​8418 e561fa1 - deepEqual now takes its flags as positional arguments — deepEqual(a, b, partial?, explicitUndefined?) — instead of an options object. The router's hot callers (Link option stabilization and active-state checks, matchRoute) no longer allocate an options object per comparison, and the comparator reads two booleans instead of a polymorphic object. explicitUndefined replaces ignoreUndefined: false. deepEqual is an internal helper; it stays exported for compatibility of two-argument calls.

  • #​8419 a1c8d1a - resolvePath (internal helper) now takes positional arguments — resolvePath(base, to, trailingSlash?, cache?) — so buildLocation and matchRoute no longer allocate an options object per path resolution.

  • #​8204 cbbfbe3 - Stream large deferred SSR hydration payloads through a backpressure-aware router transport, fail known setup errors before response creation, and close cancelled or expired transforms safely.

    Start now cancels discarded middleware and HEAD response bodies, including plain streams and derived branches.

    Server-function raw streams share one ordered response. Arbitrary or sequential consumption can require potentially unbounded buffering of unread data on the client. Cancelling one raw stream discards it locally, while aborting the whole call cancels the response and server work. Consume streams concurrently, cancel unused streams promptly, or use separate calls when independent backpressure is required. A raw stream that exceeds its unread-byte limit now fails alone; sibling streams and the JSON result keep flowing.

    The JSON wire shape of a RawStream server-function argument changed. Clients and servers must run matching versions for requests that pass a RawStream.

    The frame-protocol constants (FRAME_TYPE_*, MAX_FRAME_PAYLOAD_SIZE, MAX_FRAMED_STREAMS) moved from the @tanstack/start-client-core root to the @tanstack/start-client-core/client-rpc subpath.

    Router requests whose Accept header allows neither text/html nor */* now receive 406 Not Acceptable instead of 500.

    Framework adapters share the body <Scripts> composition (getSsrBodyScriptParts, composeSsrBodyScripts) and the eager HTML response wrapper (renderSsrHtmlResponse) from @tanstack/router-core.

    Solid SSR now emits one document type and renders late lazy errors through route boundaries. A Solid <Await> without a fallback no longer holds the streamed shell; it renders inside the nearest <Suspense> boundary like React and Vue, and now renders falsy resolved values.

    Static server functions decode cached RawStream values with the client deserializer plugins.

    SSR Query integrations now keep request cleanup and stream ownership aligned with the router lifecycle.

  • #​8420 8e164d2 - useLinkProps no longer calls through an internal wrapper. The host element Link renders on is an @internal overload parameter that is stripped from the published declarations, so the public useLinkProps(options, forwardedRef?) signature is unchanged.

  • Updated dependencies [bc80866, e561fa1, cbbfbe3, a1c8d1a, cbbfbe3, a0b2ad9, 1ca361b]:

v1.170.36

Compare Source

Patch Changes
  • #​8390 b747fb8 - Keep the Link location cache out of server bundles: buildLocation only creates, reads and writes it when isServer is false. Render React Links on the server without the extra prop copies and the forwarded-ref hook. Link SSR rendering is 20-40% faster in the Link benchmarks and the React Start SSR request loop about 7% faster.

    React activeProps and inactiveProps now follow one precedence rule on every link, including links whose destination is blocked for using a disallowed scheme: state props override element props, ref and event handlers, while href, disabled and target stay controlled by the router. Previously a blocked link ignored a ref or handler from its inactive props.

    React Link and useLinkProps split router options from element props with one key set on the client and the server. Element props pass through as given: external links forward them verbatim, falsy values included, and useLinkProps now returns children for router-controlled links as it already did for external ones.

  • #​8324 6387d58 - Reuse hydration snapshot getters to avoid unnecessary store-instance effect updates when Links and other hydration-aware components rerender.

  • #​8318 9b2adaf - Allow active and inactive Link props to override base element props in React and Solid while preserving class/style merging. Keep React's href, target, and disabled values controlled by routing options. Preserve Vue object and nested-array class bindings, including reactive updates and server rendering, without mutating cached bindings during VNode normalization.

  • #​8327 634da91 - Make pathParamsAllowedCharacters initialization-only. Configure it when creating the router; changing allowed characters requires a new router instance. Remove decoder-update bookkeeping and decoder-change checks from route-owned path caches.

  • #​8370 e9396c9 - Stop exporting the internal isPlainObject and isPlainArray helpers.

  • #​8324 6387d58 - Avoid a redundant prop copy when rendering native Links while preserving custom-component props and the public hook result.

  • #​8252 7e349c3 - Reduce the bundle cost of shared Link pathname interpolation while preserving its rendering performance. Reuse one interpolation pass for pathname and optional metadata, keep the bounded cache on the router, and simplify React Link active-state and prop merging.

  • #​8370 e9396c9 - Reuse built locations for Links whose destination does not depend on the current location. buildLocation keeps the result per options object when the build never read the current location, and the React Link passes one stable options object per instance, so navigations resolve unchanged Links with a lookup instead of a full build. The per-route pathname interpolation cache this replaces is removed. Link params, search and activeOptions are compared by value on render, so inline object literals with unchanged contents keep reusing the Link's location. Pass a new object to change a destination; like any other React prop, an object mutated in place is not re-read.

  • Updated dependencies [d76a332, b747fb8, 6cfb1e8, 700a714, 700a714, 8fff7fa, f021f6d, ae68535, 7e349c3, 873c830, 7e349c3, 634da91, e9396c9, 634da91, f151ab0, bc57fa3, 9872d2a, d76a332, 634da91, 634da91, 7e349c3, 9448caa, e9396c9, 700a714, 634da91, 634da91]:

v1.170.35

Compare Source

Patch Changes
  • #​7824 8c43c71 - Upgrade TanStack Store to 0.11 and migrate router subscriptions to useSelector, preserving selector comparisons and Vue subscription cleanup.

v1.170.34

Compare Source

Patch Changes
  • #​8279 aee42c6 - Avoid allocating event-handler arrays and wrapper functions for links without user-supplied event handlers.

  • #​8308 9c1871c - Validate navigation and redirect destinations, keep ambiguous relative URLs on the current origin, and constrain prerender requests and output paths. Prevent redirect headers from appearing in serialized server function response bodies.

    Preserve native form HTTP redirects, route error handling and masks for document redirects, and per-navigation destinations for shared loader redirects. Avoid redundant origin parsing and reduce link styling and server-rendering work. Configured origins must already be normalized.

    Keep blocked-link inactive props consistent during React hydration, honor explicit redirect Location headers before checking route options, and refresh Vue link state when destinations become internal. Reuse the protocol-relative URL check while parsing redirect schemes once.

    Reduce React link bundle size by sharing pathname comparisons, state-prop selection, and element creation.

    Share normalized pathname comparisons in Solid and Vue links to reduce bundle size.

  • #​8311 9aec5a7 - React Links resolve state props without temporary class-name arrays or unnecessary style copies.

  • Updated dependencies [f9836f1, 9c1871c, 9871c06, 0654c0a]:

v1.170.33

Compare Source

Patch Changes
  • #​8165 2f20c00 - Exclude structural descendants below error and not-found boundaries from route lifecycle callbacks. Preserve lifecycle membership through invalidation, hydration, background reloads, and superseded navigation publication.

  • #​8209 28a5e45 - Preserve falsy thrown values in React and Vue error boundaries. Type React and Vue boundary error components and onCatch callbacks as unknown. Solid boundary errors remain typed as Error; SSR now wraps non-Error loader errors to match Solid’s native boundary behavior, preserving the original value in cause. Router state and loader onError values are unchanged.

    When upgrading React or Vue, narrow boundary errors (for example, with error instanceof Error) before reading message or stack. ErrorComponentProps<TError> remains available for values narrowed to a specific error type. Route onError types are unchanged.

  • #​8161 f0b5eda - Retain successful not-found matches as terminal shared boundaries during client navigation, preserving route context while the destination loads.

  • #​8251 0497cae - Use URL.canParse for absolute URL checks in links, navigation, redirects, and build configuration. Preserve a URL constructor fallback for older browsers.

  • #​8169 0caf6b9 - Fix route-scoped useMatch, useSearch, and useParams APIs to forward the shouldThrow option and preserve optional return types when shouldThrow: false.

  • #​8257 cf166d1 - Fix repeated innerHTML writes for unchanged styles and data scripts during React re-renders. This prevents unnecessary CSS parsing and Trusted Types errors during client navigation.

  • Updated dependencies [edf0e16, 2f20c00, 28a5e45, 08eff50, 216c0c4, 2f91503, f0b5eda, 50eafca, 0497cae, ee28348, 9035abc, c18e690]:

v1.170.32

Compare Source

Patch Changes

v1.170.31

Compare Source

Patch Changes

v1.170.30

Compare Source

Patch Changes

v1.170.29

Compare Source

Patch Changes

v1.170.28

Compare Source

Patch Changes
  • #​8055 0c25a7b - Avoid wrapping root components that may render the HTML document in a Suspense boundary during SSR and hydration.

  • #​8054 31882c7 - Reuse resolved lazy route components when revisiting code-split routes, preventing unnecessary pending UI.

  • Updated dependencies [31882c7]:

v1.170.27

Compare Source

Patch Changes

v1.170.26

Compare Source

Patch Changes
  • #​8045 f500760 - Warn when an Outlet is rendered inside a pending, error, or not-found component.

  • #​8043 1aafca9 - remove the undocumented Link isTransitioning state and data-transitioning attribute

  • #​8044 aa10b65 - Apply preloadDelay to viewport link preloading and cancel pending preloads when links leave the viewport.

  • Updated dependencies [7e93431]:

v1.170.25

Compare Source

Patch Changes

v1.170.24

Compare Source

Patch Changes

v1.170.23

Compare Source

Patch Changes
  • #​7952 95dec51 - bail out of Link re-renders when the resolved href and active state are unchanged

v1.170.22

Compare Source

Patch Changes

v1.170.21

Compare Source

Patch Changes
  • #​7961 697ebb6 - Prevent a blank frame before zero-delay initial pending UI by using a
    component-scoped React transition for match publication. Pending timing,
    boundary selection, and rendered matches continue to come from the router
    core.

  • #​7970 2435885 - createFileRoute does not rely on FileRoute class

  • #​7971 86bf510 - clean intersection observer options in link component

  • #​7967 6aefb33 - Preserve path params in their raw string form while matching routes so structured values returned by params.parse produce stable match IDs and do not reuse stale loader data.

    RouterCore.getMatchedRoutes() now returns [matchedRoutes, rawParams, foundRoute] instead of an object.

  • Updated dependencies [84db4a8, 9cac62a, 6aefb33]:

v1.170.20

Compare Source

Patch Changes

v1.170.19

Compare Source

Patch Changes
  • #​7805 45c4ad8 - 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.

    • Invalidation now retires matching active preloads so older speculative loader results cannot become fresh cache data after invalidation.
    • Route headers() now only runs on the server, matching the documented behavior — it is no longer invoked during client-side asset projection.
    • The documented default gcTime and preloadGcTime now match the existing runtime default of 5 minutes (300_000).

    Removed / changed exported internals

    • RouterState no longer includes loadedAt, isTransitioning, statusCode, or redirect. Use match.updatedAt in place of loadedAt; subscribe to router.state.status / router.state.isLoading in place of isTransitioning; server response status and redirect handling are now internal to the server loader and are no longer exposed on router.state.
    • RouteMatch.fetchCount has been removed, with no replacement — it was purely informational.
    • RouteMatch.status no longer includes 'redirected' (it remains 'pending' | 'success' | 'error' | 'notFound') — redirected matches are dropped from the match list instead of being rendered.
    • RouteMatch.globalNotFound has been renamed and privatized to the internal _notFound field. Use match.status === 'notFound' instead.
    • The exported React, Solid, and Vue Match components now accept routeId instead of matchId.
    • The exported RouterStores adapter contract now uses route-keyed presentation stores: matchesId is replaced by ids, matchStores by byRoute, and getRouteMatchStore() by getMatchStore(). The separate loadedAt, isLoading, isTransitioning, statusCode, and redirect stores have been removed, along with the pending/cache stores and their setters. StoreConfig.init has also been removed. Read application-facing state from router.state; preload and cache coordination are now internal.
    • Removed RouterCore members getMatch(), updateMatch(), cancelMatch(), and cancelMatches() — read matches from router.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 RouterCore.hasNotFoundMatch() — use router.state.matches.some((m) => m.status === 'notFound').
    • Removed RouterCore.looseRoutesById — use routesById.
    • Removed RouterCore.isPrerendering(), RouterCore.isViewTransitionTypesSupported, and RouterCore.viewTransitionPromise, with no replacement.
    • Removed RouterCore.getParsedLocationHref() and RouterCore.clearExpiredCache(), with no replacement — expired cache entries are now reconciled automatically as part of match commit.
    • Removed RouterCore.latestLoadPromise and RouterCore.beforeLoad(), with no replacement.
    • RouterCore.commitLocationPromise and RouterCore.pendingBuiltLocation have been replaced by the internal _commitPromise and _pendingLocation fields.
    • Removed the exported GetMatchFn and UpdateMatchFn types, along with the methods they typed.
    • Removed the standalone getMatchedRoutes() export from @tanstack/router-core — use the router.getMatchedRoutes() instance method instead.
    • RouterCore.loadRouteChunk() no longer accepts an array of component types as its second argument. One-argument usage is unchanged; the optional second argument is now 'errorComponent', 'notFoundComponent', or false for internal boundary loading.
    • Removed Redirect.redirectHandled, which was internal redirect bookkeeping.
    • MatchRoutesOpts.preload and MatchRoutesOpts.dest have been removed.
    • StartTransitionFn is now (fn, expected) => Promise<boolean> (previously (fn) => void). This only affects custom framework adapters that implement startTransition.
  • Updated dependencies [45c4ad8]:

v1.170.18

Compare Source

Patch Changes
TanStack/router (@​tanstack/react-router-devtools)

v1.167.3

Compare Source

Patch Changes

v1.167.2

Compare Source

Patch Changes

v1.167.1

Compare Source

Patch Changes
TanStack/router (@​tanstack/router-core)

v1.171.39

Compare Source

Patch Changes
  • #​8670 32a3360 - Reference agent skills in other packages by their intent load identifier (@tanstack/<package>#<skill>) instead of relative file links that break once packages are installed.

v1.171.38

Compare Source

Patch Changes
  • #​8212 18154b1 - Render generated script preloads (modulepreload, or preload as="script" for IIFE output) with fetchPriority="low" and forward it into static Early Hints, so they no longer compete with render-blocking stylesheets, fonts and images.

v1.171.37

Compare Source

Patch Changes
  • #​8441 d6ba115 - Reuse the parsed request location during SSR instead of repeating input rewrites. Match server routes against the app router's parsed pathname while preserving encoded pathnames for server handlers and middleware.

v1.171.36

Compare Source

Patch Changes
  • #​7588 94d6d8e - Reduce per-request work in Start: getNormalizedURL reads a URL input without cloning it, and runWithStartContext returns the callback's own result instead of wrapping it in a promise, so a synchronous throw from the callback now propagates synchronously.

v1.171.35

Compare Source

Patch Changes
  • #​8605 dfe3dea - Drop a duplicated current-location flag and a redundant createHref wrapper.

  • #​8602 efc2042 - Links of a route that the pending navigation leaves skip deriving the destination location, and clicks and preloads follow the href a Link displays. buildLocation now builds mask and routeMasks locations from the same _fromLocation as the destination.

  • #​8602 efc2042 - Fixed Link destinations that resolve to a route mask are now reused across navigations instead of being rebuilt every time. A mounted Link now follows changes to its href and reloadDocument props, and React Links no longer each subscribe to a hydration flag.

  • #​8605 dfe3dea - Use slice instead of substring where the bounds are always ordered and non-negative.

  • #​7654 663282b - Encode slashes in dehydrated SSR match IDs with # instead of a null byte, so the inlined hydration payload no longer contains U+0000 (which is invalid in HTML and rejected by markup validators)

  • Updated dependencies [dfe3dea, dfe3dea, dfe3dea, efc2042, dfe3dea]:

v1.171.34

Compare Source

Patch Changes

v1.171.33

Compare Source

Patch Changes
  • #​8297 488d046 - Update seroval and seroval-plugins from 1.6.2 to 1.6.7. This picks up the typed array length guard, the maxBase64Length and compactArrayBufferViews options, and the isStream export.

  • #​8460 0c1b5e3 - Abort reserved loader generations with no remaining owners when invalidation removes them from discovery, ensuring their public abort signals are retired.

  • #​8519 3cdd1af - Hand native scroll restoration back to the browser on pagehide, including entries entering BFCache, and reclaim manual restoration when a cached document resumes.

v1.171.32

Compare Source

Patch Changes
  • #​8363 cecae54 - Detect plain objects by constructor instead of Object.prototype.toString dispatches in isPlainObject, which gates every deepEqual and replaceEqualDeep recursion step. Object literals, JSON.parse output and null-prototype objects are still plain; objects from another realm no longer are. Records with an own constructor key (for example the search params of ?constructor=foo) fall back to a prototype check, so they keep structural sharing while class instances stay opaque.

  • #​8364 0103578 - Compare and copy plain objects in replaceEqualDeep by their string keys only, skipping the symbol-key lookup that dominated key enumeration. Objects with non-enumerable own properties, or symbol keys on the incoming value, now pass through untouched instead of being structurally shared.

  • #​8411 ce10dcd - Reduce structural-sharing allocations by reusing array key storage and returning incoming objects when their children need no replacements. Preserve signed zero consistently, remove stale symbol properties, and keep sparse arrays with extra keys and built-ins with an own constructor opaque.

    Null-prototype mode now applies only when constructing a copy; existing incoming objects can be reused with their original prototype.

  • #​8362 84936cc - Allocate the replaceEqualDeep result only at the first difference, so structural sharing of search, params, state and loader data no longer allocates when the new value is deeply equal to the previous one.

  • #​8389 bbd2336 - Split replaceEqualDeep into an equality scan and a copy phase: arrays and objects are scanned by dedicated loops up to the first difference, matching keys prove ownership without a hasOwnProperty lookup, and once a difference is found the result is built without any further equality bookkeeping. Deeply equal search, params, state and loader data are recognised faster and changed values are copied with less work per entry.

v1.171.31

Compare Source

Patch Changes
  • #​8417 bc80866 - Speed up deepEqual: identical array elements no longer recurse, the exact comparison keeps a single key counter, and the redundant typeof early exit is gone. Equal numeric arrays compare ~70% faster and record comparisons 5–12% faster in the mixed-mode workloads that Link option stabilization and active-state checks produce, with a slightly smaller bundle. Behavior, including key enumeration and getter read order, is unchanged.

  • #​8418 e561fa1 - deepEqual now takes its flags as positional arguments — deepEqual(a, b, partial?, explicitUndefined?) — instead of an options object. The router's hot callers (Link option stabilization and active-state checks, matchRoute) no longer allocate an options object per comparison, and the comparator reads two booleans instead of a polymorphic object. explicitUndefined replaces ignoreUndefined: false. deepEqual is an internal helper; it stays exported for compatibility of two-argument calls.

  • #​8204 cbbfbe3 - Reduce per-request SSR overhead: abort settled route matches with one shared AbortError-shaped reason instead of building a stack-capturing DOMException per match, skip JSON.parse for search values that cannot start JSON, wait on request signals with one listener per wait, and keep resolved server-function modules in production builds instead of re-importing them on every call.

  • #​8419 a1c8d1a - resolvePath (internal helper) now takes positional arguments — resolvePath(base, to, trailingSlash?, cache?) — so buildLocation and matchRoute no longer allocate an options object per path resolution.

  • #​8204 cbbfbe3 - Stream large deferred SSR hydration payloads through a backpressure-aware router transport, fail known setup errors before response creation, and close cancelled or expired transforms safely.

    Start now cancels discarded middleware and HEAD response bodies, including plain streams and derived branches.

    Server-function raw streams share one ordered response. Arbitrary or sequential consumption can require potentially unbounded buffering of unread data on the client. Cancelling one raw stream discards it locally, while aborting the whole call cancels the response and server work. Consume streams concurrently, cancel unused streams promptly, or use separate calls when independent backpressure is required. A raw stream that exceeds its unread-byte limit now fails alone; sibling streams and the JSON result keep flowing.

    The JSON wire shape of a RawStream server-function argument changed. Clients and servers must run matching versions for requests that pass a RawStream.

    The frame-protocol constants (FRAME_TYPE_*, MAX_FRAME_PAYLOAD_SIZE, MAX_FRAMED_STREAMS) moved from the @tanstack/start-client-core root to the @tanstack/start-client-core/client-rpc subpath.

    Router requests whose Accept header allows neither text/html nor */* now receive 406 Not Acceptable instead of 500.

    Framework adapters share the body <Scripts> composition (getSsrBodyScriptParts, composeSsrBodyScripts) and the eager HTML response wrapper (renderSsrHtmlResponse) from @tanstack/router-core.

    Solid SSR now emits one document type and renders late lazy errors through route boundaries. A Solid <Await> without a fallback no longer holds the streamed shell; it renders inside the nearest <Suspense> boundary like React and Vue, and now renders falsy resolved values.

    Static server functions decode cached RawStream values with the client deserializer plugins.

    SSR Query integrations now keep request cleanup and stream ownership aligned with the router lifecycle.

  • #​8422 a0b2ad9 - Parse the location once when router.update() changes the basepath or rewrite, collect invalidate() match ids in a single pass, and specialize internal basepath composition without arrays or loops. Preserve basepath case sensitivity when creating and updating the router.

    Rebuild server route trees when caseSensitive changes and reuse the server cache only when the route tree and case sensitivity both match.

  • #​8421 1ca361b - Parse masked locations without mutating shared state and simplify input rewrite handling.

v1.171.30

Compare Source

Patch Changes
  • #​8321 d76a332 - Cache route branches and interpolated paths on their route objects, removing the fixed template limit for registered routes and reusing cached paths across server requests. Rebuild tree-dependent caches together, preserve decoder and trailing-slash isolation, and keep unregistered templates bounded.

  • #​8390 b747fb8 - Keep the Link location cache out of server bundles: buildLocation only creates, reads and writes it when isServer is false. Render React Links on the server without the extra prop copies and the forwarded-ref hook. Link SSR rendering is 20-40% faster in the Link benchmarks and the React Start SSR request loop about 7% faster.

    React activeProps and inactiveProps now follow one precedence rule on every link, including links whose destination is blocked for using a disallowed scheme: state props override element props, ref and event handlers, while href, disabled and target stay controlled by the router. Previously a blocked link ignored a ref or handler from its inactive props.

    React Link and useLinkProps split router options from element props with one key set on the client and the server. Element props pass through as given: external links forward them verbatim, falsy values included, and useLinkProps now returns children for router-controlled links as it already did for external ones.

  • #​8382 6cfb1e8 - buildLocation no longer structurally shares the built search and state with the current location. The observable location.search and location.state still preserve equal nested references across navigations, because parseLocation stabilizes them once a location is committed. A search whose contents equal the current search but list its keys in a different order now serializes in the requested order, so navigating to it creates a new history entry instead of being treated as the same location. A state object passed to navigate or buildLocation is never mutated.

  • #​8325 700a714 - Reuse the already-owned raw-param snapshot during lightweight source matching instead of copying it again.

  • #​8325 700a714 - Reduce transient JIT compilation memory during navigation by separating search middleware collection from recursive execution.

  • #​8252 7e349c3 - Collect shared pathname-cache keys during interpolation instead of parsing templates twice, and share dynamic-segment handling to reduce bundle size.

  • #​8319 873c830 - Simplify path interpolation into ordered segment-type blocks with shared prefix/value/suffix assembly. Preserve one-pass parsing and optional metadata collection, and reuse the public result object instead of allocating and clearing a missing-parameter callback.

  • #​8252 7e349c3 - Reuse pathname interpolation across Links with bounded router-scoped caches. Keep parameter callbacks and navigation state independent of the cache.

  • #​8327 634da91 - Make pathParamsAllowedCharacters initialization-only. Configure it when creating the router; changing allowed characters requires a new router instance. Remove decoder-update bookkeeping and decoder-change checks from route-owned path caches.

  • #​8370 e9396c9 - Stop exporting the internal isPlainObject and isPlainArray helpers.

  • #​8327 634da91 - Initialize routes directly during route-tree processing, removing the callback indirection while preserving parent-first initialization and route indexes.

  • #​8328 f151ab0 - Reduce duplication in navigation parameter handling while preserving parameter inheritance, null-prototype dictionaries, and updater isolation.

  • #​8410 bc57fa3 - Treat 0 and false as provided _splat values when interpolating paths. Only undefined, null, and '' now omit a splat segment, matching how other path params are stringified.

  • #​8354 9872d2a - Use lightweight request history for SSR and make server navigation a no-op. Use redirect() to issue HTTP redirects. Server hrefs use the same normalization as browser history to handle protocol-relative URLs and control characters.

  • #​8321 d76a332 - Consolidate internal path interpolation into interpolatePath, returning a pathname directly and collecting metadata only when requested. Update router and devtools callers without changing route parsing or interpolation caching.

  • #​8327 634da91 - Reduce route-tree initialization work by avoiding temporary path-joining arrays and duplicate ID normalization.

  • #​8327 634da91 - Reuse parsed route segments when generating paths for navigation, Links, and Devtools. Preserve interpolation metadata and refresh segments when the route tree is rebuilt, without reparsing templates for new parameter values.

  • #​8252 7e349c3 - Reduce the bundle cost of shared Link pathname interpolation while preserving its rendering performance. Reuse one interpolation pass for pathname and optional metadata, keep the bounded cache on the router, and simplify React Link active-state and prop merging.

  • #​8385 9448caa - Collect search middlewares with a counted loop so the optimized code stays valid across navigations. This removes a JIT recompilation that raised peak memory in the interrupted-navigations client memory benchmark.

  • #​8370 e9396c9 - Reuse built locations for Links whose destination does not depend on the current location. buildLocation keeps the result per options object when the build never read the current location, and the React Link passes one stable options object per instance, so navigations resolve unchanged Links with a lookup instead of a full build. The per-route pathname interpolation cache this replaces is removed. Link params, search and activeOptions are compared by value on render, so inline object literals with unchanged contents keep reusing the Link's location. Pass a new object to change a destination; like any other React prop, an object mutated in place is not re-read.

  • #​8325 700a714 - Cache normalized route pathnames so repeated Link destinations do not decode the same interpolation result again.

  • #​8327 634da91 - Share compact parsed route segments between matching and interpolation, preserve original parameter names, and avoid reparsing templates while building paths. Simplify route-tree traversal, reuse existing path helpers, and keep Devtools-only navigation validation out of the production formatter. Preserve dynamic match identity for standalone legacy fallback routes.

  • #​8327 634da91 - Pass route initialization indexes directly instead of wrapping each index in an options object.

  • Updated dependencies [8fff7fa, f021f6d, ae68535, 9872d2a]:

v1.171.29

Compare Source

Patch Changes
  • #​8313 f9836f1 - Avoid constructing a query serializer when search is empty or all values are undefined.

  • #​8308 9c1871c - Validate navigation and redirect destinations, keep ambiguous relative URLs on the current origin, and constrain prerender requests and output paths. Prevent redirect headers from appearing in serialized server function response bodies.

    Preserve native form HTTP redirects, route error handling and masks for document redirects, and per-navigation destinations for shared loader redirects. Avoid redundant origin parsing and reduce link styling and server-rendering work. Configured origins must already be normalized.

    Keep blocked-link inactive props consistent during React hydration, honor explicit redirect Location headers before checking route options, and refresh Vue link state when destinations become internal. Reuse the protocol-relative URL check while parsing redirect schemes once.

    Reduce React link bundle size by sharing pathname comparisons, state-prop selection, and element creation.

    Share normalized pathname comparisons in Solid and Vue links to reduce bundle size.

  • #​8288 9871c06 - Reduce cache maintenance work during navigation by indexing incoming match IDs once per commit.

  • #​8287 0654c0a - Use full-document navigation when an output rewrite produces a cross-origin destination, including the public URL of a route mask.

    Respect registered history blockers during document navigation, passing history locations and the requested push or replace action.

  • Updated dependencies [9c1871c, 0654c0a]:

v1.171.28

Compare Source

Patch Changes
  • #​8222 edf0e16 - Make each load transaction's completion follow its current successor so a burst of back-to-back loads wakes each superseded waiter once instead of once per successor. Previously every superseded load() re-polled the current transaction on each later completion, which was quadratic in microtask work.

  • #​8165 2f20c00 - Exclude structural descendants below error and not-found boundaries from route lifecycle callbacks. Preserve lifecycle membership through invalidation, hydration, background reloads, and superseded navigation publication.

  • #​8209 28a5e45 - Preserve falsy thrown values in React and Vue error boundaries. Type React and Vue boundary error components and onCatch callbacks as unknown. Solid boundary errors remain typed as Error; SSR now wraps non-Error loader errors to match Solid’s native boundary behavior, preserving the original value in cause. Router state and loader onError values are unchanged.

    When upgrading React or Vue, narrow boundary errors (for example, with error instanceof Error) before reading message or stack. ErrorComponentProps<TError> remains available for values narrowed to a specific error type. Route onError types are unchanged.

  • #​8207 08eff50 - Fix consumer typechecking with skipLibCheck: false by omitting the internal beforeLoad context field from published dehydrated match declarations.

    Retain the exported isAbsoluteUrl declaration used by framework bindings so the package entry point does not reference a stripped symbol.

  • #​8259 216c0c4 - Reduce Promise allocations during client navigation and static server SSR policy resolution. Skip cancellable waits for synchronous beforeLoad results while preserving navigation cancellation.

  • #​8240 2f91503 - Avoid quadratic resource handoff scans when navigating with many cached route matches.

  • #​8161 f0b5eda - Retain successful not-found matches as terminal shared boundaries during client navigation, preserving route context while the destination loads.

  • #​8142 50eafca - Avoid unnecessary JSON.parse calls for search parameter values that cannot begin valid JSON, while preserving custom parser behavior.

  • #​8251 0497cae - Use URL.canParse for absolute URL checks in links, navigation, redirects, and build configuration. Preserve a URL constructor fallback for older browsers.

  • #​8230 ee28348 - Replace the internal LRU cache behind path resolution, route matching and the SSR manifest lookup with a smaller SIEVE cache whose hits no longer relink a list, and fix an eviction edge case in the old implementation.

  • #​8244 c18e690 - Reduce promise allocations during client navigation when loader data and route components are already available.

  • Updated dependencies [9035abc]:

v1.171.27

Compare Source

Patch Changes
  • #​8132 fa65287 - Build client preload locations on demand and remove the prebuilt-location argument used by framework links.

  • #​8130 cb281d7 - preserve context during reloads

v1.171.26

Compare Source

Patch Changes
  • #​8117 3e016ac - optimize buildLocation path resolution #​8108
    skip building search validation when disabled #​8112
    skip location state sharing when impossible #​8110
    fix cache hits for mask resolution when entry is null #​8111

v1.171.25

Compare Source

Patch Changes
  • #​8084 5d3785d - preserve pending UI across retained routes

  • #​8092 63d2cc9 - Render route errors when redirect target construction fails and let successor transactions own navigation and HMR presentation.

v1.171.24

Compare Source

Patch Changes
  • #​8071 4c89b15 - inline getOpenAndCloseBraces in parseSegment for byte shaving

  • #​8069 cf6ab17 - inline isFunction utility fn for byte shaving

  • #​8070 bdaf73a - inline buildWithMatches inside buildLocation for byte shaving

v1.171.23

Compare Source

Patch Changes
  • #​8054 31882c7 - Reuse resolved lazy route components when revisiting code-split routes, preventing unnecessary pending UI.

v1.171.22

Compare Source

Patch Changes
  • #​8039 7e93431 - load-client can cache settles abandonned loader work without preload authority

v1.171.21

Compare Source

Patch Changes

v1.171.20

Compare Source

Patch Changes
  • #​8006 44a8c3e - skip impossible JSON parse attempts

  • #​8010 5253e70 - perf: speed up structural sharing (replaceEqualDeep) by computing enumerable own keys with Object.keys + a length compare instead of getOwnPropertyNames followed by a propertyIsEnumerable call per key. This runs on every selector result on every state update when defaultStructuralSharing is enabled, and is ~1.3-1.5x faster on typical router state objects with identical behavior.

v1.171.19

Compare Source

Patch Changes

v1.171.18

Compare Source

Patch Changes
  • #​7984 84db4a8 - Improve route-tree construction and matching performance by fusing static and
    dynamic node creation, sorting only dynamic sibling lists that need it, and
    deriving matcher depth from trie nodes.

  • #​7985 9cac62a - perf: compact private bundle boundaries- #​7975

  • #​7967 6aefb33 - Preserve path params in their raw string form while matching routes so structured values returned by params.parse produce stable match IDs and do not reuse stale loader data.

    RouterCore.getMatchedRoutes() now returns [matchedRoutes, rawParams, foundRoute] instead of an object.

  • Updated dependencies [9cac62a]:

v1.171.17

Compare Source

Patch Changes

v1.171.16

Compare Source

Patch Changes
  • #​7805 45c4ad8 - 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.

    • Invalidation now retires matching active preloads so older speculative loader results cannot become fresh cache data after invalidation.
    • Route headers() now only runs on the server, matching the documented behavior — it is no longer invoked during client-side asset projection.
    • The documented default gcTime and preloadGcTime now match the existing runtime default of 5 minutes (300_000).

    Removed / changed exported internals

    • RouterState no longer includes loadedAt, isTransitioning, statusCode, or redirect. Use match.updatedAt in place of loadedAt; subscribe to router.state.status / router.state.isLoading in place of isTransitioning; server response status and redirect handling are now internal to the server loader and are no longer exposed on router.state.
    • RouteMatch.fetchCount has been removed, with no replacement — it was purely informational.
    • RouteMatch.status no longer includes 'redirected' (it remains 'pending' | 'success' | 'error' | 'notFound') — redirected matches are dropped from the match list instead of being rendered.
    • RouteMatch.globalNotFound has been renamed and privatized to the internal _notFound field. Use match.status === 'notFound' instead.
    • The exported React, Solid, and Vue Match components now accept routeId instead of matchId.
    • The exported RouterStores adapter contract now uses route-keyed presentation stores: matchesId is replaced by ids, matchStores by byRoute, and getRouteMatchStore() by getMatchStore(). The separate loadedAt, isLoading, isTransitioning, statusCode, and redirect stores have been removed, along with the pending/cache stores and their setters. StoreConfig.init has also been removed. Read application-facing state from router.state; preload and cache coordination are now internal.
    • Removed RouterCore members getMatch(), updateMatch(), cancelMatch(), and cancelMatches() — read matches from router.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 RouterCore.hasNotFoundMatch() — use router.state.matches.some((m) => m.status === 'notFound').
    • Removed RouterCore.looseRoutesById — use routesById.
    • Removed RouterCore.isPrerendering(), RouterCore.isViewTransitionTypesSupported, and RouterCore.viewTransitionPromise, with no replacement.
    • Removed RouterCore.getParsedLocationHref() and RouterCore.clearExpiredCache(), with no replacement — expired cache entries are now reconciled automatically as part of match commit.
    • Removed RouterCore.latestLoadPromise and RouterCore.beforeLoad(), with no replacement.
    • RouterCore.commitLocationPromise and RouterCore.pendingBuiltLocation have been replaced by the internal _commitPromise and _pendingLocation fields.
    • Removed the exported GetMatchFn and UpdateMatchFn types, along with the methods they typed.
    • Removed the standalone getMatchedRoutes() export from @tanstack/router-core — use the router.getMatchedRoutes() instance method instead.
    • RouterCore.loadRouteChunk() no longer accepts an array of component types as its second argument. One-argument usage is unchanged; the optional second argument is now 'errorComponent', 'notFoundComponent', or false for internal boundary loading.
    • Removed Redirect.redirectHandled, which was internal redirect bookkeeping.
    • MatchRoutesOpts.preload and MatchRoutesOpts.dest have been removed.
    • StartTransitionFn is now (fn, expected) => Promise<boolean> (previously (fn) => void). This only affects custom framework adapters that implement startTransition.

v1.171.15

Compare Source

Patch Changes
  • #​7807 e2dd204 - fix(router-core): handle window and element scroll restoration independently

    Window and element scroll targets are now handled independently. Restoring one target no longer suppresses resets for other uncached configured targets, and a restored element is no longer reset when the window has no cached position.

    Hash navigation no longer resets elements configured through scrollToTopSelectors and retains precedence over stale window positions through destination invalidations.

    Scroll positions are sampled when leaving a route, preserving live changes made after the most recent scroll event. This also prevents client hydration from undoing nested positions restored by the SSR script.

    Fixes #​7687.

TanStack/router (@​tanstack/router-plugin)

v1.169.0

Compare Source

Minor Changes
  • #​8855 446ce1b - Require Node ^20.19.0 || >=22.12.0 (was >=20.19), so the CommonJS builds can load ESM-only dependencies through require(esm). Node 21 and Node 22.0–22.11 do not enable it by default, so they are no longer supported.

  • #​8851 d250819 - Require Vite 6 or later: the vite peer range is now >=6.0.0. Vite 5 is no longer supported.

Patch Changes
  • 1ba19a0 - fix: webpack and Rspack production builds no longer put the code splitter's "will not be code-split" warning, with the route file's absolute path, into the client bundle when the build process's NODE_ENV isn't production. The bundler's mode decides, and a config without mode counts as production, as it does for webpack and Rspack. The warning still prints in the build output.

  • #​8852 94f36c4 - The esbuild plugin now throws when autoCodeSplitting is enabled, and TanStackRouterCodeSplitterEsbuild throws, instead of silently bundling every route without splitting. Route generation with esbuild is unchanged.

  • #​8856 533ca27 - Remove the undocumented plugin.hmr.style option and the HmrOptions type. Each bundler entry now picks its own HMR runtime: the webpack and Rspack entries already forced 'webpack', and on Vite, 'webpack' broke route HMR.

  • #​8853 13b6256 - Remove internal code-splitter APIs: the codeSplittingOptions.compilerPlugins option, and the root-entry exports unpluginRouterCodeSplitterFactory, getObjectPropertyKeyName, CodeSplitCompilerPlugin, ReferenceRouteCompilerPlugin, ReferenceRouteCompilerPluginContext and VirtualRouteSplitNodeCompilerPluginContext.

  • #​8860 b5e2ac9 - Source maps of split routes now point at the route file. On webpack and Rspack (including Rsbuild), a split component or shared code mapped to the wrong line, because unplugin's loader dropped the router plugin's map; unplugin now requires ^3.5.0, which keeps it. The maps of split and shared modules also name the route file itself instead of its ?tsr-split / ?tsr-shared module id, so debuggers bind breakpoints set in the route file.

  • #​8870 f420d4a - Vite route HMR now writes import.meta.hot.accept( out instead of calling it through a hot alias. Vite only treats a module as a hot boundary when the call is spelled out, so an edit of a route file no framework plugin accepts (a .ts route file, or an app without @vitejs/plugin-react) reloaded the page instead of updating the route in place. With React HMR, a route file that declares its own top-level hot binding no longer fails to compile with Duplicate declaration "hot".

  • Updated dependencies [446ce1b, ad5b3b7, ff157f0]:

v1.168.48

Compare Source

Patch Changes

v1.168.47

Compare Source

Patch Changes

v1.168.46

Compare Source

Patch Changes

v1.168.45

Compare Source

Patch Changes

v1.168.44

Compare Source

Patch Changes

v1.168.43

Compare Source

Patch Changes

v1.168.42

Compare Source

Patch Changes

v1.168.41

Compare Source

Patch Changes

v1.168.40

Compare Source

Patch Changes

v1.168.39

Compare Source

Patch Changes

v1.168.38

Compare Source

Patch Changes

v1.168.37

Compare Source

Patch Changes

v1.168.36

Compare Source

Patch Changes

v1.168.35

Compare Source

Patch Changes

v1.168.34

Compare Source

Patch Changes

v1.168.33

Compare Source

Patch Changes

v1.168.32

Compare Source

Patch Changes

v1.168.31

Compare Source

Patch Changes

v1.168.30

Compare Source

Patch Changes

v1.168.29

Compare Source

Patch Changes

v1.168.28

Compare Source

Patch Changes

v1.168.27

Compare Source

Patch Changes

v1.168.26

Compare Source

Patch Changes

v1.168.25

Compare Source

Patch Changes

v1.168.24

Compare Source

Patch Changes

v1.168.23

Compare Source

Patch Changes
  • #​7855 49f6863 - Preserve React component state during HMR when route components are declared with lowercase function names. The development-only React transforms cover split route component groups and unsplit root route component options, including shell, pending, and error components, without changing production output.

v1.168.22

Compare Source

Patch Changes

v1.168.21

Compare Source

Patch Changes

v1.168.20

Compare Source

Patch Changes

Configuration

📅 Schedule: (UTC)

  • Branch creation
    • At any time (no schedule defined)
  • Automerge
    • At any time (no schedule defined)

🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

♻ Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

👻 Immortal: This PR will be recreated if closed unmerged. Get config help if that's undesired.


  • If you want to rebase/retry this PR, check this box

This PR has been generated by Mend Renovate CLI.

This PR contains the following updates: | Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Adoption](https://docs.renovatebot.com/merge-confidence/) | [Passing](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) | |---|---|---|---|---|---| | [@tanstack/react-router](https://tanstack.com/router) ([source](https://github.com/TanStack/router/tree/HEAD/packages/react-router)) | [`1.170.17` → `1.170.46`](https://renovatebot.com/diffs/npm/@tanstack%2freact-router/1.170.17/1.170.46) | ![age](https://developer.mend.io/api/mc/badges/age/npm/@tanstack%2freact-router/1.170.46?slim=true) | ![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@tanstack%2freact-router/1.170.46?slim=true) | ![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@tanstack%2freact-router/1.170.17/1.170.46?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@tanstack%2freact-router/1.170.17/1.170.46?slim=true) | | [@tanstack/react-router-devtools](https://tanstack.com/router) ([source](https://github.com/TanStack/router/tree/HEAD/packages/react-router-devtools)) | [`1.167.0` → `1.167.3`](https://renovatebot.com/diffs/npm/@tanstack%2freact-router-devtools/1.167.0/1.167.3) | ![age](https://developer.mend.io/api/mc/badges/age/npm/@tanstack%2freact-router-devtools/1.167.3?slim=true) | ![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@tanstack%2freact-router-devtools/1.167.3?slim=true) | ![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@tanstack%2freact-router-devtools/1.167.0/1.167.3?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@tanstack%2freact-router-devtools/1.167.0/1.167.3?slim=true) | | [@tanstack/router-core](https://tanstack.com/router) ([source](https://github.com/TanStack/router/tree/HEAD/packages/router-core)) | [`1.171.14` → `1.171.39`](https://renovatebot.com/diffs/npm/@tanstack%2frouter-core/1.171.14/1.171.39) | ![age](https://developer.mend.io/api/mc/badges/age/npm/@tanstack%2frouter-core/1.171.39?slim=true) | ![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@tanstack%2frouter-core/1.171.39?slim=true) | ![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@tanstack%2frouter-core/1.171.14/1.171.39?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@tanstack%2frouter-core/1.171.14/1.171.39?slim=true) | | [@tanstack/router-plugin](https://tanstack.com/router) ([source](https://github.com/TanStack/router/tree/HEAD/packages/router-plugin)) | [`1.168.19` → `1.169.0`](https://renovatebot.com/diffs/npm/@tanstack%2frouter-plugin/1.168.19/1.169.0) | ![age](https://developer.mend.io/api/mc/badges/age/npm/@tanstack%2frouter-plugin/1.169.0?slim=true) | ![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@tanstack%2frouter-plugin/1.169.0?slim=true) | ![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@tanstack%2frouter-plugin/1.168.19/1.169.0?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@tanstack%2frouter-plugin/1.168.19/1.169.0?slim=true) | --- ### Release Notes <details> <summary>TanStack/router (@&#8203;tanstack/react-router)</summary> ### [`v1.170.46`](https://github.com/TanStack/router/blob/HEAD/packages/react-router/CHANGELOG.md#117046) [Compare Source](https://github.com/TanStack/router/compare/@tanstack/react-router@1.170.45...@tanstack/react-router@1.170.46) ##### Patch Changes - [#&#8203;8670](https://github.com/TanStack/router/pull/8670) [`32a3360`](https://github.com/TanStack/router/commit/32a3360cba0e0f884b3215813a48c63467f5a53c) - Reference agent skills in other packages by their `intent load` identifier (`@tanstack/<package>#<skill>`) instead of relative file links that break once packages are installed. - [#&#8203;8671](https://github.com/TanStack/router/pull/8671) [`689a7c5`](https://github.com/TanStack/router/commit/689a7c5419de68bce0aaaef72b9a36f115ea1398) - Publish the `@tanstack/react-router` agent skills (`react-router`, `compositions/router-query`, `lifecycle/migrate-from-react-router`), which were missing from the package's `files` list. - Updated dependencies \[[`32a3360`](https://github.com/TanStack/router/commit/32a3360cba0e0f884b3215813a48c63467f5a53c)]: - [@&#8203;tanstack/router-core](https://github.com/tanstack/router-core)@1.171.39 ### [`v1.170.45`](https://github.com/TanStack/router/blob/HEAD/packages/react-router/CHANGELOG.md#117045) [Compare Source](https://github.com/TanStack/router/compare/@tanstack/react-router@1.170.44...@tanstack/react-router@1.170.45) ##### Patch Changes - Updated dependencies \[[`18154b1`](https://github.com/TanStack/router/commit/18154b1c45454a70aa77e9d6d27c8a6e0733d031)]: - [@&#8203;tanstack/router-core](https://github.com/tanstack/router-core)@1.171.38 ### [`v1.170.44`](https://github.com/TanStack/router/blob/HEAD/packages/react-router/CHANGELOG.md#117044) [Compare Source](https://github.com/TanStack/router/compare/@tanstack/react-router@1.170.43...@tanstack/react-router@1.170.44) ##### Patch Changes - Updated dependencies \[[`d6ba115`](https://github.com/TanStack/router/commit/d6ba115d5751c75e20943f0062577cf17b446d82)]: - [@&#8203;tanstack/router-core](https://github.com/tanstack/router-core)@1.171.37 ### [`v1.170.43`](https://github.com/TanStack/router/blob/HEAD/packages/react-router/CHANGELOG.md#117043) [Compare Source](https://github.com/TanStack/router/compare/@tanstack/react-router@1.170.42...@tanstack/react-router@1.170.43) ##### Patch Changes - Updated dependencies \[[`94d6d8e`](https://github.com/TanStack/router/commit/94d6d8e49694e225cb07e2a6777633d08aeeb3c5)]: - [@&#8203;tanstack/router-core](https://github.com/tanstack/router-core)@1.171.36 ### [`v1.170.42`](https://github.com/TanStack/router/blob/HEAD/packages/react-router/CHANGELOG.md#117042) [Compare Source](https://github.com/TanStack/router/compare/@tanstack/react-router@1.170.41...@tanstack/react-router@1.170.42) ##### Patch Changes - [#&#8203;8594](https://github.com/TanStack/router/pull/8594) [`2413cc0`](https://github.com/TanStack/router/commit/2413cc009826fba4f97b166a35a8a50a4a8fe4bb) - reduce component nesting per route match - [#&#8203;8602](https://github.com/TanStack/router/pull/8602) [`efc2042`](https://github.com/TanStack/router/commit/efc2042c2d02a9780c3e7efe81f123d066a869eb) - Links of a route that the pending navigation leaves skip deriving the destination location, and clicks and preloads follow the href a Link displays. `buildLocation` now builds `mask` and `routeMasks` locations from the same `_fromLocation` as the destination. - [#&#8203;8602](https://github.com/TanStack/router/pull/8602) [`efc2042`](https://github.com/TanStack/router/commit/efc2042c2d02a9780c3e7efe81f123d066a869eb) - Fixed Link destinations that resolve to a route mask are now reused across navigations instead of being rebuilt every time. A mounted Link now follows changes to its `href` and `reloadDocument` props, and React Links no longer each subscribe to a hydration flag. - [#&#8203;8579](https://github.com/TanStack/router/pull/8579) [`d35aab4`](https://github.com/TanStack/router/commit/d35aab425b07b46e222a507c0f0239644669757b) - Cancel pending link preload timers when starting navigation to avoid redundant preloading while the destination is loading. - Updated dependencies \[[`dfe3dea`](https://github.com/TanStack/router/commit/dfe3dea88a28400db1677111e2b15ae7914782c2), [`dfe3dea`](https://github.com/TanStack/router/commit/dfe3dea88a28400db1677111e2b15ae7914782c2), [`dfe3dea`](https://github.com/TanStack/router/commit/dfe3dea88a28400db1677111e2b15ae7914782c2), [`efc2042`](https://github.com/TanStack/router/commit/efc2042c2d02a9780c3e7efe81f123d066a869eb), [`efc2042`](https://github.com/TanStack/router/commit/efc2042c2d02a9780c3e7efe81f123d066a869eb), [`dfe3dea`](https://github.com/TanStack/router/commit/dfe3dea88a28400db1677111e2b15ae7914782c2), [`663282b`](https://github.com/TanStack/router/commit/663282b0ebbc494aee3595ed95867ee29d01938e)]: - [@&#8203;tanstack/history](https://github.com/tanstack/history)@1.162.5 - [@&#8203;tanstack/router-core](https://github.com/tanstack/router-core)@1.171.35 ### [`v1.170.41`](https://github.com/TanStack/router/blob/HEAD/packages/react-router/CHANGELOG.md#117041) [Compare Source](https://github.com/TanStack/router/compare/@tanstack/react-router@1.170.40...@tanstack/react-router@1.170.41) ##### Patch Changes - [#&#8203;8529](https://github.com/TanStack/router/pull/8529) [`60b8ad1`](https://github.com/TanStack/router/commit/60b8ad1ad00812bf966a8eeee6be238c37ddad74) - Compose only enabled route boundaries instead of rendering inactive wrapper components. - [#&#8203;8568](https://github.com/TanStack/router/pull/8568) [`614bc27`](https://github.com/TanStack/router/commit/614bc27034c8ec98747bf305ed41d4a619640949) - Update TanStack Store to 0.11.2 to prevent unrelated atom reads inside subscription observers from triggering extra notifications. - [#&#8203;8530](https://github.com/TanStack/router/pull/8530) [`ff66a03`](https://github.com/TanStack/router/commit/ff66a03df4816f44a48a4a37189fc4021b1c8480) - Consolidate the root match context provider while preserving match context in the root shell. - [#&#8203;8522](https://github.com/TanStack/router/pull/8522) [`863c8a7`](https://github.com/TanStack/router/commit/863c8a736b96746c56278a16c50554356f5523d1) - Reuse Link href classification and active/inactive results across location updates while preserving live history href formatting. - Updated dependencies \[[`d521abd`](https://github.com/TanStack/router/commit/d521abd71c69f1ff010bb3def4d417cb5fa058cb)]: - [@&#8203;tanstack/router-core](https://github.com/tanstack/router-core)@1.171.34 ### [`v1.170.40`](https://github.com/TanStack/router/blob/HEAD/packages/react-router/CHANGELOG.md#117040) [Compare Source](https://github.com/TanStack/router/compare/@tanstack/react-router@1.170.39...@tanstack/react-router@1.170.40) ##### Patch Changes - [#&#8203;8436](https://github.com/TanStack/router/pull/8436) [`f5ffd38`](https://github.com/TanStack/router/commit/f5ffd3884ba26778a2a8ce53b379a5bded231676) - Skip unused Link preload cleanup when preloading is disabled and ignore queued viewport notifications after their effect has been cleaned up. - Updated dependencies \[[`488d046`](https://github.com/TanStack/router/commit/488d046a907d330429e2c807ef95326dad87480f), [`0c1b5e3`](https://github.com/TanStack/router/commit/0c1b5e38de71b7e81bbf1fd81c73ee0cd68ffe47), [`3cdd1af`](https://github.com/TanStack/router/commit/3cdd1af04b3e2d6f777797ee7bddf285318dd9d2)]: - [@&#8203;tanstack/router-core](https://github.com/tanstack/router-core)@1.171.33 ### [`v1.170.39`](https://github.com/TanStack/router/blob/HEAD/packages/react-router/CHANGELOG.md#117039) [Compare Source](https://github.com/TanStack/router/compare/@tanstack/react-router@1.170.38...@tanstack/react-router@1.170.39) ##### Patch Changes - [#&#8203;8435](https://github.com/TanStack/router/pull/8435) [`73bfc15`](https://github.com/TanStack/router/commit/73bfc153eef460e9b670556215a5adb2b5cbf542) - Avoid hydration-triggered rerenders for links that do not compare URL hashes while preserving hash-sensitive active state and ClientOnly behavior. ### [`v1.170.38`](https://github.com/TanStack/router/blob/HEAD/packages/react-router/CHANGELOG.md#117038) [Compare Source](https://github.com/TanStack/router/compare/@tanstack/react-router@1.170.37...@tanstack/react-router@1.170.38) ##### Patch Changes - Updated dependencies \[[`cecae54`](https://github.com/TanStack/router/commit/cecae5440b8edaea77c5448fe3d74bbd20fe10a4), [`0103578`](https://github.com/TanStack/router/commit/01035782e53af9b929c784b94ddd64b95efb89c7), [`ce10dcd`](https://github.com/TanStack/router/commit/ce10dcd4d9d3d23738744e453205aad5c6dbd716), [`84936cc`](https://github.com/TanStack/router/commit/84936cc04530bba11059c57b293a794922bbc5aa), [`bbd2336`](https://github.com/TanStack/router/commit/bbd2336b8446de3f7dd85070895e7cf43980183e)]: - [@&#8203;tanstack/router-core](https://github.com/tanstack/router-core)@1.171.32 ### [`v1.170.37`](https://github.com/TanStack/router/blob/HEAD/packages/react-router/CHANGELOG.md#117037) [Compare Source](https://github.com/TanStack/router/compare/@tanstack/react-router@1.170.36...@tanstack/react-router@1.170.37) ##### Patch Changes - [#&#8203;8418](https://github.com/TanStack/router/pull/8418) [`e561fa1`](https://github.com/TanStack/router/commit/e561fa1d7118e3d29267cc3b6ce1130d6581f387) - `deepEqual` now takes its flags as positional arguments — `deepEqual(a, b, partial?, explicitUndefined?)` — instead of an options object. The router's hot callers (Link option stabilization and active-state checks, `matchRoute`) no longer allocate an options object per comparison, and the comparator reads two booleans instead of a polymorphic object. `explicitUndefined` replaces `ignoreUndefined: false`. `deepEqual` is an internal helper; it stays exported for compatibility of two-argument calls. - [#&#8203;8419](https://github.com/TanStack/router/pull/8419) [`a1c8d1a`](https://github.com/TanStack/router/commit/a1c8d1aa759c227eae9601a030321ac4c53c24bd) - `resolvePath` (internal helper) now takes positional arguments — `resolvePath(base, to, trailingSlash?, cache?)` — so `buildLocation` and `matchRoute` no longer allocate an options object per path resolution. - [#&#8203;8204](https://github.com/TanStack/router/pull/8204) [`cbbfbe3`](https://github.com/TanStack/router/commit/cbbfbe37ab1dbe328c343cb437c5660769cc9f26) - Stream large deferred SSR hydration payloads through a backpressure-aware router transport, fail known setup errors before response creation, and close cancelled or expired transforms safely. Start now cancels discarded middleware and HEAD response bodies, including plain streams and derived branches. Server-function raw streams share one ordered response. Arbitrary or sequential consumption can require potentially unbounded buffering of unread data on the client. Cancelling one raw stream discards it locally, while aborting the whole call cancels the response and server work. Consume streams concurrently, cancel unused streams promptly, or use separate calls when independent backpressure is required. A raw stream that exceeds its unread-byte limit now fails alone; sibling streams and the JSON result keep flowing. The JSON wire shape of a `RawStream` server-function argument changed. Clients and servers must run matching versions for requests that pass a `RawStream`. The frame-protocol constants (`FRAME_TYPE_*`, `MAX_FRAME_PAYLOAD_SIZE`, `MAX_FRAMED_STREAMS`) moved from the `@tanstack/start-client-core` root to the `@tanstack/start-client-core/client-rpc` subpath. Router requests whose `Accept` header allows neither `text/html` nor `*/*` now receive `406 Not Acceptable` instead of `500`. Framework adapters share the body `<Scripts>` composition (`getSsrBodyScriptParts`, `composeSsrBodyScripts`) and the eager HTML response wrapper (`renderSsrHtmlResponse`) from `@tanstack/router-core`. Solid SSR now emits one document type and renders late lazy errors through route boundaries. A Solid `<Await>` without a `fallback` no longer holds the streamed shell; it renders inside the nearest `<Suspense>` boundary like React and Vue, and now renders falsy resolved values. Static server functions decode cached `RawStream` values with the client deserializer plugins. SSR Query integrations now keep request cleanup and stream ownership aligned with the router lifecycle. - [#&#8203;8420](https://github.com/TanStack/router/pull/8420) [`8e164d2`](https://github.com/TanStack/router/commit/8e164d28f9e9eb1a7301109230d7ece9817492a8) - `useLinkProps` no longer calls through an internal wrapper. The host element `Link` renders on is an `@internal` overload parameter that is stripped from the published declarations, so the public `useLinkProps(options, forwardedRef?)` signature is unchanged. - Updated dependencies \[[`bc80866`](https://github.com/TanStack/router/commit/bc80866f6d6eb3e6f152ee3682eb783c96403e83), [`e561fa1`](https://github.com/TanStack/router/commit/e561fa1d7118e3d29267cc3b6ce1130d6581f387), [`cbbfbe3`](https://github.com/TanStack/router/commit/cbbfbe37ab1dbe328c343cb437c5660769cc9f26), [`a1c8d1a`](https://github.com/TanStack/router/commit/a1c8d1aa759c227eae9601a030321ac4c53c24bd), [`cbbfbe3`](https://github.com/TanStack/router/commit/cbbfbe37ab1dbe328c343cb437c5660769cc9f26), [`a0b2ad9`](https://github.com/TanStack/router/commit/a0b2ad99aee64af08d16b0e4ff26b3ba42a99f0a), [`1ca361b`](https://github.com/TanStack/router/commit/1ca361ba52a627d2f76ab33323bd83d1d0aa65a3)]: - [@&#8203;tanstack/router-core](https://github.com/tanstack/router-core)@1.171.31 ### [`v1.170.36`](https://github.com/TanStack/router/blob/HEAD/packages/react-router/CHANGELOG.md#117036) [Compare Source](https://github.com/TanStack/router/compare/@tanstack/react-router@1.170.35...@tanstack/react-router@1.170.36) ##### Patch Changes - [#&#8203;8390](https://github.com/TanStack/router/pull/8390) [`b747fb8`](https://github.com/TanStack/router/commit/b747fb8891b3347b1ffdfe0fa81e7d15049cb776) - Keep the Link location cache out of server bundles: `buildLocation` only creates, reads and writes it when `isServer` is false. Render React Links on the server without the extra prop copies and the forwarded-ref hook. Link SSR rendering is 20-40% faster in the Link benchmarks and the React Start SSR request loop about 7% faster. React `activeProps` and `inactiveProps` now follow one precedence rule on every link, including links whose destination is blocked for using a disallowed scheme: state props override element props, `ref` and event handlers, while `href`, `disabled` and `target` stay controlled by the router. Previously a blocked link ignored a `ref` or handler from its inactive props. React `Link` and `useLinkProps` split router options from element props with one key set on the client and the server. Element props pass through as given: external links forward them verbatim, falsy values included, and `useLinkProps` now returns `children` for router-controlled links as it already did for external ones. - [#&#8203;8324](https://github.com/TanStack/router/pull/8324) [`6387d58`](https://github.com/TanStack/router/commit/6387d581eabc6e6a3acc87a0bc924e5a38d9c8b2) - Reuse hydration snapshot getters to avoid unnecessary store-instance effect updates when Links and other hydration-aware components rerender. - [#&#8203;8318](https://github.com/TanStack/router/pull/8318) [`9b2adaf`](https://github.com/TanStack/router/commit/9b2adaf8c3fca905f156c42f6a4fe17a787afcc8) - Allow active and inactive Link props to override base element props in React and Solid while preserving class/style merging. Keep React's `href`, `target`, and `disabled` values controlled by routing options. Preserve Vue object and nested-array class bindings, including reactive updates and server rendering, without mutating cached bindings during VNode normalization. - [#&#8203;8327](https://github.com/TanStack/router/pull/8327) [`634da91`](https://github.com/TanStack/router/commit/634da9176e16fa8aa49af459bbb054fcae7d85ef) - Make `pathParamsAllowedCharacters` initialization-only. Configure it when creating the router; changing allowed characters requires a new router instance. Remove decoder-update bookkeeping and decoder-change checks from route-owned path caches. - [#&#8203;8370](https://github.com/TanStack/router/pull/8370) [`e9396c9`](https://github.com/TanStack/router/commit/e9396c928945d1dd6fd3f3bd8052143794f688b5) - Stop exporting the internal `isPlainObject` and `isPlainArray` helpers. - [#&#8203;8324](https://github.com/TanStack/router/pull/8324) [`6387d58`](https://github.com/TanStack/router/commit/6387d581eabc6e6a3acc87a0bc924e5a38d9c8b2) - Avoid a redundant prop copy when rendering native Links while preserving custom-component props and the public hook result. - [#&#8203;8252](https://github.com/TanStack/router/pull/8252) [`7e349c3`](https://github.com/TanStack/router/commit/7e349c3071ef7a346698d320fc0989998ad55734) - Reduce the bundle cost of shared Link pathname interpolation while preserving its rendering performance. Reuse one interpolation pass for pathname and optional metadata, keep the bounded cache on the router, and simplify React Link active-state and prop merging. - [#&#8203;8370](https://github.com/TanStack/router/pull/8370) [`e9396c9`](https://github.com/TanStack/router/commit/e9396c928945d1dd6fd3f3bd8052143794f688b5) - Reuse built locations for Links whose destination does not depend on the current location. `buildLocation` keeps the result per options object when the build never read the current location, and the React `Link` passes one stable options object per instance, so navigations resolve unchanged Links with a lookup instead of a full build. The per-route pathname interpolation cache this replaces is removed. Link `params`, `search` and `activeOptions` are compared by value on render, so inline object literals with unchanged contents keep reusing the Link's location. Pass a new object to change a destination; like any other React prop, an object mutated in place is not re-read. - Updated dependencies \[[`d76a332`](https://github.com/TanStack/router/commit/d76a33284bc0668f7af4c972a6d32bd0f42b22a6), [`b747fb8`](https://github.com/TanStack/router/commit/b747fb8891b3347b1ffdfe0fa81e7d15049cb776), [`6cfb1e8`](https://github.com/TanStack/router/commit/6cfb1e8b564be282584765352250bf61747895ed), [`700a714`](https://github.com/TanStack/router/commit/700a714c5fb64199b4edfaa3273d230c9894e274), [`700a714`](https://github.com/TanStack/router/commit/700a714c5fb64199b4edfaa3273d230c9894e274), [`8fff7fa`](https://github.com/TanStack/router/commit/8fff7fa1f2e6f061916b0bf5e0ec486b2e732f94), [`f021f6d`](https://github.com/TanStack/router/commit/f021f6d1c6dce6c9b54d70766f1d636d8fd9e184), [`ae68535`](https://github.com/TanStack/router/commit/ae68535929043607d4ee9438f8ae401f3a064862), [`7e349c3`](https://github.com/TanStack/router/commit/7e349c3071ef7a346698d320fc0989998ad55734), [`873c830`](https://github.com/TanStack/router/commit/873c830ccb2610a864ee697250e10fcc99772ffa), [`7e349c3`](https://github.com/TanStack/router/commit/7e349c3071ef7a346698d320fc0989998ad55734), [`634da91`](https://github.com/TanStack/router/commit/634da9176e16fa8aa49af459bbb054fcae7d85ef), [`e9396c9`](https://github.com/TanStack/router/commit/e9396c928945d1dd6fd3f3bd8052143794f688b5), [`634da91`](https://github.com/TanStack/router/commit/634da9176e16fa8aa49af459bbb054fcae7d85ef), [`f151ab0`](https://github.com/TanStack/router/commit/f151ab018eede64ae849b77e68f3cdf31cb95cc5), [`bc57fa3`](https://github.com/TanStack/router/commit/bc57fa3f12450cf34c731450947c7c8f1ea05e58), [`9872d2a`](https://github.com/TanStack/router/commit/9872d2ac39fc05f4ef6566c0b421f71ceb115244), [`d76a332`](https://github.com/TanStack/router/commit/d76a33284bc0668f7af4c972a6d32bd0f42b22a6), [`634da91`](https://github.com/TanStack/router/commit/634da9176e16fa8aa49af459bbb054fcae7d85ef), [`634da91`](https://github.com/TanStack/router/commit/634da9176e16fa8aa49af459bbb054fcae7d85ef), [`7e349c3`](https://github.com/TanStack/router/commit/7e349c3071ef7a346698d320fc0989998ad55734), [`9448caa`](https://github.com/TanStack/router/commit/9448caa03a89076b9770631c356c0cc502802c09), [`e9396c9`](https://github.com/TanStack/router/commit/e9396c928945d1dd6fd3f3bd8052143794f688b5), [`700a714`](https://github.com/TanStack/router/commit/700a714c5fb64199b4edfaa3273d230c9894e274), [`634da91`](https://github.com/TanStack/router/commit/634da9176e16fa8aa49af459bbb054fcae7d85ef), [`634da91`](https://github.com/TanStack/router/commit/634da9176e16fa8aa49af459bbb054fcae7d85ef)]: - [@&#8203;tanstack/router-core](https://github.com/tanstack/router-core)@1.171.30 - [@&#8203;tanstack/history](https://github.com/tanstack/history)@1.162.4 ### [`v1.170.35`](https://github.com/TanStack/router/blob/HEAD/packages/react-router/CHANGELOG.md#117035) [Compare Source](https://github.com/TanStack/router/compare/@tanstack/react-router@1.170.34...@tanstack/react-router@1.170.35) ##### Patch Changes - [#&#8203;7824](https://github.com/TanStack/router/pull/7824) [`8c43c71`](https://github.com/TanStack/router/commit/8c43c712523fc63dc3a814f3a19617e270ce8ed1) - Upgrade TanStack Store to 0.11 and migrate router subscriptions to useSelector, preserving selector comparisons and Vue subscription cleanup. ### [`v1.170.34`](https://github.com/TanStack/router/blob/HEAD/packages/react-router/CHANGELOG.md#117034) [Compare Source](https://github.com/TanStack/router/compare/@tanstack/react-router@1.170.33...@tanstack/react-router@1.170.34) ##### Patch Changes - [#&#8203;8279](https://github.com/TanStack/router/pull/8279) [`aee42c6`](https://github.com/TanStack/router/commit/aee42c6b641d8e919bfed9e0f04bb1b72092f3a6) - Avoid allocating event-handler arrays and wrapper functions for links without user-supplied event handlers. - [#&#8203;8308](https://github.com/TanStack/router/pull/8308) [`9c1871c`](https://github.com/TanStack/router/commit/9c1871ccc88bc1157186b8b460941a304ec740b8) - Validate navigation and redirect destinations, keep ambiguous relative URLs on the current origin, and constrain prerender requests and output paths. Prevent redirect headers from appearing in serialized server function response bodies. Preserve native form HTTP redirects, route error handling and masks for document redirects, and per-navigation destinations for shared loader redirects. Avoid redundant origin parsing and reduce link styling and server-rendering work. Configured origins must already be normalized. Keep blocked-link inactive props consistent during React hydration, honor explicit redirect Location headers before checking route options, and refresh Vue link state when destinations become internal. Reuse the protocol-relative URL check while parsing redirect schemes once. Reduce React link bundle size by sharing pathname comparisons, state-prop selection, and element creation. Share normalized pathname comparisons in Solid and Vue links to reduce bundle size. - [#&#8203;8311](https://github.com/TanStack/router/pull/8311) [`9aec5a7`](https://github.com/TanStack/router/commit/9aec5a7012c47e83ec23bb4763494b72a5e68bfc) - React Links resolve state props without temporary class-name arrays or unnecessary style copies. - Updated dependencies \[[`f9836f1`](https://github.com/TanStack/router/commit/f9836f16f0e25b0a8495f5e01e3f303b1cbc8725), [`9c1871c`](https://github.com/TanStack/router/commit/9c1871ccc88bc1157186b8b460941a304ec740b8), [`9871c06`](https://github.com/TanStack/router/commit/9871c0625806001d6bf373524821a00303438a91), [`0654c0a`](https://github.com/TanStack/router/commit/0654c0a1a427db24d9af13c1d6ad1217a588c0c9)]: - [@&#8203;tanstack/router-core](https://github.com/tanstack/router-core)@1.171.29 - [@&#8203;tanstack/history](https://github.com/tanstack/history)@1.162.3 ### [`v1.170.33`](https://github.com/TanStack/router/blob/HEAD/packages/react-router/CHANGELOG.md#117033) [Compare Source](https://github.com/TanStack/router/compare/@tanstack/react-router@1.170.32...@tanstack/react-router@1.170.33) ##### Patch Changes - [#&#8203;8165](https://github.com/TanStack/router/pull/8165) [`2f20c00`](https://github.com/TanStack/router/commit/2f20c00224c5ba63467551914e0c37012588c4c2) - Exclude structural descendants below error and not-found boundaries from route lifecycle callbacks. Preserve lifecycle membership through invalidation, hydration, background reloads, and superseded navigation publication. - [#&#8203;8209](https://github.com/TanStack/router/pull/8209) [`28a5e45`](https://github.com/TanStack/router/commit/28a5e4504e4ea5cb1480667a4bea2588a53e110f) - Preserve falsy thrown values in React and Vue error boundaries. Type React and Vue boundary error components and `onCatch` callbacks as `unknown`. Solid boundary errors remain typed as `Error`; SSR now wraps non-`Error` loader errors to match Solid’s native boundary behavior, preserving the original value in `cause`. Router state and loader `onError` values are unchanged. When upgrading React or Vue, narrow boundary errors (for example, with `error instanceof Error`) before reading `message` or `stack`. `ErrorComponentProps<TError>` remains available for values narrowed to a specific error type. Route `onError` types are unchanged. - [#&#8203;8161](https://github.com/TanStack/router/pull/8161) [`f0b5eda`](https://github.com/TanStack/router/commit/f0b5eda544606686a8a8d675a686ca1366428b96) - Retain successful not-found matches as terminal shared boundaries during client navigation, preserving route context while the destination loads. - [#&#8203;8251](https://github.com/TanStack/router/pull/8251) [`0497cae`](https://github.com/TanStack/router/commit/0497caeef3ff7e1c1c6080eca38bca24e7ec320b) - Use URL.canParse for absolute URL checks in links, navigation, redirects, and build configuration. Preserve a URL constructor fallback for older browsers. - [#&#8203;8169](https://github.com/TanStack/router/pull/8169) [`0caf6b9`](https://github.com/TanStack/router/commit/0caf6b9a2b7e14b0b146c74cc27cb05c19d700a5) - Fix route-scoped `useMatch`, `useSearch`, and `useParams` APIs to forward the `shouldThrow` option and preserve optional return types when `shouldThrow: false`. - [#&#8203;8257](https://github.com/TanStack/router/pull/8257) [`cf166d1`](https://github.com/TanStack/router/commit/cf166d160e6397007a979bfc7065b45ff69ea543) - Fix repeated `innerHTML` writes for unchanged styles and data scripts during React re-renders. This prevents unnecessary CSS parsing and Trusted Types errors during client navigation. - Updated dependencies \[[`edf0e16`](https://github.com/TanStack/router/commit/edf0e16ebfe82ec6e8f68f403a1fda8de9e28889), [`2f20c00`](https://github.com/TanStack/router/commit/2f20c00224c5ba63467551914e0c37012588c4c2), [`28a5e45`](https://github.com/TanStack/router/commit/28a5e4504e4ea5cb1480667a4bea2588a53e110f), [`08eff50`](https://github.com/TanStack/router/commit/08eff50c447a154a3373909009e9e4375cea17ce), [`216c0c4`](https://github.com/TanStack/router/commit/216c0c48036fd1a33163b70dcabfed2b893808b0), [`2f91503`](https://github.com/TanStack/router/commit/2f9150309bc472f4a75cbe98adcdb50c76b12c7a), [`f0b5eda`](https://github.com/TanStack/router/commit/f0b5eda544606686a8a8d675a686ca1366428b96), [`50eafca`](https://github.com/TanStack/router/commit/50eafcaebbbedb6fde3b2816de7a0ace8cde4832), [`0497cae`](https://github.com/TanStack/router/commit/0497caeef3ff7e1c1c6080eca38bca24e7ec320b), [`ee28348`](https://github.com/TanStack/router/commit/ee283480dfa51150a2e0b096a6eff94a89ff8b3f), [`9035abc`](https://github.com/TanStack/router/commit/9035abc41163d83409ef582f7743a3c7be57dd93), [`c18e690`](https://github.com/TanStack/router/commit/c18e69081475a7c98f9d40bd0fe6da78ccb84598)]: - [@&#8203;tanstack/router-core](https://github.com/tanstack/router-core)@1.171.28 - [@&#8203;tanstack/history](https://github.com/tanstack/history)@1.162.2 ### [`v1.170.32`](https://github.com/TanStack/router/blob/HEAD/packages/react-router/CHANGELOG.md#117032) [Compare Source](https://github.com/TanStack/router/compare/@tanstack/react-router@1.170.31...@tanstack/react-router@1.170.32) ##### Patch Changes - [#&#8203;8130](https://github.com/TanStack/router/pull/8130) [`cb281d7`](https://github.com/TanStack/router/commit/cb281d70c1f5fe780f9d07bc500ea3a284a4e04b) - preserve context during reloads - Updated dependencies \[[`fa65287`](https://github.com/TanStack/router/commit/fa652872812c9433ba8b9d9a285e51b535e7367c), [`cb281d7`](https://github.com/TanStack/router/commit/cb281d70c1f5fe780f9d07bc500ea3a284a4e04b)]: - [@&#8203;tanstack/router-core](https://github.com/tanstack/router-core)@1.171.27 ### [`v1.170.31`](https://github.com/TanStack/router/blob/HEAD/packages/react-router/CHANGELOG.md#117031) [Compare Source](https://github.com/TanStack/router/compare/@tanstack/react-router@1.170.30...@tanstack/react-router@1.170.31) ##### Patch Changes - Updated dependencies \[[`3e016ac`](https://github.com/TanStack/router/commit/3e016ac84ffec8119f0c25cfdd1fb17e5292bd34)]: - [@&#8203;tanstack/router-core](https://github.com/tanstack/router-core)@1.171.26 ### [`v1.170.30`](https://github.com/TanStack/router/blob/HEAD/packages/react-router/CHANGELOG.md#117030) [Compare Source](https://github.com/TanStack/router/compare/@tanstack/react-router@1.170.29...@tanstack/react-router@1.170.30) ##### Patch Changes - [#&#8203;8084](https://github.com/TanStack/router/pull/8084) [`5d3785d`](https://github.com/TanStack/router/commit/5d3785dcc366b66b1c261b5d01e66af778ff1175) - preserve pending UI across retained routes - [#&#8203;8068](https://github.com/TanStack/router/pull/8068) [`f75cada`](https://github.com/TanStack/router/commit/f75cada01707e51fb9650dd301bc04f8b2265a2a) - direct export of CatchBoundary class component, remove function wrapper - Updated dependencies \[[`5d3785d`](https://github.com/TanStack/router/commit/5d3785dcc366b66b1c261b5d01e66af778ff1175), [`63d2cc9`](https://github.com/TanStack/router/commit/63d2cc9155ff5374112f7d067d0b278bafeb8486)]: - [@&#8203;tanstack/router-core](https://github.com/tanstack/router-core)@1.171.25 ### [`v1.170.29`](https://github.com/TanStack/router/blob/HEAD/packages/react-router/CHANGELOG.md#117029) [Compare Source](https://github.com/TanStack/router/compare/@tanstack/react-router@1.170.28...@tanstack/react-router@1.170.29) ##### Patch Changes - [#&#8203;8073](https://github.com/TanStack/router/pull/8073) [`0fdf9ff`](https://github.com/TanStack/router/commit/0fdf9ff16fc532de9fc131d18df167ebd8038720) - inline isCtrlKey inside Link component for byte shaving - Updated dependencies \[[`4c89b15`](https://github.com/TanStack/router/commit/4c89b15dd2b46491ee5e57985559bae8e31d62c2), [`cf6ab17`](https://github.com/TanStack/router/commit/cf6ab178b39e7628bf784759f384e0f4230e6d9e), [`bdaf73a`](https://github.com/TanStack/router/commit/bdaf73a4063ee2b02e3c9cc105ad10ce82a5a0ff)]: - [@&#8203;tanstack/router-core](https://github.com/tanstack/router-core)@1.171.24 ### [`v1.170.28`](https://github.com/TanStack/router/blob/HEAD/packages/react-router/CHANGELOG.md#117028) [Compare Source](https://github.com/TanStack/router/compare/@tanstack/react-router@1.170.27...@tanstack/react-router@1.170.28) ##### Patch Changes - [#&#8203;8055](https://github.com/TanStack/router/pull/8055) [`0c25a7b`](https://github.com/TanStack/router/commit/0c25a7b43b5331ee6ebf94d50e9793002783adab) - Avoid wrapping root components that may render the HTML document in a Suspense boundary during SSR and hydration. - [#&#8203;8054](https://github.com/TanStack/router/pull/8054) [`31882c7`](https://github.com/TanStack/router/commit/31882c7fa87debef236228831655cb112c20ce90) - Reuse resolved lazy route components when revisiting code-split routes, preventing unnecessary pending UI. - Updated dependencies \[[`31882c7`](https://github.com/TanStack/router/commit/31882c7fa87debef236228831655cb112c20ce90)]: - [@&#8203;tanstack/router-core](https://github.com/tanstack/router-core)@1.171.23 ### [`v1.170.27`](https://github.com/TanStack/router/blob/HEAD/packages/react-router/CHANGELOG.md#117027) [Compare Source](https://github.com/TanStack/router/compare/@tanstack/react-router@1.170.26...@tanstack/react-router@1.170.27) ##### Patch Changes - [#&#8203;8047](https://github.com/TanStack/router/pull/8047) [`b0817f5`](https://github.com/TanStack/router/commit/b0817f50cc639ae50b6c30cd11c5adbf7eed028c) - useMatchRoute w/ React Compiler ### [`v1.170.26`](https://github.com/TanStack/router/blob/HEAD/packages/react-router/CHANGELOG.md#117026) [Compare Source](https://github.com/TanStack/router/compare/@tanstack/react-router@1.170.25...@tanstack/react-router@1.170.26) ##### Patch Changes - [#&#8203;8045](https://github.com/TanStack/router/pull/8045) [`f500760`](https://github.com/TanStack/router/commit/f5007607d62e932b8df19de866cdc6bddcff8db3) - Warn when an Outlet is rendered inside a pending, error, or not-found component. - [#&#8203;8043](https://github.com/TanStack/router/pull/8043) [`1aafca9`](https://github.com/TanStack/router/commit/1aafca9b45d24f8f0dba78e716fc9582346c6ca1) - remove the undocumented Link `isTransitioning` state and `data-transitioning` attribute - [#&#8203;8044](https://github.com/TanStack/router/pull/8044) [`aa10b65`](https://github.com/TanStack/router/commit/aa10b6589eeda215f5a60ea0af95a3101d8c414e) - Apply `preloadDelay` to viewport link preloading and cancel pending preloads when links leave the viewport. - Updated dependencies \[[`7e93431`](https://github.com/TanStack/router/commit/7e93431ae9ff58c91c3c5ca10ffcb8414c1d0b13)]: - [@&#8203;tanstack/router-core](https://github.com/tanstack/router-core)@1.171.22 ### [`v1.170.25`](https://github.com/TanStack/router/blob/HEAD/packages/react-router/CHANGELOG.md#117025) [Compare Source](https://github.com/TanStack/router/compare/@tanstack/react-router@1.170.24...@tanstack/react-router@1.170.25) ##### Patch Changes - Updated dependencies \[[`51138a8`](https://github.com/TanStack/router/commit/51138a824cea053738f125c4c95073bd6286ff05)]: - [@&#8203;tanstack/router-core](https://github.com/tanstack/router-core)@1.171.21 ### [`v1.170.24`](https://github.com/TanStack/router/blob/HEAD/packages/react-router/CHANGELOG.md#117024) [Compare Source](https://github.com/TanStack/router/compare/@tanstack/react-router@1.170.23...@tanstack/react-router@1.170.24) ##### Patch Changes - Updated dependencies \[[`44a8c3e`](https://github.com/TanStack/router/commit/44a8c3e1d2af305064b2363d97fc7847c6f1a246), [`5253e70`](https://github.com/TanStack/router/commit/5253e70db2083d68a788fb7c9a043bb0c5518f2a)]: - [@&#8203;tanstack/router-core](https://github.com/tanstack/router-core)@1.171.20 ### [`v1.170.23`](https://github.com/TanStack/router/blob/HEAD/packages/react-router/CHANGELOG.md#117023) [Compare Source](https://github.com/TanStack/router/compare/@tanstack/react-router@1.170.22...@tanstack/react-router@1.170.23) ##### Patch Changes - [#&#8203;7952](https://github.com/TanStack/router/pull/7952) [`95dec51`](https://github.com/TanStack/router/commit/95dec51018d01483949c6f1fe3094b019ccf3b4f) - bail out of `Link` re-renders when the resolved href and active state are unchanged ### [`v1.170.22`](https://github.com/TanStack/router/blob/HEAD/packages/react-router/CHANGELOG.md#117022) [Compare Source](https://github.com/TanStack/router/compare/@tanstack/react-router@1.170.21...@tanstack/react-router@1.170.22) ##### Patch Changes - [#&#8203;7992](https://github.com/TanStack/router/pull/7992) [`ea3a665`](https://github.com/TanStack/router/commit/ea3a665d81cbb5074c2d77ec953255ab534e7db9) - retain mounted UI during revalidation - Updated dependencies \[[`ea3a665`](https://github.com/TanStack/router/commit/ea3a665d81cbb5074c2d77ec953255ab534e7db9)]: - [@&#8203;tanstack/router-core](https://github.com/tanstack/router-core)@1.171.19 ### [`v1.170.21`](https://github.com/TanStack/router/blob/HEAD/packages/react-router/CHANGELOG.md#117021) [Compare Source](https://github.com/TanStack/router/compare/@tanstack/react-router@1.170.20...@tanstack/react-router@1.170.21) ##### Patch Changes - [#&#8203;7961](https://github.com/TanStack/router/pull/7961) [`697ebb6`](https://github.com/TanStack/router/commit/697ebb6ddbd433d052b6b4707938a5c595865d58) - Prevent a blank frame before zero-delay initial pending UI by using a component-scoped React transition for match publication. Pending timing, boundary selection, and rendered matches continue to come from the router core. - [#&#8203;7970](https://github.com/TanStack/router/pull/7970) [`2435885`](https://github.com/TanStack/router/commit/2435885fa8b5e31c8c4b74d93920919f27316ebf) - createFileRoute does not rely on FileRoute class - [#&#8203;7971](https://github.com/TanStack/router/pull/7971) [`86bf510`](https://github.com/TanStack/router/commit/86bf510c2923afb76804223bd04afc2a809b33e7) - clean intersection observer options in link component - [#&#8203;7967](https://github.com/TanStack/router/pull/7967) [`6aefb33`](https://github.com/TanStack/router/commit/6aefb3392595a07a93f89301d7b5e3558ff9190c) - Preserve path params in their raw string form while matching routes so structured values returned by `params.parse` produce stable match IDs and do not reuse stale loader data. `RouterCore.getMatchedRoutes()` now returns `[matchedRoutes, rawParams, foundRoute]` instead of an object. - Updated dependencies \[[`84db4a8`](https://github.com/TanStack/router/commit/84db4a842311df3f7e58073f6f12aaf371aeb5c7), [`9cac62a`](https://github.com/TanStack/router/commit/9cac62a5c7f99ef070991ea6f1fa7e42c746d46b), [`6aefb33`](https://github.com/TanStack/router/commit/6aefb3392595a07a93f89301d7b5e3558ff9190c)]: - [@&#8203;tanstack/router-core](https://github.com/tanstack/router-core)@1.171.18 - [@&#8203;tanstack/history](https://github.com/tanstack/history)@1.162.1 ### [`v1.170.20`](https://github.com/TanStack/router/blob/HEAD/packages/react-router/CHANGELOG.md#117020) [Compare Source](https://github.com/TanStack/router/compare/@tanstack/react-router@1.170.19...@tanstack/react-router@1.170.20) ##### Patch Changes - Updated dependencies \[[`b2908c6`](https://github.com/TanStack/router/commit/b2908c642ac09aa08e6d965d2a820d7186e42fd5)]: - [@&#8203;tanstack/router-core](https://github.com/tanstack/router-core)@1.171.17 ### [`v1.170.19`](https://github.com/TanStack/router/blob/HEAD/packages/react-router/CHANGELOG.md#117019) [Compare Source](https://github.com/TanStack/router/compare/@tanstack/react-router@1.170.18...@tanstack/react-router@1.170.19) ##### Patch Changes - [#&#8203;7805](https://github.com/TanStack/router/pull/7805) [`45c4ad8`](https://github.com/TanStack/router/commit/45c4ad8d629e291fab70c37900525449e415ffcd) - 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. - Invalidation now retires matching active preloads so older speculative loader results cannot become fresh cache data after invalidation. - Route `headers()` now only runs on the server, matching the documented behavior — it is no longer invoked during client-side asset projection. - The documented default `gcTime` and `preloadGcTime` now match the existing runtime default of 5 minutes (`300_000`). **Removed / changed exported internals** - `RouterState` no longer includes `loadedAt`, `isTransitioning`, `statusCode`, or `redirect`. Use `match.updatedAt` in place of `loadedAt`; subscribe to `router.state.status` / `router.state.isLoading` in place of `isTransitioning`; server response status and redirect handling are now internal to the server loader and are no longer exposed on `router.state`. - `RouteMatch.fetchCount` has been removed, with no replacement — it was purely informational. - `RouteMatch.status` no longer includes `'redirected'` (it remains `'pending' | 'success' | 'error' | 'notFound'`) — redirected matches are dropped from the match list instead of being rendered. - `RouteMatch.globalNotFound` has been renamed and privatized to the internal `_notFound` field. Use `match.status === 'notFound'` instead. - The exported React, Solid, and Vue `Match` components now accept `routeId` instead of `matchId`. - The exported `RouterStores` adapter contract now uses route-keyed presentation stores: `matchesId` is replaced by `ids`, `matchStores` by `byRoute`, and `getRouteMatchStore()` by `getMatchStore()`. The separate `loadedAt`, `isLoading`, `isTransitioning`, `statusCode`, and `redirect` stores have been removed, along with the pending/cache stores and their setters. `StoreConfig.init` has also been removed. Read application-facing state from `router.state`; preload and cache coordination are now internal. - Removed `RouterCore` members `getMatch()`, `updateMatch()`, `cancelMatch()`, and `cancelMatches()` — read matches from `router.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 `RouterCore.hasNotFoundMatch()` — use `router.state.matches.some((m) => m.status === 'notFound')`. - Removed `RouterCore.looseRoutesById` — use `routesById`. - Removed `RouterCore.isPrerendering()`, `RouterCore.isViewTransitionTypesSupported`, and `RouterCore.viewTransitionPromise`, with no replacement. - Removed `RouterCore.getParsedLocationHref()` and `RouterCore.clearExpiredCache()`, with no replacement — expired cache entries are now reconciled automatically as part of match commit. - Removed `RouterCore.latestLoadPromise` and `RouterCore.beforeLoad()`, with no replacement. - `RouterCore.commitLocationPromise` and `RouterCore.pendingBuiltLocation` have been replaced by the internal `_commitPromise` and `_pendingLocation` fields. - Removed the exported `GetMatchFn` and `UpdateMatchFn` types, along with the methods they typed. - Removed the standalone `getMatchedRoutes()` export from `@tanstack/router-core` — use the `router.getMatchedRoutes()` instance method instead. - `RouterCore.loadRouteChunk()` no longer accepts an array of component types as its second argument. One-argument usage is unchanged; the optional second argument is now `'errorComponent'`, `'notFoundComponent'`, or `false` for internal boundary loading. - Removed `Redirect.redirectHandled`, which was internal redirect bookkeeping. - `MatchRoutesOpts.preload` and `MatchRoutesOpts.dest` have been removed. - `StartTransitionFn` is now `(fn, expected) => Promise<boolean>` (previously `(fn) => void`). This only affects custom framework adapters that implement `startTransition`. - Updated dependencies \[[`45c4ad8`](https://github.com/TanStack/router/commit/45c4ad8d629e291fab70c37900525449e415ffcd)]: - [@&#8203;tanstack/router-core](https://github.com/tanstack/router-core)@1.171.16 ### [`v1.170.18`](https://github.com/TanStack/router/blob/HEAD/packages/react-router/CHANGELOG.md#117018) [Compare Source](https://github.com/TanStack/router/compare/@tanstack/react-router@1.170.17...@tanstack/react-router@1.170.18) ##### Patch Changes - Updated dependencies \[[`e2dd204`](https://github.com/TanStack/router/commit/e2dd2049cb42eb219d3b447b8605066d19d9c1fa)]: - [@&#8203;tanstack/router-core](https://github.com/tanstack/router-core)@1.171.15 </details> <details> <summary>TanStack/router (@&#8203;tanstack/react-router-devtools)</summary> ### [`v1.167.3`](https://github.com/TanStack/router/blob/HEAD/packages/react-router-devtools/CHANGELOG.md#11673) [Compare Source](https://github.com/TanStack/router/compare/@tanstack/react-router-devtools@1.167.2...@tanstack/react-router-devtools@1.167.3) ##### Patch Changes - Updated dependencies \[[`bbf9b75`](https://github.com/TanStack/router/commit/bbf9b75808d8eee497a6dd1663f0cf08426512e0)]: - [@&#8203;tanstack/router-devtools-core](https://github.com/tanstack/router-devtools-core)@1.168.3 ### [`v1.167.2`](https://github.com/TanStack/router/blob/HEAD/packages/react-router-devtools/CHANGELOG.md#11672) [Compare Source](https://github.com/TanStack/router/compare/@tanstack/react-router-devtools@1.167.1...@tanstack/react-router-devtools@1.167.2) ##### Patch Changes - Updated dependencies \[[`d76a332`](https://github.com/TanStack/router/commit/d76a33284bc0668f7af4c972a6d32bd0f42b22a6), [`b747fb8`](https://github.com/TanStack/router/commit/b747fb8891b3347b1ffdfe0fa81e7d15049cb776), [`6cfb1e8`](https://github.com/TanStack/router/commit/6cfb1e8b564be282584765352250bf61747895ed), [`700a714`](https://github.com/TanStack/router/commit/700a714c5fb64199b4edfaa3273d230c9894e274), [`700a714`](https://github.com/TanStack/router/commit/700a714c5fb64199b4edfaa3273d230c9894e274), [`6387d58`](https://github.com/TanStack/router/commit/6387d581eabc6e6a3acc87a0bc924e5a38d9c8b2), [`7e349c3`](https://github.com/TanStack/router/commit/7e349c3071ef7a346698d320fc0989998ad55734), [`9b2adaf`](https://github.com/TanStack/router/commit/9b2adaf8c3fca905f156c42f6a4fe17a787afcc8), [`873c830`](https://github.com/TanStack/router/commit/873c830ccb2610a864ee697250e10fcc99772ffa), [`7e349c3`](https://github.com/TanStack/router/commit/7e349c3071ef7a346698d320fc0989998ad55734), [`634da91`](https://github.com/TanStack/router/commit/634da9176e16fa8aa49af459bbb054fcae7d85ef), [`e9396c9`](https://github.com/TanStack/router/commit/e9396c928945d1dd6fd3f3bd8052143794f688b5), [`634da91`](https://github.com/TanStack/router/commit/634da9176e16fa8aa49af459bbb054fcae7d85ef), [`f151ab0`](https://github.com/TanStack/router/commit/f151ab018eede64ae849b77e68f3cdf31cb95cc5), [`bc57fa3`](https://github.com/TanStack/router/commit/bc57fa3f12450cf34c731450947c7c8f1ea05e58), [`6387d58`](https://github.com/TanStack/router/commit/6387d581eabc6e6a3acc87a0bc924e5a38d9c8b2), [`9872d2a`](https://github.com/TanStack/router/commit/9872d2ac39fc05f4ef6566c0b421f71ceb115244), [`d76a332`](https://github.com/TanStack/router/commit/d76a33284bc0668f7af4c972a6d32bd0f42b22a6), [`634da91`](https://github.com/TanStack/router/commit/634da9176e16fa8aa49af459bbb054fcae7d85ef), [`634da91`](https://github.com/TanStack/router/commit/634da9176e16fa8aa49af459bbb054fcae7d85ef), [`7e349c3`](https://github.com/TanStack/router/commit/7e349c3071ef7a346698d320fc0989998ad55734), [`9448caa`](https://github.com/TanStack/router/commit/9448caa03a89076b9770631c356c0cc502802c09), [`e9396c9`](https://github.com/TanStack/router/commit/e9396c928945d1dd6fd3f3bd8052143794f688b5), [`700a714`](https://github.com/TanStack/router/commit/700a714c5fb64199b4edfaa3273d230c9894e274), [`634da91`](https://github.com/TanStack/router/commit/634da9176e16fa8aa49af459bbb054fcae7d85ef), [`634da91`](https://github.com/TanStack/router/commit/634da9176e16fa8aa49af459bbb054fcae7d85ef)]: - [@&#8203;tanstack/router-core](https://github.com/tanstack/router-core)@1.171.30 - [@&#8203;tanstack/react-router](https://github.com/tanstack/react-router)@1.170.36 - [@&#8203;tanstack/router-devtools-core](https://github.com/tanstack/router-devtools-core)@1.168.2 ### [`v1.167.1`](https://github.com/TanStack/router/blob/HEAD/packages/react-router-devtools/CHANGELOG.md#11671) [Compare Source](https://github.com/TanStack/router/compare/@tanstack/react-router-devtools@1.167.0...@tanstack/react-router-devtools@1.167.1) ##### Patch Changes - Updated dependencies \[[`45c4ad8`](https://github.com/TanStack/router/commit/45c4ad8d629e291fab70c37900525449e415ffcd)]: - [@&#8203;tanstack/router-core](https://github.com/tanstack/router-core)@1.171.16 - [@&#8203;tanstack/react-router](https://github.com/tanstack/react-router)@1.170.19 - [@&#8203;tanstack/router-devtools-core](https://github.com/tanstack/router-devtools-core)@1.168.1 </details> <details> <summary>TanStack/router (@&#8203;tanstack/router-core)</summary> ### [`v1.171.39`](https://github.com/TanStack/router/blob/HEAD/packages/router-core/CHANGELOG.md#117139) [Compare Source](https://github.com/TanStack/router/compare/@tanstack/router-core@1.171.38...@tanstack/router-core@1.171.39) ##### Patch Changes - [#&#8203;8670](https://github.com/TanStack/router/pull/8670) [`32a3360`](https://github.com/TanStack/router/commit/32a3360cba0e0f884b3215813a48c63467f5a53c) - Reference agent skills in other packages by their `intent load` identifier (`@tanstack/<package>#<skill>`) instead of relative file links that break once packages are installed. ### [`v1.171.38`](https://github.com/TanStack/router/blob/HEAD/packages/router-core/CHANGELOG.md#117138) [Compare Source](https://github.com/TanStack/router/compare/@tanstack/router-core@1.171.37...@tanstack/router-core@1.171.38) ##### Patch Changes - [#&#8203;8212](https://github.com/TanStack/router/pull/8212) [`18154b1`](https://github.com/TanStack/router/commit/18154b1c45454a70aa77e9d6d27c8a6e0733d031) - Render generated script preloads (`modulepreload`, or `preload as="script"` for IIFE output) with `fetchPriority="low"` and forward it into static Early Hints, so they no longer compete with render-blocking stylesheets, fonts and images. ### [`v1.171.37`](https://github.com/TanStack/router/blob/HEAD/packages/router-core/CHANGELOG.md#117137) [Compare Source](https://github.com/TanStack/router/compare/@tanstack/router-core@1.171.36...@tanstack/router-core@1.171.37) ##### Patch Changes - [#&#8203;8441](https://github.com/TanStack/router/pull/8441) [`d6ba115`](https://github.com/TanStack/router/commit/d6ba115d5751c75e20943f0062577cf17b446d82) - Reuse the parsed request location during SSR instead of repeating input rewrites. Match server routes against the app router's parsed pathname while preserving encoded pathnames for server handlers and middleware. ### [`v1.171.36`](https://github.com/TanStack/router/blob/HEAD/packages/router-core/CHANGELOG.md#117136) [Compare Source](https://github.com/TanStack/router/compare/@tanstack/router-core@1.171.35...@tanstack/router-core@1.171.36) ##### Patch Changes - [#&#8203;7588](https://github.com/TanStack/router/pull/7588) [`94d6d8e`](https://github.com/TanStack/router/commit/94d6d8e49694e225cb07e2a6777633d08aeeb3c5) - Reduce per-request work in Start: `getNormalizedURL` reads a `URL` input without cloning it, and `runWithStartContext` returns the callback's own result instead of wrapping it in a promise, so a synchronous throw from the callback now propagates synchronously. ### [`v1.171.35`](https://github.com/TanStack/router/blob/HEAD/packages/router-core/CHANGELOG.md#117135) [Compare Source](https://github.com/TanStack/router/compare/@tanstack/router-core@1.171.34...@tanstack/router-core@1.171.35) ##### Patch Changes - [#&#8203;8605](https://github.com/TanStack/router/pull/8605) [`dfe3dea`](https://github.com/TanStack/router/commit/dfe3dea88a28400db1677111e2b15ae7914782c2) - Drop a duplicated current-location flag and a redundant `createHref` wrapper. - [#&#8203;8602](https://github.com/TanStack/router/pull/8602) [`efc2042`](https://github.com/TanStack/router/commit/efc2042c2d02a9780c3e7efe81f123d066a869eb) - Links of a route that the pending navigation leaves skip deriving the destination location, and clicks and preloads follow the href a Link displays. `buildLocation` now builds `mask` and `routeMasks` locations from the same `_fromLocation` as the destination. - [#&#8203;8602](https://github.com/TanStack/router/pull/8602) [`efc2042`](https://github.com/TanStack/router/commit/efc2042c2d02a9780c3e7efe81f123d066a869eb) - Fixed Link destinations that resolve to a route mask are now reused across navigations instead of being rebuilt every time. A mounted Link now follows changes to its `href` and `reloadDocument` props, and React Links no longer each subscribe to a hydration flag. - [#&#8203;8605](https://github.com/TanStack/router/pull/8605) [`dfe3dea`](https://github.com/TanStack/router/commit/dfe3dea88a28400db1677111e2b15ae7914782c2) - Use `slice` instead of `substring` where the bounds are always ordered and non-negative. - [#&#8203;7654](https://github.com/TanStack/router/pull/7654) [`663282b`](https://github.com/TanStack/router/commit/663282b0ebbc494aee3595ed95867ee29d01938e) - Encode slashes in dehydrated SSR match IDs with `#` instead of a null byte, so the inlined hydration payload no longer contains U+0000 (which is invalid in HTML and rejected by markup validators) - Updated dependencies \[[`dfe3dea`](https://github.com/TanStack/router/commit/dfe3dea88a28400db1677111e2b15ae7914782c2), [`dfe3dea`](https://github.com/TanStack/router/commit/dfe3dea88a28400db1677111e2b15ae7914782c2), [`dfe3dea`](https://github.com/TanStack/router/commit/dfe3dea88a28400db1677111e2b15ae7914782c2), [`efc2042`](https://github.com/TanStack/router/commit/efc2042c2d02a9780c3e7efe81f123d066a869eb), [`dfe3dea`](https://github.com/TanStack/router/commit/dfe3dea88a28400db1677111e2b15ae7914782c2)]: - [@&#8203;tanstack/history](https://github.com/tanstack/history)@1.162.5 ### [`v1.171.34`](https://github.com/TanStack/router/blob/HEAD/packages/router-core/CHANGELOG.md#117134) [Compare Source](https://github.com/TanStack/router/compare/@tanstack/router-core@1.171.33...@tanstack/router-core@1.171.34) ##### Patch Changes - [#&#8203;8573](https://github.com/TanStack/router/pull/8573) [`d521abd`](https://github.com/TanStack/router/commit/d521abd71c69f1ff010bb3def4d417cb5fa058cb) - Align server function request and response handling. ### [`v1.171.33`](https://github.com/TanStack/router/blob/HEAD/packages/router-core/CHANGELOG.md#117133) [Compare Source](https://github.com/TanStack/router/compare/@tanstack/router-core@1.171.32...@tanstack/router-core@1.171.33) ##### Patch Changes - [#&#8203;8297](https://github.com/TanStack/router/pull/8297) [`488d046`](https://github.com/TanStack/router/commit/488d046a907d330429e2c807ef95326dad87480f) - Update `seroval` and `seroval-plugins` from 1.6.2 to 1.6.7. This picks up the typed array length guard, the `maxBase64Length` and `compactArrayBufferViews` options, and the `isStream` export. - [#&#8203;8460](https://github.com/TanStack/router/pull/8460) [`0c1b5e3`](https://github.com/TanStack/router/commit/0c1b5e38de71b7e81bbf1fd81c73ee0cd68ffe47) - Abort reserved loader generations with no remaining owners when invalidation removes them from discovery, ensuring their public abort signals are retired. - [#&#8203;8519](https://github.com/TanStack/router/pull/8519) [`3cdd1af`](https://github.com/TanStack/router/commit/3cdd1af04b3e2d6f777797ee7bddf285318dd9d2) - Hand native scroll restoration back to the browser on pagehide, including entries entering BFCache, and reclaim manual restoration when a cached document resumes. ### [`v1.171.32`](https://github.com/TanStack/router/blob/HEAD/packages/router-core/CHANGELOG.md#117132) [Compare Source](https://github.com/TanStack/router/compare/@tanstack/router-core@1.171.31...@tanstack/router-core@1.171.32) ##### Patch Changes - [#&#8203;8363](https://github.com/TanStack/router/pull/8363) [`cecae54`](https://github.com/TanStack/router/commit/cecae5440b8edaea77c5448fe3d74bbd20fe10a4) - Detect plain objects by constructor instead of `Object.prototype.toString` dispatches in `isPlainObject`, which gates every `deepEqual` and `replaceEqualDeep` recursion step. Object literals, `JSON.parse` output and null-prototype objects are still plain; objects from another realm no longer are. Records with an own `constructor` key (for example the search params of `?constructor=foo`) fall back to a prototype check, so they keep structural sharing while class instances stay opaque. - [#&#8203;8364](https://github.com/TanStack/router/pull/8364) [`0103578`](https://github.com/TanStack/router/commit/01035782e53af9b929c784b94ddd64b95efb89c7) - Compare and copy plain objects in `replaceEqualDeep` by their string keys only, skipping the symbol-key lookup that dominated key enumeration. Objects with non-enumerable own properties, or symbol keys on the incoming value, now pass through untouched instead of being structurally shared. - [#&#8203;8411](https://github.com/TanStack/router/pull/8411) [`ce10dcd`](https://github.com/TanStack/router/commit/ce10dcd4d9d3d23738744e453205aad5c6dbd716) - Reduce structural-sharing allocations by reusing array key storage and returning incoming objects when their children need no replacements. Preserve signed zero consistently, remove stale symbol properties, and keep sparse arrays with extra keys and built-ins with an own `constructor` opaque. Null-prototype mode now applies only when constructing a copy; existing incoming objects can be reused with their original prototype. - [#&#8203;8362](https://github.com/TanStack/router/pull/8362) [`84936cc`](https://github.com/TanStack/router/commit/84936cc04530bba11059c57b293a794922bbc5aa) - Allocate the `replaceEqualDeep` result only at the first difference, so structural sharing of search, params, state and loader data no longer allocates when the new value is deeply equal to the previous one. - [#&#8203;8389](https://github.com/TanStack/router/pull/8389) [`bbd2336`](https://github.com/TanStack/router/commit/bbd2336b8446de3f7dd85070895e7cf43980183e) - Split `replaceEqualDeep` into an equality scan and a copy phase: arrays and objects are scanned by dedicated loops up to the first difference, matching keys prove ownership without a `hasOwnProperty` lookup, and once a difference is found the result is built without any further equality bookkeeping. Deeply equal search, params, state and loader data are recognised faster and changed values are copied with less work per entry. ### [`v1.171.31`](https://github.com/TanStack/router/blob/HEAD/packages/router-core/CHANGELOG.md#117131) [Compare Source](https://github.com/TanStack/router/compare/@tanstack/router-core@1.171.30...@tanstack/router-core@1.171.31) ##### Patch Changes - [#&#8203;8417](https://github.com/TanStack/router/pull/8417) [`bc80866`](https://github.com/TanStack/router/commit/bc80866f6d6eb3e6f152ee3682eb783c96403e83) - Speed up `deepEqual`: identical array elements no longer recurse, the exact comparison keeps a single key counter, and the redundant `typeof` early exit is gone. Equal numeric arrays compare \~70% faster and record comparisons 5–12% faster in the mixed-mode workloads that Link option stabilization and active-state checks produce, with a slightly smaller bundle. Behavior, including key enumeration and getter read order, is unchanged. - [#&#8203;8418](https://github.com/TanStack/router/pull/8418) [`e561fa1`](https://github.com/TanStack/router/commit/e561fa1d7118e3d29267cc3b6ce1130d6581f387) - `deepEqual` now takes its flags as positional arguments — `deepEqual(a, b, partial?, explicitUndefined?)` — instead of an options object. The router's hot callers (Link option stabilization and active-state checks, `matchRoute`) no longer allocate an options object per comparison, and the comparator reads two booleans instead of a polymorphic object. `explicitUndefined` replaces `ignoreUndefined: false`. `deepEqual` is an internal helper; it stays exported for compatibility of two-argument calls. - [#&#8203;8204](https://github.com/TanStack/router/pull/8204) [`cbbfbe3`](https://github.com/TanStack/router/commit/cbbfbe37ab1dbe328c343cb437c5660769cc9f26) - Reduce per-request SSR overhead: abort settled route matches with one shared `AbortError`-shaped reason instead of building a stack-capturing `DOMException` per match, skip `JSON.parse` for search values that cannot start JSON, wait on request signals with one listener per wait, and keep resolved server-function modules in production builds instead of re-importing them on every call. - [#&#8203;8419](https://github.com/TanStack/router/pull/8419) [`a1c8d1a`](https://github.com/TanStack/router/commit/a1c8d1aa759c227eae9601a030321ac4c53c24bd) - `resolvePath` (internal helper) now takes positional arguments — `resolvePath(base, to, trailingSlash?, cache?)` — so `buildLocation` and `matchRoute` no longer allocate an options object per path resolution. - [#&#8203;8204](https://github.com/TanStack/router/pull/8204) [`cbbfbe3`](https://github.com/TanStack/router/commit/cbbfbe37ab1dbe328c343cb437c5660769cc9f26) - Stream large deferred SSR hydration payloads through a backpressure-aware router transport, fail known setup errors before response creation, and close cancelled or expired transforms safely. Start now cancels discarded middleware and HEAD response bodies, including plain streams and derived branches. Server-function raw streams share one ordered response. Arbitrary or sequential consumption can require potentially unbounded buffering of unread data on the client. Cancelling one raw stream discards it locally, while aborting the whole call cancels the response and server work. Consume streams concurrently, cancel unused streams promptly, or use separate calls when independent backpressure is required. A raw stream that exceeds its unread-byte limit now fails alone; sibling streams and the JSON result keep flowing. The JSON wire shape of a `RawStream` server-function argument changed. Clients and servers must run matching versions for requests that pass a `RawStream`. The frame-protocol constants (`FRAME_TYPE_*`, `MAX_FRAME_PAYLOAD_SIZE`, `MAX_FRAMED_STREAMS`) moved from the `@tanstack/start-client-core` root to the `@tanstack/start-client-core/client-rpc` subpath. Router requests whose `Accept` header allows neither `text/html` nor `*/*` now receive `406 Not Acceptable` instead of `500`. Framework adapters share the body `<Scripts>` composition (`getSsrBodyScriptParts`, `composeSsrBodyScripts`) and the eager HTML response wrapper (`renderSsrHtmlResponse`) from `@tanstack/router-core`. Solid SSR now emits one document type and renders late lazy errors through route boundaries. A Solid `<Await>` without a `fallback` no longer holds the streamed shell; it renders inside the nearest `<Suspense>` boundary like React and Vue, and now renders falsy resolved values. Static server functions decode cached `RawStream` values with the client deserializer plugins. SSR Query integrations now keep request cleanup and stream ownership aligned with the router lifecycle. - [#&#8203;8422](https://github.com/TanStack/router/pull/8422) [`a0b2ad9`](https://github.com/TanStack/router/commit/a0b2ad99aee64af08d16b0e4ff26b3ba42a99f0a) - Parse the location once when `router.update()` changes the basepath or rewrite, collect `invalidate()` match ids in a single pass, and specialize internal basepath composition without arrays or loops. Preserve basepath case sensitivity when creating and updating the router. Rebuild server route trees when `caseSensitive` changes and reuse the server cache only when the route tree and case sensitivity both match. - [#&#8203;8421](https://github.com/TanStack/router/pull/8421) [`1ca361b`](https://github.com/TanStack/router/commit/1ca361ba52a627d2f76ab33323bd83d1d0aa65a3) - Parse masked locations without mutating shared state and simplify input rewrite handling. ### [`v1.171.30`](https://github.com/TanStack/router/blob/HEAD/packages/router-core/CHANGELOG.md#117130) [Compare Source](https://github.com/TanStack/router/compare/@tanstack/router-core@1.171.29...@tanstack/router-core@1.171.30) ##### Patch Changes - [#&#8203;8321](https://github.com/TanStack/router/pull/8321) [`d76a332`](https://github.com/TanStack/router/commit/d76a33284bc0668f7af4c972a6d32bd0f42b22a6) - Cache route branches and interpolated paths on their route objects, removing the fixed template limit for registered routes and reusing cached paths across server requests. Rebuild tree-dependent caches together, preserve decoder and trailing-slash isolation, and keep unregistered templates bounded. - [#&#8203;8390](https://github.com/TanStack/router/pull/8390) [`b747fb8`](https://github.com/TanStack/router/commit/b747fb8891b3347b1ffdfe0fa81e7d15049cb776) - Keep the Link location cache out of server bundles: `buildLocation` only creates, reads and writes it when `isServer` is false. Render React Links on the server without the extra prop copies and the forwarded-ref hook. Link SSR rendering is 20-40% faster in the Link benchmarks and the React Start SSR request loop about 7% faster. React `activeProps` and `inactiveProps` now follow one precedence rule on every link, including links whose destination is blocked for using a disallowed scheme: state props override element props, `ref` and event handlers, while `href`, `disabled` and `target` stay controlled by the router. Previously a blocked link ignored a `ref` or handler from its inactive props. React `Link` and `useLinkProps` split router options from element props with one key set on the client and the server. Element props pass through as given: external links forward them verbatim, falsy values included, and `useLinkProps` now returns `children` for router-controlled links as it already did for external ones. - [#&#8203;8382](https://github.com/TanStack/router/pull/8382) [`6cfb1e8`](https://github.com/TanStack/router/commit/6cfb1e8b564be282584765352250bf61747895ed) - `buildLocation` no longer structurally shares the built `search` and `state` with the current location. The observable `location.search` and `location.state` still preserve equal nested references across navigations, because `parseLocation` stabilizes them once a location is committed. A search whose contents equal the current search but list its keys in a different order now serializes in the requested order, so navigating to it creates a new history entry instead of being treated as the same location. A `state` object passed to `navigate` or `buildLocation` is never mutated. - [#&#8203;8325](https://github.com/TanStack/router/pull/8325) [`700a714`](https://github.com/TanStack/router/commit/700a714c5fb64199b4edfaa3273d230c9894e274) - Reuse the already-owned raw-param snapshot during lightweight source matching instead of copying it again. - [#&#8203;8325](https://github.com/TanStack/router/pull/8325) [`700a714`](https://github.com/TanStack/router/commit/700a714c5fb64199b4edfaa3273d230c9894e274) - Reduce transient JIT compilation memory during navigation by separating search middleware collection from recursive execution. - [#&#8203;8252](https://github.com/TanStack/router/pull/8252) [`7e349c3`](https://github.com/TanStack/router/commit/7e349c3071ef7a346698d320fc0989998ad55734) - Collect shared pathname-cache keys during interpolation instead of parsing templates twice, and share dynamic-segment handling to reduce bundle size. - [#&#8203;8319](https://github.com/TanStack/router/pull/8319) [`873c830`](https://github.com/TanStack/router/commit/873c830ccb2610a864ee697250e10fcc99772ffa) - Simplify path interpolation into ordered segment-type blocks with shared prefix/value/suffix assembly. Preserve one-pass parsing and optional metadata collection, and reuse the public result object instead of allocating and clearing a missing-parameter callback. - [#&#8203;8252](https://github.com/TanStack/router/pull/8252) [`7e349c3`](https://github.com/TanStack/router/commit/7e349c3071ef7a346698d320fc0989998ad55734) - Reuse pathname interpolation across Links with bounded router-scoped caches. Keep parameter callbacks and navigation state independent of the cache. - [#&#8203;8327](https://github.com/TanStack/router/pull/8327) [`634da91`](https://github.com/TanStack/router/commit/634da9176e16fa8aa49af459bbb054fcae7d85ef) - Make `pathParamsAllowedCharacters` initialization-only. Configure it when creating the router; changing allowed characters requires a new router instance. Remove decoder-update bookkeeping and decoder-change checks from route-owned path caches. - [#&#8203;8370](https://github.com/TanStack/router/pull/8370) [`e9396c9`](https://github.com/TanStack/router/commit/e9396c928945d1dd6fd3f3bd8052143794f688b5) - Stop exporting the internal `isPlainObject` and `isPlainArray` helpers. - [#&#8203;8327](https://github.com/TanStack/router/pull/8327) [`634da91`](https://github.com/TanStack/router/commit/634da9176e16fa8aa49af459bbb054fcae7d85ef) - Initialize routes directly during route-tree processing, removing the callback indirection while preserving parent-first initialization and route indexes. - [#&#8203;8328](https://github.com/TanStack/router/pull/8328) [`f151ab0`](https://github.com/TanStack/router/commit/f151ab018eede64ae849b77e68f3cdf31cb95cc5) - Reduce duplication in navigation parameter handling while preserving parameter inheritance, null-prototype dictionaries, and updater isolation. - [#&#8203;8410](https://github.com/TanStack/router/pull/8410) [`bc57fa3`](https://github.com/TanStack/router/commit/bc57fa3f12450cf34c731450947c7c8f1ea05e58) - Treat `0` and `false` as provided `_splat` values when interpolating paths. Only `undefined`, `null`, and `''` now omit a splat segment, matching how other path params are stringified. - [#&#8203;8354](https://github.com/TanStack/router/pull/8354) [`9872d2a`](https://github.com/TanStack/router/commit/9872d2ac39fc05f4ef6566c0b421f71ceb115244) - Use lightweight request history for SSR and make server navigation a no-op. Use redirect() to issue HTTP redirects. Server hrefs use the same normalization as browser history to handle protocol-relative URLs and control characters. - [#&#8203;8321](https://github.com/TanStack/router/pull/8321) [`d76a332`](https://github.com/TanStack/router/commit/d76a33284bc0668f7af4c972a6d32bd0f42b22a6) - Consolidate internal path interpolation into `interpolatePath`, returning a pathname directly and collecting metadata only when requested. Update router and devtools callers without changing route parsing or interpolation caching. - [#&#8203;8327](https://github.com/TanStack/router/pull/8327) [`634da91`](https://github.com/TanStack/router/commit/634da9176e16fa8aa49af459bbb054fcae7d85ef) - Reduce route-tree initialization work by avoiding temporary path-joining arrays and duplicate ID normalization. - [#&#8203;8327](https://github.com/TanStack/router/pull/8327) [`634da91`](https://github.com/TanStack/router/commit/634da9176e16fa8aa49af459bbb054fcae7d85ef) - Reuse parsed route segments when generating paths for navigation, Links, and Devtools. Preserve interpolation metadata and refresh segments when the route tree is rebuilt, without reparsing templates for new parameter values. - [#&#8203;8252](https://github.com/TanStack/router/pull/8252) [`7e349c3`](https://github.com/TanStack/router/commit/7e349c3071ef7a346698d320fc0989998ad55734) - Reduce the bundle cost of shared Link pathname interpolation while preserving its rendering performance. Reuse one interpolation pass for pathname and optional metadata, keep the bounded cache on the router, and simplify React Link active-state and prop merging. - [#&#8203;8385](https://github.com/TanStack/router/pull/8385) [`9448caa`](https://github.com/TanStack/router/commit/9448caa03a89076b9770631c356c0cc502802c09) - Collect search middlewares with a counted loop so the optimized code stays valid across navigations. This removes a JIT recompilation that raised peak memory in the interrupted-navigations client memory benchmark. - [#&#8203;8370](https://github.com/TanStack/router/pull/8370) [`e9396c9`](https://github.com/TanStack/router/commit/e9396c928945d1dd6fd3f3bd8052143794f688b5) - Reuse built locations for Links whose destination does not depend on the current location. `buildLocation` keeps the result per options object when the build never read the current location, and the React `Link` passes one stable options object per instance, so navigations resolve unchanged Links with a lookup instead of a full build. The per-route pathname interpolation cache this replaces is removed. Link `params`, `search` and `activeOptions` are compared by value on render, so inline object literals with unchanged contents keep reusing the Link's location. Pass a new object to change a destination; like any other React prop, an object mutated in place is not re-read. - [#&#8203;8325](https://github.com/TanStack/router/pull/8325) [`700a714`](https://github.com/TanStack/router/commit/700a714c5fb64199b4edfaa3273d230c9894e274) - Cache normalized route pathnames so repeated Link destinations do not decode the same interpolation result again. - [#&#8203;8327](https://github.com/TanStack/router/pull/8327) [`634da91`](https://github.com/TanStack/router/commit/634da9176e16fa8aa49af459bbb054fcae7d85ef) - Share compact parsed route segments between matching and interpolation, preserve original parameter names, and avoid reparsing templates while building paths. Simplify route-tree traversal, reuse existing path helpers, and keep Devtools-only navigation validation out of the production formatter. Preserve dynamic match identity for standalone legacy fallback routes. - [#&#8203;8327](https://github.com/TanStack/router/pull/8327) [`634da91`](https://github.com/TanStack/router/commit/634da9176e16fa8aa49af459bbb054fcae7d85ef) - Pass route initialization indexes directly instead of wrapping each index in an options object. - Updated dependencies \[[`8fff7fa`](https://github.com/TanStack/router/commit/8fff7fa1f2e6f061916b0bf5e0ec486b2e732f94), [`f021f6d`](https://github.com/TanStack/router/commit/f021f6d1c6dce6c9b54d70766f1d636d8fd9e184), [`ae68535`](https://github.com/TanStack/router/commit/ae68535929043607d4ee9438f8ae401f3a064862), [`9872d2a`](https://github.com/TanStack/router/commit/9872d2ac39fc05f4ef6566c0b421f71ceb115244)]: - [@&#8203;tanstack/history](https://github.com/tanstack/history)@1.162.4 ### [`v1.171.29`](https://github.com/TanStack/router/blob/HEAD/packages/router-core/CHANGELOG.md#117129) [Compare Source](https://github.com/TanStack/router/compare/@tanstack/router-core@1.171.28...@tanstack/router-core@1.171.29) ##### Patch Changes - [#&#8203;8313](https://github.com/TanStack/router/pull/8313) [`f9836f1`](https://github.com/TanStack/router/commit/f9836f16f0e25b0a8495f5e01e3f303b1cbc8725) - Avoid constructing a query serializer when search is empty or all values are undefined. - [#&#8203;8308](https://github.com/TanStack/router/pull/8308) [`9c1871c`](https://github.com/TanStack/router/commit/9c1871ccc88bc1157186b8b460941a304ec740b8) - Validate navigation and redirect destinations, keep ambiguous relative URLs on the current origin, and constrain prerender requests and output paths. Prevent redirect headers from appearing in serialized server function response bodies. Preserve native form HTTP redirects, route error handling and masks for document redirects, and per-navigation destinations for shared loader redirects. Avoid redundant origin parsing and reduce link styling and server-rendering work. Configured origins must already be normalized. Keep blocked-link inactive props consistent during React hydration, honor explicit redirect Location headers before checking route options, and refresh Vue link state when destinations become internal. Reuse the protocol-relative URL check while parsing redirect schemes once. Reduce React link bundle size by sharing pathname comparisons, state-prop selection, and element creation. Share normalized pathname comparisons in Solid and Vue links to reduce bundle size. - [#&#8203;8288](https://github.com/TanStack/router/pull/8288) [`9871c06`](https://github.com/TanStack/router/commit/9871c0625806001d6bf373524821a00303438a91) - Reduce cache maintenance work during navigation by indexing incoming match IDs once per commit. - [#&#8203;8287](https://github.com/TanStack/router/pull/8287) [`0654c0a`](https://github.com/TanStack/router/commit/0654c0a1a427db24d9af13c1d6ad1217a588c0c9) - Use full-document navigation when an output rewrite produces a cross-origin destination, including the public URL of a route mask. Respect registered history blockers during document navigation, passing history locations and the requested push or replace action. - Updated dependencies \[[`9c1871c`](https://github.com/TanStack/router/commit/9c1871ccc88bc1157186b8b460941a304ec740b8), [`0654c0a`](https://github.com/TanStack/router/commit/0654c0a1a427db24d9af13c1d6ad1217a588c0c9)]: - [@&#8203;tanstack/history](https://github.com/tanstack/history)@1.162.3 ### [`v1.171.28`](https://github.com/TanStack/router/blob/HEAD/packages/router-core/CHANGELOG.md#117128) [Compare Source](https://github.com/TanStack/router/compare/@tanstack/router-core@1.171.27...@tanstack/router-core@1.171.28) ##### Patch Changes - [#&#8203;8222](https://github.com/TanStack/router/pull/8222) [`edf0e16`](https://github.com/TanStack/router/commit/edf0e16ebfe82ec6e8f68f403a1fda8de9e28889) - Make each load transaction's completion follow its current successor so a burst of back-to-back loads wakes each superseded waiter once instead of once per successor. Previously every superseded `load()` re-polled the current transaction on each later completion, which was quadratic in microtask work. - [#&#8203;8165](https://github.com/TanStack/router/pull/8165) [`2f20c00`](https://github.com/TanStack/router/commit/2f20c00224c5ba63467551914e0c37012588c4c2) - Exclude structural descendants below error and not-found boundaries from route lifecycle callbacks. Preserve lifecycle membership through invalidation, hydration, background reloads, and superseded navigation publication. - [#&#8203;8209](https://github.com/TanStack/router/pull/8209) [`28a5e45`](https://github.com/TanStack/router/commit/28a5e4504e4ea5cb1480667a4bea2588a53e110f) - Preserve falsy thrown values in React and Vue error boundaries. Type React and Vue boundary error components and `onCatch` callbacks as `unknown`. Solid boundary errors remain typed as `Error`; SSR now wraps non-`Error` loader errors to match Solid’s native boundary behavior, preserving the original value in `cause`. Router state and loader `onError` values are unchanged. When upgrading React or Vue, narrow boundary errors (for example, with `error instanceof Error`) before reading `message` or `stack`. `ErrorComponentProps<TError>` remains available for values narrowed to a specific error type. Route `onError` types are unchanged. - [#&#8203;8207](https://github.com/TanStack/router/pull/8207) [`08eff50`](https://github.com/TanStack/router/commit/08eff50c447a154a3373909009e9e4375cea17ce) - Fix consumer typechecking with `skipLibCheck: false` by omitting the internal beforeLoad context field from published dehydrated match declarations. Retain the exported `isAbsoluteUrl` declaration used by framework bindings so the package entry point does not reference a stripped symbol. - [#&#8203;8259](https://github.com/TanStack/router/pull/8259) [`216c0c4`](https://github.com/TanStack/router/commit/216c0c48036fd1a33163b70dcabfed2b893808b0) - Reduce Promise allocations during client navigation and static server SSR policy resolution. Skip cancellable waits for synchronous beforeLoad results while preserving navigation cancellation. - [#&#8203;8240](https://github.com/TanStack/router/pull/8240) [`2f91503`](https://github.com/TanStack/router/commit/2f9150309bc472f4a75cbe98adcdb50c76b12c7a) - Avoid quadratic resource handoff scans when navigating with many cached route matches. - [#&#8203;8161](https://github.com/TanStack/router/pull/8161) [`f0b5eda`](https://github.com/TanStack/router/commit/f0b5eda544606686a8a8d675a686ca1366428b96) - Retain successful not-found matches as terminal shared boundaries during client navigation, preserving route context while the destination loads. - [#&#8203;8142](https://github.com/TanStack/router/pull/8142) [`50eafca`](https://github.com/TanStack/router/commit/50eafcaebbbedb6fde3b2816de7a0ace8cde4832) - Avoid unnecessary JSON.parse calls for search parameter values that cannot begin valid JSON, while preserving custom parser behavior. - [#&#8203;8251](https://github.com/TanStack/router/pull/8251) [`0497cae`](https://github.com/TanStack/router/commit/0497caeef3ff7e1c1c6080eca38bca24e7ec320b) - Use URL.canParse for absolute URL checks in links, navigation, redirects, and build configuration. Preserve a URL constructor fallback for older browsers. - [#&#8203;8230](https://github.com/TanStack/router/pull/8230) [`ee28348`](https://github.com/TanStack/router/commit/ee283480dfa51150a2e0b096a6eff94a89ff8b3f) - Replace the internal LRU cache behind path resolution, route matching and the SSR manifest lookup with a smaller SIEVE cache whose hits no longer relink a list, and fix an eviction edge case in the old implementation. - [#&#8203;8244](https://github.com/TanStack/router/pull/8244) [`c18e690`](https://github.com/TanStack/router/commit/c18e69081475a7c98f9d40bd0fe6da78ccb84598) - Reduce promise allocations during client navigation when loader data and route components are already available. - Updated dependencies \[[`9035abc`](https://github.com/TanStack/router/commit/9035abc41163d83409ef582f7743a3c7be57dd93)]: - [@&#8203;tanstack/history](https://github.com/tanstack/history)@1.162.2 ### [`v1.171.27`](https://github.com/TanStack/router/blob/HEAD/packages/router-core/CHANGELOG.md#117127) [Compare Source](https://github.com/TanStack/router/compare/@tanstack/router-core@1.171.26...@tanstack/router-core@1.171.27) ##### Patch Changes - [#&#8203;8132](https://github.com/TanStack/router/pull/8132) [`fa65287`](https://github.com/TanStack/router/commit/fa652872812c9433ba8b9d9a285e51b535e7367c) - Build client preload locations on demand and remove the prebuilt-location argument used by framework links. - [#&#8203;8130](https://github.com/TanStack/router/pull/8130) [`cb281d7`](https://github.com/TanStack/router/commit/cb281d70c1f5fe780f9d07bc500ea3a284a4e04b) - preserve context during reloads ### [`v1.171.26`](https://github.com/TanStack/router/blob/HEAD/packages/router-core/CHANGELOG.md#117126) [Compare Source](https://github.com/TanStack/router/compare/@tanstack/router-core@1.171.25...@tanstack/router-core@1.171.26) ##### Patch Changes - [#&#8203;8117](https://github.com/TanStack/router/pull/8117) [`3e016ac`](https://github.com/TanStack/router/commit/3e016ac84ffec8119f0c25cfdd1fb17e5292bd34) - optimize buildLocation path resolution [#&#8203;8108](https://github.com/TanStack/router/pull/8108) skip building search validation when disabled [#&#8203;8112](https://github.com/TanStack/router/pull/8112) skip location state sharing when impossible [#&#8203;8110](https://github.com/TanStack/router/pull/8110) fix cache hits for mask resolution when entry is null [#&#8203;8111](https://github.com/TanStack/router/pull/8111) ### [`v1.171.25`](https://github.com/TanStack/router/blob/HEAD/packages/router-core/CHANGELOG.md#117125) [Compare Source](https://github.com/TanStack/router/compare/@tanstack/router-core@1.171.24...@tanstack/router-core@1.171.25) ##### Patch Changes - [#&#8203;8084](https://github.com/TanStack/router/pull/8084) [`5d3785d`](https://github.com/TanStack/router/commit/5d3785dcc366b66b1c261b5d01e66af778ff1175) - preserve pending UI across retained routes - [#&#8203;8092](https://github.com/TanStack/router/pull/8092) [`63d2cc9`](https://github.com/TanStack/router/commit/63d2cc9155ff5374112f7d067d0b278bafeb8486) - Render route errors when redirect target construction fails and let successor transactions own navigation and HMR presentation. ### [`v1.171.24`](https://github.com/TanStack/router/blob/HEAD/packages/router-core/CHANGELOG.md#117124) [Compare Source](https://github.com/TanStack/router/compare/@tanstack/router-core@1.171.23...@tanstack/router-core@1.171.24) ##### Patch Changes - [#&#8203;8071](https://github.com/TanStack/router/pull/8071) [`4c89b15`](https://github.com/TanStack/router/commit/4c89b15dd2b46491ee5e57985559bae8e31d62c2) - inline getOpenAndCloseBraces in parseSegment for byte shaving - [#&#8203;8069](https://github.com/TanStack/router/pull/8069) [`cf6ab17`](https://github.com/TanStack/router/commit/cf6ab178b39e7628bf784759f384e0f4230e6d9e) - inline isFunction utility fn for byte shaving - [#&#8203;8070](https://github.com/TanStack/router/pull/8070) [`bdaf73a`](https://github.com/TanStack/router/commit/bdaf73a4063ee2b02e3c9cc105ad10ce82a5a0ff) - inline buildWithMatches inside buildLocation for byte shaving ### [`v1.171.23`](https://github.com/TanStack/router/blob/HEAD/packages/router-core/CHANGELOG.md#117123) [Compare Source](https://github.com/TanStack/router/compare/@tanstack/router-core@1.171.22...@tanstack/router-core@1.171.23) ##### Patch Changes - [#&#8203;8054](https://github.com/TanStack/router/pull/8054) [`31882c7`](https://github.com/TanStack/router/commit/31882c7fa87debef236228831655cb112c20ce90) - Reuse resolved lazy route components when revisiting code-split routes, preventing unnecessary pending UI. ### [`v1.171.22`](https://github.com/TanStack/router/blob/HEAD/packages/router-core/CHANGELOG.md#117122) [Compare Source](https://github.com/TanStack/router/compare/@tanstack/router-core@1.171.21...@tanstack/router-core@1.171.22) ##### Patch Changes - [#&#8203;8039](https://github.com/TanStack/router/pull/8039) [`7e93431`](https://github.com/TanStack/router/commit/7e93431ae9ff58c91c3c5ca10ffcb8414c1d0b13) - load-client can cache settles abandonned loader work without preload authority ### [`v1.171.21`](https://github.com/TanStack/router/blob/HEAD/packages/router-core/CHANGELOG.md#117121) [Compare Source](https://github.com/TanStack/router/compare/@tanstack/router-core@1.171.20...@tanstack/router-core@1.171.21) ##### Patch Changes - [#&#8203;8019](https://github.com/TanStack/router/pull/8019) [`51138a8`](https://github.com/TanStack/router/commit/51138a824cea053738f125c4c95073bd6286ff05) - handle excessive parent relative links ### [`v1.171.20`](https://github.com/TanStack/router/blob/HEAD/packages/router-core/CHANGELOG.md#117120) [Compare Source](https://github.com/TanStack/router/compare/@tanstack/router-core@1.171.19...@tanstack/router-core@1.171.20) ##### Patch Changes - [#&#8203;8006](https://github.com/TanStack/router/pull/8006) [`44a8c3e`](https://github.com/TanStack/router/commit/44a8c3e1d2af305064b2363d97fc7847c6f1a246) - skip impossible JSON parse attempts - [#&#8203;8010](https://github.com/TanStack/router/pull/8010) [`5253e70`](https://github.com/TanStack/router/commit/5253e70db2083d68a788fb7c9a043bb0c5518f2a) - perf: speed up structural sharing (`replaceEqualDeep`) by computing enumerable own keys with `Object.keys` + a length compare instead of `getOwnPropertyNames` followed by a `propertyIsEnumerable` call per key. This runs on every selector result on every state update when `defaultStructuralSharing` is enabled, and is \~1.3-1.5x faster on typical router state objects with identical behavior. ### [`v1.171.19`](https://github.com/TanStack/router/blob/HEAD/packages/router-core/CHANGELOG.md#117119) [Compare Source](https://github.com/TanStack/router/compare/@tanstack/router-core@1.171.18...@tanstack/router-core@1.171.19) ##### Patch Changes - [#&#8203;7992](https://github.com/TanStack/router/pull/7992) [`ea3a665`](https://github.com/TanStack/router/commit/ea3a665d81cbb5074c2d77ec953255ab534e7db9) - retain mounted UI during revalidation ### [`v1.171.18`](https://github.com/TanStack/router/blob/HEAD/packages/router-core/CHANGELOG.md#117118) [Compare Source](https://github.com/TanStack/router/compare/@tanstack/router-core@1.171.17...@tanstack/router-core@1.171.18) ##### Patch Changes - [#&#8203;7984](https://github.com/TanStack/router/pull/7984) [`84db4a8`](https://github.com/TanStack/router/commit/84db4a842311df3f7e58073f6f12aaf371aeb5c7) - Improve route-tree construction and matching performance by fusing static and dynamic node creation, sorting only dynamic sibling lists that need it, and deriving matcher depth from trie nodes. - [#&#8203;7985](https://github.com/TanStack/router/pull/7985) [`9cac62a`](https://github.com/TanStack/router/commit/9cac62a5c7f99ef070991ea6f1fa7e42c746d46b) - perf: compact private bundle boundaries- [#&#8203;7975](https://github.com/TanStack/router/issues/7975) - [#&#8203;7967](https://github.com/TanStack/router/pull/7967) [`6aefb33`](https://github.com/TanStack/router/commit/6aefb3392595a07a93f89301d7b5e3558ff9190c) - Preserve path params in their raw string form while matching routes so structured values returned by `params.parse` produce stable match IDs and do not reuse stale loader data. `RouterCore.getMatchedRoutes()` now returns `[matchedRoutes, rawParams, foundRoute]` instead of an object. - Updated dependencies \[[`9cac62a`](https://github.com/TanStack/router/commit/9cac62a5c7f99ef070991ea6f1fa7e42c746d46b)]: - [@&#8203;tanstack/history](https://github.com/tanstack/history)@1.162.1 ### [`v1.171.17`](https://github.com/TanStack/router/blob/HEAD/packages/router-core/CHANGELOG.md#117117) [Compare Source](https://github.com/TanStack/router/compare/@tanstack/router-core@1.171.16...@tanstack/router-core@1.171.17) ##### Patch Changes - [#&#8203;7962](https://github.com/TanStack/router/pull/7962) [`b2908c6`](https://github.com/TanStack/router/commit/b2908c642ac09aa08e6d965d2a820d7186e42fd5) - Update Seroval dependencies to version 1.6.2. ### [`v1.171.16`](https://github.com/TanStack/router/blob/HEAD/packages/router-core/CHANGELOG.md#117116) [Compare Source](https://github.com/TanStack/router/compare/@tanstack/router-core@1.171.15...@tanstack/router-core@1.171.16) ##### Patch Changes - [#&#8203;7805](https://github.com/TanStack/router/pull/7805) [`45c4ad8`](https://github.com/TanStack/router/commit/45c4ad8d629e291fab70c37900525449e415ffcd) - 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. - Invalidation now retires matching active preloads so older speculative loader results cannot become fresh cache data after invalidation. - Route `headers()` now only runs on the server, matching the documented behavior — it is no longer invoked during client-side asset projection. - The documented default `gcTime` and `preloadGcTime` now match the existing runtime default of 5 minutes (`300_000`). **Removed / changed exported internals** - `RouterState` no longer includes `loadedAt`, `isTransitioning`, `statusCode`, or `redirect`. Use `match.updatedAt` in place of `loadedAt`; subscribe to `router.state.status` / `router.state.isLoading` in place of `isTransitioning`; server response status and redirect handling are now internal to the server loader and are no longer exposed on `router.state`. - `RouteMatch.fetchCount` has been removed, with no replacement — it was purely informational. - `RouteMatch.status` no longer includes `'redirected'` (it remains `'pending' | 'success' | 'error' | 'notFound'`) — redirected matches are dropped from the match list instead of being rendered. - `RouteMatch.globalNotFound` has been renamed and privatized to the internal `_notFound` field. Use `match.status === 'notFound'` instead. - The exported React, Solid, and Vue `Match` components now accept `routeId` instead of `matchId`. - The exported `RouterStores` adapter contract now uses route-keyed presentation stores: `matchesId` is replaced by `ids`, `matchStores` by `byRoute`, and `getRouteMatchStore()` by `getMatchStore()`. The separate `loadedAt`, `isLoading`, `isTransitioning`, `statusCode`, and `redirect` stores have been removed, along with the pending/cache stores and their setters. `StoreConfig.init` has also been removed. Read application-facing state from `router.state`; preload and cache coordination are now internal. - Removed `RouterCore` members `getMatch()`, `updateMatch()`, `cancelMatch()`, and `cancelMatches()` — read matches from `router.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 `RouterCore.hasNotFoundMatch()` — use `router.state.matches.some((m) => m.status === 'notFound')`. - Removed `RouterCore.looseRoutesById` — use `routesById`. - Removed `RouterCore.isPrerendering()`, `RouterCore.isViewTransitionTypesSupported`, and `RouterCore.viewTransitionPromise`, with no replacement. - Removed `RouterCore.getParsedLocationHref()` and `RouterCore.clearExpiredCache()`, with no replacement — expired cache entries are now reconciled automatically as part of match commit. - Removed `RouterCore.latestLoadPromise` and `RouterCore.beforeLoad()`, with no replacement. - `RouterCore.commitLocationPromise` and `RouterCore.pendingBuiltLocation` have been replaced by the internal `_commitPromise` and `_pendingLocation` fields. - Removed the exported `GetMatchFn` and `UpdateMatchFn` types, along with the methods they typed. - Removed the standalone `getMatchedRoutes()` export from `@tanstack/router-core` — use the `router.getMatchedRoutes()` instance method instead. - `RouterCore.loadRouteChunk()` no longer accepts an array of component types as its second argument. One-argument usage is unchanged; the optional second argument is now `'errorComponent'`, `'notFoundComponent'`, or `false` for internal boundary loading. - Removed `Redirect.redirectHandled`, which was internal redirect bookkeeping. - `MatchRoutesOpts.preload` and `MatchRoutesOpts.dest` have been removed. - `StartTransitionFn` is now `(fn, expected) => Promise<boolean>` (previously `(fn) => void`). This only affects custom framework adapters that implement `startTransition`. ### [`v1.171.15`](https://github.com/TanStack/router/blob/HEAD/packages/router-core/CHANGELOG.md#117115) [Compare Source](https://github.com/TanStack/router/compare/@tanstack/router-core@1.171.14...@tanstack/router-core@1.171.15) ##### Patch Changes - [#&#8203;7807](https://github.com/TanStack/router/pull/7807) [`e2dd204`](https://github.com/TanStack/router/commit/e2dd2049cb42eb219d3b447b8605066d19d9c1fa) - fix(router-core): handle window and element scroll restoration independently Window and element scroll targets are now handled independently. Restoring one target no longer suppresses resets for other uncached configured targets, and a restored element is no longer reset when the window has no cached position. Hash navigation no longer resets elements configured through `scrollToTopSelectors` and retains precedence over stale window positions through destination invalidations. Scroll positions are sampled when leaving a route, preserving live changes made after the most recent scroll event. This also prevents client hydration from undoing nested positions restored by the SSR script. Fixes [#&#8203;7687](https://github.com/TanStack/router/issues/7687). </details> <details> <summary>TanStack/router (@&#8203;tanstack/router-plugin)</summary> ### [`v1.169.0`](https://github.com/TanStack/router/blob/HEAD/packages/router-plugin/CHANGELOG.md#11690) [Compare Source](https://github.com/TanStack/router/compare/@tanstack/router-plugin@1.168.48...@tanstack/router-plugin@1.169.0) ##### Minor Changes - [#&#8203;8855](https://github.com/TanStack/router/pull/8855) [`446ce1b`](https://github.com/TanStack/router/commit/446ce1b30650d85f1fc78f2d1ee42712e40b75c6) - Require Node `^20.19.0 || >=22.12.0` (was `>=20.19`), so the CommonJS builds can load ESM-only dependencies through `require(esm)`. Node 21 and Node 22.0–22.11 do not enable it by default, so they are no longer supported. - [#&#8203;8851](https://github.com/TanStack/router/pull/8851) [`d250819`](https://github.com/TanStack/router/commit/d25081952dd04a5f5a44db7c8df5cbbf50fad054) - Require Vite 6 or later: the `vite` peer range is now `>=6.0.0`. Vite 5 is no longer supported. ##### Patch Changes - [`1ba19a0`](https://github.com/TanStack/router/commit/1ba19a04456983ee0f8adffd038b6b1194441e15) - fix: webpack and Rspack production builds no longer put the code splitter's "will not be code-split" warning, with the route file's absolute path, into the client bundle when the build process's `NODE_ENV` isn't `production`. The bundler's mode decides, and a config without `mode` counts as production, as it does for webpack and Rspack. The warning still prints in the build output. - [#&#8203;8852](https://github.com/TanStack/router/pull/8852) [`94f36c4`](https://github.com/TanStack/router/commit/94f36c4a9ecf3062b326a8eb772e73b00c0644d9) - The esbuild plugin now throws when `autoCodeSplitting` is enabled, and `TanStackRouterCodeSplitterEsbuild` throws, instead of silently bundling every route without splitting. Route generation with esbuild is unchanged. - [#&#8203;8856](https://github.com/TanStack/router/pull/8856) [`533ca27`](https://github.com/TanStack/router/commit/533ca2704452f36c5fef5c5fe084554d9b5db1ab) - Remove the undocumented `plugin.hmr.style` option and the `HmrOptions` type. Each bundler entry now picks its own HMR runtime: the webpack and Rspack entries already forced `'webpack'`, and on Vite, `'webpack'` broke route HMR. - [#&#8203;8853](https://github.com/TanStack/router/pull/8853) [`13b6256`](https://github.com/TanStack/router/commit/13b625683030ea4ab359495ecda570e05e472587) - Remove internal code-splitter APIs: the `codeSplittingOptions.compilerPlugins` option, and the root-entry exports `unpluginRouterCodeSplitterFactory`, `getObjectPropertyKeyName`, `CodeSplitCompilerPlugin`, `ReferenceRouteCompilerPlugin`, `ReferenceRouteCompilerPluginContext` and `VirtualRouteSplitNodeCompilerPluginContext`. - [#&#8203;8860](https://github.com/TanStack/router/pull/8860) [`b5e2ac9`](https://github.com/TanStack/router/commit/b5e2ac9c4cee4c5c6f464adc6cfddcddf6c84171) - Source maps of split routes now point at the route file. On webpack and Rspack (including Rsbuild), a split component or shared code mapped to the wrong line, because unplugin's loader dropped the router plugin's map; `unplugin` now requires `^3.5.0`, which keeps it. The maps of split and shared modules also name the route file itself instead of its `?tsr-split` / `?tsr-shared` module id, so debuggers bind breakpoints set in the route file. - [#&#8203;8870](https://github.com/TanStack/router/pull/8870) [`f420d4a`](https://github.com/TanStack/router/commit/f420d4a6dacfaa81d306b7bbc9af8f1010d1a1bc) - Vite route HMR now writes `import.meta.hot.accept(` out instead of calling it through a `hot` alias. Vite only treats a module as a hot boundary when the call is spelled out, so an edit of a route file no framework plugin accepts (a `.ts` route file, or an app without `@vitejs/plugin-react`) reloaded the page instead of updating the route in place. With React HMR, a route file that declares its own top-level `hot` binding no longer fails to compile with `Duplicate declaration "hot"`. - Updated dependencies \[[`446ce1b`](https://github.com/TanStack/router/commit/446ce1b30650d85f1fc78f2d1ee42712e40b75c6), [`ad5b3b7`](https://github.com/TanStack/router/commit/ad5b3b7a0990eed7351d672ea6695d341108e0d6), [`ff157f0`](https://github.com/TanStack/router/commit/ff157f0079982e90d62be7fdeecfb77e4fdcec69)]: - [@&#8203;tanstack/router-generator](https://github.com/tanstack/router-generator)@1.168.0 - [@&#8203;tanstack/router-utils](https://github.com/tanstack/router-utils)@1.163.0 ### [`v1.168.48`](https://github.com/TanStack/router/blob/HEAD/packages/router-plugin/CHANGELOG.md#116848) [Compare Source](https://github.com/TanStack/router/compare/@tanstack/router-plugin@1.168.47...@tanstack/router-plugin@1.168.48) ##### Patch Changes - [#&#8203;8670](https://github.com/TanStack/router/pull/8670) [`32a3360`](https://github.com/TanStack/router/commit/32a3360cba0e0f884b3215813a48c63467f5a53c) - Reference agent skills in other packages by their `intent load` identifier (`@tanstack/<package>#<skill>`) instead of relative file links that break once packages are installed. - [#&#8203;8737](https://github.com/TanStack/router/pull/8737) [`647cb73`](https://github.com/TanStack/router/commit/647cb737a5622813d276d6042766692ca5ae67ed) - Remove the `enableRouteGeneration` option. Route generation now always runs, so `autoCodeSplitting` always has the route metadata it needs. - Updated dependencies \[[`32a3360`](https://github.com/TanStack/router/commit/32a3360cba0e0f884b3215813a48c63467f5a53c), [`689a7c5`](https://github.com/TanStack/router/commit/689a7c5419de68bce0aaaef72b9a36f115ea1398)]: - [@&#8203;tanstack/react-router](https://github.com/tanstack/react-router)@1.170.46 - [@&#8203;tanstack/router-core](https://github.com/tanstack/router-core)@1.171.39 - [@&#8203;tanstack/router-generator](https://github.com/tanstack/router-generator)@1.167.46 ### [`v1.168.47`](https://github.com/TanStack/router/blob/HEAD/packages/router-plugin/CHANGELOG.md#116847) [Compare Source](https://github.com/TanStack/router/compare/@tanstack/router-plugin@1.168.46...@tanstack/router-plugin@1.168.47) ##### Patch Changes - Updated dependencies \[[`18154b1`](https://github.com/TanStack/router/commit/18154b1c45454a70aa77e9d6d27c8a6e0733d031)]: - [@&#8203;tanstack/router-core](https://github.com/tanstack/router-core)@1.171.38 - [@&#8203;tanstack/react-router](https://github.com/tanstack/react-router)@1.170.45 - [@&#8203;tanstack/router-generator](https://github.com/tanstack/router-generator)@1.167.45 ### [`v1.168.46`](https://github.com/TanStack/router/blob/HEAD/packages/router-plugin/CHANGELOG.md#116846) [Compare Source](https://github.com/TanStack/router/compare/@tanstack/router-plugin@1.168.45...@tanstack/router-plugin@1.168.46) ##### Patch Changes - Updated dependencies \[[`923d98b`](https://github.com/TanStack/router/commit/923d98b18b6cd90b6219591e20e86115dc61048e)]: - [@&#8203;tanstack/router-utils](https://github.com/tanstack/router-utils)@1.162.4 - [@&#8203;tanstack/router-generator](https://github.com/tanstack/router-generator)@1.167.44 ### [`v1.168.45`](https://github.com/TanStack/router/blob/HEAD/packages/router-plugin/CHANGELOG.md#116845) [Compare Source](https://github.com/TanStack/router/compare/@tanstack/router-plugin@1.168.44...@tanstack/router-plugin@1.168.45) ##### Patch Changes - Updated dependencies \[[`d6ba115`](https://github.com/TanStack/router/commit/d6ba115d5751c75e20943f0062577cf17b446d82)]: - [@&#8203;tanstack/router-core](https://github.com/tanstack/router-core)@1.171.37 - [@&#8203;tanstack/react-router](https://github.com/tanstack/react-router)@1.170.44 - [@&#8203;tanstack/router-generator](https://github.com/tanstack/router-generator)@1.167.43 ### [`v1.168.44`](https://github.com/TanStack/router/blob/HEAD/packages/router-plugin/CHANGELOG.md#116844) [Compare Source](https://github.com/TanStack/router/compare/@tanstack/router-plugin@1.168.43...@tanstack/router-plugin@1.168.44) ##### Patch Changes - [#&#8203;8655](https://github.com/TanStack/router/pull/8655) [`e66da18`](https://github.com/TanStack/router/commit/e66da18266859ab49e20a7b8c858232449ee5290) - Remove redundant string excludes from the reference code-splitter transform filter to avoid unnecessary glob compilation in unplugin bundler adapters. - Updated dependencies \[[`57bd1a9`](https://github.com/TanStack/router/commit/57bd1a92f9839af5bf773c3b36d039569fb1a41e), [`94d6d8e`](https://github.com/TanStack/router/commit/94d6d8e49694e225cb07e2a6777633d08aeeb3c5)]: - [@&#8203;tanstack/router-generator](https://github.com/tanstack/router-generator)@1.167.42 - [@&#8203;tanstack/router-core](https://github.com/tanstack/router-core)@1.171.36 - [@&#8203;tanstack/react-router](https://github.com/tanstack/react-router)@1.170.43 ### [`v1.168.43`](https://github.com/TanStack/router/blob/HEAD/packages/router-plugin/CHANGELOG.md#116843) [Compare Source](https://github.com/TanStack/router/compare/@tanstack/router-plugin@1.168.42...@tanstack/router-plugin@1.168.43) ##### Patch Changes - Updated dependencies \[[`dfe3dea`](https://github.com/TanStack/router/commit/dfe3dea88a28400db1677111e2b15ae7914782c2), [`2413cc0`](https://github.com/TanStack/router/commit/2413cc009826fba4f97b166a35a8a50a4a8fe4bb), [`efc2042`](https://github.com/TanStack/router/commit/efc2042c2d02a9780c3e7efe81f123d066a869eb), [`efc2042`](https://github.com/TanStack/router/commit/efc2042c2d02a9780c3e7efe81f123d066a869eb), [`dfe3dea`](https://github.com/TanStack/router/commit/dfe3dea88a28400db1677111e2b15ae7914782c2), [`d35aab4`](https://github.com/TanStack/router/commit/d35aab425b07b46e222a507c0f0239644669757b), [`663282b`](https://github.com/TanStack/router/commit/663282b0ebbc494aee3595ed95867ee29d01938e)]: - [@&#8203;tanstack/router-core](https://github.com/tanstack/router-core)@1.171.35 - [@&#8203;tanstack/react-router](https://github.com/tanstack/react-router)@1.170.42 - [@&#8203;tanstack/router-generator](https://github.com/tanstack/router-generator)@1.167.41 ### [`v1.168.42`](https://github.com/TanStack/router/blob/HEAD/packages/router-plugin/CHANGELOG.md#116842) [Compare Source](https://github.com/TanStack/router/compare/@tanstack/router-plugin@1.168.41...@tanstack/router-plugin@1.168.42) ##### Patch Changes - Updated dependencies \[[`60b8ad1`](https://github.com/TanStack/router/commit/60b8ad1ad00812bf966a8eeee6be238c37ddad74), [`614bc27`](https://github.com/TanStack/router/commit/614bc27034c8ec98747bf305ed41d4a619640949), [`d521abd`](https://github.com/TanStack/router/commit/d521abd71c69f1ff010bb3def4d417cb5fa058cb), [`ff66a03`](https://github.com/TanStack/router/commit/ff66a03df4816f44a48a4a37189fc4021b1c8480), [`863c8a7`](https://github.com/TanStack/router/commit/863c8a736b96746c56278a16c50554356f5523d1)]: - [@&#8203;tanstack/react-router](https://github.com/tanstack/react-router)@1.170.41 - [@&#8203;tanstack/router-core](https://github.com/tanstack/router-core)@1.171.34 - [@&#8203;tanstack/router-generator](https://github.com/tanstack/router-generator)@1.167.40 ### [`v1.168.41`](https://github.com/TanStack/router/blob/HEAD/packages/router-plugin/CHANGELOG.md#116841) [Compare Source](https://github.com/TanStack/router/compare/@tanstack/router-plugin@1.168.40...@tanstack/router-plugin@1.168.41) ##### Patch Changes - Updated dependencies \[[`f5ffd38`](https://github.com/TanStack/router/commit/f5ffd3884ba26778a2a8ce53b379a5bded231676), [`488d046`](https://github.com/TanStack/router/commit/488d046a907d330429e2c807ef95326dad87480f), [`0c1b5e3`](https://github.com/TanStack/router/commit/0c1b5e38de71b7e81bbf1fd81c73ee0cd68ffe47), [`3cdd1af`](https://github.com/TanStack/router/commit/3cdd1af04b3e2d6f777797ee7bddf285318dd9d2)]: - [@&#8203;tanstack/react-router](https://github.com/tanstack/react-router)@1.170.40 - [@&#8203;tanstack/router-core](https://github.com/tanstack/router-core)@1.171.33 - [@&#8203;tanstack/router-generator](https://github.com/tanstack/router-generator)@1.167.39 ### [`v1.168.40`](https://github.com/TanStack/router/blob/HEAD/packages/router-plugin/CHANGELOG.md#116840) [Compare Source](https://github.com/TanStack/router/compare/@tanstack/router-plugin@1.168.39...@tanstack/router-plugin@1.168.40) ##### Patch Changes - Updated dependencies \[[`cecae54`](https://github.com/TanStack/router/commit/cecae5440b8edaea77c5448fe3d74bbd20fe10a4), [`0103578`](https://github.com/TanStack/router/commit/01035782e53af9b929c784b94ddd64b95efb89c7), [`ce10dcd`](https://github.com/TanStack/router/commit/ce10dcd4d9d3d23738744e453205aad5c6dbd716), [`84936cc`](https://github.com/TanStack/router/commit/84936cc04530bba11059c57b293a794922bbc5aa), [`bbd2336`](https://github.com/TanStack/router/commit/bbd2336b8446de3f7dd85070895e7cf43980183e)]: - [@&#8203;tanstack/router-core](https://github.com/tanstack/router-core)@1.171.32 - [@&#8203;tanstack/react-router](https://github.com/tanstack/react-router)@1.170.38 - [@&#8203;tanstack/router-generator](https://github.com/tanstack/router-generator)@1.167.38 ### [`v1.168.39`](https://github.com/TanStack/router/blob/HEAD/packages/router-plugin/CHANGELOG.md#116839) [Compare Source](https://github.com/TanStack/router/compare/@tanstack/router-plugin@1.168.38...@tanstack/router-plugin@1.168.39) ##### Patch Changes - Updated dependencies \[[`bc80866`](https://github.com/TanStack/router/commit/bc80866f6d6eb3e6f152ee3682eb783c96403e83), [`e561fa1`](https://github.com/TanStack/router/commit/e561fa1d7118e3d29267cc3b6ce1130d6581f387), [`cbbfbe3`](https://github.com/TanStack/router/commit/cbbfbe37ab1dbe328c343cb437c5660769cc9f26), [`a1c8d1a`](https://github.com/TanStack/router/commit/a1c8d1aa759c227eae9601a030321ac4c53c24bd), [`cbbfbe3`](https://github.com/TanStack/router/commit/cbbfbe37ab1dbe328c343cb437c5660769cc9f26), [`a0b2ad9`](https://github.com/TanStack/router/commit/a0b2ad99aee64af08d16b0e4ff26b3ba42a99f0a), [`8e164d2`](https://github.com/TanStack/router/commit/8e164d28f9e9eb1a7301109230d7ece9817492a8), [`1ca361b`](https://github.com/TanStack/router/commit/1ca361ba52a627d2f76ab33323bd83d1d0aa65a3)]: - [@&#8203;tanstack/router-core](https://github.com/tanstack/router-core)@1.171.31 - [@&#8203;tanstack/react-router](https://github.com/tanstack/react-router)@1.170.37 - [@&#8203;tanstack/router-generator](https://github.com/tanstack/router-generator)@1.167.37 ### [`v1.168.38`](https://github.com/TanStack/router/blob/HEAD/packages/router-plugin/CHANGELOG.md#116838) [Compare Source](https://github.com/TanStack/router/compare/@tanstack/router-plugin@1.168.37...@tanstack/router-plugin@1.168.38) ##### Patch Changes - Updated dependencies \[[`d76a332`](https://github.com/TanStack/router/commit/d76a33284bc0668f7af4c972a6d32bd0f42b22a6), [`b747fb8`](https://github.com/TanStack/router/commit/b747fb8891b3347b1ffdfe0fa81e7d15049cb776), [`6cfb1e8`](https://github.com/TanStack/router/commit/6cfb1e8b564be282584765352250bf61747895ed), [`700a714`](https://github.com/TanStack/router/commit/700a714c5fb64199b4edfaa3273d230c9894e274), [`700a714`](https://github.com/TanStack/router/commit/700a714c5fb64199b4edfaa3273d230c9894e274), [`6387d58`](https://github.com/TanStack/router/commit/6387d581eabc6e6a3acc87a0bc924e5a38d9c8b2), [`7e349c3`](https://github.com/TanStack/router/commit/7e349c3071ef7a346698d320fc0989998ad55734), [`9b2adaf`](https://github.com/TanStack/router/commit/9b2adaf8c3fca905f156c42f6a4fe17a787afcc8), [`873c830`](https://github.com/TanStack/router/commit/873c830ccb2610a864ee697250e10fcc99772ffa), [`7e349c3`](https://github.com/TanStack/router/commit/7e349c3071ef7a346698d320fc0989998ad55734), [`634da91`](https://github.com/TanStack/router/commit/634da9176e16fa8aa49af459bbb054fcae7d85ef), [`e9396c9`](https://github.com/TanStack/router/commit/e9396c928945d1dd6fd3f3bd8052143794f688b5), [`634da91`](https://github.com/TanStack/router/commit/634da9176e16fa8aa49af459bbb054fcae7d85ef), [`f151ab0`](https://github.com/TanStack/router/commit/f151ab018eede64ae849b77e68f3cdf31cb95cc5), [`bc57fa3`](https://github.com/TanStack/router/commit/bc57fa3f12450cf34c731450947c7c8f1ea05e58), [`6387d58`](https://github.com/TanStack/router/commit/6387d581eabc6e6a3acc87a0bc924e5a38d9c8b2), [`9872d2a`](https://github.com/TanStack/router/commit/9872d2ac39fc05f4ef6566c0b421f71ceb115244), [`d76a332`](https://github.com/TanStack/router/commit/d76a33284bc0668f7af4c972a6d32bd0f42b22a6), [`634da91`](https://github.com/TanStack/router/commit/634da9176e16fa8aa49af459bbb054fcae7d85ef), [`634da91`](https://github.com/TanStack/router/commit/634da9176e16fa8aa49af459bbb054fcae7d85ef), [`7e349c3`](https://github.com/TanStack/router/commit/7e349c3071ef7a346698d320fc0989998ad55734), [`9448caa`](https://github.com/TanStack/router/commit/9448caa03a89076b9770631c356c0cc502802c09), [`e9396c9`](https://github.com/TanStack/router/commit/e9396c928945d1dd6fd3f3bd8052143794f688b5), [`700a714`](https://github.com/TanStack/router/commit/700a714c5fb64199b4edfaa3273d230c9894e274), [`634da91`](https://github.com/TanStack/router/commit/634da9176e16fa8aa49af459bbb054fcae7d85ef), [`634da91`](https://github.com/TanStack/router/commit/634da9176e16fa8aa49af459bbb054fcae7d85ef)]: - [@&#8203;tanstack/router-core](https://github.com/tanstack/router-core)@1.171.30 - [@&#8203;tanstack/react-router](https://github.com/tanstack/react-router)@1.170.36 - [@&#8203;tanstack/router-generator](https://github.com/tanstack/router-generator)@1.167.36 ### [`v1.168.37`](https://github.com/TanStack/router/blob/HEAD/packages/router-plugin/CHANGELOG.md#116837) [Compare Source](https://github.com/TanStack/router/compare/@tanstack/router-plugin@1.168.36...@tanstack/router-plugin@1.168.37) ##### Patch Changes - [#&#8203;8300](https://github.com/TanStack/router/pull/8300) [`49bcd4d`](https://github.com/TanStack/router/commit/49bcd4db743dba4a783d5533a42a0f97a5721292) - Refresh compatible build and runtime dependencies. - Updated dependencies \[[`f9836f1`](https://github.com/TanStack/router/commit/f9836f16f0e25b0a8495f5e01e3f303b1cbc8725), [`aee42c6`](https://github.com/TanStack/router/commit/aee42c6b641d8e919bfed9e0f04bb1b72092f3a6), [`49bcd4d`](https://github.com/TanStack/router/commit/49bcd4db743dba4a783d5533a42a0f97a5721292), [`9c1871c`](https://github.com/TanStack/router/commit/9c1871ccc88bc1157186b8b460941a304ec740b8), [`9aec5a7`](https://github.com/TanStack/router/commit/9aec5a7012c47e83ec23bb4763494b72a5e68bfc), [`9871c06`](https://github.com/TanStack/router/commit/9871c0625806001d6bf373524821a00303438a91), [`0654c0a`](https://github.com/TanStack/router/commit/0654c0a1a427db24d9af13c1d6ad1217a588c0c9)]: - [@&#8203;tanstack/router-core](https://github.com/tanstack/router-core)@1.171.29 - [@&#8203;tanstack/react-router](https://github.com/tanstack/react-router)@1.170.34 - [@&#8203;tanstack/router-generator](https://github.com/tanstack/router-generator)@1.167.35 - [@&#8203;tanstack/router-utils](https://github.com/tanstack/router-utils)@1.162.3 ### [`v1.168.36`](https://github.com/TanStack/router/blob/HEAD/packages/router-plugin/CHANGELOG.md#116836) [Compare Source](https://github.com/TanStack/router/compare/@tanstack/router-plugin@1.168.35...@tanstack/router-plugin@1.168.36) ##### Patch Changes - Updated dependencies \[[`edf0e16`](https://github.com/TanStack/router/commit/edf0e16ebfe82ec6e8f68f403a1fda8de9e28889), [`2f20c00`](https://github.com/TanStack/router/commit/2f20c00224c5ba63467551914e0c37012588c4c2), [`28a5e45`](https://github.com/TanStack/router/commit/28a5e4504e4ea5cb1480667a4bea2588a53e110f), [`08eff50`](https://github.com/TanStack/router/commit/08eff50c447a154a3373909009e9e4375cea17ce), [`216c0c4`](https://github.com/TanStack/router/commit/216c0c48036fd1a33163b70dcabfed2b893808b0), [`2f91503`](https://github.com/TanStack/router/commit/2f9150309bc472f4a75cbe98adcdb50c76b12c7a), [`f0b5eda`](https://github.com/TanStack/router/commit/f0b5eda544606686a8a8d675a686ca1366428b96), [`50eafca`](https://github.com/TanStack/router/commit/50eafcaebbbedb6fde3b2816de7a0ace8cde4832), [`0497cae`](https://github.com/TanStack/router/commit/0497caeef3ff7e1c1c6080eca38bca24e7ec320b), [`0caf6b9`](https://github.com/TanStack/router/commit/0caf6b9a2b7e14b0b146c74cc27cb05c19d700a5), [`ee28348`](https://github.com/TanStack/router/commit/ee283480dfa51150a2e0b096a6eff94a89ff8b3f), [`cf166d1`](https://github.com/TanStack/router/commit/cf166d160e6397007a979bfc7065b45ff69ea543), [`c18e690`](https://github.com/TanStack/router/commit/c18e69081475a7c98f9d40bd0fe6da78ccb84598)]: - [@&#8203;tanstack/router-core](https://github.com/tanstack/router-core)@1.171.28 - [@&#8203;tanstack/react-router](https://github.com/tanstack/react-router)@1.170.33 - [@&#8203;tanstack/router-generator](https://github.com/tanstack/router-generator)@1.167.34 ### [`v1.168.35`](https://github.com/TanStack/router/blob/HEAD/packages/router-plugin/CHANGELOG.md#116835) [Compare Source](https://github.com/TanStack/router/compare/@tanstack/router-plugin@1.168.34...@tanstack/router-plugin@1.168.35) ##### Patch Changes - Updated dependencies \[[`fa65287`](https://github.com/TanStack/router/commit/fa652872812c9433ba8b9d9a285e51b535e7367c), [`cb281d7`](https://github.com/TanStack/router/commit/cb281d70c1f5fe780f9d07bc500ea3a284a4e04b)]: - [@&#8203;tanstack/router-core](https://github.com/tanstack/router-core)@1.171.27 - [@&#8203;tanstack/react-router](https://github.com/tanstack/react-router)@1.170.32 - [@&#8203;tanstack/router-generator](https://github.com/tanstack/router-generator)@1.167.33 ### [`v1.168.34`](https://github.com/TanStack/router/blob/HEAD/packages/router-plugin/CHANGELOG.md#116834) [Compare Source](https://github.com/TanStack/router/compare/@tanstack/router-plugin@1.168.33...@tanstack/router-plugin@1.168.34) ##### Patch Changes - Updated dependencies \[[`3e016ac`](https://github.com/TanStack/router/commit/3e016ac84ffec8119f0c25cfdd1fb17e5292bd34)]: - [@&#8203;tanstack/router-core](https://github.com/tanstack/router-core)@1.171.26 - [@&#8203;tanstack/react-router](https://github.com/tanstack/react-router)@1.170.31 - [@&#8203;tanstack/router-generator](https://github.com/tanstack/router-generator)@1.167.32 ### [`v1.168.33`](https://github.com/TanStack/router/blob/HEAD/packages/router-plugin/CHANGELOG.md#116833) [Compare Source](https://github.com/TanStack/router/compare/@tanstack/router-plugin@1.168.32...@tanstack/router-plugin@1.168.33) ##### Patch Changes - Updated dependencies \[[`5d3785d`](https://github.com/TanStack/router/commit/5d3785dcc366b66b1c261b5d01e66af778ff1175), [`63d2cc9`](https://github.com/TanStack/router/commit/63d2cc9155ff5374112f7d067d0b278bafeb8486), [`f75cada`](https://github.com/TanStack/router/commit/f75cada01707e51fb9650dd301bc04f8b2265a2a)]: - [@&#8203;tanstack/react-router](https://github.com/tanstack/react-router)@1.170.30 - [@&#8203;tanstack/router-core](https://github.com/tanstack/router-core)@1.171.25 - [@&#8203;tanstack/router-generator](https://github.com/tanstack/router-generator)@1.167.31 ### [`v1.168.32`](https://github.com/TanStack/router/blob/HEAD/packages/router-plugin/CHANGELOG.md#116832) [Compare Source](https://github.com/TanStack/router/compare/@tanstack/router-plugin@1.168.31...@tanstack/router-plugin@1.168.32) ##### Patch Changes - Updated dependencies \[[`4c89b15`](https://github.com/TanStack/router/commit/4c89b15dd2b46491ee5e57985559bae8e31d62c2), [`cf6ab17`](https://github.com/TanStack/router/commit/cf6ab178b39e7628bf784759f384e0f4230e6d9e), [`0fdf9ff`](https://github.com/TanStack/router/commit/0fdf9ff16fc532de9fc131d18df167ebd8038720), [`bdaf73a`](https://github.com/TanStack/router/commit/bdaf73a4063ee2b02e3c9cc105ad10ce82a5a0ff)]: - [@&#8203;tanstack/router-core](https://github.com/tanstack/router-core)@1.171.24 - [@&#8203;tanstack/react-router](https://github.com/tanstack/react-router)@1.170.29 - [@&#8203;tanstack/router-generator](https://github.com/tanstack/router-generator)@1.167.30 ### [`v1.168.31`](https://github.com/TanStack/router/blob/HEAD/packages/router-plugin/CHANGELOG.md#116831) [Compare Source](https://github.com/TanStack/router/compare/@tanstack/router-plugin@1.168.30...@tanstack/router-plugin@1.168.31) ##### Patch Changes - Updated dependencies \[[`0c25a7b`](https://github.com/TanStack/router/commit/0c25a7b43b5331ee6ebf94d50e9793002783adab), [`31882c7`](https://github.com/TanStack/router/commit/31882c7fa87debef236228831655cb112c20ce90)]: - [@&#8203;tanstack/react-router](https://github.com/tanstack/react-router)@1.170.28 - [@&#8203;tanstack/router-core](https://github.com/tanstack/router-core)@1.171.23 - [@&#8203;tanstack/router-generator](https://github.com/tanstack/router-generator)@1.167.29 ### [`v1.168.30`](https://github.com/TanStack/router/blob/HEAD/packages/router-plugin/CHANGELOG.md#116830) [Compare Source](https://github.com/TanStack/router/compare/@tanstack/router-plugin@1.168.29...@tanstack/router-plugin@1.168.30) ##### Patch Changes - Updated dependencies \[[`7e93431`](https://github.com/TanStack/router/commit/7e93431ae9ff58c91c3c5ca10ffcb8414c1d0b13), [`f500760`](https://github.com/TanStack/router/commit/f5007607d62e932b8df19de866cdc6bddcff8db3), [`1aafca9`](https://github.com/TanStack/router/commit/1aafca9b45d24f8f0dba78e716fc9582346c6ca1), [`aa10b65`](https://github.com/TanStack/router/commit/aa10b6589eeda215f5a60ea0af95a3101d8c414e)]: - [@&#8203;tanstack/router-core](https://github.com/tanstack/router-core)@1.171.22 - [@&#8203;tanstack/react-router](https://github.com/tanstack/react-router)@1.170.26 - [@&#8203;tanstack/router-generator](https://github.com/tanstack/router-generator)@1.167.28 ### [`v1.168.29`](https://github.com/TanStack/router/blob/HEAD/packages/router-plugin/CHANGELOG.md#116829) [Compare Source](https://github.com/TanStack/router/compare/@tanstack/router-plugin@1.168.28...@tanstack/router-plugin@1.168.29) ##### Patch Changes - Updated dependencies \[[`51138a8`](https://github.com/TanStack/router/commit/51138a824cea053738f125c4c95073bd6286ff05)]: - [@&#8203;tanstack/router-core](https://github.com/tanstack/router-core)@1.171.21 - [@&#8203;tanstack/react-router](https://github.com/tanstack/react-router)@1.170.25 - [@&#8203;tanstack/router-generator](https://github.com/tanstack/router-generator)@1.167.27 ### [`v1.168.28`](https://github.com/TanStack/router/blob/HEAD/packages/router-plugin/CHANGELOG.md#116828) [Compare Source](https://github.com/TanStack/router/compare/@tanstack/router-plugin@1.168.27...@tanstack/router-plugin@1.168.28) ##### Patch Changes - Updated dependencies \[[`44a8c3e`](https://github.com/TanStack/router/commit/44a8c3e1d2af305064b2363d97fc7847c6f1a246), [`5253e70`](https://github.com/TanStack/router/commit/5253e70db2083d68a788fb7c9a043bb0c5518f2a)]: - [@&#8203;tanstack/router-core](https://github.com/tanstack/router-core)@1.171.20 - [@&#8203;tanstack/react-router](https://github.com/tanstack/react-router)@1.170.24 - [@&#8203;tanstack/router-generator](https://github.com/tanstack/router-generator)@1.167.26 ### [`v1.168.27`](https://github.com/TanStack/router/blob/HEAD/packages/router-plugin/CHANGELOG.md#116827) [Compare Source](https://github.com/TanStack/router/compare/@tanstack/router-plugin@1.168.26...@tanstack/router-plugin@1.168.27) ##### Patch Changes - Updated dependencies \[[`ea3a665`](https://github.com/TanStack/router/commit/ea3a665d81cbb5074c2d77ec953255ab534e7db9)]: - [@&#8203;tanstack/react-router](https://github.com/tanstack/react-router)@1.170.22 - [@&#8203;tanstack/router-core](https://github.com/tanstack/router-core)@1.171.19 - [@&#8203;tanstack/router-generator](https://github.com/tanstack/router-generator)@1.167.25 ### [`v1.168.26`](https://github.com/TanStack/router/blob/HEAD/packages/router-plugin/CHANGELOG.md#116826) [Compare Source](https://github.com/TanStack/router/compare/@tanstack/router-plugin@1.168.25...@tanstack/router-plugin@1.168.26) ##### Patch Changes - Updated dependencies \[[`697ebb6`](https://github.com/TanStack/router/commit/697ebb6ddbd433d052b6b4707938a5c595865d58), [`2435885`](https://github.com/TanStack/router/commit/2435885fa8b5e31c8c4b74d93920919f27316ebf), [`84db4a8`](https://github.com/TanStack/router/commit/84db4a842311df3f7e58073f6f12aaf371aeb5c7), [`9cac62a`](https://github.com/TanStack/router/commit/9cac62a5c7f99ef070991ea6f1fa7e42c746d46b), [`86bf510`](https://github.com/TanStack/router/commit/86bf510c2923afb76804223bd04afc2a809b33e7), [`6aefb33`](https://github.com/TanStack/router/commit/6aefb3392595a07a93f89301d7b5e3558ff9190c)]: - [@&#8203;tanstack/react-router](https://github.com/tanstack/react-router)@1.170.21 - [@&#8203;tanstack/router-core](https://github.com/tanstack/router-core)@1.171.18 - [@&#8203;tanstack/router-generator](https://github.com/tanstack/router-generator)@1.167.24 ### [`v1.168.25`](https://github.com/TanStack/router/blob/HEAD/packages/router-plugin/CHANGELOG.md#116825) [Compare Source](https://github.com/TanStack/router/compare/@tanstack/router-plugin@1.168.24...@tanstack/router-plugin@1.168.25) ##### Patch Changes - Updated dependencies \[[`b2908c6`](https://github.com/TanStack/router/commit/b2908c642ac09aa08e6d965d2a820d7186e42fd5)]: - [@&#8203;tanstack/router-core](https://github.com/tanstack/router-core)@1.171.17 - [@&#8203;tanstack/react-router](https://github.com/tanstack/react-router)@1.170.20 - [@&#8203;tanstack/router-generator](https://github.com/tanstack/router-generator)@1.167.23 ### [`v1.168.24`](https://github.com/TanStack/router/blob/HEAD/packages/router-plugin/CHANGELOG.md#116824) [Compare Source](https://github.com/TanStack/router/compare/@tanstack/router-plugin@1.168.23...@tanstack/router-plugin@1.168.24) ##### Patch Changes - Updated dependencies \[[`45c4ad8`](https://github.com/TanStack/router/commit/45c4ad8d629e291fab70c37900525449e415ffcd)]: - [@&#8203;tanstack/router-core](https://github.com/tanstack/router-core)@1.171.16 - [@&#8203;tanstack/react-router](https://github.com/tanstack/react-router)@1.170.19 - [@&#8203;tanstack/router-generator](https://github.com/tanstack/router-generator)@1.167.22 ### [`v1.168.23`](https://github.com/TanStack/router/blob/HEAD/packages/router-plugin/CHANGELOG.md#116823) [Compare Source](https://github.com/TanStack/router/compare/@tanstack/router-plugin@1.168.22...@tanstack/router-plugin@1.168.23) ##### Patch Changes - [#&#8203;7855](https://github.com/TanStack/router/pull/7855) [`49f6863`](https://github.com/TanStack/router/commit/49f686324574ea65851317cbba084eb386a911c6) - Preserve React component state during HMR when route components are declared with lowercase function names. The development-only React transforms cover split route component groups and unsplit root route component options, including shell, pending, and error components, without changing production output. ### [`v1.168.22`](https://github.com/TanStack/router/blob/HEAD/packages/router-plugin/CHANGELOG.md#116822) [Compare Source](https://github.com/TanStack/router/compare/@tanstack/router-plugin@1.168.21...@tanstack/router-plugin@1.168.22) ##### Patch Changes - Updated dependencies \[[`78dd1a6`](https://github.com/TanStack/router/commit/78dd1a645dc1a9e9f4f649d9aff12005044d4fcc)]: - [@&#8203;tanstack/router-generator](https://github.com/tanstack/router-generator)@1.167.21 ### [`v1.168.21`](https://github.com/TanStack/router/blob/HEAD/packages/router-plugin/CHANGELOG.md#116821) [Compare Source](https://github.com/TanStack/router/compare/@tanstack/router-plugin@1.168.20...@tanstack/router-plugin@1.168.21) ##### Patch Changes - Updated dependencies \[[`e56a677`](https://github.com/TanStack/router/commit/e56a67742da9021b009b8db0cdc8bfe99878c25b)]: - [@&#8203;tanstack/router-generator](https://github.com/tanstack/router-generator)@1.167.20 ### [`v1.168.20`](https://github.com/TanStack/router/blob/HEAD/packages/router-plugin/CHANGELOG.md#116820) [Compare Source](https://github.com/TanStack/router/compare/@tanstack/router-plugin@1.168.19...@tanstack/router-plugin@1.168.20) ##### Patch Changes - Updated dependencies \[[`e2dd204`](https://github.com/TanStack/router/commit/e2dd2049cb42eb219d3b447b8605066d19d9c1fa)]: - [@&#8203;tanstack/router-core](https://github.com/tanstack/router-core)@1.171.15 - [@&#8203;tanstack/react-router](https://github.com/tanstack/react-router)@1.170.18 - [@&#8203;tanstack/router-generator](https://github.com/tanstack/router-generator)@1.167.19 </details> --- ### Configuration 📅 **Schedule**: (UTC) - Branch creation - At any time (no schedule defined) - Automerge - At any time (no schedule defined) 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 👻 **Immortal**: This PR will be recreated if closed unmerged. Get [config help](https://github.com/renovatebot/renovate/discussions) if that's undesired. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR has been generated by [Mend Renovate CLI](https://github.com/renovatebot/renovate). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4yNTIuNCIsInVwZGF0ZWRJblZlciI6IjQ0LjY1LjUiLCJ0YXJnZXRCcmFuY2giOiJtYWluIiwibGFiZWxzIjpbImZyb250ZW5kIiwicmVub3ZhdGUiXX0=-->
renovate-bot force-pushed renovate/tanstack-router-monorepo from be6a3f466e to e9d205d62b 2026-07-18 06:01:27 +01:00 Compare
renovate-bot force-pushed renovate/tanstack-router-monorepo from e9d205d62b to b4ce1c4c68 2026-07-20 06:01:03 +01:00 Compare
renovate-bot force-pushed renovate/tanstack-router-monorepo from b4ce1c4c68 to c8afd4978e 2026-08-10 13:07:53 +01:00 Compare
renovate-bot force-pushed renovate/tanstack-router-monorepo from c8afd4978e to 7645db3a90 2026-08-13 06:00:50 +01:00 Compare
renovate-bot force-pushed renovate/tanstack-router-monorepo from 7645db3a90 to 42bb7bbb1f 2026-08-15 06:01:25 +01:00 Compare
renovate-bot force-pushed renovate/tanstack-router-monorepo from 42bb7bbb1f to ee068592f8 2026-08-19 06:01:26 +01:00 Compare
renovate-bot force-pushed renovate/tanstack-router-monorepo from ee068592f8 to c61249c230 2026-08-20 06:01:48 +01:00 Compare
renovate-bot force-pushed renovate/tanstack-router-monorepo from c61249c230 to 75f711ca73 2026-08-23 06:01:08 +01:00 Compare
renovate-bot force-pushed renovate/tanstack-router-monorepo from 75f711ca73 to 814fddafa9 2026-09-06 12:12:56 +01:00 Compare
renovate-bot force-pushed renovate/tanstack-router-monorepo from 814fddafa9 to cecd349928 2026-09-07 06:01:48 +01:00 Compare
renovate-bot force-pushed renovate/tanstack-router-monorepo from cecd349928 to c2992d0196 2026-09-10 06:02:36 +01:00 Compare
renovate-bot force-pushed renovate/tanstack-router-monorepo from c2992d0196 to 2069f6c7fe 2026-09-11 06:01:44 +01:00 Compare
renovate-bot force-pushed renovate/tanstack-router-monorepo from 2069f6c7fe to e5faa53316 2026-09-14 06:01:28 +01:00 Compare
renovate-bot force-pushed renovate/tanstack-router-monorepo from e5faa53316 to ce55114b5a 2026-09-17 06:01:54 +01:00 Compare
renovate-bot force-pushed renovate/tanstack-router-monorepo from ce55114b5a to c2c0edde39 2026-09-24 06:02:05 +01:00 Compare
renovate-bot force-pushed renovate/tanstack-router-monorepo from c2c0edde39 to f54c5ff743 2026-09-28 06:01:55 +01:00 Compare
renovate-bot force-pushed renovate/tanstack-router-monorepo from f54c5ff743 to 8f44720b7c 2026-10-01 06:02:05 +01:00 Compare
renovate-bot force-pushed renovate/tanstack-router-monorepo from 8f44720b7c to 7f488d48a6 2026-10-11 06:01:33 +01:00 Compare
renovate-bot force-pushed renovate/tanstack-router-monorepo from 7f488d48a6 to 6dba36dede 2026-10-13 06:01:27 +01:00 Compare
renovate-bot force-pushed renovate/tanstack-router-monorepo from 6dba36dede to f4b38d0a87 2026-10-15 06:01:28 +01:00 Compare
renovate-bot force-pushed renovate/tanstack-router-monorepo from f4b38d0a87 to 97834ccfc4 2026-10-17 06:01:30 +01:00 Compare
renovate-bot force-pushed renovate/tanstack-router-monorepo from 97834ccfc4 to 2e9e932e2e 2026-10-23 06:01:32 +01:00 Compare
renovate-bot force-pushed renovate/tanstack-router-monorepo from 2e9e932e2e to 8d68cc4168 2026-11-08 05:02:02 +00:00 Compare
This pull request can be merged automatically.
You are not authorized to merge this pull request.
View command line instructions

Checkout

From your project repository, check out a new branch and test the changes.
git fetch -u origin 'renovate/tanstack-router-monorepo:renovate/tanstack-router-monorepo'
git switch 'renovate/tanstack-router-monorepo'

Merge

Merge the changes and update on Forgejo.

Warning: The "Autodetect manual merge" setting is not enabled for this repository, you will have to mark this pull request as manually merged afterwards.

git switch 'main'
git merge --no-ff 'renovate/tanstack-router-monorepo'
git switch 'renovate/tanstack-router-monorepo'
git rebase 'main'
git switch 'main'
git merge --ff-only 'renovate/tanstack-router-monorepo'
git switch 'renovate/tanstack-router-monorepo'
git rebase 'main'
git switch 'main'
git merge --no-ff 'renovate/tanstack-router-monorepo'
git switch 'main'
git merge --squash 'renovate/tanstack-router-monorepo'
git switch 'main'
git merge --ff-only 'renovate/tanstack-router-monorepo'
git switch 'main'
git merge 'renovate/tanstack-router-monorepo'
git push origin 'main'
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
MobiusReactor/TicTacToeV2!118
No description provided.