All comparisons
Frameworks · 10 min read

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.

TL;DR — My 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.

Pick Next.js if

You want the largest ecosystem, the most hires available, ISR and image optimisation, and a framework that won't change owners next year.

Pick Remix / React Router 7 if

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.

The full breakdown

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.

FeatureNext.jsRemix
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 good
  • 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.
The painful bits
  • 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

The good
  • 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.
The painful bits
  • 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.
When to choose

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.
When to choose

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

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.

Bottom line

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.