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:
- Evaluate if migration is necessary
- Remix 2 will continue receiving support
- Migrate components gradually
- Replace React hooks with Remix 3 equivalents
- 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.

