unstale

npm / @tanstack/solid-router

@tanstack/solid-router

What changed in @tanstack/solid-router 1, from its official release notes, upgrade guides and advisories. Sources checked 2026-11-15.

51 breaking1 security1 new APIs and options5 performance2 behavior and defaults33 fixes and other

See which of these apply to your code, ranked, in your agent:

npx @unstale/cli init

@unstale/cli 0.3.1 on npm

@tanstack/solid-router 193 changes

Breaking changes 51

  • A Solid <Await> without a fallback no longer holds the streamed shell; it renders inside the nearest <Suspense> boundary and renders falsy resolved values.

    1.170.35release notes

  • Flags are now positional arguments (partial?, explicitUndefined?) instead of an options object; explicitUndefined replaces ignoreUndefined: false.

    1.170.35release notes

  • The internal helper is no longer exported.

    1.170.34release notes

  • This option is initialization-only: configure it when creating the router; changing allowed characters requires creating a new router instance.

    1.170.34release notes

  • Configured origins must already be normalized.

    1.170.32release notes

  • Active route components remain mounted by default when route params change.

    1.170.26release notes

  • Removes the data-transitioning attribute from Link.

    1.170.25release notes

  • Removes the undocumented Link state isTransitioning.

    1.170.25release notes

  • RouterCore.getMatchedRoutes() now returns a tuple of matched routes, raw parameters, and the found route instead of an object.

    1.170.21release notes

  • The standalone @tanstack/router-core export has been removed; use the router.getMatchedRoutes() instance method.

    1.170.19release notes

  • The exported GetMatchFn type has been removed along with the method it typed.

    1.170.19release notes

  • The exported Solid Match component now accepts routeId instead of matchId.

    1.170.19release notes

  • MatchRoutesOpts.dest has been removed.

    1.170.19release notes

  • MatchRoutesOpts.preload has been removed.

    1.170.19release notes

  • Redirect.redirectHandled has been removed because it was internal redirect bookkeeping.

    1.170.19release notes

  • RouteMatch.fetchCount has been removed with no replacement; it was purely informational.

    1.170.19release notes

  • RouteMatch.globalNotFound was renamed and privatized to _notFound; use match.status === 'notFound' instead.

    1.170.19release notes

  • The status union no longer includes 'redirected'; redirected matches are dropped from the match list instead of being rendered.

    1.170.19release notes

  • RouterCore.beforeLoad() has been removed with no replacement.

    1.170.19release notes

  • RouterCore.cancelMatch() has been removed, with no replacement for cancelling an individual in-flight match externally.

    1.170.19release notes

  • RouterCore.cancelMatches() has been removed, with no replacement for cancelling an individual in-flight match externally.

    1.170.19release notes

  • RouterCore.clearExpiredCache() has been removed; expired cache entries are reconciled automatically as part of match commit.

    1.170.19release notes

  • RouterCore.commitLocationPromise has been replaced by the internal _commitPromise field.

    1.170.19release notes

  • RouterCore.getMatch() has been removed; read matches from router.state.matches.

    1.170.19release notes

  • RouterCore.getParsedLocationHref() has been removed with no replacement.

    1.170.19release notes

  • RouterCore.hasNotFoundMatch() has been removed; check router.state.matches for a match with status 'notFound'.

    1.170.19release notes

  • RouterCore.isPrerendering() has been removed with no replacement.

    1.170.19release notes

  • RouterCore.isViewTransitionTypesSupported has been removed with no replacement.

    1.170.19release notes

  • RouterCore.latestLoadPromise has been removed with no replacement.

    1.170.19release notes

  • The optional second argument no longer accepts an array of component types; it now accepts 'errorComponent', 'notFoundComponent', or false for internal boundary loading.

    1.170.19release notes

  • RouterCore.looseRoutesById has been removed; use routesById.

    1.170.19release notes

  • RouterCore.pendingBuiltLocation has been replaced by the internal _pendingLocation field.

    1.170.19release notes

  • RouterCore.updateMatch() has been removed, with no replacement for mutating an individual in-flight match externally.

    1.170.19release notes

  • RouterCore.viewTransitionPromise has been removed with no replacement.

    1.170.19release notes

  • RouterState no longer includes isTransitioning; subscribe to router.state.status or router.state.isLoading instead.

    1.170.19release notes

  • RouterState no longer includes loadedAt; use match.updatedAt instead.

    1.170.19release notes

  • RouterState no longer exposes redirect; redirect handling is internal to the server loader.

    1.170.19release notes

  • RouterState no longer exposes statusCode; server response status handling is internal to the server loader.

    1.170.19release notes

  • The adapter contract replaces getRouteMatchStore() with getMatchStore().

    1.170.19release notes

  • The separate isLoading store has been removed; read application-facing state from router.state.

    1.170.19release notes

  • The separate isTransitioning store has been removed; read application-facing state from router.state.

    1.170.19release notes

  • The separate loadedAt store has been removed; read application-facing state from router.state.

    1.170.19release notes

  • The adapter contract replaces matchesId with ids for route-keyed presentation stores.

    1.170.19release notes

  • The adapter contract replaces matchStores with byRoute for route-keyed presentation stores.

    1.170.19release notes

  • Pending and cache stores and their setters have been removed; preload and cache coordination are now internal.

    1.170.19release notes

  • The separate redirect store has been removed; read application-facing state from router.state.

    1.170.19release notes

  • The separate statusCode store has been removed; read application-facing state from router.state.

    1.170.19release notes

  • StartTransitionFn now has signature (fn, expected) => Promise<boolean> instead of (fn) => void; custom framework adapters implementing startTransition are affected.

    1.170.19release notes

  • StoreConfig.init has been removed.

    1.170.19release notes

  • The exported UpdateMatchFn type has been removed along with the method it typed.

    1.170.19release notes

  • The script callback context now exposes only kind: 'script' and url; script format handling is internal to manifest rendering.

    1.170.8release notes

Security 1

  • Navigation and redirect destinations are validated; ambiguous relative URLs remain on the current origin.

    1.170.32release notes

New APIs and options 1

  • Rsbuild client output supports module output by default and IIFE output for classic script environments.

    1.170.8release notes

Performance 5

  • Pending link preload timers are canceled when navigation starts, avoiding redundant preloading while the destination is loading.

    1.170.39release notes

  • Solid Links reuse the router's built destination and derive state through fewer reactive nodes; they also resolve props through one reactive memo, making mounting and updating many Links slightly faster.

    1.170.39release notes

  • Skips unused Link preload cleanup when preloading is disabled.

    1.170.37release notes

  • Link reduces bundle size by sharing active-path checks and resolving only the selected active or inactive props, while avoiding unnecessary class/style allocations.

    1.170.34release notes

  • Server-rendered links skip client-only hydration, preloading, observer, and event-handler setup.

    1.170.33release notes

Behavior and default changes 2

  • Warns when an Outlet is rendered inside a pending, error, or not-found component.

    1.170.25release notes

  • Client entry scripts and preloads are represented as root route manifest assets.

    1.170.8release notes

Fixes and other changes 33

  • Builds mask and routeMasks locations from the same _fromLocation as the destination.

    1.170.39release notes

  • Links of a route left by pending navigation skip deriving the destination location, and clicks and preloads follow the href displayed by the Link.

    1.170.39release notes

  • Solid Links call a user ref once per element and create no reactive nodes on the server.

    1.170.39release notes

  • Ignores queued viewport notifications after their effect has been cleaned up.

    1.170.37release notes

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

    1.170.35release notes

  • Solid SSR renders late lazy errors through route boundaries.

    1.170.35release notes

  • Solid SSR now emits one document type.

    1.170.35release notes

  • Active and inactive Link props can override base element props, but Solid's computed href, target, and disabled values remain authoritative when state props contain routing options; class/style merging is preserved.

    1.170.34release notes

  • Avoids duplicate external script execution when a Solid script has both src and children.

    1.170.33release notes

  • Prerender requests and output paths are constrained.

    1.170.32release notes

  • Explicit redirect Location headers take precedence over route options.

    1.170.32release notes

  • Redirect headers no longer appear in serialized server function response bodies.

    1.170.32release notes

  • Successful not-found matches remain terminal shared boundaries during client navigation, preserving route context while the destination loads.

    1.170.31release notes

  • Structural descendants below error and not-found boundaries are excluded from route lifecycle callbacks, while lifecycle membership is preserved through invalidation, hydration, background reloads, and superseded navigation publication.

    1.170.31release notes

  • SSR 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.

    1.170.31release notes

  • Absolute URL checks in links, navigation, redirects, and build configuration use URL.canParse, with a URL constructor fallback for older browsers.

    1.170.31release notes

  • The route-scoped API now forwards shouldThrow and preserves optional return types when shouldThrow is false.

    1.170.31release notes

  • Context is preserved during reloads.

    1.170.30release notes

  • Pending UI is preserved across retained routes.

    1.170.28release notes

  • Resolved lazy route components are reused when revisiting code-split routes, preventing unnecessary pending UI.

    1.170.26release notes

  • Applies preloadDelay to viewport link preloading and cancels pending preloads when links leave the viewport.

    1.170.25release notes

  • Path parameters are preserved in their raw string form while matching, so structured values returned by params.parse produce stable match IDs and do not reuse stale loader data.

    1.170.21release notes

  • The documented default now matches the existing runtime default of 5 minutes (300_000).

    1.170.19release notes

  • Route headers() now runs only on the server and is no longer invoked during client-side asset projection.

    1.170.19release notes

  • The client no longer reruns work already completed by the server during hydration.

    1.170.19release notes

  • Invalidation retires matching active preloads so older speculative loader results cannot become fresh cache data afterward.

    1.170.19release notes

  • Match loading now uses a lane-based scheduler that tracks each navigation, preload, and background reload as ordered work, preventing state from leaking between overlapping navigations.

    1.170.19release notes

  • Redirect, error, and not-found responses now receive correct SSR status codes.

    1.170.19release notes

  • Fixes search middleware composition so retainSearchParams does not restore search params removed by a downstream stripSearchParams.

    1.170.13release notes

  • Fixed streaming behavior.

    1.170.9release notes

  • Script preloads follow the manifest script format.

    1.170.8release notes

  • Script asset cross-origin configuration uses the script key.

    1.170.8release notes

  • Hash navigation is no longer overridden by stale scroll restoration entries.

    1.170.6release notes