Remix Newsletter #45
Remix Jam (Oct 2) is coming up and there's only one week left of Early Bird pricing. Plus, we've got a big Remix 3 beta, some nice React Router updates, and a few useful Remix 3 resources from the community.
Let's hit it 🏎️
Last Call for Remix Jam Early Bird Tickets
Remix Jam is less than 60 days away! Our early bird ticket price of $299 goes up on August 24, so if you've been thinking about getting a ticket, now's the time!
Last year was a ton of fun, and we were just getting started with Remix 3. We showed some very early demos and have continued to refine, build, discard, rebuild, and remix this ambitious project ever since. We're incredibly proud of what we've created.
At Remix Jam this year, we want to show you why we think Remix is the best full-stack JavaScript framework out there. In case you haven't been following along, Remix 3 is huge: 40+ packages covering database management, authentication, type-safe fetch-based routing, an unbundled approach to serving assets, and a fresh component model built on JSX without the complexity of hooks. We seriously think it's awesome. It's a great foundation for building websites with (or even without) agents, and we can't wait to celebrate it and show it off to you all.
Get your Remix Jam ticket before prices go up ↗
Remix 3 Beta Updates
remix@3.0.0-beta.10 is here! Due to some npm shenanigans (we don't want to talk about it), beta 10 supersedes beta 6 through beta 9 and consolidates their changes into one supported prerelease. If you're using any of those betas, beta 10 is the one to move to. It's a big update, with full-stack HMR, database workflows, progressive form navigation, one shared CLI config, and plenty of runtime polish.
Full-Stack HMR
With beta 10, Remix 3 gets full-stack hot module replacement. New apps come with an npm run hmr command and a ready-to-go hmr.ts runner. Server changes reload automatically, while compatible Remix UI components and CSS update in the browser without losing UI state. If an update can't be safely accepted, Remix falls back to restarting or reloading.
The new workflow ties remix/node-hmr, remix/ui-hmr, and remix/assets together through the standard import.meta.hot API. Less stop-and-start, more staying in the flow.
Database Workflows
You can now configure a built-in SQLite, PostgreSQL, or MySQL database, migrations, and an optional SQL seed file in remix.json. The new remix db commands let you check migration status, migrate, seed, wipe, and reset your database without maintaining a separate script for each task.
Remix also checks migrations before running them. If it finds an applied migration that is missing from your current migration set, it stops before executing any SQL. Destructive commands such as remix db wipe and remix db reset require --force.
CLI Configuration
The optional remix.json file is now one shared JSONC home for remix db, remix test, and remix doctor settings. Relative paths and globs resolve from the config file, command-line options take precedence, and remix --config <path> lets you choose a different file.
The standalone remix-test executable is gone. Tests now run through the main CLI with remix test, and their settings live under the test property in remix.json instead of a separate config file. You also get --only for focusing tests by name and --quiet for hiding skipped tests. remix doctor strict mode can now fail CI on warnings.
Frame-Based Forms
Same-origin forms now progressively enhance into Frame navigations. Native validation still runs first. Forms target the top frame by default, rmx-target selects a named frame, and rmx-document opts back into a full document navigation. The new rmx-history="push|replace" attribute gives links and forms explicit control over history behavior.
run() now fetches frame HTML by default, so most apps no longer need a custom resolveFrame for same-origin links and forms. You can still provide one when you need more control over requests or responses. Resolvers can also return a Response and handle redirects without an extra request.
The new rmx-preserve-dom attribute tells the DOM reconciler to leave an element's current attributes and children alone during reloads. This is useful for client-owned subtrees such as custom elements that manage their own DOM.
UI and Runtime Improvements
The asset server can now provide module preload hrefs through resolveClientEntry(), squashing the network waterfalls we were seeing in client-entry module graphs. Built-in styled components also adapt to light and dark color schemes.
We also fixed several cases where Frame navigation or reloads could stall or lose client-created content, safely escaped server-rendered CSS, and updated Node request handlers to receive native Request instances for better compatibility with standard web APIs.
If you're upgrading from beta 5, expect breaking changes to canonical import paths, asset server options, custom cookie codecs, session cookie defaults, route patterns, href generation, the browser resolveFrame signature, and test configuration. Remix 3 is still pre-release software, so please review the full release notes before upgrading.
Read the Remix 3 beta 10 release notes ↗
React Router v8.1.0-v8.3.0
The latest React Router updates bring better observability, simpler Web Streams support, continued work on unstable RSC Framework Mode, and a handful of routing fixes.
New Features
Better observability metadata: Instrumentation results for server requests, client navigations, and client fetchers now include the URL, matched route pattern, and params. Server handler results also include the outgoing status code, making it easier to aggregate traces by route and monitor response outcomes.
Web Streams by default: Non-Node Framework Mode apps now use renderToReadableStream in the default server entry. If Web Streams are the only reason your app has a custom entry.server.tsx, you may be able to remove it. Apps using @react-router/node, @react-router/express, or @react-router/serve continue to use renderToPipeableStream by default.
Since Web Streams are stable in Node 22+, Node apps can opt in with future.unstable_enableNodeReadableStream. The flag only applies to the default server entry; custom entries can use renderToReadableStream directly. This may also provide a small performance boost by avoiding conversions between Node and Web Streams, which React Router already uses internally.
Unstable Features
RSC Framework Mode improvements: Apps using the default RSC Framework entries do not need to make any changes. The entry updates are for apps that maintain custom RSC entries.
Custom entry.rsc.tsx files can now pass a generated client version to unstable_matchRSCServerRequest, allowing React Router to detect stale clients during lazy route discovery and reload the destination document. Custom entry.ssr.tsx files can also wire up CSP nonces during document rendering and pass subresource integrity data through the generated import map.
React Router now preserves RSC route metadata so routes with a clientLoader can skip unnecessary server requests after their components render. This release also hardens RSC CSRF checks and abort handling. RSC Framework Mode remains unstable and is not recommended for production use.
Bug Fixes & Improvements
- Improved parameter encoding in
href()andgeneratePath() - Fixed matching for routes with optional static segments
- Fixed ranking for dynamic route params with static extension suffixes
- Fixed
NavLinkpending state whentohas a trailing slash - Preserved navigation blocker state through revalidation
- Added TypeScript 7 support across React Router's adapter and development packages
Check out the full React Router changelog ↗
Remix in the Wild
As we near the official release of Remix 3, we're seeing more projects, third-party packages, and resources from the community pop up. Here are three cool projects we hope you'll find useful.
Pitlane (Platform Integration Tools)
Pitlane is a portable platform integration for Remix 3. Its remix() Vite plugin handles server and client builds, development, previews, assets, and clientEntry() hydration, while letting you deploy the same app to Cloudflare, Netlify, Vercel, Node, Bun, or Deno.
Pitlane is still young, and @pitlane/dev@0.1.0 was tested against Remix 3 beta 5. Since beta 10 includes breaking changes, check compatibility before upgrading. We still love our unbundled approach to serving assets, but if you need a bundler like Vite to deploy to a platform like Cloudflare, give Pitlane a try.
Explore Pitlane and its deployment guides ↗
Learning Remix 3 (Blog Post)
Community member (and Pitlane creator) Mark Malstrom wrote a detailed blog post, Learning Remix 3. Mark builds a realistic issue tracker while exploring frames, server-first components, selective hydration, loading boundaries, mutations, optimistic UI, cross-frame events, and pending states. Whether you follow along and build the example yourself or just peruse the finished project, this is a great deep dive into Remix 3.
Note that the guide and its companion app still use Remix 3 beta 5. A few of those APIs changed in beta 10, so keep the latest release notes handy as you follow along.
Sergio's Remix 3 Monorepo (Real-World Use Cases)
If you've followed the Remix story, you're probably familiar with Sergio Xalambrí and his invaluable contributions to the Remix ecosystem. Sergio is back at it again with an open-source monorepo that shows Remix 3 powering real applications for authentication, blogging, monitoring, and more. It also contains well-documented implementations for Cloudflare D1 and Durable Object SQL storage, server-first internationalization, Markdown rendering, Workers KV sessions, Lucide icons, Tailwind-inspired styling utilities, and a large Remix UI component library.
These are private workspace packages, not packages you can install directly from npm. The repo currently uses Remix 3 beta 6, which beta 10 supersedes, so expect to update a few imports and APIs. Treat them as open-source implementations to study, adapt, point your agent at, and learn from while the framework evolves.
Explore Sergio's Remix 3 projects and packages ↗
Connect at a Remix Meetup
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 what you like about Remix and these updates, along with any suggestions you have to improve them.
- The Remix Team