Next.js vs Gatsby vs create-react-app

By

Compare Next.js 16, Gatsby, and create-react-app in 2026: CRA is deprecated, Vite fits client SPAs, and where Next.js and Gatsby still fit.

~~~

Next.js, Gatsby and create-react-app were for years the three common ways to start a React project, and they gave you very different applications. create-react-app gave you a client-rendered single page app. Gatsby generates a static site at build time. Next.js renders pages on a server, on every request.

Two of the three changed status since I first wrote this. The React team deprecated create-react-app in February 2025, and Gatsby is in maintenance mode under Netlify. I’ll get to both, but the differences between the three approaches are still worth understanding, because every React tool you pick today falls into one of them.

create-react-app does not help you generate a server-side-rendered app. Anything that comes with server rendering (SEO, a first HTML response with content in it) is the job of tools like Next.js and Gatsby.

What did create-react-app give you?

With create-react-app, the browser downloaded an almost empty HTML page plus your JavaScript bundle. React then rendered everything on the client.

That was fine for many apps. But until the JavaScript loaded and ran, the visitor saw nothing. Search engines and social previews got that same empty page, which hurt content sites.

The React team deprecated create-react-app in February 2025. The package still installs (5.1.0 is the latest release on npm) and it still works, in maintenance mode, but installing it prints a deprecation warning and react.dev tells you to use a framework, or a build tool like Vite for a plain client app. I wrote about the Vite path in Vite + React.

When is Next.js better than Gatsby?

They can both help with rendering HTML up front, but in 2 different ways.

The end result using Gatsby is a static site, without a server. You build the site, and then you deploy the result of the build process statically on Netlify or another static host.

Every page is generated once, at build time, as plain HTML. Serving it is fast and cheap, and there’s no server to maintain or crash. The tradeoff: when the content changes, you rebuild and redeploy the whole site.

Next.js provides a backend that can server side render a response to a request, allowing you to create a dynamic website, which means you will deploy it on a platform that can run Node.js or a compatible runtime. With the App Router, the default since Next.js 13 and the only thing new Next.js 16 projects should use, you also get Server Components and Route Handlers on top of that.

That server render happens on every request, so the page can show fresh data every time. Think of a page showing user-specific content, or data that changes often. A static build can’t do that.

Next.js can generate a static site too, but I would not say it’s its main use case.

Gatsby’s strong point used to be its ecosystem of plugins, including many for blogging. Those plugins are also what aged worst. Netlify acquired Gatsby in 2023 and keeps it in maintenance mode: security fixes, dependency updates and small bug fixes, no new features. The latest release is 5.16.1, from February 2026, and many community plugins have not been updated in years.

So if my goal was a static content site today, I would not start it on Gatsby. I’d use Astro, which is what this blog runs on. For an app, Next.js.

Gatsby is also heavily based on GraphQL, something you might really like or dislike depending on your opinions and needs. All the data in a Gatsby site (markdown files, images, data from a CMS) flows through a GraphQL layer you query at build time. If you already know GraphQL it feels natural. If you don’t, it’s one more thing to learn before you’re productive.

When is a client SPA enough?

If you’re building an app that lives behind a login, like a dashboard or an internal tool, SEO does not matter and nobody sees the first paint but your users. In that case a client-rendered SPA is still a good fit.

Just don’t scaffold it with create-react-app. Use Vite, or Next.js if you also want its routing and server features.

Tagged: Next.js · All topics

Want me to talk about your product? You can sponsor this site.

~~~

Related posts about next: