Create React App is gone. Here's why that's a good thing.
Modern React apps demand modern tools — and there's a lot more to find in alternatives to CRA.
On February 14th, the React team officially announced the deprecation of Create React App (CRA) for new apps.
If you try installing a fresh CRA project, you’ll see this warning in your console:
For those who loved CRA, this was a terrible Valentine's day gift. But it was a long time coming.
CRA is officially obsolete now, but it's been obsolete for years.
React is still one of the most popular choices for SPAs, but modern web apps have evolved beyond what CRA was built for. Today, we're lucky to have even more frameworks and tools to enable modern development with React.
Today I'll cover:
Why CRA became obsolete
What to do (like, now) if you're using CRA
What else we can expect to see in web development
Let's dive in.
Why CRA became obsolete
Setting up a React project used to be tedious. You had to configure everything manually, from Babel to linting. When CRA launched in 2016, it bundled configuration tools into one setup, and quickly became the go-to for creating new React apps.
Back then, most React apps were simple: JSX compilation, a developer server, and client-side rendering. CRA handled that well.
But the web evolved fast (unlike CRA, which kind of just… sat there).
Over the years, the demands of modern web apps changed:
Performance: Users expect near-instant load times. Monolithic JS bundles don’t cut it anymore. Code splitting, lazy loading, and server-side rendering (SSR) became essential.
Developer experience: Faster builds and hot module reloading (HMR) became table stakes. The ecosystem moved to modern bundlers like Vite, while CRA stuck with Webpack.
Scalability & SEO: Businesses need SSR, edge rendering, and global deployments out of the box.
CRA wasn't built for any of these requirements.
Over the years, it fell to the wayside as other tools — like Next.js and Expo — offered integrated build pipelines, SSR, performance optimizations, and more.
With other tools already doing the job, there wasn't a real need to adapt CRA for these modern needs. So the React team did good by moving on (and you should too).
What to use instead
If you were using CRA, you have two options:
Move to a framework (recommended for most projects)
Use a build tool (if you need full control)
Frameworks integrate solutions like routing and data prefetching out of the box, while build tools give you a blank slate to configure exactly as you want.
1. Move to a framework (Best for most projects)
Modern frameworks bake in best practices like routing, SSR, and data fetching, so you can write less boilerplate and ship faster.
The React team recommends:
Next.js: Best for full-stack React apps with SSR, API routes, and static generation.
React Router: Great for SPAs that need lightweight, client-side navigation.
Expo (with Expo Router): Ideal for projects spanning mobile and web with React Native.
Benefits:
Optimized for performance: Faster load times, better SEO, and automatic code splitting.
Batteries included: Routing, data fetching, and SSR work out of the box.
Official support: These tools evolve with React, unlike CRA.
2. Use a build tool (if you really need full control)
A framework might not be right for every project. You may have unique constraints or simply want to learn how React works by rolling your own configurations. If this is the case, you might want full control, and a build tool might be the better option.
The React team recommends:
Vite: Blazing-fast builds, instant HMR, and better DX (best CRA replacement).
Parcel: Zero-config bundling, similar to CRA but way faster.
Rsbuild: A Rust-powered, high-performance bundler.
Note: Build tools don’t handle routing, SSR, or data fetching, so you’ll need to set those up manually. If you’re not sure why you need this level of control, just use a framework.
The frontend moves fast
CRA isn’t disappearing overnight. It’s in maintenance mode, so you can still use it for existing apps — but I don't recommend keeping it there longer than you have to.
The death of CRA is just another step in the constant evolution of frontend development. The best developers respond quickly to shifts, rather than stick to what's familiar (and, in the case of CRA, outdated).
So if you were content with CRA, I'm sorry that you have to let go — but trust me, you'll be glad you did once you see what new tools have to offer.
Check out these guides to help you migrate from CRA:
Framework route: Next.js, React Router, Expo (with Expo Router)
Happy learning!