I've shipped production apps with both Next.js and Remix over the past two years. In 2026, both frameworks have matured significantly. Here's my honest breakdown.
Where They Stand in 2026
Next.js 15 — the React metaframework used by most of the internet. React Server Components, Partial Prerendering, Turbopack. Vercel's backing means first-class support for new React features.
Remix v3 (under Shopify, built on React Router v7) — doubled down on web fundamentals: progressive enhancement, nested routing, server data patterns. Leaner and more opinionated.
Rendering Architecture
Next.js gives you everything: SSG, SSR, ISR, RSC, PPR (experimental).
Remix is SSR-first. No static generation — everything goes through a server by design. Remix believes caching belongs at the CDN/HTTP layer, not the framework.
Routing
Next.js App Router:
app/
layout.tsx
dashboard/
layout.tsx
page.tsx
Remix nested routes:
routes/
_layout.tsx
_layout.dashboard.tsx
_layout.dashboard.settings.tsx
Remix's nested routing is its superpower. Multiple loaders run in parallel, layouts update independently, error boundaries are granular.
Data Loading
Next.js RSC:
export default async function Dashboard() {
const data = await db.query('SELECT * FROM users');
return <UserList users={data} />;
}
Remix loader:
export async function loader({ request }: LoaderArgs) {
const data = await db.query('SELECT * FROM users');
return json(data);
}
export default function Dashboard() {
const data = useLoaderData<typeof loader>();
return <UserList users={data} />;
}
Remix's loader/action model is explicit. Next.js RSC is powerful but the "use client" mental model is steeper.
Forms & Mutations — Remix Wins Here
export async function action({ request }: ActionArgs) {
const form = await request.formData();
await db.create({ name: form.get('name') });
return redirect('/dashboard');
}
This works without JavaScript — progressive enhancement by default. Next.js Server Actions are catching up, but Remix was here first.
Performance
| Metric | Next.js 15 | Remix v3 |
|---|---|---|
| Cached response | ~80ms | ~90ms |
| Cold start | ~180ms | ~150ms |
| Nested route transition | Full reload | Partial update |
| Base bundle | ~95KB | ~72KB |
Ecosystem
Next.js: shadcn/ui, NextAuth, next-i18next — massive ecosystem. Vercel deep integration.
Remix: Deploys anywhere (Node, Deno, Cloudflare Workers, Bun). Smaller but high signal-to-noise community.
My Decision Framework
Reach for Next.js when:
- Team has existing Next.js knowledge
- SEO-heavy content site with ISR
- Need the large component ecosystem
Reach for Remix when:
- Data-heavy app with complex mutations
- Progressive enhancement matters
- Deploying to Cloudflare Workers / edge
- Want a smaller, more predictable codebase
Honest Verdict
New project with a team: Next.js. The ecosystem and community are too large to ignore.
Solo project where I control all decisions: Remix. Nested routing, loader/action model, and progressive enhancement make for a cleaner codebase.
Neither is the wrong choice in 2026.
Full comparison: dev.Jake blog
Top comments (0)