How to Create a React App in 2023: Step-by-Step Guide with Create React App

Ever tried setting up a React project from scratch? I did last year for a client project and wasted three entire days just configuring Webpack and Babel before writing a single line of React code. That headache is exactly why you're probably searching for how to create React app the modern way. Turns out there's a magic solution called Create React App that handles all that nonsense for you. Let's cut through the fluff and get straight to creating React applications efficiently.

I've built over two dozen React projects using Create React App (CRA), and I'll show you exactly how it works – including those annoying little pitfalls that official docs don't mention. Like that time my build failed because of a hidden .env file conflict. But let's start simple...

What Exactly is Create React App?

Create React App is an official tool built by Facebook developers that automatically generates a React project with sensible defaults. Instead of manually installing and configuring:

  • Webpack (for bundling)
  • Babel (for JSX/ES6 compilation)
  • ESLint (for code quality)
  • Dev server with hot reloading

You run one command and get a complete working environment. It's like getting a fully furnished apartment instead of an empty concrete shell. Makes you wonder why anyone would manually configure React projects anymore unless they have very specific needs.

A quick reality check: Create React App isn't perfect for every scenario. If you're building a huge enterprise app with custom Webpack plugins, you might eventually eject (we'll discuss that later). For 90% of projects though? It's golden.

What You Need Before Creating Your React App

Before we dive into how to create React app instances, let's check your toolbox:

Requirement Minimum Version How to Check Install Guide
Node.js v14 or higher node -v Official site
npm v6 or higher npm -v Comes with Node.js
Code Editor - - VS Code recommended

I can't stress enough about the Node version. Last month my student couldn't start his project because he had Node 12 installed. The error messages didn't even clearly explain the problem. Run node -v now before proceeding!

Quick Fixes for Common Setup Issues

  • Permission errors? Never use sudo with npm. Instead, fix your directory permissions properly.
  • Old npm version? Run npm install -g npm@latest
  • Firewall blocking? Create React App uses port 3000 by default - make sure it's open

Your First React App in 3 Minutes Flat

Enough prep work. Let's actually create a React application right now. Open your terminal (I'm using VS Code's built-in terminal) and type:

npx create-react-app my-first-react-app

This single command does all the heavy lifting:

  1. Creates a new directory called my-first-react-app
  2. Installs all necessary dependencies (React, ReactDOM, etc.)
  3. Sets up development build tools
  4. Creates starter files and a sample application

While it's running (takes 2-5 minutes depending on your internet), let me share a war story. The first time I ran this, I thought it froze because there was no progress bar. Turns out it was installing hundreds of packages silently. Don't panic if it seems stuck!

What That Weird npx Thing Means

New developers always ask me: "Why not just use npm?" Good question! Here's the breakdown:

Method Command Pros Cons
npx (recommended) npx create-react-app Always uses latest version, no global install needed Slightly slower first run
Global Install npm install -g create-react-app
create-react-app
Marginally faster subsequent uses Can cause version conflicts

Facebook actually deprecated the global install approach in 2020. I learned this the hard way when my CI builds started failing. Stick with npx.

Understanding Your New React Project Structure

Once installation completes, let's examine what was generated:

my-first-react-app/
├── node_modules/
├── public/
│ ├── favicon.ico
│ ├── index.html
│ └── manifest.json
├── src/
│ ├── App.css
│ ├── App.js
│ ├── App.test.js
│ ├── index.css
│ ├── index.js
│ ├── logo.svg
│ └── serviceWorker.js
├── .gitignore
├── package.json
└── README.md

Critical files explained:

  • public/index.html: The single HTML page where React mounts your app
  • src/index.js: JavaScript entry point where ReactDOM renders components
  • src/App.js: Your main component - edit this to start building
  • package.json: Lists all dependencies and scripts

A common mistake I see? Developers deleting the serviceWorker.js file immediately. Bad idea! It enables Progressive Web App features. Even if you don't use PWA now, keep it for caching benefits.

Launching Your Development Server

Time to see your new React app alive! Navigate to your project folder:

cd my-first-react-app

Then start the development server:

npm start

This will:

  • Start Webpack dev server
  • Compile your React code
  • Open http://localhost:3000 in your browser
  • Enable hot reloading (auto-refresh when you save files)

You should see the spinning React logo. Congrats! You've just created a React app successfully. But we're just getting started...

When Port 3000 is Already Occupied

Ran into this last week when my backend API was using port 3000. Fix is simple:

PORT=4000 npm start

Now your app runs on http://localhost:4000. You can also create a .env file with PORT=4000 to make it permanent.

Essential Create React App Commands

Beyond npm start, here's your development toolkit:

Command Purpose Use Case Example
npm test Run Jest test suite Testing new components
npm run build Create production build Before deploying to hosting
npm run eject Expose configuration files When you need advanced customization

About that last one - ejecting. I made this mistake in 2018: ran eject because I needed one Webpack loader. Suddenly I was maintaining hundreds of lines of build config. Don't eject unless absolutely necessary! There are better alternatives now.

Customizing Your Create React App Setup

The default setup works, but you'll want to personalize it. Here's how without ejecting:

Adding CSS Preprocessors

Want Sass instead of plain CSS? Just install it:

npm install sass

Rename your .css files to .scss and update imports. CRA automatically sets up the loader. Magic!

Environment Variables

Need API keys? Create .env files:

  • .env.development - for local dev
  • .env.production - for builds

Prefix variables with REACT_APP_: REACT_APP_API_KEY=abc123. Access via process.env.REACT_APP_API_KEY.

Warning: Never commit .env files to Git! They're in .gitignore by default for a reason. I accidentally committed one last year and had to rotate all API keys.

Deploying Your React Application

So you've built something - now share it with the world! First create an optimized build:

npm run build

This creates a build/ folder with minified, production-ready files. Now deploy options:

Hosting Platform Difficulty Free Tier Deploy Command
Vercel ★☆☆☆☆ (Easy) Yes npm install -g vercel
vercel
Netlify ★☆☆☆☆ (Easy) Yes Drag build folder to dashboard
GitHub Pages ★★☆☆☆ (Medium) Yes Add homepage to package.json
AWS S3 ★★★☆☆ (Hard) Limited Manual upload via CLI

My personal favorite? Vercel. Deployed my last React project in under 2 minutes with continuous deployment from GitHub. Made client demos super easy.

Performance Tweaks for Production

After deployment, check your Lighthouse scores. Common fixes:

  • Add rel="preload" for critical assets
  • Implement code splitting with React.lazy()
  • Compress images before importing
  • Use service workers for caching

Troubleshooting Common Create React App Issues

After helping hundreds of students, I've seen all the errors:

Module not found: Can't resolve 'react'

Fix: Delete node_modules folder and package-lock.json, then run npm install again. Usually happens when dependencies get corrupted.

Failed to compile: Syntax error

Fix: Check for JSX syntax errors in your recent changes. Sometimes missing closing tags or parentheses.

Starting development server takes forever

Fix: Upgrade to Node 16+ and npm 8+. Older versions have performance issues with dependency resolution.

Beyond the Basics: Advanced CRA Techniques

Once comfortable creating React apps, level up:

Adding Routing with React Router

Install it:

npm install react-router-dom@6

Then in index.js:

import { BrowserRouter } from 'react-router-dom';

ReactDOM.render(
  <BrowserRouter>
    <App />
  </BrowserRouter>,
  document.getElementById('root')
);

State Management Options

Don't immediately reach for Redux! Consider:

  • React Context API for simple global state
  • Zustand for lightweight stores
  • Recoil for complex data flows
  • Redux Toolkit if you really need Redux

I used Context for my e-commerce cart state and it worked perfectly with zero extra dependencies.

Migrating to Alternatives When Needed

Create React App is fantastic but has limitations. When might you need something else?

Scenario Better Alternative Why
Need server-side rendering Next.js Built-in SSR support
Extremely optimized builds Vite Faster builds with ES modules
Custom Webpack config React App Rewired Override CRA without ejecting

That said - unless you have specific advanced needs, Create React App remains the simplest way to get started. Most projects never outgrow it.

Frequently Asked Questions About Creating React Apps

Can I use TypeScript with Create React App?

Absolutely! Use this command instead: npx create-react-app my-app --template typescript. All tooling comes preconfigured.

How do I update Create React App to the latest version?

Update the react-scripts package: npm install react-scripts@latest. Check changelog for breaking changes.

Why is my Create React App so slow to start?

Usually due to:

  • Outdated Node version (<14)
  • Too many dependencies in package.json
  • Antivirus scanning node_modules
Upgrade Node and consider using Yarn PnP for faster installs.

How to create React app with routing already set up?

No official template, but you can:

  • Use npx create-react-app my-app --template redux (includes routing)
  • Choose community templates like react-boilerplate

Final Thoughts Before You Create Your React App

Learning how to create React app projects properly saves countless hours. After creating dozens of React applications, here's my distilled advice:

  • Always use npx instead of global installs
  • Understand what each generated file does before modifying
  • Don't eject unless absolutely forced to
  • Use environment variables for secrets
  • Setup deployment early in your project

Creating your first React app is like riding a bicycle - wobbly at first but soon becomes second nature. I still remember the thrill when my first Create React App project went live. Now go build something awesome!

Leave a Comments

Recommended Article