Skip to content
FLAVIO COPES
flaviocopes.com

Introduction to create-react-app

By

Learn why Create React App was deprecated, what its scripts still do in existing projects, and how to start a new React app with current tools.

~~~

create-react-app, usually called Create React App or CRA, was the standard way to start a React project without configuring Babel and Webpack yourself.

It is now deprecated for new applications.

The React team deprecated Create React App in February 2025. It remains in maintenance mode so existing projects can keep working, but it has no active maintainers and is not the recommended foundation for a new production app.

This tutorial explains what CRA did, how to recognize an existing CRA project, and what to use now.

What Create React App provided

CRA created a client-side React application with:

Its main benefit was a single shared configuration that could be upgraded through the react-scripts package.

Its main limitation was that it only created a client-side application. Routing, data loading, code splitting strategy, server rendering, and static generation were left to you.

What should you use for a new React app?

React now recommends starting with a framework for applications that need routing and production features.

If a framework is not a good fit, the official guide lists build tools such as Vite, Parcel, and Rsbuild. See Build a React app from Scratch.

For a small client-side JavaScript app, you can start with Vite:

npm create vite@latest todolist -- --template react
cd todolist
npm install
npm run dev

Vite prints the local development URL in the terminal.

This creates a client-side single-page app, not a complete application framework. As the app grows, you still need to make decisions about routing, data fetching, caching, testing, and deployment.

Can you still run Create React App?

Yes, but the command displays a deprecation warning:

npx create-react-app todolist

This can still be useful when following an older course or reproducing an existing project’s setup. Do not choose it for a new production project.

Inside an existing CRA project, the important dependency is normally react-scripts, and package.json contains these scripts:

What does ejecting do?

Ejecting exposes the Babel, Webpack, and related configuration managed by react-scripts.

It is irreversible. After ejecting, the application owns those configuration files and dependencies directly. You lose the simple react-scripts upgrade path and become responsible for maintaining the toolchain.

If an existing CRA project needs a major tooling change, migrating it to a maintained framework or build tool is usually a better long-term option than ejecting.

The official deprecation announcement links migration guides for Vite, Parcel, and Rsbuild.

Tagged: React · All topics
~~~

Related posts about react: