Remix 3 shipped on April 9, 2026, and it dropped React entirely. The framework now runs on a Preact fork maintained by the Remix team, paired with native Web Fetch API primitives instead of Node-specific abstractions. For a framework that built its reputation on server-side React and progressive enhancement, this is a complete architectural break. Teams that have been building on Remix 2 or migrated to React Router 7 now face a decision with no clean answer.
The Remix team's stated rationale is bundle size and standards alignment. Preact weighs roughly 3 KB compared to React's 45 KB, and shipping web-standard APIs means Remix apps can run on Cloudflare Workers, Deno Deploy, and similar edge runtimes without shims. Those are real gains. But the cost is a broken upgrade path and a forked rendering layer that no longer shares tooling with the broader React ecosystem.
What actually changed in Remix 3
The headline is the Preact swap, but the full list of breaking changes is longer. Understanding each one is the only way to assess your migration cost accurately.
- Rendering layer - React 18 and React 19 are gone. Remix 3 ships its own Preact fork with a compatibility layer for JSX. Components written with standard JSX syntax mostly work, but anything touching React-specific APIs (useTransition, useDeferredValue, React Server Components) does not compile.
- Data APIs - loader and action functions now return native Response objects, not Remix's custom response helpers. remix-utils adapters for json(), redirect(), and similar helpers are broken and have no maintained replacement yet.
- React context - The context API works in Preact, but the implementation differs enough that libraries relying on React internals (Radix UI, React Aria, several headless component libraries) will need version bumps or forks that do not exist yet.
- Server Components - Remix 3 does not support React Server Components. The team has stated this is intentional. If your Remix 2 app used RSC patterns from experimental builds, those must be rewritten.
- Vite plugin - The @remix-run/vite plugin has been replaced. Projects using the old plugin need to update their Vite config and regenerate type definitions.
A 42 KB reduction in runtime payload matters on mobile networks. But it matters less than the 6-12 weeks your team will spend rewriting third-party integrations that assumed React.
The React Router 7 situation
Many Remix 2 teams followed Shopify's recommended migration path and moved to React Router 7 last year. That path now looks better in hindsight. React Router 7 is not affected by the Remix 3 changes. It still runs on React 19, it supports the full RSC model, and it benefits from the Vite plugin improvements that Remix helped develop before the fork.
The downside is feature parity. Remix 3's edge runtime support and native fetch APIs are ahead of React Router 7 in those specific areas. If your team's primary goal is running on Cloudflare Workers with minimal cold-start latency, React Router 7 requires more configuration to achieve the same result. For teams running on Vercel, Railway, or standard Node servers, the difference is negligible.
Three paths forward - with honest tradeoffs
There is no universally correct answer. The right path depends on your app's complexity, your team's size, and how much of your component library is React-specific.
- Migrate to Remix 3. The right choice if your app is relatively small (under 50 routes), your component library uses basic JSX without React-specific hooks, and you genuinely need edge-first deployment on Cloudflare Workers or Deno. Budget 3-8 weeks depending on your dependency footprint. Run
npx remix-codemods@latest checkfirst - it audits which imports and APIs will break before you touch a line of code. - Stay on React Router 7. The right choice for most teams. React Router 7 has an active release cadence, full React 19 support, and a clear upgrade path. You get the file-based routing patterns that made Remix popular without the rendering-layer swap. Shopify continues to invest here. This is not a dead end.
- Move to a different framework. If the Remix 3 announcement revealed that your team has outgrown file-based routing and server functions as the primary data pattern, this is a reasonable moment to evaluate Next.js 15, TanStack Start, or Astro 5. Each has clearer long-term ownership. This path takes the longest but may be worth it for large production apps.
Auditing your dependency risk before deciding
Before committing to any path, run a dependency audit. The libraries most likely to cause problems in a Remix 3 migration are ones that import from react directly rather than treating it as a peer dependency. This includes many popular component libraries.
Run this in your project root:
npx depcheck --ignores="@types/*" | grep "react"
Any direct react dependency in your node_modules tree that is not a peer dependency is a potential blocker. For each one, check whether the library has published a Preact-compatible version. As of April 20, 2026, Radix UI, React Aria, and Framer Motion do not have Remix 3 compatible releases. shadcn/ui has an open issue tracking Preact support but no timeline.
If your app uses any of these libraries heavily, the migration cost to Remix 3 is substantially higher than the official docs suggest. Factor that in before making the call. Teams building with SARVAYA on greenfield projects are currently defaulting to React Router 7 until the Preact ecosystem catches up.
What the Remix 3 migration actually looks like
For teams that have audited their dependencies and decided Remix 3 is the right path, the migration has a clear sequence. Do not skip steps.
- Upgrade Node and Vite first. Remix 3 requires Node 22+ and Vite 6. Upgrade these in isolation on a separate branch, run your test suite, and merge before touching Remix itself.
- Run remix-codemods. The official codemod handles import rewrites, response helper replacements, and basic hook migrations. It covers roughly 60-70% of the mechanical changes automatically.
- Replace response helpers manually. Anywhere you used
json(),redirect(), ordefer()from@remix-run/node, replace with nativeResponseandURLAPIs. This is tedious but straightforward. - Audit React-specific hooks.
useTransition,useDeferredValue, anduseIdall have Preact equivalents, but their behavior differs in edge cases. Test these paths explicitly, especially around concurrent rendering assumptions. - Replace incompatible component libraries. This is usually the longest step. Identify which components you actually use from each library, then build minimal replacements with plain Preact or find alternatives. For design systems, this can take weeks.
- Test on target runtime. If you are migrating specifically for Cloudflare Workers support, deploy to a Workers test environment early. Do not discover runtime incompatibilities at the end.
The ecosystem fragmentation problem
The larger issue behind the Remix 3 decision is what it signals for the JavaScript framework space. Remix was one of the primary contributors to React Router and one of the most visible advocates for React on the server. Its departure from React creates a fork in the ecosystem that will take years to fully resolve.
Third-party library authors now face a choice: maintain React and Preact compatibility separately, or pick one and drop the other. Most will maintain React compatibility because React has a larger installed base. This means the Preact-based Remix 3 ecosystem will be smaller and slower-moving than the React ecosystem for the foreseeable future.
That is not a reason to avoid Remix 3 if it genuinely fits your use case. But it is a reason to be clear-eyed about what you are choosing. Teams that need a well-supported, large-ecosystem framework with strong community tooling should stay on React. Teams that need a 3 KB runtime and native edge deployment and are willing to own more of their stack should look at what Remix 3 offers.
Making the call for your team
The worst outcome is spending six weeks migrating to Remix 3 and then discovering your design system cannot follow you. Do the dependency audit first. Then look at your deployment targets. Then make the call. If you are building a new project and want a framework recommendation grounded in what actually ships on time, reach out to us. We have been evaluating Remix 3, React Router 7, and TanStack Start in production conditions since their respective releases, and the right choice varies considerably by project type. We also build on a 24-hour delivery model when speed matters more than framework novelty, using proven stacks that do not carry migration risk.