Repository: TanStack/router
Pull request #3140 (2025-01-10 21:49:22)

fix(start): preserve multiple values for same key in `FormData` serialization
Also adds Error and FormData to the allowed list of "serializable" values in Typescript, and make createTransformer more helpful with its types.

nx-cloud[bot]: 
View your [CI Pipeline Execution ↗](https://cloud.nx.app/cipes/678195fd1e3b566113e2f6ff?utm_source=pull-request&utm_medium=comment) for commit b40d4126f5e1bcd5783560c3c27187278c9d8b44.

---

☁️ [Nx Cloud](https://cloud.nx.app?utm_source=pull-request&utm_medium=comment) last updated this comment at `2025-01-10 21:49:51` UTC

<!-- NX_CLOUD_APP_COMMENT_END -->
pkg-pr-new[bot]: 
[Open in Stackblitz](https://pkg.pr.new/template/c7de4fb7-21d0-4ac9-b312-72c0ee80dadd)
<details><summary><b>More templates</b></summary><p>

- [tanstack-router-react-example-authenticated-routes](https://pkg.pr.new/template/79800193-c2c8-4872-a6da-8085de35b1dc)
- [tanstack-router-react-example-basic](https://pkg.pr.new/template/88bd2962-0e9a-4d52-becc-dac69cf32b2f)
- [tanstack-router-react-example-basic-default-search-params](https://pkg.pr.new/template/fee6d7ac-f79d-489e-a094-0b9fb2f7b122)
- [tanstack-router-react-example-basic-file-based](https://pkg.pr.new/template/3daa3f22-e004-431f-a717-4438a04fab62)
- [tanstack-router-react-example-basic-file-based-codesplitting](https://pkg.pr.new/template/aec7de88-9987-4e74-8c46-9a29fe0124a1)
- [tanstack-router-react-example-react-query](https://pkg.pr.new/template/5dfd74cc-53a6-41e2-9fd0-d873838253e1)
- [tanstack-router-react-example-basic-react-query-file-based](https://pkg.pr.new/template/f1d2d450-1760-49fe-a44b-ccada29d667c)
- [tanstack-router-react-example-basic-ssr-file-based](https://pkg.pr.new/template/6f1e6634-368a-498a-9984-71e7d3f6cd5b)
- [tanstack-router-react-example-basic-ssr-streaming-file-based](https://pkg.pr.new/template/2b6088f5-f7c2-43dd-a870-dc2a192f2d5f)
- [tanstack-router-react-example-basic-virtual-inside-file-based](https://pkg.pr.new/template/c5f3a58a-6172-4117-8a59-337e8892c872)
- [tanstack-router-react-example-basic-virtual-file-based](https://pkg.pr.new/template/c82fc8b1-8513-4922-a31a-42c7ddcb4eb8)
- [tanstack-router-react-example-deferred-data](https://pkg.pr.new/template/18c835f7-824a-4c90-b9c1-095d6f3b9049)
- [tanstack-router-react-example-kitchen-sink](https://pkg.pr.new/template/28604d71-76d5-414f-bb24-2de9c1504a26)
- [tanstack-router-react-example-kitchen-sink-react-query](https://pkg.pr.new/template/558c8bb8-655e-4a86-a568-59e860d3737d)
- [tanstack-router-react-example-kitchen-sink-file-based](https://pkg.pr.new/template/874c254f-35f1-4b3a-b1c0-fdfeeeffa3b9)
- [tanstack-router-react-example-kitchen-sink-react-query-file-based](https://pkg.pr.new/template/6d95d3d2-ff8a-43d9-9506-4d111bcce549)
- [tanstack-router-react-example-large-file-based](https://pkg.pr.new/template/8a6787be-f159-4fff-ba16-08105b9973ad)
- [tanstack-router-react-example-location-masking](https://pkg.pr.new/template/8be4564c-3b98-484a-8645-8d9b35ee2e41)
- [tanstack-router-react-example-navigation-blocking](https://pkg.pr.new/template/05addcd5-1bb7-4317-8e4a-a03070eb016a)
- [tanstack-router-react-example-quickstart](https://pkg.pr.new/template/06e841c9-9565-4980-9e87-583638d2827b)
- [tanstack-router-react-example-quickstart-esbuild-file-based](https://pkg.pr.new/template/e051c907-247a-43fa-9e89-b6b10774abce)
- [tanstack-router-react-example-quickstart-file-based](https://pkg.pr.new/template/f92663e2-e3c1-4e47-a2eb-5d9a0877d7aa)
- [tanstack-router-react-example-quickstart-rspack-file-based](https://pkg.pr.new/template/039d2456-7459-4841-bd1c-417dc6be3934)
- [router-monorepo-react-query](https://pkg.pr.new/template/f8eccdb8-1982-4064-be93-19b37bb80dc5)
- [tanstack-router-react-example-quickstart-webpack-file-based](https://pkg.pr.new/template/5c7cc183-35e0-4b3a-aa2c-c7ae45926513)
- [router-mono-simple](https://pkg.pr.new/template/d3e08b82-13e8-45e3-84ac-2fa7f138cfaf)
- [tanstack-search-validator-adapters](https://pkg.pr.new/template/76d24f0c-1646-43d4-9512-43a671cd9613)
- [tanstack-router-react-example-scroll-restoration](https://pkg.pr.new/template/1e8479c8-5341-4364-af33-1f43e881205c)
- [tanstack-start-example-basic](https://pkg.pr.new/template/7ca913a7-a429-4261-a8ea-8afe44e5f6f1)
- [tanstack-start-example-basic-auth](https://pkg.pr.new/template/b9ba647e-9486-4ae6-b5e4-5a8c9b772956)
- [tanstack-start-example-basic-react-query](https://pkg.pr.new/template/6d67433c-438a-4164-9e26-ecbc376e2ddb)
- [tanstack-start-example-basic-rsc](https://pkg.pr.new/template/441064f9-f384-4dd1-90b0-6a1157a83353)
- [tanstack-start-example-clerk-basic](https://pkg.pr.new/template/2097f335-1e15-4e31-b837-f782d4117ad9)
- [tanstack-start-example-counter](https://pkg.pr.new/template/80754de9-4cfd-4fa7-854f-3d633142c6d7)
- [tanstack-start-example-convex-trellaux](https://pkg.pr.new/template/9e9dd8d1-b9de-43e1-a031-d6aa43fb4be3)
- [tanstack-start-example-large](https://pkg.pr.new/template/69e8c9a2-c1a9-4eb9-aef0-06099606ac8e)
- [tanstack-start-example-supabase-basic](https://pkg.pr.new/template/92200eae-67e3-416a-a53e-479b66fda217)
- [tanstack-start-example-trellaux](https://pkg.pr.new/template/14f9d749-1c19-4881-af81-8998ccdbd8b8)
- [tanstack-router-react-example-with-framer-motion](https://pkg.pr.new/template/61cfa1e2-d4dd-4b2e-b232-23e6c960493e)
- [tanstack-router-react-example-with-trpc](https://pkg.pr.new/template/0d9cb770-ffdc-4654-9535-33ab9f6a9b2a)
- [tanstack-router-react-example-with-trpc-react-query](https://pkg.pr.new/template/f158e468-25b1-4b2a-8d83-b398f03d2353)

</p></details>
      
    


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

```
npm i https://pkg.pr.new/@tanstack/arktype-adapter@3140
```

</p></details>
      
    

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

```
npm i https://pkg.pr.new/@tanstack/create-start@3140
```

</p></details>
      
    

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

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

</p></details>
      
    

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

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

</p></details>
      
    

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

```
npm i https://pkg.pr.new/@tanstack/history@3140
```

</p></details>
      
    

<details><summary><b>@tanstack/react-cross-context</b></summary><p>

```
npm i https://pkg.pr.new/@tanstack/react-cross-context@3140
```

</p></details>
      
    

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

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

</p></details>
      
    

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

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

</p></details>
      
    

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

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

</p></details>
      
    

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

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

</p></details>
      
    

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

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

</p></details>
      
    

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

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

</p></details>
      
    

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

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

</p></details>
      
    

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

```
npm i https://pkg.pr.new/@tanstack/start@3140
```

</p></details>
      
    

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

```
npm i https://pkg.pr.new/@tanstack/start-vite-plugin@3140
```

</p></details>
      
    

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

```
npm i https://pkg.pr.new/@tanstack/valibot-adapter@3140
```

</p></details>
      
    

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

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

</p></details>
      
    

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

```
npm i https://pkg.pr.new/@tanstack/zod-adapter@3140
```

</p></details>
      
    

_commit: <a href="https://github.com/TanStack/router/runs/35454893048"><code>b40d412</code></a>_


Patch:
diff --git a/docs/framework/react/guide/code-based-routing.md b/docs/framework/react/guide/code-based-routing.md
index c1e9a628e..3099d9dfd 100644
--- a/docs/framework/react/guide/code-based-routing.md
+++ b/docs/framework/react/guide/code-based-routing.md
@@ -332,7 +332,7 @@ Building non-nested routes in code-based routing does not require using a traili
 - `/posts`
   - `$postId`
 
-To do this we need to build a separate route for the post editor an include the entire path in the `path` option from the root of where we want the route to be nested (in this case, the root):
+To do this we need to build a separate route for the post editor and include the entire path in the `path` option from the root of where we want the route to be nested (in this case, the root):
 
 ```tsx
 // The posts editor route is nested under the root route
diff --git a/examples/react/authenticated-routes/package.json b/examples/react/authenticated-routes/package.json
index baddc43a4..2e4773dfb 100644
--- a/examples/react/authenticated-routes/package.json
+++ b/examples/react/authenticated-routes/package.json
@@ -9,9 +9,9 @@
     "start": "vite"
   },
   "dependencies": {
-    "@tanstack/react-router": "^1.95.3",
-    "@tanstack/router-devtools": "^1.95.3",
-    "@tanstack/router-plugin": "^1.95.3",
+    "@tanstack/react-router": "^1.95.4",
+    "@tanstack/router-devtools": "^1.95.4",
+    "@tanstack/router-plugin": "^1.95.4",
     "react": "^18.2.0",
     "react-dom": "^18.2.0",
     "redaxios": "^0.5.1",
diff --git a/examples/react/basic-default-search-params/package.json b/examples/react/basic-default-search-params/package.json
index d2912d419..e5c716c60 100644
--- a/examples/react/basic-default-search-params/package.json
+++ b/examples/react/basic-default-search-params/package.json
@@ -10,8 +10,8 @@
   },
   "dependencies": {
     "@tanstack/react-query": "^5.62.3",
-    "@tanstack/react-router": "^1.95.3",
-    "@tanstack/router-devtools": "^1.95.3",
+    "@tanstack/react-router": "^1.95.4",
+    "@tanstack/router-devtools": "^1.95.4",
     "redaxios": "^0.5.1",
     "react": "^18.2.0",
     "react-dom": "^18.2.0",
diff --git a/examples/react/basic-file-based-codesplitting/package.json b/examples/react/basic-file-based-codesplitting/package.json
index d3bfcd04c..6ff415375 100644
--- a/examples/react/basic-file-based-codesplitting/package.json
+++ b/examples/react/basic-file-based-codesplitting/package.json
@@ -9,9 +9,9 @@
     "start": "vite"
   },
   "dependencies": {
-    "@tanstack/react-router": "^1.95.3",
-    "@tanstack/router-devtools": "^1.95.3",
-    "@tanstack/router-plugin": "^1.95.3",
+    "@tanstack/react-router": "^1.95.4",
+    "@tanstack/router-devtools": "^1.95.4",
+    "@tanstack/router-plugin": "^1.95.4",
     "react": "^18.2.0",
     "react-dom": "^18.2.0",
     "redaxios": "^0.5.1",
diff --git a/examples/react/basic-file-based/package.json b/examples/react/basic-file-based/package.json
index 3e0903700..92c04740a 100644
--- a/examples/react/basic-file-based/package.json
+++ b/examples/react/basic-file-based/package.json
@@ -9,9 +9,9 @@
     "start": "vite"
   },
   "dependencies": {
-    "@tanstack/react-router": "^1.95.3",
-    "@tanstack/router-devtools": "^1.95.3",
-    "@tanstack/router-plugin": "^1.95.3",
+    "@tanstack/react-router": "^1.95.4",
+    "@tanstack/router-devtools": "^1.95.4",
+    "@tanstack/router-plugin": "^1.95.4",
     "react": "^18.2.0",
     "react-dom": "^18.2.0",
     "redaxios": "^0.5.1",
diff --git a/examples/react/basic-react-query-file-based/package.json b/examples/react/basic-react-query-file-based/package.json
index f271a626c..f27eb8d8e 100644
--- a/examples/react/basic-react-query-file-based/package.json
+++ b/examples/react/basic-react-query-file-based/package.json
@@ -11,9 +11,9 @@
   "dependencies": {
     "@tanstack/react-query": "^5.62.3",
     "@tanstack/react-query-devtools": "^5.62.3",
-    "@tanstack/react-router": "^1.95.3",
-    "@tanstack/router-devtools": "^1.95.3",
-    "@tanstack/router-plugin": "^1.95.3",
+    "@tanstack/react-router": "^1.95.4",
+    "@tanstack/router-devtools": "^1.95.4",
+    "@tanstack/router-plugin": "^1.95.4",
     "react": "^18.2.0",
     "react-dom": "^18.2.0",
     "redaxios": "^0.5.1",
diff --git a/examples/react/basic-react-query/package.json b/examples/react/basic-react-query/package.json
index 295c08260..1ec8d7863 100644
--- a/examples/react/basic-react-query/package.json
+++ b/examples/react/basic-react-query/package.json
@@ -11,8 +11,8 @@
   "dependencies": {
     "@tanstack/react-query": "^5.62.3",
     "@tanstack/react-query-devtools": "^5.62.3",
-    "@tanstack/react-router": "^1.95.3",
-    "@tanstack/router-devtools": "^1.95.3",
+    "@tanstack/react-router": "^1.95.4",
+    "@tanstack/router-devtools": "^1.95.4",
     "react": "^18.2.0",
     "react-dom": "^18.2.0",
     "redaxios": "^0.5.1"
diff --git a/examples/react/basic-ssr-file-based/package.json b/examples/react/basic-ssr-file-based/package.json
index 670ac9e5c..70cc331b4 100644
--- a/examples/react/basic-ssr-file-based/package.json
+++ b/examples/react/basic-ssr-file-based/package.json
@@ -11,10 +11,10 @@
     "debug": "node --inspect-brk server"
   },
   "dependencies": {
-    "@tanstack/react-router": "^1.95.3",
-    "@tanstack/router-devtools": "^1.95.3",
-    "@tanstack/router-plugin": "^1.95.3",
-    "@tanstack/start": "^1.95.3",
+    "@tanstack/react-router": "^1.95.4",
+    "@tanstack/router-devtools": "^1.95.4",
+    "@tanstack/router-plugin": "^1.95.4",
+    "@tanstack/start": "^1.95.4",
     "get-port": "^7.1.0",
     "react": "^18.2.0",
     "react-dom": "^18.2.0",
diff --git a/examples/react/basic-ssr-streaming-file-based/package.json b/examples/react/basic-ssr-streaming-file-based/package.json
index 5bf5c3ce6..82c7aa6a8 100644
--- a/examples/react/basic-ssr-streaming-file-based/package.json
+++ b/examples/react/basic-ssr-streaming-file-based/package.json
@@ -11,10 +11,10 @@
     "debug": "node --inspect-brk server"
   },
   "dependencies": {
-    "@tanstack/react-router": "^1.95.3",
-    "@tanstack/router-devtools": "^1.95.3",
-    "@tanstack/router-plugin": "^1.95.3",
-    "@tanstack/start": "^1.95.3",
+    "@tanstack/react-router": "^1.95.4",
+    "@tanstack/router-devtools": "^1.95.4",
+    "@tanstack/router-plugin": "^1.95.4",
+    "@tanstack/start": "^1.95.4",
     "get-port": "^7.1.0",
     "react": "^18.2.0",
     "react-dom": "^18.2.0",
diff --git a/examples/react/basic-virtual-file-based/package.json b/examples/react/basic-virtual-file-based/package.json
index c35d7d8cc..3af6f550d 100644
--- a/examples/react/basic-virtual-file-based/package.json
+++ b/examples/react/basic-virtual-file-based/package.json
@@ -9,9 +9,9 @@
     "start": "vite"
   },
   "dependencies": {
-    "@tanstack/react-router": "^1.95.3",
-    "@tanstack/router-devtools": "^1.95.3",
-    "@tanstack/router-plugin": "^1.95.3",
+    "@tanstack/react-router": "^1.95.4",
+    "@tanstack/router-devtools": "^1.95.4",
+    "@tanstack/router-plugin": "^1.95.4",
     "@tanstack/virtual-file-routes": "^1.87.6",
     "react": "^18.2.0",
     "react-dom": "^18.2.0",
diff --git a/examples/react/basic-virtual-inside-file-based/package.json b/examples/react/basic-virtual-inside-file-based/package.json
index bf79b9d95..a28495dd7 100644
--- a/examples/react/basic-virtual-inside-file-based/package.json
+++ b/examples/react/basic-virtual-inside-file-based/package.json
@@ -9,9 +9,9 @@
     "start": "vite"
   },
   "dependencies": {
-    "@tanstack/react-router": "^1.95.3",
-    "@tanstack/router-devtools": "^1.95.3",
-    "@tanstack/router-plugin": "^1.95.3",
+    "@tanstack/react-router": "^1.95.4",
+    "@tanstack/router-devtools": "^1.95.4",
+    "@tanstack/router-plugin": "^1.95.4",
     "@tanstack/virtual-file-routes": "^1.87.6",
     "react": "^18.2.0",
     "react-dom": "^18.2.0",
diff --git a/examples/react/basic/package.json b/examples/react/basic/package.json
index a5e6d4535..31dbb326f 100644
--- a/examples/react/basic/package.json
+++ b/examples/react/basic/package.json
@@ -9,8 +9,8 @@
     "start": "vite"
   },
   "dependencies": {
-    "@tanstack/react-router": "^1.95.3",
-    "@tanstack/router-devtools": "^1.95.3",
+    "@tanstack/react-router": "^1.95.4",
+    "@tanstack/router-devtools": "^1.95.4",
     "react": "^18.2.0",
     "react-dom": "^18.2.0",
     "redaxios": "^0.5.1"
diff --git a/examples/react/deferred-data/package.json b/examples/react/deferred-data/package.json
index 338a5b8e0..9e5f8d84b 100644
--- a/examples/react/deferred-data/package.json
+++ b/examples/react/deferred-data/package.json
@@ -9,8 +9,8 @@
     "start": "vite"
   },
   "dependencies": {
-    "@tanstack/react-router": "^1.95.3",
-    "@tanstack/router-devtools": "^1.95.3",
+    "@tanstack/react-router": "^1.95.4",
+    "@tanstack/router-devtools": "^1.95.4",
     "redaxios": "^0.5.1",
     "react": "^18.2.0",
     "react-dom": "^18.2.0",
diff --git a/examples/react/kitchen-sink-file-based/package.json b/examples/react/kitchen-sink-file-based/package.json
index 7cc41c46f..8d6e23681 100644
--- a/examples/react/kitchen-sink-file-based/package.json
+++ b/examples/react/kitchen-sink-file-based/package.json
@@ -9,9 +9,9 @@
     "start": "vite"
   },
   "dependencies": {
-    "@tanstack/react-router": "^1.95.3",
-    "@tanstack/router-devtools": "^1.95.3",
-    "@tanstack/router-plugin": "^1.95.3",
+    "@tanstack/react-router": "^1.95.4",
+    "@tanstack/router-devtools": "^1.95.4",
+    "@tanstack/router-plugin": "^1.95.4",
     "immer": "^10.1.1",
     "react": "^18.2.0",
     "react-dom": "^18.2.0",
diff --git a/examples/react/kitchen-sink-react-query-file-based/package.json b/examples/react/kitchen-sink-react-query-file-based/package.json
index 6a67cc545..7571a0f4e 100644
--- a/examples/react/kitchen-sink-react-query-file-based/package.json
+++ b/examples/react/kitchen-sink-react-query-file-based/package.json
@@ -11,9 +11,9 @@
   "dependencies": {
     "@tanstack/react-query": "^5.62.3",
     "@tanstack/react-query-devtools": "^5.62.3",
-    "@tanstack/react-router": "^1.95.3",
-    "@tanstack/router-devtools": "^1.95.3",
-    "@tanstack/router-plugin": "^1.95.3",
+    "@tanstack/react-router": "^1.95.4",
+    "@tanstack/router-devtools": "^1.95.4",
+    "@tanstack/router-plugin": "^1.95.4",
     "immer": "^10.1.1",
     "react": "^18.2.0",
     "react-dom": "^18.2.0",
diff --git a/examples/react/kitchen-sink-react-query/package.json b/examples/react/kitchen-sink-react-query/package.json
index e63233fda..1dfc8f279 100644
--- a/examples/react/kitchen-sink-react-query/package.json
+++ b/examples/react/kitchen-sink-react-query/package.json
@@ -11,8 +11,8 @@
   "dependencies": {
     "@tanstack/react-query": "^5.62.3",
     "@tanstack/react-query-devtools": "^5.62.3",
-    "@tanstack/react-router": "^1.95.3",
-    "@tanstack/router-devtools": "^1.95.3",
+    "@tanstack/react-router": "^1.95.4",
+    "@tanstack/router-devtools": "^1.95.4",
     "redaxios": "^0.5.1",
     "immer": "^10.1.1",
     "react": "^18.2.0",
diff --git a/examples/react/kitchen-sink/package.json b/examples/react/kitchen-sink/package.json
index 959963e14..2a3b02063 100644
--- a/examples/react/kitchen-sink/package.json
+++ b/examples/react/kitchen-sink/package.json
@@ -9,8 +9,8 @@
     "start": "vite"
   },
   "dependencies": {
-    "@tanstack/react-router": "^1.95.3",
-    "@tanstack/router-devtools": "^1.95.3",
+    "@tanstack/react-router": "^1.95.4",
+    "@tanstack/router-devtools": "^1.95.4",
     "redaxios": "^0.5.1",
     "immer": "^10.1.1",
     "react": "^18.2.0",
diff --git a/examples/react/large-file-based/package.json b/examples/react/large-file-based/package.json
index f4fe48441..209b1b107 100644
--- a/examples/react/large-file-based/package.json
+++ b/examples/react/large-file-based/package.json
@@ -12,9 +12,9 @@
   },
   "dependencies": {
     "@tanstack/react-query": "^5.62.3",
-    "@tanstack/react-router": "^1.95.3",
-    "@tanstack/router-devtools": "^1.95.3",
-    "@tanstack/router-plugin": "^1.95.3",
+    "@tanstack/react-router": "^1.95.4",
+    "@tanstack/router-devtools": "^1.95.4",
+    "@tanstack/router-plugin": "^1.95.4",
     "react": "^18.2.0",
     "react-dom": "^18.2.0",
     "redaxios": "^0.5.1",
diff --git a/examples/react/location-masking/package.json b/examples/react/location-masking/package.json
index cf5a0b480..24ebfed3a 100644
--- a/examples/react/location-masking/package.json
+++ b/examples/react/location-masking/package.json
@@ -11,8 +11,8 @@
   "dependencies": {
     "@radix-ui/react-dialog": "^1.1.2",
     "@tanstack/react-query": "^5.62.3",
-    "@tanstack/react-router": "^1.95.3",
-    "@tanstack/router-devtools": "^1.95.3",
+    "@tanstack/react-router": "^1.95.4",
+    "@tanstack/router-devtools": "^1.95.4",
     "redaxios": "^0.5.1",
     "react": "^18.2.0",
     "react-dom": "^18.2.0"
diff --git a/examples/react/navigation-blocking/package.json b/examples/react/navigation-blocking/package.json
index 19b443b93..fd105954c 100644
--- a/examples/react/navigation-blocking/package.json
+++ b/examples/react/navigation-blocking/package.json
@@ -10,8 +10,8 @@
   },
   "dependencies": {
     "@tanstack/react-query": "^5.62.3",
-    "@tanstack/react-router": "^1.95.3",
-    "@tanstack/router-devtools": "^1.95.3",
+    "@tanstack/react-router": "^1.95.4",
+    "@tanstack/router-devtools": "^1.95.4",
     "redaxios": "^0.5.1",
     "react": "^18.2.0",
     "react-dom": "^18.2.0"
diff --git a/examples/react/quickstart-esbuild-file-based/package.json b/examples/react/quickstart-esbuild-file-based/package.json
index 510ae780c..88319be73 100644
--- a/examples/react/quickstart-esbuild-file-based/package.json
+++ b/examples/react/quickstart-esbuild-file-based/package.json
@@ -9,9 +9,9 @@
     "start": "dev"
   },
   "dependencies": {
-    "@tanstack/react-router": "^1.95.3",
-    "@tanstack/router-devtools": "^1.95.3",
-    "@tanstack/router-plugin": "^1.95.3",
+    "@tanstack/react-router": "^1.95.4",
+    "@tanstack/router-devtools": "^1.95.4",
+    "@tanstack/router-plugin": "^1.95.4",
     "react": "^18.2.0",
     "react-dom": "^18.2.0",
     "redaxios": "^0.5.1",
diff --git a/examples/react/quickstart-file-based/package.json b/examples/react/quickstart-file-based/package.json
index 31d78da15..f0acf2b9c 100644
--- a/examples/react/quickstart-file-based/package.json
+++ b/examples/react/quickstart-file-based/package.json
@@ -9,9 +9,9 @@
     "start": "vite"
   },
   "dependencies": {
-    "@tanstack/react-router": "^1.95.3",
-    "@tanstack/router-devtools": "^1.95.3",
-    "@tanstack/router-plugin": "^1.95.3",
+    "@tanstack/react-router": "^1.95.4",
+    "@tanstack/router-devtools": "^1.95.4",
+    "@tanstack/router-plugin": "^1.95.4",
     "react": "^18.2.0",
     "react-dom": "^18.2.0",
     "redaxios": "^0.5.1",
diff --git a/examples/react/quickstart-rspack-file-based/package.json b/examples/react/quickstart-rspack-file-based/package.json
index 8acd35145..ca37e59dd 100644
--- a/examples/react/quickstart-rspack-file-based/package.json
+++ b/examples/react/quickstart-rspack-file-based/package.json
@@ -8,15 +8,15 @@
     "preview": "rsbuild preview"
   },
   "dependencies": {
-    "@tanstack/react-router": "^1.95.3",
-    "@tanstack/router-devtools": "^1.95.3",
+    "@tanstack/react-router": "^1.95.4",
+    "@tanstack/router-devtools": "^1.95.4",
     "react": "^18.3.1",
     "react-dom": "^18.3.1"
   },
   "devDependencies": {
     "@rsbuild/core": "1.1.9",
     "@rsbuild/plugin-react": "1.1.0",
-    "@tanstack/router-plugin": "^1.95.3",
+    "@tanstack/router-plugin": "^1.95.4",
     "@types/react": "^18.3.3",
     "@types/react-dom": "^18.3.0",
     "typescript": "^5.6.2"
diff --git a/examples/react/quickstart-webpack-file-based/package.json b/examples/react/quickstart-webpack-file-based/package.json
index d6aabf85e..3e3e6d83b 100644
--- a/examples/react/quickstart-webpack-file-based/package.json
+++ b/examples/react/quickstart-webpack-file-based/package.json
@@ -7,14 +7,14 @@
     "build": "webpack build && tsc --noEmit"
   },
   "dependencies": {
-    "@tanstack/react-router": "^1.95.3",
-    "@tanstack/router-devtools": "^1.95.3",
+    "@tanstack/react-router": "^1.95.4",
+    "@tanstack/router-devtools": "^1.95.4",
     "react": "^18.3.1",
     "react-dom": "^18.3.1"
   },
   "devDependencies": {
     "@swc/core": "^1.10.1",
-    "@tanstack/router-plugin": "^1.95.3",
+    "@tanstack/router-plugin": "^1.95.4",
     "@types/react": "^18.3.3",
     "@types/react-dom": "^18.3.0",
     "html-webpack-plugin": "^5.6.3",
diff --git a/examples/react/quickstart/package.json b/examples/react/quickstart/package.json
index dfac3ead5..530fc049a 100644
--- a/examples/react/quickstart/package.json
+++ b/examples/react/quickstart/package.json
@@ -9,8 +9,8 @@
     "start": "vite"
   },
   "dependencies": {
-    "@tanstack/react-router": "^1.95.3",
-    "@tanstack/router-devtools": "^1.95.3",
+    "@tanstack/react-router": "^1.95.4",
+    "@tanstack/router-devtools": "^1.95.4",
     "react": "^18.2.0",
     "react-dom": "^18.2.0"
   },
diff --git a/examples/react/router-monorepo-react-query/package.json b/examples/react/router-monorepo-react-query/package.json
index 7cf39cc1f..4f161ce0c 100644
--- a/examples/react/router-monorepo-react-query/package.json
+++ b/examples/react/router-monorepo-react-query/package.json
@@ -12,9 +12,9 @@
   "dependencies": {
     "@tanstack/react-query": "^5.62.3",
     "@tanstack/react-query-devtools": "^5.62.3",
-    "@tanstack/react-router": "^1.95.3",
-    "@tanstack/router-devtools": "^1.95.3",
-    "@tanstack/router-plugin": "^1.95.3",
+    "@tanstack/react-router": "^1.95.4",
+    "@tanstack/router-devtools": "^1.95.4",
+    "@tanstack/router-plugin": "^1.95.4",
     "react": "^18.2.0",
     "react-dom": "^18.2.0",
     "redaxios": "^0.5.1"
diff --git a/examples/react/router-monorepo-react-query/packages/app/package.json b/examples/react/router-monorepo-react-query/packages/app/package.json
index dab17687e..9250695f3 100644
--- a/examples/react/router-monorepo-react-query/packages/app/package.json
+++ b/examples/react/router-monorepo-react-query/packages/app/package.json
@@ -20,7 +20,7 @@
     "@types/react-dom": "^18.2.18",
     "@vitejs/plugin-react": "^4.3.4",
     "typescript": "^5.7.2",
-    "@tanstack/router-devtools": "^1.95.3",
+    "@tanstack/router-devtools": "^1.95.4",
     "vite": "^6.0.3",
     "vite-plugin-dts": "^4.4.0"
   },
diff --git a/examples/react/router-monorepo-react-query/packages/router/package.json b/examples/react/router-monorepo-react-query/packages/router/package.json
index dbc7c2425..4b3703dc8 100644
--- a/examples/react/router-monorepo-react-query/packages/router/package.json
+++ b/examples/react/router-monorepo-react-query/packages/router/package.json
@@ -10,8 +10,8 @@
   "dependencies": {
     "@tanstack/history": "^1.95.2",
     "@tanstack/react-query": "^5.62.3",
-    "@tanstack/react-router": "^1.95.3",
-    "@tanstack/router-plugin": "^1.95.3",
+    "@tanstack/react-router": "^1.95.4",
+    "@tanstack/router-plugin": "^1.95.4",
     "@router-mono-react-query/post-query": "workspace:*",
     "redaxios": "^0.5.1",
     "zod": "^3.24.1",
diff --git a/examples/react/router-monorepo-simple/package.json b/examples/react/router-monorepo-simple/package.json
index 3f9cee382..048a33e7d 100644
--- a/examples/react/router-monorepo-simple/package.json
+++ b/examples/react/router-monorepo-simple/package.json
@@ -8,9 +8,9 @@
     "dev": "pnpm router build && pnpm post-feature build && pnpm app dev"
   },
   "dependencies": {
-    "@tanstack/react-router": "^1.95.3",
-    "@tanstack/router-devtools": "^1.95.3",
-    "@tanstack/router-plugin": "^1.95.3",
+    "@tanstack/react-router": "^1.95.4",
+    "@tanstack/router-devtools": "^1.95.4",
+    "@tanstack/router-plugin": "^1.95.4",
     "react": "^18.2.0",
     "react-dom": "^18.2.0",
     "redaxios": "^0.5.1"
diff --git a/examples/react/router-monorepo-simple/packages/app/package.json b/examples/react/router-monorepo-simple/packages/app/package.json
index 52784f6b2..9825e2272 100644
--- a/examples/react/router-monorepo-simple/packages/app/package.json
+++ b/examples/react/router-monorepo-simple/packages/app/package.json
@@ -19,7 +19,7 @@
     "@types/react-dom": "^18.2.18",
     "@vitejs/plugin-react": "^4.3.4",
     "typescript": "^5.7.2",
-    "@tanstack/router-devtools": "^1.95.3",
+    "@tanstack/router-devtools": "^1.95.4",
     "vite": "^6.0.3",
     "vite-plugin-dts": "^4.4.0"
   },
diff --git a/examples/react/router-monorepo-simple/packages/router/package.json b/examples/react/router-monorepo-simple/packages/router/package.json
index 17933c63a..c74af2f01 100644
--- a/examples/react/router-monorepo-simple/packages/router/package.json
+++ b/examples/react/router-monorepo-simple/packages/router/package.json
@@ -9,8 +9,8 @@
   "types": "./dist/index.d.ts",
   "dependencies": {
     "@tanstack/history": "^1.95.2",
-    "@tanstack/react-router": "^1.95.3",
-    "@tanstack/router-plugin": "^1.95.3",
+    "@tanstack/react-router": "^1.95.4",
+    "@tanstack/router-plugin": "^1.95.4",
     "redaxios": "^0.5.1",
     "zod": "^3.23.8",
     "react": "^18.2.0",
diff --git a/examples/react/scroll-restoration/package.json b/examples/react/scroll-restoration/package.json
index 2a9d8ac0f..16afca15f 100644
--- a/examples/react/scroll-restoration/package.json
+++ b/examples/react/scroll-restoration/package.json
@@ -9,9 +9,9 @@
     "start": "vite"
   },
   "dependencies": {
-    "@tanstack/react-router": "^1.95.3",
+    "@tanstack/react-router": "^1.95.4",
     "@tanstack/react-virtual": "^3.11.1",
-    "@tanstack/router-devtools": "^1.95.3",
+    "@tanstack/router-devtools": "^1.95.4",
     "react": "^18.2.0",
     "react-dom": "^18.2.0"
   },
diff --git a/examples/react/search-validator-adapters/package.json b/examples/react/search-validator-adapters/package.json
index b8cc93193..02cba7802 100644
--- a/examples/react/search-validator-adapters/package.json
+++ b/examples/react/search-validator-adapters/package.json
@@ -11,12 +11,12 @@
   },
   "dependencies": {
     "@tanstack/react-query": "^5.62.3",
-    "@tanstack/react-router": "^1.95.3",
-    "@tanstack/arktype-adapter": "^1.95.3",
-    "@tanstack/router-devtools": "^1.95.3",
-    "@tanstack/router-plugin": "^1.95.3",
-    "@tanstack/valibot-adapter": "^1.95.3",
-    "@tanstack/zod-adapter": "^1.95.3",
+    "@tanstack/react-router": "^1.95.4",
+    "@tanstack/arktype-adapter": "^1.95.4",
+    "@tanstack/router-devtools": "^1.95.4",
+    "@tanstack/router-plugin": "^1.95.4",
+    "@tanstack/valibot-adapter": "^1.95.4",
+    "@tanstack/zod-adapter": "^1.95.4",
     "arktype": "2.0.0-rc.26",
     "react": "^18.2.0",
     "react-dom": "^18.2.0",
diff --git a/examples/react/start-basic-auth/package.json b/examples/react/start-basic-auth/package.json
index e6be770f7..4b6068649 100644
--- a/examples/react/start-basic-auth/package.json
+++ b/examples/react/start-basic-auth/package.json
@@ -11,9 +11,9 @@
   },
   "dependencies": {
     "@prisma/client": "5.22.0",
-    "@tanstack/react-router": "^1.95.3",
-    "@tanstack/router-devtools": "^1.95.3",
-    "@tanstack/start": "^1.95.3",
+    "@tanstack/react-router": "^1.95.4",
+    "@tanstack/router-devtools": "^1.95.4",
+    "@tanstack/start": "^1.95.4",
     "prisma": "^5.22.0",
     "react": "^18.3.1",
     "react-dom": "^18.3.1",
diff --git a/examples/react/start-basic-react-query/package.json b/examples/react/start-basic-react-query/package.json
index bf4fdea48..bf798ae72 100644
--- a/examples/react/start-basic-react-query/package.json
+++ b/examples/react/start-basic-react-query/package.json
@@ -11,10 +11,10 @@
   "dependencies": {
     "@tanstack/react-query": "^5.62.3",
     "@tanstack/react-query-devtools": "^5.62.3",
-    "@tanstack/react-router": "^1.95.3",
-    "@tanstack/react-router-with-query": "^1.95.3",
-    "@tanstack/router-devtools": "^1.95.3",
-    "@tanstack/start": "^1.95.3",
+    "@tanstack/react-router": "^1.95.4",
+    "@tanstack/react-router-with-query": "^1.95.4",
+    "@tanstack/router-devtools": "^1.95.4",
+    "@tanstack/start": "^1.95.4",
     "react": "^18.3.1",
     "react-dom": "^18.3.1",
     "redaxios": "^0.5.1",
diff --git a/examples/react/start-basic-rsc/package.json b/examples/react/start-basic-rsc/package.json
index e9657e9f6..2b64cd58f 100644
--- a/examples/react/start-basic-rsc/package.json
+++ b/examples/react/start-basic-rsc/package.json
@@ -10,9 +10,9 @@
   },
   "dependencies": {
     "@babel/plugin-syntax-typescript": "^7.25.9",
-    "@tanstack/react-router": "^1.95.3",
-    "@tanstack/router-devtools": "^1.95.3",
-    "@tanstack/start": "^1.95.3",
+    "@tanstack/react-router": "^1.95.4",
+    "@tanstack/router-devtools": "^1.95.4",
+    "@tanstack/start": "^1.95.4",
     "redaxios": "^0.5.1",
     "tailwind-merge": "^2.5.5",
     "vinxi": "0.5.1"
diff --git a/examples/react/start-basic/package.json b/examples/react/start-basic/package.json
index a7b7f9d05..245314495 100644
--- a/examples/react/start-basic/package.json
+++ b/examples/react/start-basic/package.json
@@ -9,9 +9,9 @@
     "start": "vinxi start"
   },
   "dependencies": {
-    "@tanstack/react-router": "^1.95.3",
-    "@tanstack/router-devtools": "^1.95.3",
-    "@tanstack/start": "^1.95.3",
+    "@tanstack/react-router": "^1.95.4",
+    "@tanstack/router-devtools": "^1.95.4",
+    "@tanstack/start": "^1.95.4",
     "react": "^18.3.1",
     "react-dom": "^18.3.1",
     "redaxios": "^0.5.1",
diff --git a/examples/react/start-clerk-basic/package.json b/examples/react/start-clerk-basic/package.json
index 793e7cf6a..0f13a63db 100644
--- a/examples/react/start-clerk-basic/package.json
+++ b/examples/react/start-clerk-basic/package.json
@@ -10,9 +10,9 @@
   },
   "dependencies": {
     "@clerk/tanstack-start": "0.6.5",
-    "@tanstack/react-router": "^1.95.3",
-    "@tanstack/router-devtools": "^1.95.3",
-    "@tanstack/start": "^1.95.3",
+    "@tanstack/react-router": "^1.95.4",
+    "@tanstack/router-devtools": "^1.95.4",
+    "@tanstack/start": "^1.95.4",
     "react": "^18.3.1",
     "react-dom": "^18.3.1",
     "redaxios": "^0.5.1",
diff --git a/examples/react/start-convex-trellaux/package.json b/examples/react/start-convex-trellaux/package.json
index 4f34cf199..b3f888091 100644
--- a/examples/react/start-convex-trellaux/package.json
+++ b/examples/react/start-convex-trellaux/package.json
@@ -13,10 +13,10 @@
   "dependencies": {
     "@tanstack/react-query": "^5.62.3",
     "@tanstack/react-query-devtools": "^5.62.3",
-    "@tanstack/react-router": "^1.95.3",
-    "@tanstack/react-router-with-query": "^1.95.3",
-    "@tanstack/router-devtools": "^1.95.3",
-    "@tanstack/start": "^1.95.3",
+    "@tanstack/react-router": "^1.95.4",
+    "@tanstack/react-router-with-query": "^1.95.4",
+    "@tanstack/router-devtools": "^1.95.4",
+    "@tanstack/start": "^1.95.4",
     "@convex-dev/react-query": "0.0.0-alpha.8",
     "concurrently": "^8.2.2",
     "convex": "^1.17.3",
diff --git a/examples/react/start-counter/package.json b/examples/react/start-counter/package.json
index d0964b123..941c74efb 100644
--- a/examples/react/start-counter/package.json
+++ b/examples/react/start-counter/package.json
@@ -9,8 +9,8 @@
     "start": "vinxi start"
   },
   "dependencies": {
-    "@tanstack/react-router": "^1.95.3",
-    "@tanstack/start": "^1.95.3",
+    "@tanstack/react-router": "^1.95.4",
+    "@tanstack/start": "^1.95.4",
     "react": "^18.3.1",
     "react-dom": "^18.3.1",
     "vinxi": "0.5.1"
diff --git a/examples/react/start-large/package.json b/examples/react/start-large/package.json
index caf729fe8..1afd6e1aa 100644
--- a/examples/react/start-large/package.json
+++ b/examples/react/start-large/package.json
@@ -12,9 +12,9 @@
   },
   "dependencies": {
     "@tanstack/react-query": "^5.62.3",
-    "@tanstack/react-router": "^1.95.3",
-    "@tanstack/router-devtools": "^1.95.3",
-    "@tanstack/start": "^1.95.3",
+    "@tanstack/react-router": "^1.95.4",
+    "@tanstack/router-devtools": "^1.95.4",
+    "@tanstack/start": "^1.95.4",
     "react": "^18.3.1",
     "react-dom": "^18.3.1",
     "redaxios": "^0.5.1",
diff --git a/examples/react/start-supabase-basic/package.json b/examples/react/start-supabase-basic/package.json
index 3efd30afa..3c9f6ebf5 100644
--- a/examples/react/start-supabase-basic/package.json
+++ b/examples/react/start-supabase-basic/package.json
@@ -15,9 +15,9 @@
   "dependencies": {
     "@supabase/ssr": "^0.5.2",
     "@supabase/supabase-js": "^2.47.3",
-    "@tanstack/react-router": "^1.95.3",
-    "@tanstack/router-devtools": "^1.95.3",
-    "@tanstack/start": "^1.95.3",
+    "@tanstack/react-router": "^1.95.4",
+    "@tanstack/router-devtools": "^1.95.4",
+    "@tanstack/start": "^1.95.4",
     "react": "^18.3.1",
     "react-dom": "^18.3.1",
     "vinxi": "0.5.1"
diff --git a/examples/react/start-trellaux/package.json b/examples/react/start-trellaux/package.json
index 128b841a2..7f3ef58bc 100644
--- a/examples/react/start-trellaux/package.json
+++ b/examples/react/start-trellaux/package.json
@@ -11,10 +11,10 @@
   "dependencies": {
     "@tanstack/react-query": "^5.62.3",
     "@tanstack/react-query-devtools": "^5.62.3",
-    "@tanstack/react-router": "^1.95.3",
-    "@tanstack/react-router-with-query": "^1.95.3",
-    "@tanstack/router-devtools": "^1.95.3",
-    "@tanstack/start": "^1.95.3",
+    "@tanstack/react-router": "^1.95.4",
+    "@tanstack/react-router-with-query": "^1.95.4",
+    "@tanstack/router-devtools": "^1.95.4",
+    "@tanstack/start": "^1.95.4",
     "ky": "^1.7.2",
     "msw": "^2.6.8",
     "react": "^18.3.1",
diff --git a/examples/react/with-framer-motion/package.json b/examples/react/with-framer-motion/package.json
index 5374dce4f..762643215 100644
--- a/examples/react/with-framer-motion/package.json
+++ b/examples/react/with-framer-motion/package.json
@@ -9,8 +9,8 @@
     "start": "vite"
   },
   "dependencies": {
-    "@tanstack/react-router": "^1.95.3",
-    "@tanstack/router-devtools": "^1.95.3",
+    "@tanstack/react-router": "^1.95.4",
+    "@tanstack/router-devtools": "^1.95.4",
     "redaxios": "^0.5.1",
     "framer-motion": "^11.13.3",
     "react": "^18.2.0",
diff --git a/examples/react/with-trpc-react-query/package.json b/examples/react/with-trpc-react-query/package.json
index 95c10c743..69443e10f 100644
--- a/examples/react/with-trpc-react-query/package.json
+++ b/examples/react/with-trpc-react-query/package.json
@@ -10,9 +10,9 @@
   "dependencies": {
     "@tanstack/react-query": "^5.62.3",
     "@tanstack/react-query-devtools": "^5.62.3",
-    "@tanstack/react-router": "^1.95.3",
-    "@tanstack/router-devtools": "^1.95.3",
-    "@tanstack/router-plugin": "^1.95.3",
+    "@tanstack/react-router": "^1.95.4",
+    "@tanstack/router-devtools": "^1.95.4",
+    "@tanstack/router-plugin": "^1.95.4",
     "@trpc/client": "11.0.0-rc.660",
     "@trpc/react-query": "11.0.0-rc.660",
     "@trpc/server": "11.0.0-rc.660",
diff --git a/examples/react/with-trpc/package.json b/examples/react/with-trpc/package.json
index ea6fc44fb..e18db4c4a 100644
--- a/examples/react/with-trpc/package.json
+++ b/examples/react/with-trpc/package.json
@@ -8,9 +8,9 @@
     "start": "vinxi start"
   },
   "dependencies": {
-    "@tanstack/react-router": "^1.95.3",
-    "@tanstack/router-devtools": "^1.95.3",
-    "@tanstack/router-plugin": "^1.95.3",
+    "@tanstack/react-router": "^1.95.4",
+    "@tanstack/router-devtools": "^1.95.4",
+    "@tanstack/router-plugin": "^1.95.4",
     "@trpc/client": "11.0.0-rc.660",
     "@trpc/server": "11.0.0-rc.660",
     "react": "^18.2.0",
diff --git a/packages/arktype-adapter/package.json b/packages/arktype-adapter/package.json
index 7a4dbbbe5..3316a4079 100644
--- a/packages/arktype-adapter/package.json
+++ b/packages/arktype-adapter/package.json
@@ -1,6 +1,6 @@
 {
   "name": "@tanstack/arktype-adapter",
-  "version": "1.95.3",
+  "version": "1.95.4",
   "description": "Modern and scalable routing for React applications",
   "author": "Tanner Linsley",
   "license": "MIT",
diff --git a/packages/create-router/package.json b/packages/create-router/package.json
index 897b85a9e..fbe917936 100644
--- a/packages/create-router/package.json
+++ b/packages/create-router/package.json
@@ -1,6 +1,6 @@
 {
   "name": "@tanstack/create-router",
-  "version": "1.95.3",
+  "version": "1.95.4",
   "description": "Modern and scalable routing for React applications",
   "author": "Tanner Linsley",
   "license": "MIT",
diff --git a/packages/create-start/README.md b/packages/create-start/README.md
index e69de29bb..8bf853f57 100644
--- a/packages/create-start/README.md
+++ b/packages/create-start/README.md
@@ -0,0 +1,37 @@
+# @tanstack/create-start
+
+CLI tool for creating and modifying TanStack Start projects.
+
+```
+pnpm create @tanstack/start
+```
+
+Run
+
+```
+pnpm create @tanstack/start --help
+```
+
+to see all options.
+
+Until peer dependency issues are worked out, `npm create @tanstack/start` doesn't work.
+
+Use pnpm or maybe a bundled version could be published instead.
+
+# Contributing
+
+## Modules
+
+Modules represent templates and functionality that can be added later to a TanStack Start project. A module is created using a chain of methods specifying callbacks which receives arguments from the previous step.
+
+- `createModule(schema)`: Set the schema of values that will be passed in from command line options.
+
+- `.init((configFromSchema) => { ... })`: Crawl the filesystem to infer configuration, for example detecting the current package manager
+
+- `.prompt((configFromInit) => { ... })`: Prompt the user for configuration, skipping config that has already been specified.
+
+- `.validateAndApply({ validate, apply })`
+
+  - `validate({ cfg, targetPath })`: check if preconditions met (is there a package.json? is a library already installed?) and return an array of strings that are issues to address
+
+  - `apply({ cfg, targetPath })`: modify the filesystem: install libraries, modify files
diff --git a/packages/create-start/eslint.config.js b/packages/create-start/eslint.config.js
index 6e0bd1c03..c12a3bebe 100644
--- a/packages/create-start/eslint.config.js
+++ b/packages/create-start/eslint.config.js
@@ -11,6 +11,8 @@ export default [
           'ts-nocheck': false,
         },
       ],
+      '@typescript-eslint/array-type': 'off',
+      '@typescript-eslint/require-await': 'off',
     },
   },
 ]
diff --git a/packages/create-start/package.json b/packages/create-start/package.json
index 725634d59..e58b2622e 100644
--- a/packages/create-start/package.json
+++ b/packages/create-start/package.json
@@ -1,6 +1,6 @@
 {
   "name": "@tanstack/create-start",
-  "version": "1.95.3",
+  "version": "1.95.4",
   "description": "Modern and scalable routing for React applications",
   "author": "Tim O'Connell",
   "license": "MIT",
@@ -15,7 +15,7 @@
     "url": "https://github.com/sponsors/tannerlinsley"
   },
   "bin": {
-    "create-router": "index.js"
+    "create-start": "index.js"
   },
   "scripts": {
     "dev": "BUILD_ENV=development unbuild --stub --watch",
diff --git a/packages/create-start/src/utils/debug.ts b/packages/create-start/src/utils/debug.ts
index 98a1548cc..81d7bfe15 100644
--- a/packages/create-start/src/utils/debug.ts
+++ b/packages/create-start/src/utils/debug.ts
@@ -20,7 +20,7 @@ export const debugCliOption = createOption(
 ).argParser((value) => {
   if (!DEBUG_LEVELS.includes(value as DebugLevels)) {
     throw new InvalidArgumentError(
-      `Invalid IDE: ${value}. Only the following are allowed: ${DEBUG_LEVELS.join(', ')}`,
+      `Invalid debug level: ${value}. Only the following are allowed: ${DEBUG_LEVELS.join(', ')}`,
     )
   }
   return value as DebugLevels
diff --git a/packages/react-router-with-query/package.json b/packages/react-router-with-query/package.json
index b46b833a5..c19ed3162 100644
--- a/packages/react-router-with-query/package.json
+++ b/packages/react-router-with-query/package.json
@@ -1,6 +1,6 @@
 {
   "name": "@tanstack/react-router-with-query",
-  "version": "1.95.3",
+  "version": "1.95.4",
   "description": "Modern and scalable routing for React applications",
   "author": "Tanner Linsley",
   "license": "MIT",
diff --git a/packages/react-router/package.json b/packages/react-router/package.json
index bc89a5129..b76720805 100644
--- a/packages/react-router/package.json
+++ b/packages/react-router/package.json
@@ -1,6 +1,6 @@
 {
   "name": "@tanstack/react-router",
-  "version": "1.95.3",
+  "version": "1.95.4",
   "description": "Modern and scalable routing for React applications",
   "author": "Tanner Linsley",
   "license": "MIT",
diff --git a/packages/react-router/src/index.tsx b/packages/react-router/src/index.tsx
index c4dd49baf..7235f7b2b 100644
--- a/packages/react-router/src/index.tsx
+++ b/packages/react-router/src/index.tsx
@@ -291,6 +291,7 @@ export type {
   RouterTransformer,
   TransformerParse,
   TransformerStringify,
+  DefaultSerializable,
   DefaultTransformerParse,
   DefaultTransformerStringify,
 } from './transformer'
diff --git a/packages/react-router/src/transformer.ts b/packages/react-router/src/transformer.ts
index 4320332bf..fad1fb2f8 100644
--- a/packages/react-router/src/transformer.ts
+++ b/packages/react-router/src/transformer.ts
@@ -80,11 +80,11 @@ export const defaultTransformer: RouterTransformer = {
   },
 }
 
-const createTransformer = <T extends string>(
-  key: T,
-  check: (value: any) => boolean,
-  toValue: (value: any) => any = (v) => v,
-  fromValue: (value: any) => any = (v) => v,
+const createTransformer = <TKey extends string, TInput, TSerialized>(
+  key: TKey,
+  check: (value: any) => value is TInput,
+  toValue: (value: TInput) => TSerialized,
+  fromValue: (value: TSerialized) => TInput,
 ) => ({
   key,
   stringifyCondition: check,
@@ -94,13 +94,14 @@ const createTransformer = <T extends string>(
 })
 
 // Keep these ordered by predicted frequency
+// Make sure to keep DefaultSerializeable in sync with these transformers
 // Also, make sure that they are unit tested in transformer.test.tsx
 const transformers = [
   createTransformer(
     // Key
     'undefined',
     // Check
-    (v) => v === undefined,
+    (v): v is undefined => v === undefined,
     // To
     () => 0,
     // From
@@ -110,7 +111,7 @@ const transformers = [
     // Key
     'date',
     // Check
-    (v) => v instanceof Date,
+    (v): v is Date => v instanceof Date,
     // To
     (v) => v.toISOString(),
     // From
@@ -120,7 +121,7 @@ const transformers = [
     // Key
     'error',
     // Check
-    (v) => v instanceof Error,
+    (v): v is Error => v instanceof Error,
     // To
     (v) => ({ ...v, message: v.message, stack: v.stack, cause: v.cause }),
     // From
@@ -130,12 +131,24 @@ const transformers = [
     // Key
     'formData',
     // Check
-    (v) => v instanceof FormData,
+    (v): v is FormData => v instanceof FormData,
     // To
-    (v: FormData) => {
-      const entries: Record<string, any> = {}
+    (v) => {
+      const entries: Record<
+        string,
+        Array<FormDataEntryValue> | FormDataEntryValue
+      > = {}
       v.forEach((value, key) => {
-        entries[key] = value
+        const entry = entries[key]
+        if (entry !== undefined) {
+          if (Array.isArray(entry)) {
+            entry.push(value)
+          } else {
+            entries[key] = [entry, value]
+          }
+        } else {
+          entries[key] = value
+        }
       })
       return entries
     },
@@ -143,7 +156,11 @@ const transformers = [
     (v) => {
       const formData = new FormData()
       Object.entries(v).forEach(([key, value]) => {
-        formData.append(key, value as string | Blob)
+        if (Array.isArray(value)) {
+          value.forEach((val) => formData.append(key, val))
+        } else {
+          formData.append(key, value)
+        }
       })
       return formData
     },
@@ -162,9 +179,14 @@ export type TransformerParse<T, TSerializable> = T extends TSerializable
     ? ReadableStream
     : { [K in keyof T]: TransformerParse<T[K], TSerializable> }
 
+export type DefaultSerializable = Date | undefined | Error | FormData
+
 export type DefaultTransformerStringify<T> = TransformerStringify<
   T,
-  Date | undefined
+  DefaultSerializable
 >
 
-export type DefaultTransformerParse<T> = TransformerParse<T, Date | undefined>
+export type DefaultTransformerParse<T> = TransformerParse<
+  T,
+  DefaultSerializable
+>
diff --git a/packages/router-cli/package.json b/packages/router-cli/package.json
index 7f6e60017..870eaec37 100644
--- a/packages/router-cli/package.json
+++ b/packages/router-cli/package.json
@@ -1,6 +1,6 @@
 {
   "name": "@tanstack/router-cli",
-  "version": "1.95.3",
+  "version": "1.95.4",
   "description": "Modern and scalable routing for React applications",
   "author": "Tanner Linsley",
   "license": "MIT",
diff --git a/packages/router-devtools/package.json b/packages/router-devtools/package.json
index 7ad605b52..4dad04370 100644
--- a/packages/router-devtools/package.json
+++ b/packages/router-devtools/package.json
@@ -1,6 +1,6 @@
 {
   "name": "@tanstack/router-devtools",
-  "version": "1.95.3",
+  "version": "1.95.4",
   "description": "Modern and scalable routing for React applications",
   "author": "Tanner Linsley",
   "license": "MIT",
diff --git a/packages/router-generator/package.json b/packages/router-generator/package.json
index 8577b1c7e..1b9f7f5d8 100644
--- a/packages/router-generator/package.json
+++ b/packages/router-generator/package.json
@@ -1,6 +1,6 @@
 {
   "name": "@tanstack/router-generator",
-  "version": "1.95.3",
+  "version": "1.95.4",
   "description": "Modern and scalable routing for React applications",
   "author": "Tanner Linsley",
   "license": "MIT",
diff --git a/packages/router-plugin/package.json b/packages/router-plugin/package.json
index cdb543436..56af0bf4f 100644
--- a/packages/router-plugin/package.json
+++ b/packages/router-plugin/package.json
@@ -1,6 +1,6 @@
 {
   "name": "@tanstack/router-plugin",
-  "version": "1.95.3",
+  "version": "1.95.4",
   "description": "Modern and scalable routing for React applications",
   "author": "Tanner Linsley",
   "license": "MIT",
diff --git a/packages/router-vite-plugin/package.json b/packages/router-vite-plugin/package.json
index 3dc5a157c..0f7386434 100644
--- a/packages/router-vite-plugin/package.json
+++ b/packages/router-vite-plugin/package.json
@@ -1,6 +1,6 @@
 {
   "name": "@tanstack/router-vite-plugin",
-  "version": "1.95.3",
+  "version": "1.95.4",
   "description": "Modern and scalable routing for React applications",
   "author": "Tanner Linsley",
   "license": "MIT",
diff --git a/packages/start/package.json b/packages/start/package.json
index 897a21553..48acb0151 100644
--- a/packages/start/package.json
+++ b/packages/start/package.json
@@ -1,6 +1,6 @@
 {
   "name": "@tanstack/start",
-  "version": "1.95.3",
+  "version": "1.95.4",
   "description": "Modern and scalable routing for React applications",
   "author": "Tanner Linsley",
   "license": "MIT",
diff --git a/packages/valibot-adapter/package.json b/packages/valibot-adapter/package.json
index 453e7a79a..9d13aaaa6 100644
--- a/packages/valibot-adapter/package.json
+++ b/packages/valibot-adapter/package.json
@@ -1,6 +1,6 @@
 {
   "name": "@tanstack/valibot-adapter",
-  "version": "1.95.3",
+  "version": "1.95.4",
   "description": "Modern and scalable routing for React applications",
   "author": "Tanner Linsley",
   "license": "MIT",
diff --git a/packages/zod-adapter/package.json b/packages/zod-adapter/package.json
index ea0ed408d..fd557646c 100644
--- a/packages/zod-adapter/package.json
+++ b/packages/zod-adapter/package.json
@@ -1,6 +1,6 @@
 {
   "name": "@tanstack/zod-adapter",
-  "version": "1.95.3",
+  "version": "1.95.4",
   "description": "Modern and scalable routing for React applications",
   "author": "Tanner Linsley",
   "license": "MIT",


Test patch:
diff --git a/e2e/start/basic/app/routes/-server-fns/serialize-formdata-fn-call.tsx b/e2e/start/basic/app/routes/-server-fns/serialize-formdata-fn-call.tsx
index c33ff9368..d6bcc56d1 100644
--- a/e2e/start/basic/app/routes/-server-fns/serialize-formdata-fn-call.tsx
+++ b/e2e/start/basic/app/routes/-server-fns/serialize-formdata-fn-call.tsx
@@ -4,28 +4,32 @@ import { createServerFn } from '@tanstack/start'
 const testValues = {
   name: 'Sean',
   age: 25,
+  pet1: 'dog',
+  pet2: 'cat',
   __adder: 1,
 }
 
 export const greetUser = createServerFn()
-  .validator((data: unknown) => {
+  .validator((data: FormData) => {
     if (!(data instanceof FormData)) {
       throw new Error('Invalid! FormData is required')
     }
     const name = data.get('name')
     const age = data.get('age')
+    const pets = data.getAll('pet')
 
-    if (!name || !age) {
-      throw new Error('Name and age are required')
+    if (!name || !age || pets.length === 0) {
+      throw new Error('Name, age and pets are required')
     }
 
     return {
       name: name.toString(),
       age: parseInt(age.toString(), 10),
+      pets: pets.map((pet) => pet.toString()),
     }
   })
-  .handler(async ({ data: { name, age } }) => {
-    return `Hello, ${name}! You are ${age + testValues.__adder} years old.`
+  .handler(({ data: { name, age, pets } }) => {
+    return `Hello, ${name}! You are ${age + testValues.__adder} years old, and your favorite pets are ${pets.join(',')}.`
   })
 
 // Usage
@@ -40,7 +44,8 @@ export function SerializeFormDataFnCall() {
         <code>
           <pre data-testid="expected-serialize-formdata-server-fn-result">
             Hello, {testValues.name}! You are{' '}
-            {testValues.age + testValues.__adder} years old.
+            {testValues.age + testValues.__adder} years old, and your favorite{' '}
+            pets are {testValues.pet1},{testValues.pet2}.
           </pre>
         </code>
       </div>
@@ -55,6 +60,8 @@ export function SerializeFormDataFnCall() {
       >
         <input type="text" name="name" defaultValue={testValues.name} />
         <input type="number" name="age" defaultValue={testValues.age} />
+        <input type="text" name="pet" defaultValue={testValues.pet1} />
+        <input type="text" name="pet" defaultValue={testValues.pet2} />
         <button
           type="submit"
           data-testid="test-serialize-formdata-fn-calls-btn"
diff --git a/packages/react-router/tests/transformer.test.tsx b/packages/react-router/tests/transformer.test.tsx
index fbe9f0f20..e4cf06110 100644
--- a/packages/react-router/tests/transformer.test.tsx
+++ b/packages/react-router/tests/transformer.test.tsx
@@ -46,6 +46,14 @@ describe('transformer.stringify', () => {
       `"{"$formData":{"foo":"bar","name":"Sean"}}"`,
     )
   })
+  it('should stringify FormData with multiple values for the same key', () => {
+    const formData = new FormData()
+    formData.append('foo', 'bar')
+    formData.append('foo', 'baz')
+    expect(tf.stringify(formData)).toMatchInlineSnapshot(
+      `"{"$formData":{"foo":["bar","baz"]}}"`,
+    )
+  })
 })
 
 describe('transformer.parse', () => {
@@ -99,4 +107,16 @@ describe('transformer.parse', () => {
       ['name', 'Sean'],
     ])
   })
+  it('should parse FormData with multiple values for the same key', () => {
+    const formData = new FormData()
+    formData.append('foo', 'bar')
+    formData.append('foo', 'baz')
+    const str = tf.stringify(formData)
+    const parsed = tf.parse(str) as FormData
+    expect(parsed).toBeInstanceOf(FormData)
+    expect([...parsed.entries()]).toEqual([
+      ['foo', 'bar'],
+      ['foo', 'baz'],
+    ])
+  })
 })