Remix

Remix is a React framework that leans into web fundamentals — forms, HTTP caching, and server rendering — rather than working around them. Routes load their own data on the server (loaders) and handle mutations on the server (actions), and the UI works even before client JavaScript loads.

Remix's ideas have converged into React Router v7, which absorbs its loader/action and nested-routing model. The patterns below remain the right mental model whether you reach them via Remix or React Router 7.

TL;DR

Quick Example

A route co-locates server data loading and a server mutation with its UI:

Core Concepts

Best Practices

Comparison: Remix vs Next.js

See Next.js.

Common Mistakes

Assuming browser APIs during SSR

Overusing client state when loader data suffices

FAQ

Remix or Next.js?

Both are excellent. Remix favors web fundamentals — forms, HTTP caching, progressive enhancement — and nested routing. Next.js favors Server Components and an integrated caching model with strong Vercel support. Remix's model now lives on in React Router v7.

What are loaders and actions?

A loader is a route's server-side data fetcher that runs before render; an action is a route's server-side mutation handler, usually triggered by a form submission. Together they keep data logic on the server, next to the route.

What's happening with Remix and React Router 7?

Remix's loader/action and nested-routing capabilities have been merged into React Router v7, so new work increasingly happens there. The concepts are identical — you're learning the same model either way.

What is progressive enhancement here?

Remix renders real HTML forms that submit to server actions, so core functionality works before (or without) client JavaScript. Client JS then enhances the experience with things like pending states and optimistic UI.

Related Topics

References