The 2,073 MB monorepo contains a router and a framework
TanStack Router makes the URL part of a TypeScript application's data model. Route paths, path parameters, search values, loader inputs, and links can share inferred types, while schemas validate search parameters arriving from outside the app. Nested layouts, route-level data, prefetching, cache invalidation, transitions, and error boundaries sit in the same layer. This is more than choosing which component renders for a pathname.
The repository also houses TanStack Start, which adds full-document server rendering, streaming, server functions, prerendering, and deployment builds. Our checkout contained 11,970 files and about 709,904 lines of source, then the workspace install occupied 2,073 MB. Buyers should separate two choices: adopting the published router in an existing app, and adopting Start as the application framework. The latter owns much more of the production path.
Typed search parameters justify the extra machinery
Search strings often become an untyped side channel for filters, pagination, OAuth state, and modal state. TanStack Router can parse them through a schema and carry the result through loaders, links, and navigation with compile-time checking. That is especially useful when several routes depend on the same structured search object and an invalid link would otherwise reach production.
The current repeated-key report shows the cost of owning serialization. Issue 8174 reproduces ?a=1&a=2 becoming one percent-encoded JSON array when the router rebuilds the location. The reporter traces the change to versions including @tanstack/react-router 1.170.32 and shows signed OAuth URLs failing because the original parameter sequence is lost. Applications using repeated query keys, signed callbacks, or third-party URLs should add round-trip fixtures before upgrading.
What happened when we ran it
Our sandbox installed 2,365 pnpm packages in 183 seconds and used 2,073 MB on disk. Building commit 9f8990b succeeded in 13 seconds. The unprivileged Node 22 container had 3 CPUs, 8 GB of RAM, and no secrets. The workspace had 8 CI workflow files, no root Dockerfile, and no tests directory.
The test command timed out at our 900-second limit. Vitest had reported 870 passed, 0 failed, and 1 skipped out of 871 tests. The last output showed module-resolution checks succeeding across Node and bundler modes, then Nx starting an ESLint target for router devtools. Nothing in the supplied tail shows a stuck test or failed assertion. The precise finding is that this large validation graph did not complete within 15 minutes on our stated machine.
Router edge cases can remove the whole application tree
The library's value depends on consistent behavior between routes, hooks, links, and boundaries. Open issue 8168 reports that a route-scoped useMatch call dropped the shouldThrow: false option even though the generic hook returned undefined as requested. That is narrow, but it affects shared shells that inspect a child route while another route is active.
Issue 8123 reports a more visible failure in version 1.170.31 and current main. A route component that throws undefined, null, or an empty string can bypass every supplied error component because the boundary tests the thrown value for truthiness. The entire React tree then unmounts. Most code throws an Error, but wrappers sometimes rethrow an unexpectedly empty value. Add a browser test proving the root error view survives both normal errors and malformed rethrows.
Start needs artifact checks beyond an exit code
TanStack Start uses the router as its base and adds server output, which creates a different failure class. Issue 8031 describes a Vite 8.2 and Nitro build that exited successfully but emitted an SSR module with an undeclared export. Every request then returned 500. The reporter found that an earlier Vite and Rolldown combination worked and added a post-build module check to CI.
Prerendering has a similar reported gap. Issue 8120 uses a 774-page site and shows a loader failure being logged, a promised retry never occurring, the page missing from output, and the build exiting 0. These are reports against specific package combinations, not proof that every Start build is broken. They do support two release checks: start the built server and request representative routes, then compare every expected static URL with the emitted files.
Current releases move several packages at once
The August 22, 2026 release published separate versions for Router, Start, plugins, clients, servers, and framework adapters. It included @tanstack/react-router 1.170.32 and @tanstack/router-core 1.171.27 rather than one repository-wide version. That package independence allows focused releases, while consumers must check which combinations their lockfile selected.
GitHub recorded a push on August 26, 2026, and listed 14,994 stars with 585 open issues and pull requests. Same-day issue updates show active investigation, and the latest release was four days earlier. TanStack Router is a credible choice for a TypeScript application with demanding URL state. The 13-second build is encouraging, but the 900-second incomplete validation run and Start reports make version pinning plus end-to-end route checks part of adoption.

