You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: src/routes/blog/post/remix-3-whats-changing-and-why-it-matters/+page.markdoc
+10-10Lines changed: 10 additions & 10 deletions
Original file line number
Diff line number
Diff line change
@@ -15,7 +15,7 @@ But in May 2025, the team [announced Remix 3](https://remix.run/blog/wake-up-rem
15
15
16
16
It's a big step. The framework now runs directly on the Fetch API (using standard `Request` and `Response` objects), instead of Node's proprietary `req` and `res` system. This means it can run on any JavaScript runtime; Node, Deno, or Bun, without adapters. It still supports the same patterns developers liked in Remix 2, but without depending on React's lifecycle or its virtual DOM. The team calls this a move toward being "closer to the web itself."
17
17
18
-
### Why the Remix team chose to rebuild in version 3
18
+
# Why the Remix team chose to rebuild in version 3
19
19
20
20
When Remix started, React was the natural foundation. Its component model, rendering flow, and community gave Remix an instant head start. But over time, that foundation began to limit what the team could do.
21
21
@@ -25,7 +25,7 @@ Remix 2, meanwhile, had thinned out. Most of its core logic had moved into React
25
25
26
26
This rebuild also reflects a return to the web's own strengths. Browsers already know how to handle navigation, forms, and requests. The Fetch API, URL, Request, and Response objects are now available on both the server and client. Remix 3 builds directly on these features instead of wrapping them in extra abstractions. The goal is to make web development less about "framework rules" and more about the platform that's already there.
27
27
28
-
### The six principles guiding Remix 3
28
+
# The six principles guiding Remix 3
29
29
30
30
The team described six principles that define Remix 3's direction:
31
31
@@ -38,7 +38,7 @@ The team described six principles that define Remix 3's direction:
38
38
39
39
Together, these principles explain why Remix 3 looks so different. The team wants a system that's modular and flexible internally, but simple and predictable on the surface.
40
40
41
-
### A new architecture built on web standards
41
+
# A new architecture built on web standards
42
42
43
43
Remix 3's architecture centers on the Fetch API. Every incoming request, whether from a browser, a test, or an edge worker, is a standard `Request` object. Every response the framework sends is a `Response` object.
44
44
@@ -55,7 +55,7 @@ export const routes = route({
55
55
56
56
From there, Remix can infer types and generate helpers like `routes.books.show.href({ slug: "gatsby" })`. This keeps links type-safe and prevents mistakes. It also lets the router generate correct URLs for any environment.
57
57
58
-
### The new rendering model
58
+
# The new rendering model
59
59
60
60
The biggest change is that Remix 3 no longer uses React. You still write JSX, but it's handled by a custom component model built specifically for Remix. There's no virtual DOM. When something changes, you update state directly and call `this.update()` to refresh that part of the UI. Events use the browser's native event system instead of React's synthetic one.
61
61
@@ -65,7 +65,7 @@ To handle partial updates, Remix 3 introduces a feature called Frames. A Frame i
65
65
66
66
For example, a comments section could live inside a Frame. When a user submits a new comment, the server renders updated HTML for that frame and sends it down. The rest of the page stays untouched. It feels like client-side interactivity, but it's still server-driven and progressively enhanced.
67
67
68
-
### Data loading and actions
68
+
# Data loading and actions
69
69
70
70
The loader and action pattern that defined Remix 2 is still here. Each route can export handlers for different HTTP methods. A `GET` handler fetches data to render; a `POST` (or `PUT`, `DELETE`) handler performs a mutation.
71
71
@@ -94,23 +94,23 @@ This is a key advantage: Remix runs JavaScript on the server but leverages exist
94
94
95
95
This pattern keeps the app predictable. Data always comes from one place, the loader for that route, and every action leads to a clear revalidation path. No client-side fetching hooks or state libraries are needed.
96
96
97
-
### Error handling
97
+
# Error handling
98
98
99
99
Error handling in Remix 3 continues the route-based model from Remix 2. Each route can define its own error boundary so that failures stay local. If a child route fails to load or render, only that section shows an error message, while the rest of the page remains intact.
100
100
101
101
When a loader throws a `Response` with an error status, Remix automatically triggers the matching error boundary. For example, if a loader throws `new Response("Not found", { status: 404 })`, Remix will show the Not Found UI for that route but keep parent layouts mounted.
102
102
103
103
This approach prevents a single broken component from blanking the entire page (a common problem in many SPAs) and helps developers handle network or data errors cleanly.
104
104
105
-
### TypeScript and developer experience
105
+
# TypeScript and developer experience
106
106
107
107
Remix 3 is written in TypeScript from the start, so every route, loader, and action is strongly typed. Route parameters and return types are inferred automatically. For example, if `routes.books.show` has a `:slug` parameter, TypeScript will know that `params.slug` is a string inside its handlers. You can pair this with schema validation libraries like [Zod](https://zod.dev/) to validate form data and API inputs at runtime.
108
108
109
109
Because Remix avoids code generation, you don't need a separate typegen step. The framework infers everything from the code you already write. The same runtime-first philosophy also means you can run your app directly in `ts-node` during development, without waiting for a full build.
110
110
111
111
The development workflow is simpler, too. The [preview demos](https://remix.run/blog/remix-jam-2025-recap) show a single `remix dev` command that starts a local server, watches files, and reloads automatically, no webpack config or complex bundler setup required. While Remix 3 is still in preview, you can follow the [official blog](https://remix.run/blog) and [GitHub repository](https://github.com/remix-run/remix) for early access and updates.
112
112
113
-
### Deployment and environment support
113
+
# Deployment and environment support
114
114
115
115
Remix 3's platform independence is one of its biggest selling points. Since it's built on the Fetch API, the same app can run on Node, Deno, or Bun with almost no changes.
116
116
@@ -127,15 +127,15 @@ That pattern works in Node, [Appwrite Sites](https://appwrite.io/sites), Netlify
127
127
128
128
This also makes Remix 3 easier to scale. You can deploy it as serverless functions, edge workers, or a long-running Node process depending on your needs. The framework doesn't force a specific host or vendor. That independence is deliberate; the team wants Remix 3 apps to run anywhere, without lock-in.
129
129
130
-
### Trade-offs and what to expect
130
+
# Trade-offs and what to expect
131
131
132
132
Rebuilding a framework from scratch comes with trade-offs. Dropping React means losing direct access to its huge ecosystem. Libraries like Material UI or React Query won't plug in directly. Developers will either use plain web components, small JS libraries, or future Remix-specific packages.
133
133
134
134
There's also a learning curve. Without React's hooks or automatic rendering, you'll manage updates yourself. That's simpler in concept but different in habit. It's a shift from "declare and forget" to "update when needed."
135
135
136
136
Still, the potential benefits are clear: less complexity, less JavaScript on the client, and better performance out of the box. The approach brings Remix closer to the strengths of the web, fast first loads, resilient forms, and consistent server logic, while keeping the conveniences of a single framework.
137
137
138
-
### Looking ahead
138
+
# Looking ahead
139
139
140
140
Remix 3 is still in preview, but it's already one of the most interesting moves in web development right now. It reflects a broader shift in how developers think about the web: away from heavy client frameworks and back toward simplicity, standards, and server-driven logic.
0 commit comments