What you'll learn
- Paths for auth SPAs, SEO sites, forms, content islands and multi-app monorepos
- Match an app shape to Vite, Next, Astro, Expo or Nx
- Build tools for 2026: Vite first, Biome or Oxlint
- When SPAs still win and when server HTML matters
There are many React stacks to choose from. Optionality is useful until it becomes decision paralysis. This hub helps you pick a shape first, then a tool.
Use the stack picker when you know the product. Use the shape matcher when you only know the constraints. Child pages go deeper: Next.js, React Native, alternate stacks.

How to choose
- Ask if HTML must exist without client JS. Public SEO and social previews usually say yes.
- Ask if the product is behind login. Dashboards often stay as SPAs.
- Do not fight the framework. If you disagree with its defaults, pick another stack.
- Prefer boring defaults. Vite for SPAs. Next.js for most React SSR apps. Astro for content-first sites.
Read the official note on starting a new React project (opens in a new tab).
Hot take
You are not losing cool points if your app is still a React SPA. If the product lives behind authentication, a SPA is often the honest choice.
Pick a framework stack

Try it: framework stack
Pick your product shape. You get an ordered stack, why it fits, and a first-week plan.
Goal
Your path
Vite SPA behind login is still a valid default
If almost everything sits behind authentication and SEO is not the product, a Vite React SPA avoids fighting a meta-framework.
- Vite
Default SPA toolchain in 2026.
- Start a new React project
Official guidance on when frameworks help.
- Bundle Size Optimization
Keep first-load JS honest for the dashboard shell.
- Hidden Side of Frontend Deployments
Hashed chunks and open-tab deploys still matter.
First week
Scaffold Vite + React + TypeScript. Add a router and one authenticated layout. Do not add SSR until a public page needs it.
Tip: do not fight the framework. If you disagree with its defaults, pick a different stack.
Checkpoint
An internal dashboard sits entirely behind login. SEO is not a goal. What is a valid default?
Pick an answer, or press A, B, C on your keyboard.
Match an app shape

Try it: match an app shape
Choose the shape you are building. The matcher points to a primary stack and an optional alternate.
Shape
The shape
Public pages need reliable HTML for crawlers and social previews.
Start here
Next.jsNext.js App Router is the common production default for React SSR and hybrid rendering.
Related: React rendering strategies
Tip: SPAs are not obsolete. They are the wrong default only when public HTML and SEO are the product.
Key takeaway
Do not fight the framework. If you disagree with its defaults, choose a different stack.
Vanilla React SPAs
A React SPA can still be the right call when:
- The app is lightweight and unlikely to need SSR
- The team will own routing, data fetching and deploy details
- Practically the entire product lives behind authentication
Introducing React into a legacy app is another good SPA reason: migrate slices first, then consider a meta-framework later.
Do not start new apps with Create React App. It is unmaintained. Use Vite (opens in a new tab) instead. Migration guide: CRA to Vite (opens in a new tab).

Build tools
Whatever the tool, its output is hashed bundles and chunks. How you deploy them matters for users who already have the app open. See The Hidden Side of Frontend Deployments.
Current recommendations
-
Vite (opens in a new tab)
Insight: Default recommendation for most React SPAs in 2026. Fast HMR and a mature plugin ecosystem. -
Rolldown (opens in a new tab)
Insight: Emerging Rust-powered bundling direction in the Vite ecosystem. -
Biome (opens in a new tab)
Insight: Fast all-in-one lint and format toolchain. -
Oxlint (opens in a new tab) + Oxfmt (opens in a new tab)
Insight: Split high-performance lint/format stack for large repos.
Other strong options
- Webpack (opens in a new tab) - battle-tested; usually slower local iteration than Vite
- Parcel (opens in a new tab) - convenient for smaller apps and packages
- esbuild (opens in a new tab) - excellent transform primitive inside broader toolchains
Quick guide: start with Vite unless you have a strong reason not to. Pick Biome or Oxlint/Oxfmt for lint/format. Evaluate Rolldown as build needs scale.
Web frameworks and SSR
SSR and hybrid rendering grew because public sites need reliable HTML, faster first paint on slow networks, meaningful HTTP status codes and simpler social meta tags. Details live in React Rendering Strategies.
Next.js
Next.js (App Router) is the common production default for React apps that need SSR, SSG or streaming. Deeper notes: Next.js.
React Router and the Remix lineage
Remix popularized progressive enhancement and web-standard forms. Much of that lineage continues in React Router's framework mode. Prefer those patterns when mutations and progressive enhancement matter more than Vercel-specific defaults.
Gatsby (niche)
Gatsby remains a content-site option, but it is no longer a default recommendation for new React apps. Prefer Astro for content-first sites or Next for app + content hybrids.
Comparison
The table below still compares Gatsby, Next and Remix-era columns for historical context. Treat Gatsby as niche and Remix as the progressive-enhancement lineage that now overlaps React Router.
React Native
For iOS, Android and related targets, start with Expo (opens in a new tab). More tips: React Native.
High-performance content sites
For blogs, docs and marketing pages with sparse interactivity, look at Astro (opens in a new tab) (React islands) before shipping a full SPA runtime on every route.
Monorepo / Nx
Multiple apps that share UI and types belong in a monorepo with real tooling. Read Nx Introduction & Architecture.
- Code sharing without constant publish cycles
- Consistent tooling across projects
- Atomic changes across shared libs and apps
- Build and test only what changed
Checkpoint
A docs site is mostly Markdown with two interactive widgets. What fits first?
Pick an answer, or press A, B, C on your keyboard.
The key habit
Choose the shape (public HTML vs behind login vs content vs multi-app) before collecting frameworks.
Frameworks checklist
- I know whether public HTML and SEO are requirements
- New SPAs use Vite, not CRA
- SSR choice matches a real need, not a trend
- Lint/format tooling is decided (Biome or Oxlint/Oxfmt)
- Multi-app sharing has a monorepo plan
- I am not fighting the framework defaults
Further reading
- Next.js
- Nx Introduction & Architecture
- Ecosystem
- Automated Testing
- Bundle Size Optimization
- React Rendering Strategies
- The Hidden Side of Frontend Deployments
Conclusion
Frameworks are multipliers for a product shape. Pick the shape, pick a boring default, and invest in the product instead of reinventing routing and data loading.
SPAs are not obsolete. Meta-frameworks are not mandatory. Honesty about SEO, auth and content beats collecting logos.
The key takeaway
Match the stack to the shape. Vite for many SPAs, Next for most React SSR, Astro for content, Expo for native, Nx when sharing spans apps.
Check your understanding
An internal dashboard is fully behind login. What is a valid default?
Pick an answer, or press A, B, C on your keyboard.
Recap
What to remember from this article
Sections read
0
Questions
0
none answered yet
Quiz
0
not taken yet
Up next: Next.js · 2 min
Continue