Skip to content

Choosing a Framework: Next.js, Remix, or React Router?

Picking tools for a new project often feels like being caught in the hype cycles of Twitter/X.

2 min read
Next.js
Remix
React Router
Frameworks
SPA
SSR

Picking tools for a new project often feels like being caught in the hype cycles of Twitter/X. But every choice has its trade-offs.

If Astro is great for static content, building complex product apps—the ones with auth flows, nested layouts, and critical data mutations—requires a framework that treats routing and data management as its foundation.

The "Next.js vs. Remix" debate shouldn't be about which logo is cooler. It’s better to look at it through three lenses: the navigation model, how data is handled, and the deploy surface.

First, navigation. Next.js with its App Router is powerful and very opinionated through Server Components. But if you want navigation that feels closer to how the web actually works (URL $\to$ loader $\to$ UI), Remix and React Router feel more natural because they keep the data flow synced with HTTP protocols. For teams used to standard fetch and cache patterns, these will feel much more familiar.

Second, data mutation. In the Remix or React Router ecosystem, the pattern is explicit: you have a loader to fetch data and an action to change it. This approach is great for progressive enhancement, meaning the app can still function even if the client-side JavaScript hasn't kicked in yet.

Next.js, on the other hand, splits this up into Server Components, route handlers, and server actions. While it’s incredibly powerful, it also expands the surface area for mistakes. You might accidentally find yourself fetching data on the client when it really should have been handled on the server.

When you're deciding, try using these parameters: 1. Does your product require data mutation to work even without JavaScript? If yes, go with Remix. 2. Do you want React Server Components (RSC) to be your primary way of building components? If yes, Next.js is the answer. 3. Do you already have a Vite-based SPA and just need framework features without a total rewrite? Then the framework path in React Router is your safest bet.

Finally, consider where the app will actually live. If your team is already comfortable with the Vercel ecosystem, Next.js will be seamless. But if you’re restricted to Cloudflare or your own Node.js servers, the flexibility of the adapters in Remix or React Router will be a lifesaver.

Ultimately, there isn't one right answer. The best choice just depends on how much "cost" you're willing to accept from each framework.