Skip to content

React (ADR-0001) is a UI library, not a full-stack framework. We need routing, SSR/streaming, server functions, data loading, and build tooling as one coherent layer. This choice shapes the deploy target (ADR-0003) and everything after.

Full-stack React framework from the TanStack team, built on TanStack Router (type-safe routing) and Vite. Server functions, streaming SSR, deploy-anywhere adapters.

Pros

  • Type-safe end to end: routes, params, search, server functions — TypeScript flows through everything
  • Framework-agnostic deployment: Vercel, Cloudflare, Node/Docker — no lock-in
  • Vite-based: fast dev, standard build output
  • Server functions are simple typed RPC — no separate API layer needed for most apps
  • Aligns with the TanStack ecosystem (Query, Table, Form) we can adopt piecemeal later

Cons

  • Younger than Next.js; smaller community, fewer Stack Overflow answers
  • API surface moved fast before 1.0 (stable since 2026-10-13, APIs now committed)
  • Less hand-holding; you own more architecture decisions

The incumbent React meta-framework.

Pros

  • Biggest ecosystem and community; every problem has a tutorial
  • Vercel deployment is zero-friction
  • Server components and caching are powerful at scale

Cons

  • Vercel-shaped: self-hosting works but is a second-class citizen; conflicts with our Docker deploy target (ADR-0003)
  • Caching semantics are increasingly complex and surprising
  • App Router churn has been costly for teams

Data-loading-focused React framework, now merged into React Router v7.

Pros

  • Excellent data-loading model (loaders/actions)
  • Deploy-anywhere, standards-based (web fetch API)
  • Stable, boring, predictable

Cons

  • Weaker type-safety story than TanStack Start
  • Future direction folded into React Router; the “Remix” identity is fading
  • Smaller mindshare than Next.js

TanStack Start is the company-standard full-stack framework for all new React apps.

The deciding factors: end-to-end type safety, deploy-anywhere adapters (works with our Docker target, ADR-0003), Vite tooling, and typed server functions that eliminate a separate API layer for most apps. We accept the smaller community in exchange for the best TypeScript experience in the React ecosystem.

Easier: type-safe routing and data flow, deployment flexibility, incremental adoption of TanStack Query/Table/Form.

Harder: fewer copy-paste answers than Next.js; the team must be comfortable reading TanStack docs and source. Hiring screens should probe for TypeScript depth, not Next.js experience.

Given up: Next.js’s ecosystem gravity and Vercel zero-friction deploys. Accepted — deploy flexibility and type safety matter more to us.