Speedy Router trades compatibility breadth for a faster hot path
Speedy Router keeps the TanStack Router vocabulary: createRouter, Link, Outlet, loaders, typed parameters, nested routes, and generated route trees. The implementation is new rather than forked. Existing applications can alias TanStack package names to four Speedy packages, including the Vite plugin, which lowers the cost of a trial. It does not make the two projects interchangeable without testing.
The README sets hard floors at React 19.2 and Node 24. It also says the workspace runs first-party tests plus copied TanStack history, type, core, load, preload, SSR, and React-runtime cases. That list is substantial, but the authors explicitly exclude TanStack's full monorepo, end-to-end coverage, and TypeScript-version matrix. Teams with unusual blockers, masks, search middleware, or SSR adapters need their own parity suite.
Our 9-second build makes an application trial cheap
We cloned commit 99fc68a into a fresh unprivileged Debian container with 3 CPUs and 8 GB of RAM. Pnpm installed 193 packages in 11 seconds and used 214 MB on disk. The build succeeded in 9 seconds, and the available tests succeeded in 29 seconds. The 3.8 MB checkout contained 460 files and roughly 116,506 source lines.
Our image used Node 22 even though the package documentation requires Node 24. Install, build, and tests still completed, which is useful evidence about the measured commands but not a support promise. Production should follow the declared engine until maintainers say otherwise. The monorepo has 3 CI workflows and a tests directory, with no Dockerfile because this is a package family rather than a standalone service.
What happened when we ran it
Our sandbox completed all three measured steps in 49 seconds combined. Installation succeeded, compilation succeeded, and the test command returned success. The supplied measurement does not include a parsed test count, browser test result, benchmark run, audit result, or bundle measurement. We therefore cannot use it to confirm the README's performance table or compatibility beyond the commands that passed.
That distinction matters because a router can compile while changing navigation semantics. Before an alias switch, run the same application tests against TanStack and Speedy Router. Cover direct loads, back and forward navigation, blocked transitions, stale loaders, search serialization, relative links, hydration, streaming, error boundaries, and route generation. Our 29-second test result is a good invitation to evaluate, not a substitute for that application work.
The published benchmark is reproducible but still a microbenchmark
The README reports same-machine Node loops and provides pnpm bench:compare. Its headline compares Speedy Router with published TanStack packages under matching loader-call counts and default staleTime: 0. It also spells out what is absent: no browser, React render, HTTP server, HTML, lazy component, or loader I/O. That disclosure makes the numbers more useful because readers can see the boundary.
It also shows a tradeoff. The README's size table says Speedy Router's initial React and core graphs are larger after gzip than TanStack's comparison graphs. Some coordinator and SSR code arrives through dynamic imports, and optional features can tree-shake away, but the baseline is not a bundle-size win. Profile the application metric you care about. Faster in-memory matching is valuable only when routing owns enough of the request or interaction budget.
Open PR 156 describes real navigation regressions
The only open item returned by GitHub was pull request 156. Its description says an earlier default-graph change slowed typed navigation and caused relative links to leave $postId in URLs. It also reports StrictMode transition wrapping and blocker behavior problems. The proposed fix restores fast paths while accepting a large-route-tree matching regression. That is precisely the kind of performance versus behavior exchange a router maintainer must handle carefully.
The pull request was still open when fetched, so its fixes are not part of the reviewed default branch merely because the discussion is detailed. Applications using relative destinations, parameters, React StrictMode, or navigation blockers should create regression cases before adoption. A library can pass its selected upstream tests while missing a combination exercised by a real route graph. Here, the open work supplies a useful checklist.
Streaming SSR makes the crawler policy your responsibility
Speedy Router flushes every SSR stream at React's shell-ready event by default and does not inspect the user agent. TanStack can wait for complete output for crawlers. Speedy Router instead asks callers to pass isBot: true or a predicate when they want buffered HTML. That removes user-agent parsing from every request, but the application must correctly identify whichever crawlers require complete output.
This is neither universally better nor automatically safe. Shell streaming can improve first-byte behavior, while incomplete initial HTML can affect crawlers, link unfurlers, or systems that do not execute the rest of the stream as expected. Test the actual HTML received by search bots and social preview clients. The route library has intentionally moved that policy decision into your server adapter.
v0.1.25 is suitable for a measured canary
Release v0.1.25 was published on August 21, 2026, the same date as the last repository push. GitHub showed 151 stars and 1 open issue or pull request, which was pull request 156. The release changed default-graph modules to reduce unused client code. Frequent performance-oriented releases are encouraging for experimenters, though a v0.1 series should be pinned and tested before every upgrade.
Speedy Router has done more homework than most replacement routers: its limitations are written down, benchmarks are runnable, and our install, build, and tests all passed. The narrow platform target and open navigation regressions keep TanStack Router as our default recommendation. Put Speedy behind a canary or an alias branch, measure real navigation and SSR, and keep rollback to the upstream packages boring.

