Repository: TanStack/router
Pull request #3914: fix(react-router): restore scroll position onResolved
Author: login: t1nky
Labels: name: package: react-router
name: package: router-core
name: package: solid-router
Created: 2025-04-01T21:28:33Z | Merged: 2025-04-02T18:37:36Z

Fixes #3741 

Added hash scroll handling directly in the React `Transitioner` component's `onResolved`, similar to how it's implemented in the Solid version

Linked issue #3741: <Link> with hash prop not working as expected since 1.106.0
### Which project does this relate to?

Router

### Describe the bug

I noticed for a while that a Link with hash prop isnt working anymore to scroll to that position in the scroll window. In my own code it works when I click it twice. But in the link below it doesnt work at all since 1.106.0: https://github.com/TanStack/router/compare/v1.105.5...v1.106.0



### Your Example Website or App

https://stackblitz.com/edit/tanstack-router-wzvsy46k?file=package.json

### Steps to Reproduce the Bug or Issue

1. Go to page 'Layout B'
2. Click 'middle' on the top
3. Notice it doesnt scroll to the anchor.
4. Now downgrade to 1.105.5
5. repeat step 1 and 2 and notice it works.


### Expected behavior

Using <Link  hash=""> should scroll to the anchor.

### Screenshots or Videos

_No response_

### Platform

- OS: macOS
- Browser:  Chrome
- Version: 135


### Additional context

_No response_
Linked issue comments: user: login: flipvh
created_at: 2025-03-14T10:27:37Z
body: Could be related to scrollRestoration issues such as https://github.com/TanStack/router/issues/3680
I could try to find out the cause this weekend

author_association: NONE
user: login: flipvh
created_at: 2025-03-16T13:46:40Z
body: Seems https://github.com/TanStack/router/pull/3779 fixed it. Thanks!!
author_association: NONE
user: login: flipvh
created_at: 2025-03-17T12:20:15Z
body: Seems I was mistaken the issue is still there 
author_association: NONE
user: login: qweered
created_at: 2025-03-18T16:53:43Z
body: Have same issue on latest version
author_association: NONE
user: login: TheNickOfTime
created_at: 2025-03-20T02:03:58Z
body: I am having a similar issue as well. In my case, hash links do not scroll you to the desired id on page load. For example, if you put something like `https://example.com/page#middle-of-the-page` directly into the navigation bar, it will not automatically scroll you to the element with `id='middle-of-the-page'`, you will instead remain at the top of the page.

It seems if you go up to the address bar after the page has loaded and press enter again without refreshing, it will navigate you properly to your hash link.
author_association: NONE
user: login: t1nky
created_at: 2025-04-01T21:18:24Z
body: For me, versions from 1.0.0 until the latest have the same issue:
```tsx
// scroll does not work
<Link to="/lorem-ipsum" hash="hash-id">
  Hash: Link
</Link>

// scroll works
<a href="/lorem-ipsum#hash-id">Hash: a</a>
```

It worked after I added scrolling logic from [solid-router](https://github.com/TanStack/router/blob/main/packages/solid-router/src/Transitioner.tsx#L129) to [react-router](https://github.com/TanStack/router/blob/main/packages/react-router/src/Transitioner.tsx):
(last useLayoutEffect, after setState):
```tsx
      if (typeof document !== 'undefined' && (document as any).querySelector) {
        const hashScrollIntoViewOptions =
          router.state.location.state.__hashScrollIntoViewOptions ?? true

        if (hashScrollIntoViewOptions && router.state.location.hash !== '') {
          const el = document.getElementById(router.state.location.hash)
          if (el) {
            el.scrollIntoView(hashScrollIntoViewOptions)
          }
        }
      }
```
author_association: CONTRIBUTOR
user: login: schiller-manuel
created_at: 2025-04-01T21:21:36Z
body: interesting find!
@birkskyum do you know why the two impls have different logic for hash scrolling here?

author_association: CONTRIBUTOR
user: login: birkskyum
created_at: 2025-04-02T00:23:48Z
body: @schiller-manuel , I don't unfortunately. The modification was introduced [here](https://github.com/TanStack/router/pull/3086/files#diff-055736f95b4ae2dd7cb46477c514d4e565e8b5d78035ac5fa65ff7a9698af018R159-R171), before I picked up the solid-router. @Brendonovich, do you remember the reason for it?

author_association: MEMBER

Diff:
diff --git a/packages/react-router/src/Transitioner.tsx b/packages/react-router/src/Transitioner.tsx
index 4765ea84b15..f608e028d59 100644
--- a/packages/react-router/src/Transitioner.tsx
+++ b/packages/react-router/src/Transitioner.tsx
@@ -1,5 +1,9 @@
 import * as React from 'react'
-import { getLocationChangeInfo, trimPathRight } from '@tanstack/router-core'
+import {
+  getLocationChangeInfo,
+  handleHashScroll,
+  trimPathRight,
+} from '@tanstack/router-core'
 import { useLayoutEffect, usePrevious } from './utils'
 import { useRouter } from './useRouter'
 import { useRouterState } from './useRouterState'
@@ -117,6 +121,8 @@ export function Transitioner() {
         status: 'idle',
         resolvedLocation: s.location,
       }))
+
+      handleHashScroll(router)
     }
   }, [isAnyPending, previousIsAnyPending, router])
 
diff --git a/packages/router-core/src/index.ts b/packages/router-core/src/index.ts
index 85fe783d482..49884008552 100644
--- a/packages/router-core/src/index.ts
+++ b/packages/router-core/src/index.ts
@@ -382,6 +382,7 @@ export {
   getCssSelector,
   scrollRestorationCache,
   setupScrollRestoration,
+  handleHashScroll,
 } from './scroll-restoration'
 
 export type {
diff --git a/packages/router-core/src/scroll-restoration.ts b/packages/router-core/src/scroll-restoration.ts
index 60f58d4eaeb..7efa94a9080 100644
--- a/packages/router-core/src/scroll-restoration.ts
+++ b/packages/router-core/src/scroll-restoration.ts
@@ -316,3 +316,25 @@ export function setupScrollRestoration(router: AnyRouter, force?: boolean) {
     }
   })
 }
+
+/**
+ * @internal
+ * Handles hash-based scrolling after navigation completes.
+ * To be used in framework-specific <Transitioner> components during the onResolved event.
+ *
+ * Provides hash scrolling for programmatic navigation when default browser handling is prevented.
+ * @param router The router instance containing current location and state
+ */
+export function handleHashScroll(router: AnyRouter) {
+  if (typeof document !== 'undefined' && (document as any).querySelector) {
+    const hashScrollIntoViewOptions =
+      router.state.location.state.__hashScrollIntoViewOptions ?? true
+
+    if (hashScrollIntoViewOptions && router.state.location.hash !== '') {
+      const el = document.getElementById(router.state.location.hash)
+      if (el) {
+        el.scrollIntoView(hashScrollIntoViewOptions)
+      }
+    }
+  }
+}
diff --git a/packages/solid-router/src/Transitioner.tsx b/packages/solid-router/src/Transitioner.tsx
index 6d21f3e1b66..385ed736cd1 100644
--- a/packages/solid-router/src/Transitioner.tsx
+++ b/packages/solid-router/src/Transitioner.tsx
@@ -1,5 +1,9 @@
 import * as Solid from 'solid-js'
-import { getLocationChangeInfo, trimPathRight } from '@tanstack/router-core'
+import {
+  getLocationChangeInfo,
+  handleHashScroll,
+  trimPathRight,
+} from '@tanstack/router-core'
 import { useRouter } from './useRouter'
 import { useRouterState } from './useRouterState'
 import { usePrevious } from './utils'
@@ -126,23 +130,7 @@ export function Transitioner() {
             resolvedLocation: s.location,
           }))
 
-          if (
-            typeof document !== 'undefined' &&
-            (document as any).querySelector
-          ) {
-            const hashScrollIntoViewOptions =
-              router.state.location.state.__hashScrollIntoViewOptions ?? true
-
-            if (
-              hashScrollIntoViewOptions &&
-              router.state.location.hash !== ''
-            ) {
-              const el = document.getElementById(router.state.location.hash)
-              if (el) {
-                el.scrollIntoView(hashScrollIntoViewOptions)
-              }
-            }
-          }
+          handleHashScroll(router)
         }
       },
     ),


Reviews:
user: login: SeanCassiere
body: If I'm not mistaken, this exact same logic is present on `solid-router`.

Perhaps this is logic that can be exported out of `router-core` and then imported (plus setup) in both `react-router` and `solid-router`?
state: COMMENTED
author_association: MEMBER
submitted_at: 2025-04-02T05:26:05Z
user: login: birkskyum
state: APPROVED
author_association: MEMBER
submitted_at: 2025-04-02T09:26:22Z
user: login: SeanCassiere
state: CHANGES_REQUESTED
author_association: MEMBER
submitted_at: 2025-04-02T09:45:57Z
user: login: SeanCassiere
state: COMMENTED
author_association: MEMBER
submitted_at: 2025-04-02T09:46:45Z
user: login: SeanCassiere
state: APPROVED
author_association: MEMBER
submitted_at: 2025-04-02T11:14:20Z

Review comments:
diff_hunk: @@ -316,3 +316,17 @@ export function setupScrollRestoration(router: AnyRouter, force?: boolean) {
     }
   })
 }
+
+export function handleHashScroll(router: AnyRouter) {
path: packages/router-core/src/scroll-restoration.ts
user: login: SeanCassiere
body: Couple of small changes here please:

- Rename to `handleTransitionerHashScroll`
- Annotate the function with some JSDoc comments marking it as `@internal` with a short description saying that this is to be setup in the `<Transitioner>` component and what it actually does.
created_at: 2025-04-02T09:45:32Z
author_association: MEMBER
diff_hunk: @@ -316,3 +316,17 @@ export function setupScrollRestoration(router: AnyRouter, force?: boolean) {
     }
   })
 }
+
+export function handleHashScroll(router: AnyRouter) {
path: packages/router-core/src/scroll-restoration.ts
user: login: SeanCassiere
body: Optionally, the rename is not necessary if just the JSDoc comment is there. 
created_at: 2025-04-02T09:46:45Z
author_association: MEMBER

PR comments:
user: login: t1nky
created_at: 2025-04-02T09:22:09Z
body: > If I'm not mistaken, this exact same logic is present on `solid-router`.
> 
> Perhaps this is logic that can be exported out of `router-core` and then imported (plus setup) in both `react-router` and `solid-router`?

Good point. I've extracted it into scroll-restoration
author_association: CONTRIBUTOR
user: login: nx-cloud[bot]
created_at: 2025-04-02T09:27:10Z
body: 
View your [CI Pipeline Execution ↗](https://cloud.nx.app/cipes/67ed2141586143760aff03f7?utm_source=pull-request&utm_medium=comment) for commit 269e98559ebd9c4118a49f2bd7364cc519c5fbf9.

| Command | Status | Duration | Result |
|---------|--------|----------:|--------|
| `nx affected --targets=test:eslint,test:unit,tes...` | ✅ Succeeded | 5m 13s | [View ↗](https://cloud.nx.app/runs/UTjBs4gPD8?utm_source=pull-request&utm_medium=comment) |
| `nx run-many --target=build --exclude=examples/*...` | ✅ Succeeded | 2m 4s | [View ↗](https://cloud.nx.app/runs/qgE5MuPeyp?utm_source=pull-request&utm_medium=comment) |

---

☁️ [Nx Cloud](https://cloud.nx.app?utm_source=pull-request&utm_medium=comment) last updated this comment at `2025-04-02 11:42:43` UTC

<!-- NX_CLOUD_APP_COMMENT_END -->
author_association: CONTRIBUTOR
user: login: pkg-pr-new[bot]
created_at: 2025-04-02T09:30:59Z
body: 

<details><summary><b>More templates</b></summary><p>

- [tanstack-router-react-example-authenticated-routes](https://pkg.pr.new/template/f0af3957-0d27-4b21-8b58-44e85159d378)
- [tanstack-router-react-example-authenticated-routes-firebase](https://pkg.pr.new/template/25a365c6-4636-4946-b5ad-94e36f3ece1f)
- [tanstack-router-react-example-basic](https://pkg.pr.new/template/3459e082-8858-4bb6-935f-c2494112046a)
- [tanstack-router-react-example-basic-default-search-params](https://pkg.pr.new/template/83538244-12db-44af-8cfd-a290035d7a07)
- [tanstack-router-react-example-basic-devtools-panel](https://pkg.pr.new/template/5d6a383b-660f-42bd-9b10-264b01c71ac5)
- [tanstack-router-react-example-basic-file-based](https://pkg.pr.new/template/d14734e5-561f-4979-86c1-2ebb2bb3fffd)
- [tanstack-router-react-example-basic-non-nested-devtools](https://pkg.pr.new/template/0a140142-246a-4c8b-a4a7-e4dc7c219bf5)
- [tanstack-router-react-example-react-query](https://pkg.pr.new/template/3fb5217c-ca89-4db3-92cd-d1e6a93dd608)
- [tanstack-router-react-example-basic-react-query-file-based](https://pkg.pr.new/template/12c5d313-435a-4b28-89a3-e4d14af6a2de)
- [tanstack-router-react-example-basic-ssr-file-based](https://pkg.pr.new/template/16348d85-6ecb-4276-b90a-f4cdb68e0a31)
- [tanstack-router-react-example-basic-ssr-streaming-file-based](https://pkg.pr.new/template/75140f10-211d-41f1-9b6d-c96f306f8679)
- [tanstack-router-react-example-basic-virtual-file-based](https://pkg.pr.new/template/379f87a8-1335-4dcc-a602-bdc8696f96d0)
- [tanstack-router-react-example-basic-virtual-inside-file-based](https://pkg.pr.new/template/015f3d38-d72f-49b1-9a3a-94af9a3437b1)
- [tanstack-router-react-example-deferred-data](https://pkg.pr.new/template/50fdd4e4-6a93-4d95-bdd4-9da07742212f)
- [tanstack-router-react-example-kitchen-sink](https://pkg.pr.new/template/689826c9-260a-4a61-a97b-d49fd342a171)
- [tanstack-router-react-example-kitchen-sink-file-based](https://pkg.pr.new/template/419a57ef-ef30-4f71-b452-97bf515527b4)
- [tanstack-router-react-example-kitchen-sink-react-query](https://pkg.pr.new/template/0c4eb975-d600-4c4b-892e-824873fd3061)
- [tanstack-router-react-example-kitchen-sink-react-query-file-based](https://pkg.pr.new/template/ea0d0622-32fb-45dd-9828-36281a87ad1b)
- [tanstack-router-react-example-large-file-based](https://pkg.pr.new/template/807c94cd-23fe-4b95-a9c4-119b6ccfe7e0)
- [tanstack-router-react-example-location-masking](https://pkg.pr.new/template/2f3c1fa0-0a10-4235-b6ea-fd1fb5efe643)
- [tanstack-router-react-example-navigation-blocking](https://pkg.pr.new/template/33f64367-7d7d-444c-87ec-123acb60d613)
- [tanstack-router-react-example-quickstart](https://pkg.pr.new/template/3a594bf7-13e5-4fd9-9cf1-c3ff36a68509)
- [tanstack-router-react-example-quickstart-esbuild-file-based](https://pkg.pr.new/template/3b201f51-95c9-401d-8db7-854695bc5127)
- [tanstack-router-react-example-quickstart-file-based](https://pkg.pr.new/template/0e00b53e-c7bf-4e41-925b-d92057f01b95)
- [tanstack-router-react-example-quickstart-rspack-file-based](https://pkg.pr.new/template/8e6d5a98-7b69-426d-8302-683f1ecddccd)
- [tanstack-router-react-example-quickstart-webpack-file-based](https://pkg.pr.new/template/eeb876c4-614d-4b51-a262-8aae11ba5c3f)
- [router-monorepo-react-query](https://pkg.pr.new/template/00b4a51a-19ab-4e0d-a5d5-8379d880f693)
- [router-mono-simple](https://pkg.pr.new/template/b2db590e-b51a-4f92-a119-0dab28c36898)
- [router-mono-simple-lazy](https://pkg.pr.new/template/29d1c216-1576-44f1-9f2d-2ed8d08078b0)
- [tanstack-router-react-example-scroll-restoration](https://pkg.pr.new/template/51dc5edd-f12d-41d6-af87-a8fc3d94458b)
- [tanstack-search-validator-adapters](https://pkg.pr.new/template/7170961e-5c1c-46c3-9305-4af69ad97423)
- [tanstack-start-example-bare](https://pkg.pr.new/template/cf923910-ac73-4dd6-9387-815fc94e320b)
- [tanstack-start-example-basic](https://pkg.pr.new/template/4f6427ba-dcb9-4308-9079-f0865a652694)
- [tanstack-start-example-basic-auth](https://pkg.pr.new/template/6ff883d9-6fa9-4347-815e-fb0e1feb9844)
- [tanstack-start-example-basic-react-query](https://pkg.pr.new/template/c7b49b6d-25a1-4f71-a607-9c4e1f23a353)
- [tanstack-start-example-basic-rsc](https://pkg.pr.new/template/1cb2d386-252f-4147-a5e4-fed782c937a6)
- [tanstack-start-example-basic-static](https://pkg.pr.new/template/d5a3aa54-c322-4a14-bad9-61cf0e80a0f7)
- [tanstack-start-example-clerk-basic](https://pkg.pr.new/template/05d1f9cb-e6f3-4054-bd62-c062f8351709)
- [tanstack-start-example-convex-trellaux](https://pkg.pr.new/template/46e5dfc3-c8da-4ce4-981d-38f655506e42)
- [tanstack-start-example-counter](https://pkg.pr.new/template/2fabd174-98ee-4282-bc39-5485ab852ab8)
- [tanstack-start-example-large](https://pkg.pr.new/template/f7284abd-1383-448b-8c99-fc34e88f57f3)
- [tanstack-start-example-material-ui](https://pkg.pr.new/template/408df34d-9c0a-4916-8394-309406df3e80)
- [tanstack-start-example-supabase-basic](https://pkg.pr.new/template/2f3eea4c-0558-4621-b6cd-d4f41d44c10f)
- [tanstack-start-example-trellaux](https://pkg.pr.new/template/5001ed1f-dd8b-47bd-8b5e-7914ee04d334)
- [tanstack-router-react-example-view-transitions](https://pkg.pr.new/template/4425ec24-c787-41c0-b2b2-233b4e85e043)
- [tanstack-router-react-example-with-framer-motion](https://pkg.pr.new/template/5a95a5f5-f7ac-4186-bf96-e2e8b49dca13)
- [tanstack-router-react-example-with-trpc](https://pkg.pr.new/template/510e1bbf-c3b6-49bb-836c-c915316928d0)
- [tanstack-router-react-example-with-trpc-react-query](https://pkg.pr.new/template/d858645c-86bb-48ae-937d-a45032ffcf6a)
- [tanstack-router-solid-example-basic](https://pkg.pr.new/template/91ae4050-73de-473b-a8a7-55ee65c501bb)
- [tanstack-router-solid-example-basic-devtools-panel](https://pkg.pr.new/template/b733d661-7dc6-4494-ae93-60ee06d9f4b6)
- [tanstack-router-solid-example-basic-file-based](https://pkg.pr.new/template/2e217a9c-c98e-453b-a9bd-b5c6715e5126)
- [tanstack-router-solid-example-basic-non-nested-devtools](https://pkg.pr.new/template/f11934af-ba2b-4a0d-ae64-a82c19ded2c3)
- [tanstack-router-solid-example-basic-solid-query](https://pkg.pr.new/template/db00165a-db70-4eca-b267-62815c526466)
- [tanstack-router-solid-example-basic-solid-query-file-based](https://pkg.pr.new/template/a8b52c7e-6d08-4010-aacf-824399e30e84)
- [tanstack-router-solid-example-kitchen-sink-file-based](https://pkg.pr.new/template/8c6400a2-e1ce-4bae-9c5f-bd921169336f)
- [tanstack-router-solid-example-quickstart-file-based](https://pkg.pr.new/template/24ee2232-ee22-465c-a443-9db01008e8af)
- [tanstack-solid-start-example-bare](https://pkg.pr.new/template/6689a354-422b-44eb-9751-4c640861e523)
- [tanstack-solid-start-example-basic](https://pkg.pr.new/template/1387e319-7707-4b9b-b215-dc3b8d24d39c)

</p></details>
      
    


<details><summary><b>@tanstack/arktype-adapter</b></summary><p>

```
npm i https://pkg.pr.new/TanStack/router/@tanstack/arktype-adapter@3914
```

</p></details>
      
    

<details><summary><b>@tanstack/create-router</b></summary><p>

```
npm i https://pkg.pr.new/TanStack/router/@tanstack/create-router@3914
```

</p></details>
      
    

<details><summary><b>@tanstack/directive-functions-plugin</b></summary><p>

```
npm i https://pkg.pr.new/TanStack/router/@tanstack/directive-functions-plugin@3914
```

</p></details>
      
    

<details><summary><b>@tanstack/eslint-plugin-router</b></summary><p>

```
npm i https://pkg.pr.new/TanStack/router/@tanstack/eslint-plugin-router@3914
```

</p></details>
      
    

<details><summary><b>@tanstack/create-start</b></summary><p>

```
npm i https://pkg.pr.new/TanStack/router/@tanstack/create-start@3914
```

</p></details>
      
    

<details><summary><b>@tanstack/history</b></summary><p>

```
npm i https://pkg.pr.new/TanStack/router/@tanstack/history@3914
```

</p></details>
      
    

<details><summary><b>@tanstack/react-router</b></summary><p>

```
npm i https://pkg.pr.new/TanStack/router/@tanstack/react-router@3914
```

</p></details>
      
    

<details><summary><b>@tanstack/react-router-devtools</b></summary><p>

```
npm i https://pkg.pr.new/TanStack/router/@tanstack/react-router-devtools@3914
```

</p></details>
      
    

<details><summary><b>@tanstack/react-router-with-query</b></summary><p>

```
npm i https://pkg.pr.new/TanStack/router/@tanstack/react-router-with-query@3914
```

</p></details>
      
    

<details><summary><b>@tanstack/react-start</b></summary><p>

```
npm i https://pkg.pr.new/TanStack/router/@tanstack/react-start@3914
```

</p></details>
      
    

<details><summary><b>@tanstack/react-start-client</b></summary><p>

```
npm i https://pkg.pr.new/TanStack/router/@tanstack/react-start-client@3914
```

</p></details>
      
    

<details><summary><b>@tanstack/react-start-config</b></summary><p>

```
npm i https://pkg.pr.new/TanStack/router/@tanstack/react-start-config@3914
```

</p></details>
      
    

<details><summary><b>@tanstack/react-start-plugin</b></summary><p>

```
npm i https://pkg.pr.new/TanStack/router/@tanstack/react-start-plugin@3914
```

</p></details>
      
    

<details><summary><b>@tanstack/react-start-router-manifest</b></summary><p>

```
npm i https://pkg.pr.new/TanStack/router/@tanstack/react-start-router-manifest@3914
```

</p></details>
      
    

<details><summary><b>@tanstack/react-start-server</b></summary><p>

```
npm i https://pkg.pr.new/TanStack/router/@tanstack/react-start-server@3914
```

</p></details>
      
    

<details><summary><b>@tanstack/router-cli</b></summary><p>

```
npm i https://pkg.pr.new/TanStack/router/@tanstack/router-cli@3914
```

</p></details>
      
    

<details><summary><b>@tanstack/router-core</b></summary><p>

```
npm i https://pkg.pr.new/TanStack/router/@tanstack/router-core@3914
```

</p></details>
      
    

<details><summary><b>@tanstack/router-devtools</b></summary><p>

```
npm i https://pkg.pr.new/TanStack/router/@tanstack/router-devtools@3914
```

</p></details>
      
    

<details><summary><b>@tanstack/router-devtools-core</b></summary><p>

```
npm i https://pkg.pr.new/TanStack/router/@tanstack/router-devtools-core@3914
```

</p></details>
      
    

<details><summary><b>@tanstack/router-generator</b></summary><p>

```
npm i https://pkg.pr.new/TanStack/router/@tanstack/router-generator@3914
```

</p></details>
      
    

<details><summary><b>@tanstack/router-plugin</b></summary><p>

```
npm i https://pkg.pr.new/TanStack/router/@tanstack/router-plugin@3914
```

</p></details>
      
    

<details><summary><b>@tanstack/router-utils</b></summary><p>

```
npm i https://pkg.pr.new/TanStack/router/@tanstack/router-utils@3914
```

</p></details>
      
    

<details><summary><b>@tanstack/router-vite-plugin</b></summary><p>

```
npm i https://pkg.pr.new/TanStack/router/@tanstack/router-vite-plugin@3914
```

</p></details>
      
    

<details><summary><b>@tanstack/server-functions-plugin</b></summary><p>

```
npm i https://pkg.pr.new/TanStack/router/@tanstack/server-functions-plugin@3914
```

</p></details>
      
    

<details><summary><b>@tanstack/solid-router</b></summary><p>

```
npm i https://pkg.pr.new/TanStack/router/@tanstack/solid-router@3914
```

</p></details>
      
    

<details><summary><b>@tanstack/solid-router-devtools</b></summary><p>

```
npm i https://pkg.pr.new/TanStack/router/@tanstack/solid-router-devtools@3914
```

</p></details>
      
    

<details><summary><b>@tanstack/solid-start</b></summary><p>

```
npm i https://pkg.pr.new/TanStack/router/@tanstack/solid-start@3914
```

</p></details>
      
    

<details><summary><b>@tanstack/solid-start-client</b></summary><p>

```
npm i https://pkg.pr.new/TanStack/router/@tanstack/solid-start-client@3914
```

</p></details>
      
    

<details><summary><b>@tanstack/solid-start-config</b></summary><p>

```
npm i https://pkg.pr.new/TanStack/router/@tanstack/solid-start-config@3914
```

</p></details>
      
    

<details><summary><b>@tanstack/solid-start-plugin</b></summary><p>

```
npm i https://pkg.pr.new/TanStack/router/@tanstack/solid-start-plugin@3914
```

</p></details>
      
    

<details><summary><b>@tanstack/solid-start-router-manifest</b></summary><p>

```
npm i https://pkg.pr.new/TanStack/router/@tanstack/solid-start-router-manifest@3914
```

</p></details>
      
    

<details><summary><b>@tanstack/solid-start-server</b></summary><p>

```
npm i https://pkg.pr.new/TanStack/router/@tanstack/solid-start-server@3914
```

</p></details>
      
    

<details><summary><b>@tanstack/start</b></summary><p>

```
npm i https://pkg.pr.new/TanStack/router/@tanstack/start@3914
```

</p></details>
      
    

<details><summary><b>@tanstack/start-api-routes</b></summary><p>

```
npm i https://pkg.pr.new/TanStack/router/@tanstack/start-api-routes@3914
```

</p></details>
      
    

<details><summary><b>@tanstack/start-client-core</b></summary><p>

```
npm i https://pkg.pr.new/TanStack/router/@tanstack/start-client-core@3914
```

</p></details>
      
    

<details><summary><b>@tanstack/start-config</b></summary><p>

```
npm i https://pkg.pr.new/TanStack/router/@tanstack/start-config@3914
```

</p></details>
      
    

<details><summary><b>@tanstack/start-server-core</b></summary><p>

```
npm i https://pkg.pr.new/TanStack/router/@tanstack/start-server-core@3914
```

</p></details>
      
    

<details><summary><b>@tanstack/start-server-functions-client</b></summary><p>

```
npm i https://pkg.pr.new/TanStack/router/@tanstack/start-server-functions-client@3914
```

</p></details>
      
    

<details><summary><b>@tanstack/start-server-functions-fetcher</b></summary><p>

```
npm i https://pkg.pr.new/TanStack/router/@tanstack/start-server-functions-fetcher@3914
```

</p></details>
      
    

<details><summary><b>@tanstack/start-server-functions-handler</b></summary><p>

```
npm i https://pkg.pr.new/TanStack/router/@tanstack/start-server-functions-handler@3914
```

</p></details>
      
    

<details><summary><b>@tanstack/start-server-functions-server</b></summary><p>

```
npm i https://pkg.pr.new/TanStack/router/@tanstack/start-server-functions-server@3914
```

</p></details>
      
    

<details><summary><b>@tanstack/start-server-functions-ssr</b></summary><p>

```
npm i https://pkg.pr.new/TanStack/router/@tanstack/start-server-functions-ssr@3914
```

</p></details>
      
    

<details><summary><b>@tanstack/valibot-adapter</b></summary><p>

```
npm i https://pkg.pr.new/TanStack/router/@tanstack/valibot-adapter@3914
```

</p></details>
      
    

<details><summary><b>@tanstack/virtual-file-routes</b></summary><p>

```
npm i https://pkg.pr.new/TanStack/router/@tanstack/virtual-file-routes@3914
```

</p></details>
      
    

<details><summary><b>@tanstack/zod-adapter</b></summary><p>

```
npm i https://pkg.pr.new/TanStack/router/@tanstack/zod-adapter@3914
```

</p></details>
      
    

_commit: <a href="https://github.com/TanStack/router/runs/39841275990"><code>269e985</code></a>_

author_association: NONE
user: login: SeanCassiere
created_at: 2025-04-02T18:50:28Z
body: @t1nky thank you for contributing this fix!
author_association: MEMBER