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.
| 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.