Remix Newsletter #41
Welcome to the 41st edition of the Remix Newsletter! This month includes some quality and experimental updates to React Router, improved feature support for React Server Components in Framework Mode, and a quick rundown of Remix 3 alpha 4.
Let's hit it 🏎️!
React Router v7.13.2-v7.14.0
React Router v7.13.2-v7.14.0 brings Vite 8 support, a few unstable features to Framework Mode, more RSC Framework Mode feature support, on top of a number of bug fixes and quality-of-life improvements.
New Features
Vite 8 support: React Router v7.14.0 adds support for the new rolldown-powered Vite 8, which according to the Vite team delivers up to 10-30x faster builds while maintaining full plugin compatibility.
Pass-through requests: React Router v7.13.2 introduces future.unstable_passThroughRequests, which lets your loaders, actions, and middleware receive the raw incoming request.url instead of a normalized one. This reduces server-side overhead by eliminating multiple new Request() calls and lets you easily distinguish between document and data requests.
unstable_url for route handlers: Route handlers now receive an additional unstable_url parameter that normalizes the URL so you can still use the normalized URL for routing logic when opting into future.unstable_passThroughRequests.
Unstable Features
More RSC Framework Mode work: React Router v7.14.0 majorly improves unstable RSC Framework Mode with support for pre-rendering, SPA Mode, react-router reveal, <Link prefetch>, and new route module export conventions for server components.
If you're already experimenting with RSC Framework Mode, read the changelog carefully before upgrading. Some of those unstable changes are breaking for early adopters, so make sure to test thoroughly.
Bug Fixes & Improvements
- Added support for pre-rendering multiple server bundles with
v8_viteEnvironmentApi - Fixed a
turbo-streammemory leak caused by an unremovedAbortSignallistener - Removed recursion from the vendored
turbo-streamimplementation to support larger encoded payloads - Fixed
clientLoader.hydratewhen an ancestor route is also hydrating aclientLoader - Fixed percent encoding in relative path navigation
- Escaped redirect locations in pre-rendered redirect HTML
- Fixed a
react-router devcrash when Unix socket files exist in the project root - Fixed type error when passing Framework Mode route components using
Route.ComponentPropstocreateRoutesStub
Check out the full React Router changelog ↗
RSC Framework Mode Updates (unstable)
React Server Component support in Framework Mode has been greatly improved recently, with support for pre-rendering, SPA Mode, <Link prefetch>, and react-router reveal now available.
The biggest thing to watch out for is a change to route module exports. If you want one of the named component exports to be a server component, it now needs a Server-prefixed export. That makes the split between client and server counterparts explicit.
Previously ErrorBoundary, Layout, and HydrateFallback were implicitly server components if you exported a ServerComponent for your main route component.
If you are using unstable RSC Framework Mode, this is a breaking change, so be sure to check and update your route module exports before upgrading.
Read the "React Server Components" guide ↗
Pass-through Requests (unstable)
We've added a new unstable future flag to distinguish between document and data requests in your loaders, actions, and middleware: future.unstable_passThroughRequests.
Normally, React Router gives your loaders, actions, and middleware a normalized request.url, stripping out framework internals like .data suffixes and certain query params. That is usually what you want, but it also means you lose visibility into the raw incoming request.
With pass-through requests enabled, you get the original request.url and a separate unstable_url for the normalized version. This gives you a clean split between routing logic and lower-level request inspection, and may provide a small performance boost due to reduced new Request() calls on the critical path.
That small change opens the door to cleaner logging, instrumentation, and middleware logic, especially if you need to distinguish document and data requests without reconstructing the URL yourself.
Read the future.unstable_passThroughRequests docs ↗
Remix 3 Updates
remix@3.0.0-alpha.4 is another step toward our goal of Remix being a batteries-included, full-stack web framework. A lot is still changing quickly, but this release gives us a clearer view of where things are heading.
- Auth packages: Remix now comes with
remix/authandremix/auth-middlewarefor first-class authentication support. - More first-party middleware: Remix now re-exports browser-origin protection, CSRF protection, and CORS middleware via
remix/cop-middleware,remix/csrf-middleware, andremix/cors-middleware - Even more composition:
remix/componentis leaning into a mixin-first model where behaviors like events, refs, styling, input handling, and animations become composable building blocks you can layer onto elements and wrapper components instead of one-off props and ad hoc wiring viacreateMixinand themixprop. - Richer frame and client navigation: The component runtime now supports frame navigation via new
navigate(...)andlink(...)APIs, automatic navigation interception, targeted frame reloads, and better SSR support for nested frame rendering.
Read the remix@3.0.0-alpha.4 release notes ↗
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 enjoy getting this email, please let us know! We'd love to hear from you, what you like about Remix and these updates, and any suggestions you have to improve them.
- The Remix Team