"Should my next project be TanStack Start or stay on Next.js?"
That question started showing up everywhere in indie hacker chats in late 2025. Here's the EasyStarter team's take after shipping production SaaS on both stacks.
TL;DR
- Next.js — biggest ecosystem, strongest hiring signal, batteries included on Vercel — but App Router + RSC is over-engineering for solo projects.
- TanStack Start — cleaner mental model (Vite + React Router style + type-safe loaders), deployment-agnostic, native Cloudflare Workers support — but younger ecosystem, fewer library integrations.
If you're an indie dev shipping global SaaS and you don't strictly need a Next-only library (Auth.js, Vercel AI SDK, …), default to TanStack Start.
1. SSR / SSG mental model
Next.js App Router
async server components + 'use client' boundaries + revalidatePath + dynamic = 'force-dynamic' + Suspense streaming. Powerful, but when you debug you keep asking yourself:
- Is this RSC or client component?
- Is this route SSG, ISR or dynamic?
- Is this segment running on the edge runtime or Node?
For mid/large teams this complexity earns its keep. For a solo project, it's "RSC for RSC's sake" tax.
TanStack Start
Every route is loader + component. Loader runs on the server, component hydrates on the client — no different from React Router with type-safe loaders bolted on.
export const Route = createFileRoute("/posts/$slug")({
loader: ({ params }) => fetchPost(params.slug),
component: PostPage,
});No RSC boundary headaches, no "where is this code actually running" confusion.
2. Deployment flexibility
| Target | Next.js | TanStack Start |
|---|---|---|
| Vercel | First-class | Supported |
| Cloudflare Workers | OpenNext, with caveats | First-class |
| Cloudflare Pages | Partial | Supported |
| Netlify | Supported | Supported |
| Docker / VPS | Supported | Supported |
Next.js off Vercel is a series of small papercuts: swap image optimization, work around middleware quirks, give up ISR on most non-Vercel platforms. TanStack Start uses Nitro for adapters and Cloudflare Workers is a first-class target — huge if you want $0/month infra.
3. Cloudflare Workers compatibility
Workers limits:
- 50ms CPU time (30s on paid)
- No native Node modules (unless
nodejs_compat) - No filesystem, no subprocesses
- 1MB compressed bundle limit
Next.js on Workers means slicing SSR output into edge runtime functions. Many Next ecosystem libraries (Sharp, bcrypt, puppeteer) simply don't work.
TanStack Start has no RSC layer and finer-grained route splitting — production bundles are typically 30-50% smaller than equivalent Next apps, leaving plenty of headroom under the 1MB cap.
4. Type safety
| Dimension | Next.js (App Router) | TanStack Start |
|---|---|---|
| Route params types | typedRoutes (experimental) | Strongly typed by default |
| Loader return types | Manual | Inferred by default |
| Search params | Manual parse + validate | Zod schema built in |
| Server functions | Server Actions (loose) | createServerFn + Zod |
TanStack Start is currently the most type-safe React fullstack framework — useLoaderData() infers, search params use Zod, createServerFn is end-to-end typed.
5. Ecosystem maturity (the honest weak spot)
Where TanStack Start is genuinely behind:
- Auth libraries: NextAuth/Auth.js is built around Next. TanStack Start users go with Better Auth or roll their own OAuth.
- shadcn/ui: works perfectly, no issues.
- Vercel AI SDK: works, but examples are all Next.js.
- Hiring market: Next.js is the default. TanStack Start hasn't been adopted broadly enough by companies yet.
- Tutorial count: 50× more Next.js tutorials online.
6. A concrete decision framework
Scenario A — content site (blog, SEO, marketing pages) → Next.js. ISR, image optimization and metadata API are most mature here.
Scenario B — SaaS app (dashboard, CRUD, subscriptions) → TanStack Start. Loader + Zod + Cloudflare Workers wins on type safety, $0/month infra and iteration speed.
Scenario C — hybrid (marketing + app) → Either works. TanStack Start's SSR is plenty for marketing pages, but you'll reimplement a few Next defaults (sitemap, robots, OG image generation). EasyStarter ships those baked in.
7. Why EasyStarter picked TanStack Start
The constraint we optimized EasyStarter for: "let indie devs run a SaaS on Cloudflare Workers at $0/month." Under that constraint:
- Next.js on Workers means tracking OpenNext compatibility on every Next major bump
- TanStack Start's first-class target is Nitro + Workers
- TanStack Start's stronger type system makes AI coding (Cursor, Claude Code) noticeably more reliable
The result: TanStack Start + Hono + Workers, end-to-end cold start under 50ms, $0/month at 10k MAU.
When Next.js is still the right pick
- You depend on Vercel ecosystem (AI SDK, Edge Config, KV)
- Your core flow needs RSC (complex data fan-out patterns)
- Your team hires primarily for Next.js experience
- Your project is an SEO-heavy content site (not a SaaS)
Closing thought
Framework differences are always secondary to "did you actually ship." Both stacks can produce profitable SaaS — the only difference is how much glue code you avoid and how reliable your AI editor's edits stay.
If you want to skip ahead and see a TanStack Start + Cloudflare Workers production setup, check out EasyStarter's web quickstart.
Keep reading
Cloudflare Workers vs Vercel vs Supabase: Cost & Latency for Global SaaS
An honest comparison of three popular hosting platforms — pricing, free tiers, cold-start latency, China access, database options and lock-in — with concrete monthly bills.
Why EasyStarter Has a Dedicated China Edition — Compared to the Cloudflare Version
Why a Cloudflare-based SaaS template isn't enough for mainland China users. The real, structural advantages of EasyStarter's China edition (Aliyun + ZPay) over the Cloudflare main branch — compliance, payments, latency, data residency.
Full-stack SaaS Templates Compared in 2026: EasyStarter vs ShipFast vs Makerkit vs Supastarter
An honest side-by-side comparison of four popular SaaS starter templates — stack, pricing, monthly cost, mobile coverage and globalization — so indie hackers can decide in 3 minutes.