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.
Same workload. Almost identical warm SSR response times.
Inside this Insight
What the article follows
Written by
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:
| Track | Version tested | Role in this comparison |
|---|---|---|
| Next.js | 16.3.0 | Production framework |
| React Router Framework Mode | 8.3.0 | Production React framework |
| Remix 3 | Not tested | Separate 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.
The same workload went through both framework paths.
Production server receives the request
120 records are generated
The server waits 40 ms
The HTML response is created
Response timing is recorded
Route principle
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:
| Item | Value |
|---|---|
| Node.js | 22.22.0 |
| React | 19.2.8 |
| React DOM | 19.2.8 |
| Next.js | 16.3.0 |
| React Router | 8.3.0 |
| Records rendered | 120 |
| Artificial secondary delay | 40 ms |
| Process-cold rounds | 5 per framework |
| Warm-up requests | 5 per framework |
| Measured warm requests | 30 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.
| Test | Next.js 16.3.0 | React Router 8.3.0 |
|---|---|---|
| Process-cold TTFB median | 167.894 ms | 153.859 ms |
| Process-cold TTFB p95 | 479.507 ms | 176.177 ms |
| Process-cold total median | 169.611 ms | 158.148 ms |
| Warm TTFB median | 61.656 ms | 60.739 ms |
| Warm TTFB p95 | 74.017 ms | 64.783 ms |
| Warm total median | 62.602 ms | 62.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.
There is a useful conclusion here, but it is narrower than 'which framework is faster?'
Almost no practical separation appeared
Next.js
React Router
What that means
React Router was steadier in this small run
Useful signal
Important limit
What this means
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
The comparison kept the obvious workload variables aligned.
Same Node version
Same React version
Same record count
Same calculation
Same secondary delay
Production builds only
Before moving on
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.
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.
- 01Source
Next.js
Official sourceNext.js 16.3
Used to confirm the current Next.js release tested in the benchmark.
- 02Source
Next.js
DocumentationCaching without Cache Components
Used for the request-time dynamic rendering behavior applied to the benchmark route.
- 03Source
React Router
Official sourceReact Router changelog
Used to confirm React Router 8.3.0 as the current stable release.
- 04Source
React Router
DocumentationData Loading
Used for the server loader behavior on the initial SSR request.
- 05Source
React Router / Remix
Official sourceReact Router v8
Used for the current relationship between React Router and Remix.
- 06Source
Remix
Official sourceRemix 3 Beta Preview
Used to confirm that Remix 3 remains a separate pre-release track.
Source links support the facts they are attached to. They do not imply that the source publisher endorses Ascent's interpretation or recommendations.
