A Side-by-Side Comparison

The fifth option has had no section of its own. TanStack Start 79,069 builds on TanStack Router 79,069 and Vite 25,978 : typed file-based routes, full-document SSR with streaming, and createServerFn, which turns a function into a type-checked RPC that runs on the server and is called like a local one. Its own documentation calls it a release candidate — "feature-complete and its API is considered stable", but not 1.0 — despite npm 2,036 version numbers in the 1.168 range inherited from the router. That status decides it: choose Start if you already run TanStack Query 79,069 and Router and want the same type safety end to end, and not if a signed-off dependency policy is involved.

Each starter below is what that project's own scaffolding tool produces, installed from a warm npm cache and built from a clean output directory on one machine — an 18-core Intel Core i9-7980XE, 128 GB RAM, NVMe SSD, Windows 11, Node.js 25.8.0 2,131 , npm 11.11.0. Client JS is every .js file emitted for the browser, gzipped. Indicative, not a benchmark.

The five options compared, all MIT licensed, measured in September 2026
Option Rendering model Best for Install, build Client JS Main cost
React 7,897 + Vite Client only Tools behind a login 84 MB, 2.6 s 69 kB You build the conventions
React Router 8 139,386 SSR, SSG or SPA, hydrated SSR without Server Components 105 MB, 2.6 s 114 kB Smaller integration ecosystem
Astro 7 17,728 HTML first, islands hydrate Docs, marketing, content 137 MB, 3.3 s 0 kB Islands cannot share state
TanStack Start SSR, streaming, server functions Type-safe full-stack apps 151 MB, 3.9 s 113 kB Pre-1.0 status
Next.js 16 10,514 Server Components, dynamic by default Large mixed static and dynamic apps 343 MB, 11.4 s 181 kB Most concepts to learn

Three caveats. The starters are not the same application: the React Router and TanStack templates include Tailwind 5,202 , TanStack's also ships devtools, and the Astro minimal template has no UI framework at all. The Next.js figure counts every chunk in .next/static, the whole route graph rather than one page's payload. And a four-times difference in install size is invisible to users; it shows up in CI minutes, image sizes and cold starts.

What the table shows is the direction of every trade: each row down buys capability and spends bytes, build time and disk. Next.js is heaviest because it does the most.