Start: the Vite plugin and `tsr generate` write different routeTree.gen.ts (Start footer added, then stripped)
Nobody has claimed this yet.
- Dominant language
- TypeScript
- Stars
- 15.1k
- Forks
- 1.9k
- Avg merge
- 1d 20h
- Merged PRs (30d)
- 143
Description
Which project does this relate to?
Start
Describe the bug
The TanStack Start Vite plugin and the Router CLI write different routeTree.gen.ts files for the same project, and the scaffold produced by tanstack create ships both.
The Start plugin (@tanstack/start-plugin-core, start-router-plugin/route-tree-footer.ts) appends a footer to the generated route tree:
import type { getRouter } from './router.tsx'
import type { createStart } from '@tanstack/react-start'
declare module '@tanstack/react-start' {
interface Register {
ssr: true
router: Awaited<ReturnType<typeof getRouter>>
}
}
tsr generate (@tanstack/router-cli) does not know about Start and writes the file without it. So every vite build or vite dev adds the nine lines and every tsr generate removes them. In a project that commits routeTree.gen.ts, the file flips on every run of whichever tool ran last.
The scaffold's router.tsx still carries declare module '@tanstack/react-router' { interface Register { router } }, which masks the problem for the router registration. The ssr: true registration has no such fallback: after tsr generate, RegisteredSsr is false, so the serialisable-loader-result check (ValidateSerializableLifecycleResult) silently degrades to any until the next Vite run puts the footer back.
Complete minimal reproducer
https://github.com/TheBinaryGuy/tanstack-start-tsr-footer-repro (the unmodified tanstack create output plus a repro script; bun install && bun run repro shows the diff after each step). Open in StackBlitz: https://stackblitz.com/github/TheBinaryGuy/tanstack-start-tsr-footer-repro
Steps to Reproduce the Bug
npx @tanstack/cli@latest create start-ref --framework React --package-manager bun --non-interactive --no-examples --no-toolchain --deployment nitro
cd start-ref
git add -A && git commit -qm scaffold
bun run build # Start plugin: routeTree.gen.ts gains the 9-line footer
git diff --stat src/routeTree.gen.ts
bun run generate-routes # the scaffold's own `tsr generate` script: footer removed again
git diff --stat src/routeTree.gen.ts
bun run build # footer added again
git diff --stat src/routeTree.gen.ts
Observed with @tanstack/react-start 1.168.54, @tanstack/start-plugin-core 1.171.44, @tanstack/router-cli 1.167.36 (and the same with 1.168.49 / 1.171.39 / 1.167.33).
Expected behavior
Both generators produce the same file for a Start project. Either tsr generate reads the Start footer (for example by resolving it the same way the plugin does when @tanstack/react-start is present), or the scaffold does not ship a generate-routes script that undoes what its own build writes, and the Router CLI docs say it is not for Start projects.
Platform
- OS: macOS 27.0 (arm64)
- Bun 1.4.0, Node 24
- Vite 7
Additional context
The Router CLI installation docs already say to use the CLI "only if you are not using a supported bundler", which suggests the fix may be on the scaffold and docs side rather than teaching the CLI about Start. A related report about the Start plugin overriding router generator configuration is #7768.
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start with start-router-plugin/route-tree-footer.ts and the scaffold's router.tsx and generate-routes script; use the linked minimal reproducer to compare routeTree.gen.ts after build and tsr generate. Check the Router CLI installation guidance and related issue #7768 before choosing the affected package. Done means a Start scaffold no longer flips routeTree.gen.ts between the two commands, with the documented workflow remaining consistent.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- react, typescript, vite
- Domain
- build-system, developer-experience, tooling
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Active
- Clarity
- Clearly specified
- Newbie friendliness
- 58/100