Back to blog

Remix 3 Abandons React: The Fullstack Revolution Nobody Expected in 2026

Hello HaWkers, one of the most surprising news in the JavaScript ecosystem in 2026 came from where few expected: Remix, the framework that was born as "the best way to use React," no longer uses React. That is right, Remix 3 was completely rebuilt from scratch.

What led to this radical decision and what does it mean for developers? Let us explore this revolution.

What Happened With Remix

The History So Far

Remix started as a React framework created by Ryan Florence and Michael Jackson, the same creators of React Router. It was known for its approach focused on web standards and performance.

Remix timeline:

Version Year Main Feature
Remix 1.0 2021 React-based launch
Remix 2.0 2023 Acquired by Shopify
Remix 3.0 2026 Rebuilt without React

Quote from creators: "Remix 3 is a ground-up rethinking of full-stack web development. Not just improvements, but a new architecture designed for the next decade."

Why Abandon React

The Problems That Motivated the Change

The creators were vocal about the limitations they found depending on React.

Challenges with React:

  • Server Components Complexity - Server Components architecture adds complexity
  • Bundle Size - React adds significant weight
  • Hydration Overhead - Hydration process impacts performance
  • Roadmap Dependency - Evolution limited by React decisions

The Influence of AI in Development

One of the most interesting aspects is how AI participated in Remix 3 design.

How AI was used:

  • Analysis of usage patterns from millions of projects
  • Simulation of alternative architectures
  • API prototype generation
  • Automated development ergonomics testing

Insight: The creators mentioned that AI played a role in both the design and implementation of the framework.

What Is New in Remix 3

Architecture Without React

Remix 3 introduces its own UI layer, lighter and optimized for the framework model.

// Remix 3 - New component syntax
// file: routes/users.$id.jsx

import { useLoader, useAction } from 'remix';

export function loader({ params }) {
  return {
    user: db.users.findUnique({
      where: { id: params.id }
    })
  };
}

export function action({ request }) {
  const form = await request.formData();
  return db.users.update({
    where: { id: form.get('id') },
    data: { name: form.get('name') }
  });
}

export default function UserProfile() {
  const { user } = useLoader();
  const submit = useAction();

  return (
    <main>
      <h1>{user.name}</h1>
      <form method="post" onSubmit={submit}>
        <input name="id" value={user.id} type="hidden" />
        <input name="name" defaultValue={user.name} />
        <button type="submit">Update</button>
      </form>
    </main>
  );
}

Native Signals

Remix 3 adopts Signals as reactivity primitive, aligned with the industry trend.

// Native reactive state system
import { signal, computed, effect } from 'remix/signals';

export function Counter() {
  const count = signal(0);
  const doubled = computed(() => count.value * 2);

  effect(() => {
    console.log(`Count changed to: ${count.value}`);
  });

  return (
    <div>
      <p>Count: {count.value}</p>
      <p>Doubled: {doubled.value}</p>
      <button onClick={() => count.value++}>
        Increment
      </button>
    </div>
  );
}

Simplified Server Functions

One of the biggest improvements is the simplification of server functions.

// Server functions with cleaner syntax
'use server';

export async function createUser(formData) {
  const name = formData.get('name');
  const email = formData.get('email');

  // Server-side validation
  if (!name || !email) {
    return { error: 'Name and email are required' };
  }

  // Database creation
  const user = await db.users.create({
    data: { name, email }
  });

  // Automatic redirect
  return redirect(`/users/${user.id}`);
}

// In the component
export default function NewUser() {
  return (
    <form action={createUser}>
      <input name="name" placeholder="Name" />
      <input name="email" type="email" placeholder="Email" />
      <button type="submit">Create User</button>
    </form>
  );
}

Native Streaming

Remix 3 brings streaming as a first-class citizen.

// Data streaming with native Suspense
import { Suspense, defer } from 'remix';

export function loader() {
  return defer({
    // Critical data - blocks render
    user: db.users.findFirst(),
    // Deferred data - loads via streaming
    posts: db.posts.findMany({ take: 10 }),
    analytics: fetchAnalytics()
  });
}

export default function Dashboard() {
  const { user, posts, analytics } = useLoader();

  return (
    <main>
      <h1>Hello, {user.name}</h1>

      <Suspense fallback={<PostsSkeleton />}>
        <Posts data={posts} />
      </Suspense>

      <Suspense fallback={<AnalyticsSkeleton />}>
        <Analytics data={analytics} />
      </Suspense>
    </main>
  );
}

Comparison With Other Frameworks

Remix 3 vs Next.js vs Nuxt

How does Remix 3 compare with the main competitors?

Feature comparison:

Feature Remix 3 Next.js 15 Nuxt 4
UI Library Own React Vue
Reactivity Signals useState Composition API
Bundle Size ~15KB ~85KB ~45KB
Streaming Native Yes Yes
Server Functions Integrated API Routes Nitro

Remix 3 Advantages

Strong points:

  • Significantly smaller bundle
  • No dependency on external ecosystem
  • Signals as reactivity standard
  • Extreme focus on web standards
  • Superior First Contentful Paint performance

Disadvantages

Points of attention:

  • Smaller component ecosystem
  • Learning curve for those coming from React
  • UI libraries need to be adapted
  • Smaller community than React/Vue

Impact For Developers

Who Should Consider Remix 3

Remix 3 makes more sense for certain types of projects.

Ideal use cases:

  • New fullstack applications (greenfield)
  • Performance-focused projects
  • Teams that value web standards
  • Applications that need excellent SEO
  • Projects without heavy React ecosystem dependency

Migration from Remix 2

For those already using Remix, migration requires attention.

Migration strategy:

  1. Evaluate if migration is necessary
  2. Remix 2 will continue receiving support
  3. Migrate components gradually
  4. Replace React hooks with Remix 3 equivalents
  5. Adapt third-party libraries

New Skills Needed

What to learn:

  • Signals and fine-grained reactivity
  • New Remix component syntax
  • Server Functions without React
  • Streaming patterns
  • Testing without React Testing Library

The Future of Frameworks

Decoupling Trend

Remix 3 represents a larger trend: proprietary full-stack frameworks.

Other similar movements:

  • Svelte with SvelteKit - always been independent
  • Solid with SolidStart - own framework
  • Qwik with Qwik City - unique approach

What This Means For React

React is not dead, but its role is changing.

Perspectives:

  • React remains dominant for complex SPAs
  • Fullstack frameworks seek more control
  • Server Components added complexity
  • Alternatives are maturing

Conclusion

Remix's decision to abandon React is an important milestone in web development history. It shows that even established frameworks are willing to rethink their foundations in pursuit of better performance and development experience.

For developers, this means more options and the importance of understanding web fundamentals that transcend specific frameworks.

If you want to understand more about framework trends, I recommend checking out another article: Vanilla JavaScript Is Back where you will discover why many developers are returning to pure JavaScript.

Let's go! 🦅

Comments (0)

This article has no comments yet 😢. Be the first! 🚀🦅

Add comments