Next.js vs Remix
One has the ecosystem, the marketing, and Vercel’s engineering team. The other has the cleaner mental model and a more honest relationship with the web platform. After shipping both, here’s my actual take.
In 2026 I default to Next.js for client projects, but I’m not pretending it’s the better-designed framework. App Router with Server Components is now genuinely good — caching weirdness aside — and the ecosystem advantage is enormous. Remix (now React Router 7) has the cleaner ideas about loaders, actions and progressive enhancement, but the merger with React Router has muddied the message and it’s lost a year of mindshare. Pick Next.js unless you have a specific reason not to.
You want the largest ecosystem, the most hires available, ISR and image optimisation, and a framework that won't change owners next year.
You value the loader/action mental model, you ship lots of forms and mutations, you care about progressive enhancement, or you're embedded in Shopify.
Side-by-side, line by line
For clarity: "Remix" here means React Router 7 in framework mode, which is what Remix officially became in late 2024. It’s the same team, same ideas, slightly different name.
| Feature | Next.js | Remix |
|---|---|---|
| Routing model | App Router (file-based, RSC-aware) + legacy Pages Router. | EdgeNested file routes with stable, simple semantics. |
| Data loading | Server Components + fetch() with cache tags. Powerful, occasionally confusing. | EdgeLoaders. Plain async functions, return data, done. |
| Mutations | Server Actions. Improving fast, still slightly magical. | EdgeActions + <Form>. Native HTML form semantics. Genuinely elegant. |
| Caching | Four cache layers — fetch, full route, router, request memoization. Powerful but you must learn them. | EdgeNo framework cache by default. You handle it. |
| Streaming / Suspense | EdgeFirst-class. RSC streams components from the server. | Defer + Await. Works well, less ergonomic than RSC. |
| Image optimisation | Edgenext/image — best in class. | No built-in. Roll your own or use a CDN. |
| Ecosystem | EdgeEnormous. Almost every UI lib has a Next.js example. | Smaller. Examples often missing. |
| Build / dev speed | Turbopack now stable. Big apps can still chug. | EdgeVite-based. Fast and predictable. |
| Hosting flexibility | Vercel optimal. Self-host works but lose ISR niceties. | EdgeAdapters for Node, Cloudflare, Vercel, Deno, etc. True portability. |
| Hiring & onboarding | EdgeLargest pool of devs. Most candidates know it. | Smaller pool. Senior devs love it; juniors will need to learn. |
| Stability of API | App Router has changed several times in 2 years. | EdgeLoader / action API has been remarkably stable since 2021. |
| Ownership / direction | Vercel. Aligned with Vercel’s commercial interests. | EdgeShopify (Remix team) + community. Steadier hand. |
Next.js
- The default. Every library, every tutorial, every senior dev knows it.
- Server Components are now genuinely useful for data-heavy pages.
- next/image, next/font and ISR are real superpowers.
- On Vercel, deployment is unbeatable.
- Active development. Bugs get fixed quickly.
- Caching model is genuinely hard. Many seniors get it wrong.
- App Router has had real footguns since launch.
- Self-hosting works but you lose ISR DX, image opt economics, etc.
- Coupled to Vercel’s commercial direction. Pricing changes affect everyone.
Remix
- Loader / action model is the cleanest data story in React.
- <Form> with progressive enhancement — the framework respects the platform.
- Vite-based dev experience is fast and predictable.
- Adapters for every major host. You're not married to Vercel or Cloudflare.
- Stable API. Code from 2022 still runs.
- Smaller ecosystem. You'll write more glue code.
- No built-in image optimisation, ISR, or analytics.
- The merger with React Router 7 confused the messaging for nearly a year.
- Hiring is harder — fewer "Remix devs" on the market.
Next.js
- You're building a SaaS, marketing site or content-heavy app and want defaults.
- You need ISR, on-demand revalidation or world-class image handling.
- You're hiring or onboarding mid-level devs who already know it.
- You're happy hosting on Vercel and want the smoothest path.
- You're building anything ecommerce-shaped that benefits from server-rendered product pages.
- You want the broadest ecosystem of plugins, examples and Stack Overflow answers.
Remix
- You're building a heavily form-driven app (CRUD, dashboards, internal tools).
- Progressive enhancement and "works without JS" actually matters.
- You want to host on Cloudflare, Deno or your own Node — and not feel second-class.
- Your team values clean mental models over framework features.
- You're building on Shopify (Hydrogen, app extensions).
- You're willing to write a bit more glue code in exchange for clarity.
What I ship in production
Every paying client project I run today is on Next.js App Router. Not because I think it’s the better-designed framework — Remix’s loader/action model is the clearest data story React has ever had — but because the gravitational pull of "the default" is real. Senior devs I bring onto projects already know it. Component libraries assume it. The hosting story on Vercel, while expensive at scale, is unbeatable for the first year of a product’s life.
The thing that finally tipped me back to Next.js around the App Router 14.x days was that Server Components stopped being a research project and started being a tool. Co-locating data fetching with the component that uses it, streaming the page in chunks, and shipping zero JavaScript for static-ish parts of the page — all of that is now real and reliable. The caching model is still the worst part, but it’s now teachable rather than mystifying.
That said, if I were starting a "form-shaped" product — an admin dashboard, a CRM, a serious internal tool — I’d genuinely consider React Router 7 in framework mode. The action / form pairing is a better fit for that kind of UI than Server Actions, and the absence of the four-layer cache is a feature, not a missing one. Remix never lost the war on merit. It lost it on marketing.
The honest conclusion
Next.js is the safe pick and the right pick for most teams. Remix is the thoughtful pick that costs you ecosystem reach. Neither will ruin your project. Pick Next.js by default; pick Remix if you have a specific reason and you can defend it to the next engineer who joins the team.
Still not sure which to pick?
I make these calls every week on real projects. If you want a straight answer for your stack — not a list of trade-offs — get in touch.