Remix
Open menu

Remix Newsletter #41

Remix Newsletter #41 hero image listing React Router v7.13.2-v7.14.0, RSC Framework Mode Updates, Pass-through Requests, and Remix 3 Updates

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-stream memory leak caused by an unremoved AbortSignal listener
  • Removed recursion from the vendored turbo-stream implementation to support larger encoded payloads
  • Fixed clientLoader.hydrate when an ancestor route is also hydrating a clientLoader
  • Fixed percent encoding in relative path navigation
  • Escaped redirect locations in pre-rendered redirect HTML
  • Fixed a react-router dev crash when Unix socket files exist in the project root
  • Fixed type error when passing Framework Mode route components using Route.ComponentProps to createRoutesStub

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.

Code example showing Server-prefixed route exports like ServerErrorBoundary, ServerLayout, and ServerHydrateFallback for unstable RSC Framework Mode

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.

Before-and-after loader example showing request.url for the raw URL and unstable_url for normalized routing logic with future.unstable_passThroughRequests

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/auth and remix/auth-middleware for 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, and remix/cors-middleware
  • Even more composition: remix/component is 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 via createMixin and the mix prop.
  • Richer frame and client navigation: The component runtime now supports frame navigation via new navigate(...) and link(...) 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!

Find a meetup near you ↗

Remix Meetups all around the world

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.

Starting a New Remix Meetup ↗

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