Remix Newsletter #42
Remix is back (in beta), React Router 8 is on the horizon, and we've updated our brand and the remix.run homepage (it's really cool, please go look at it and like it and validate our hard work).
Let's hit it 💿
Remix 3 Beta
In case you missed it, Remix 3 beta is out, and you can try it today:
npx remix@next new my-remix-app
This is still a pre-release and not production ready. We have a ton of improvements we already plan to make, as well as many that we'll learn about from people like you trying it out.
The beta gives you a much clearer look at the new remix package: routes, request handlers, middleware, sessions, auth, forms, uploads, assets, data, UI, tests, and more. Remix is designed to be a truly full-stack JavaScript-based web framework. Not middle-stack. Not "bring your own everything." One dependency, lots of useful parts.
We're already hearing good feedback from early adopters, especially folks pointing agents at it to ask questions about Remix and start building. We're living in a pretty incredible moment where we can release a beta without any official user guides (they're coming 😅) and people are still able to be productive with it.
Read the Remix 3 beta preview ↗
React Router v7.14.1-v7.15.0
React Router v7.14.1-v7.15.0 brings stabilization work ahead of React Router v8, route matching performance improvements, and a handful of bug fixes.
Stabilizing APIs
Stabilized APIs for v8: A bunch of APIs have dropped their unstable_ names in v7.15.0, including pass-through requests, instrumentation, URL masking, defaultShouldRevalidate, and useTransitions.
If you have already opted into these unstable APIs, be sure to update accordingly:
future.unstable_passThroughRequests→future.v8_passThroughRequestsunstable_url→urlin loaders, actions, middleware, and instrumentation argsunstable_mask→maskunstable_instrumentations→instrumentationsunstable_defaultShouldRevalidate→defaultShouldRevalidateunstable_useTransitions→useTransitionsfuture.unstable_subResourceIntegrity→ top-levelsubResourceIntegrity(it should not have been infuture)prerender.unstable_concurrency→prerender.concurrency
Route Matching Optimizations
React Router now precomputes and caches its flattened/ranked route branches, and reduces matchRoutes calls along the critical path. This improves both server and client-side route matching performance. In our benchmarks, these changes showed roughly a 15-30% improvement in server-side request handling performance.
Unstable Features
RSC Framework Mode Vite plugin update: If you are using unstable RSC Framework Mode, v7.14.2 includes a breaking requirement: unstable_reactRouterRSC Vite plugin consumers now need @vitejs/plugin-react in their Vite config.
Bug Fixes & Improvements
- Improved TypeScript support for
generatePath - Properly handled parent middleware redirects during
fetcher.load - Fixed typegen for layouts without pages
- Normalized double slashes in redirect paths
- Added TypeScript 6 support to peer dependency ranges
- Fixed
unstable_defaultShouldRevalidate={false}so parent routes withoutshouldRevalidateare not incorrectly included in single fetch calls for new child route data - Fixed a race condition around
HydrateFallbackduring initial loader resolution - Removed undocumented custom error serialization logic from the internal
turbo-streamimplementation - Added
nonceto<Scripts><link rel="modulepreload">elements when provided
Check out the full React Router changelog ↗
A Brand New Remix
Remix has a new look.
Tim, the Remix team's designer, explains it like this:
Building with the web rather than against it meant the shape of our work was more aerodynamic. Powerful single-purpose modules (or packages) seemed equivalent to precision parts. Since we've always valued the efficiency of lightweight and powerful architectural decisions, performance has always been a priority. The thematic analogy was clear. It was as if our engineering team was building all of the parts to create a new vehicle for building apps and websites. If we were a racing team, then Remix 3 was meant to be a race car, and every kind of builder would be the driver.
That was the lens for the new identity: preserve the Remix DNA, but give it a shape that matches where Remix 3 is going. The racing theme is not just decoration. It came from the way Remix 3 is being built: small, powerful pieces that fit together into something fast.
The website is part of the story too. It was built on Remix 3 alpha, without React, using plain TypeScript and Remix's native component model. Tim also built it the way more of us are building now: starting from goals and markdown, then working alongside an agent instead of designing every pixel in Figma first.
The big visual is a WebGL particle scene rendered with Three.js and custom shaders, lazy-loaded so the first paint stays light. It looks like something generated in the browser because that was the point. The site is not just announcing a new Remix brand, it is using Remix 3 to explore what this new era should feel like.
Remix Meetups
Remix Meetups are run voluntarily by members of the community all around the globe with in-person and online options. These meetups feature local speakers, hackathons, workshops, and more!
No meetups near you? Reply to this email if you are interested in starting your own meetup. We've even created some guides to help you get started.
If you try the Remix 3 beta or have thoughts on the new brand, hit reply and let us know. We'd love to hear what you think.
- The Remix Team