Engineering · · 5 min read · Giovanni Liber

Please, stop using Next.js

For a side project or a prototype, it costs more than it gives back

The short answer

If you’re building a side project or a prototype, don’t start with Next.js. It’s heavy to run, it asks a lot of the rest of your stack, and it solves problems you don’t have yet.

TanStack Start gives you React with far less server work. Hono does the job for APIs and server-rendered pages with a fraction of it.

We have a stake in this: Eurobase hosts Next.js, TanStack Start, Hono and other frameworks, and every plan includes a monthly CPU budget for Workers. The numbers below come from real deployments we published with their method.

CPU to render the same 400-row page
Next.js
102.6 ms
TanStack Start
36.3 ms
Hono
9.2 ms

The same shop, built twice

We built one shop in Next.js and in Hono, with the same pages and the same output, and deployed both. You pay the difference on every request.

MeasureNext.jsHono
CPU for the 400-product catalog128.7 ms9.0 ms
Worker size, compressed1,059 KB23 KB
JavaScript on a first visit145 KB0 KB
Catalog time to first byte, median168 ms77 ms
First request on a cold start, median1,800 ms975 ms

The Hono shop sends no JavaScript because it has no interactive parts. Many prototypes barely have any.

The Eurobase Free plan allows 50 ms of CPU per request. A 129 ms page is over that limit, so every view draws on a small reserve, and an empty reserve means a 503. The same page in Hono stays inside the limit.

You can keep React

Hono’s JSX isn’t React. If you want React, routes and server functions, try TanStack Start. Same library, about a third of the server work on pages.

MeasureNext.jsTanStack Start
CPU, small page26.0 ms8.5 ms
CPU, 400-row page102.6 ms36.3 ms
CPU, JSON report15.7 ms10.7 ms
JavaScript on a first visit141 KB115 KB

This table comes from a smaller test app, so its numbers are lower than the shop’s. The win is on the server: in the browser, TanStack Start sends only 18% less JavaScript, because it’s still React.

It fights the rest of your stack

A web app runs on servers behind CDNs, proxies and load balancers. Next.js asks each of them to play along.

Your CDN
Next.js varies responses on several request headers, which its own guide says many CDNs can’t handle out of the box. So it adds an _rsc parameter your CDN has to keep in the cache key. Strip the rsc header and the app gets HTML instead of the payload it asked for.
Your second server
By default each instance keeps its own cache. revalidateTag clears only the instance that received it, unless you implement refreshTags(). The self-hosting guide points you to a cache handler on Redis or S3.
Your proxy
Streaming needs buffering turned off in nginx or similar, and in every load balancer on the way. Your auth and redirects in proxy.js should run before the CDN cache.
Your CPU
On Eurobase, the same static page used 18 ms of CPU in Next.js and 0.04 ms in Hono.

It costs you time, too

use client, use server and several layers of cache APIs are a lot to hold in your head for something you may throw away next month.

Inngest moved off Next.js for this reason. First local page loads went from 10–12 seconds to 2–3. Moving the dashboard took one engineer a couple of weeks, and they had to give up conventions for more explicit routes.

Server Components also add a surface to defend. In December 2025, React disclosed an unauthenticated remote code execution bug rated CVSS 10, and apps could be vulnerable without a single Server Function. It wasn’t only a Next.js problem, and no framework is immune to security bugs. But a landing page never needed that surface.

When Next.js makes sense

In our view, Next.js only makes sense in two places: on dedicated resources you pay for and manage yourself, or directly on Vercel, which is built around it.

We still don’t think that’s efficient. With the same resources, you can run many more projects on other frameworks.

Keep Next.js if:

  • your large React app really uses Server Components and Server Actions
  • you depend on something built for it, like Payload CMS
  • it already works and you can afford what it uses

Rewrites cost money too. This post is about what you start next.

Tell your coding agent

Agents love Next.js. In our experience they reach for it by default, even for a small site. That’s a habit, not a decision about your app, so name the framework you want. Try TanStack Start:

You’re buildingTry
An API or a webhookHono
A blog, docs or a marketing siteAstro
A React app or a prototypeTanStack Start
A large app built on Server ComponentsNext.js

What these numbers don’t tell you

  • They come from small apps with data in memory, one client at a time, on V8 isolates.
  • Next.js runs here through its adapter, so it behaves differently on a Node.js server.
  • Your database and your own code can matter more than the framework.

Method and every framework we tested are in JavaScript frameworks compared.

Deploy your app in Europe

Sign up