Skip to content
System Insight

Next.js vs. React Router in 2026: An SSR Performance Test

We ran the same 120-record SSR workload on Next.js 16.3.0 and React Router 8.3.0. Warm response times were nearly identical, while the small process-cold sample showed a wider difference.

Rendering path

Same workload. Almost identical warm SSR response times.

Inside this Insight

What the article follows

1Process-cold SSR
2Warm server response
3TTFB and total response
SaaS Engineering

Written by

Shruti SaraswatAscent Innovate Software
Published
SaaS Engineering
The test

The warm SSR result was much closer than the framework debate suggests.

We ran the same server-rendered page through Next.js 16.3.0 and React Router 8.3.0 Framework Mode. Both applications used Node 22.22.0, React 19.2.8, the same generated records, the same deterministic calculations, and the same 40 ms secondary delay.

The purpose was not to manufacture a universal winner. It was to answer a narrower question: when the workload is held steady, how different are the server response characteristics of these two framework paths?

First, why React Router instead of Remix 3?

The familiar comparison has long been framed as “Next.js vs Remix.”

That wording needs an update in 2026.

React Router is now the production React meta-framework from the team behind Remix 2, while Remix 3 has moved in a different direction and remains a separate beta release.

So the production comparison in this test is:

TrackVersion testedRole in this comparison
Next.js16.3.0Production framework
React Router Framework Mode8.3.0Production React framework
Remix 3Not testedSeparate beta track

This matters because putting Remix 3 numbers beside production Next.js and React Router numbers would mix different release stages and different framework directions.

What we actually built

Both applications rendered the same small account-activity page.

The workload contained 120 deterministic records, a calculated score for every record, account summary information, a table of server-loaded data, and a small client-side filter.

Both applications also waited for the same artificial 40 ms secondary dependency before returning the server-rendered page.

Benchmark request

The same workload went through both framework paths.

01Request

Production server receives the request

Both applications were built first and then started in production mode.
02Data

120 records are generated

The same deterministic data and calculation loop run for both applications.
03Delay

The server waits 40 ms

Both applications wait for the same simulated secondary dependency.
04Render

The HTML response is created

Next.js renders the request dynamically while React Router uses its server loader and SSR path.
05Measure

Response timing is recorded

The test records time to first byte and complete response time.

Route principle

The applications are not forced into identical framework code. Each uses its normal server-rendering path while the workload itself stays the same.

Next.js was explicitly kept on a request-rendered route rather than allowing the benchmark page to become a static build artifact. React Router used a route loader, which runs on the server for the initial SSR request. Those are normal framework mechanisms for the behavior being tested.

The test environment

The benchmark used:

ItemValue
Node.js22.22.0
React19.2.8
React DOM19.2.8
Next.js16.3.0
React Router8.3.0
Records rendered120
Artificial secondary delay40 ms
Process-cold rounds5 per framework
Warm-up requests5 per framework
Measured warm requests30 per framework

We kept the React and Node versions aligned so the framework was the main intentional difference in the server path.

The SSR results

Here is what the benchmark produced on this machine.

TestNext.js 16.3.0React Router 8.3.0
Process-cold TTFB median167.894 ms153.859 ms
Process-cold TTFB p95479.507 ms176.177 ms
Process-cold total median169.611 ms158.148 ms
Warm TTFB median61.656 ms60.739 ms
Warm TTFB p9574.017 ms64.783 ms
Warm total median62.602 ms62.386 ms

The cold result is more interesting, but we should be careful with it

React Router had the lower process-cold median in this run:

  • 153.859 ms React Router TTFB
  • 167.894 ms Next.js TTFB

The Next.js cold sample also contained a slower request that pushed its p95 to 479.507 ms, compared with 176.177 ms for React Router.

That is worth recording, but five process-cold samples are not enough to turn it into a broad framework claim.

A process start can be affected by runtime initialization, operating-system scheduling, filesystem state, background activity, and framework startup work. A much larger cold-start study would be needed before treating the p95 difference as a stable property of either framework.

What the numbers support

There is a useful conclusion here, but it is narrower than 'which framework is faster?'

Warm SSR

Almost no practical separation appeared

Once both production servers were already running, their median response times landed extremely close together.

Next.js

62.602 ms median complete response.

React Router

62.386 ms median complete response.

What that means

Framework choice should not be made from this warm timing difference.
Process-cold SSR

React Router was steadier in this small run

React Router produced the lower median and a tighter set of first-request timings across the five process restarts.

Useful signal

The cold-start behavior deserves attention when deployments frequently create fresh server processes.

Important limit

Five samples are not enough to describe every machine, host, workload, or deployment platform.

What this means

Warm performance gave us little reason to choose between the frameworks. Cold behavior produced a signal worth investigating, not a universal verdict.

What “process-cold” means here

Our cold test measured the first HTTP request after starting a fresh production server process.

It did not clear the operating system's filesystem cache, reboot the machine, recreate containers, or simulate a cloud provider's complete cold-start lifecycle.

That distinction matters.

The numbers describe fresh application processes on this test machine. They should not be presented as equivalent to Lambda cold starts, edge runtime starts, container scheduling, or another hosting platform's startup behavior.

What stayed fixed

Controls

The comparison kept the obvious workload variables aligned.

Same Node version

Both applications ran on Node 22.22.0.

Same React version

Both applications used React and React DOM 19.2.8.

Same record count

Both rendered the same 120 generated records.

Same calculation

Each record passed through the same deterministic calculation loop.

Same secondary delay

Both server paths waited for the same 40 ms artificial dependency.

Production builds only

Development servers were not used for the measured requests.

Before moving on

We also alternated request order during the run so the same framework was not always measured first.

What this benchmark does not tell us

This test does not tell us which framework will make an entire SaaS product faster.

It does not compare database drivers, serverless providers, edge deployment, cache strategies, React Server Component architecture, streaming boundaries, client navigation, image handling, bundle optimization, or application-specific data access.

It also does not tell us which framework will require less engineering work six months after launch.

Those questions can matter more than a one-millisecond SSR difference.

So what should a team actually choose on?

For this workload, warm SSR speed is not a useful deciding factor.

The choice should move to the things that will affect the product repeatedly: routing model, caching requirements, deployment target, server and client boundaries, team familiarity, data-loading model, framework conventions, and how much control the application needs over those conventions.

Next.js and React Router can both server-render a page quickly enough that architecture and product requirements become more useful questions than the warm median in this test.

That is the result we would rather publish than force a dramatic winner from numbers that do not support one.

Where Remix 3 fits

Remix 3 remains worth watching, but it belongs in a different comparison.

The Remix team describes Remix 3 as a beta and says it is not production-ready yet. React Router is now their React meta-framework, while Remix is moving in another direction.

When Remix 3 reaches a stage where a production comparison makes sense, its architecture may deserve its own test rather than being treated as another React Router version.

The useful takeaway

If someone asks, “Is Next.js or React Router faster for SSR?” our answer from this test is:

On a warm production server rendering this controlled workload, they were essentially tied.

React Router showed better process-cold consistency in our five-start sample, but that result needs a larger cold-start study before it deserves a stronger conclusion.

That is less dramatic than declaring a winner.

It is also much more useful when choosing software that has to be maintained after the benchmark is over.

Sources

References used for this Insight

Framework status and rendering behavior were checked against current official documentation. The performance numbers above come from the controlled benchmark described in this Insight.

  1. 01

    Next.js

    Official source

    Next.js 16.3

    Used to confirm the current Next.js release tested in the benchmark.

    Source
  2. 02

    Next.js

    Documentation

    Caching without Cache Components

    Used for the request-time dynamic rendering behavior applied to the benchmark route.

    Source
  3. 03

    React Router

    Official source

    React Router changelog

    Used to confirm React Router 8.3.0 as the current stable release.

    Source
  4. 04

    React Router

    Documentation

    Data Loading

    Used for the server loader behavior on the initial SSR request.

    Source
  5. 05

    React Router / Remix

    Official source

    React Router v8

    Used for the current relationship between React Router and Remix.

    Source
  6. 06

    Remix

    Official source

    Remix 3 Beta Preview

    Used to confirm that Remix 3 remains a separate pre-release track.

    Source

Source links support the facts they are attached to. They do not imply that the source publisher endorses Ascent's interpretation or recommendations.