Stacks vs Remix

Remix bet on the platform. Stacks makes the same bet and keeps going past the request.

Loaders, actions, forms, and nested routes are a genuinely good model, and Stacks shares most of the philosophy: server first, HTML first, no state library needed to show a list of rows. The difference is what happens after the response, where Remix stops and Stacks has a queue, a mailer, a scheduler, and an admin.

What Remix is.

In its own terms, not ours.

Remix, now merged into React Router 7, is built around web standards: Request and Response, forms that post, nested routes that own their data and their errors. It runs anywhere a fetch handler runs, and the mental model is smaller than most of its peers. Teams that adopted it rarely wanted to go back to client-side data fetching, and that is a strong signal.

Where each one wins.

Same amount of room on both sides, on purpose.

Pick Remix for

  • Nested routing and error boundaries

    Data, pending state, and errors scoped per route segment is a better model than most frameworks offer, and Stacks does not have a direct equivalent.

  • Standards all the way down

    Request, Response, FormData, and fetch means less framework-specific knowledge to carry between jobs.

  • React and its ecosystem

    The component libraries, the tooling, and the hiring pool.

  • Runs almost anywhere

    Any platform with a fetch handler will host it, including workers and edge runtimes.

Pick Stacks for

  • A data layer, not a loader

    Remix tells you where to fetch data. Stacks gives you the models, the migrations, the validation, and the factories that produce it.

  • Work after the response

    Queues, schedules, events, mail, and notifications are first-party, so the slow half of the application has somewhere to live.

  • Auth and roles included

    Sessions, tokens, passkeys, two-factor, RBAC, and policies rather than a per-project auth assembly.

  • Deploy from config

    The infrastructure that runs it is described in the repository and applied by one command.

Side by side.

The dimensions teams actually decide on.

Dimension Stacks Remix
Routing File and code routes, groups, model binding Nested file routes with per-segment data
Mutations Actions with model-declared validation Route actions with FormData
Data layer First-party ORM Choose your own
Auth Included remix-auth or a service
Background work Included Bring your own
Views STX, server-rendered React, server-rendered and hydrated
Admin surface Generated from models Build it yourself
Deploy buddy deploy to your AWS account Any fetch-handler host

If you did move.

What ports cleanly, what does not, and where to start.

The shapes line up

Loaders become read actions, route actions become write actions, and the validation moves onto the model.

Sessions and auth transfer conceptually

Cookie sessions and redirect-on-unauthenticated work the same way; the implementation is provided rather than assembled.

Components are the cost

React components are the part that does not port. Consider keeping Remix on the front while the backend moves.

The verdict.

Both answers are real. Most teams already know which paragraph is theirs.

Choose Remix when

You want React with a standards-based server model, and nested routing with per-segment data and errors is worth building the rest around.

Choose Stacks when

You like that philosophy but want the database, the queue, the mail, and the admin to come with it.

The frameworks that usually come up in the same conversation.