Create-React-App Setup Explained

January 22, 2020

Create React App is a command line tool to build and deploy single-page React applications. It uses webpack and other packages under the hood for easy development setup. It is a great tool to use when you are first learning React as it lets you focus on writing components.


First make sure you have Node installed (or download it here). Choose a name for the project and enter the command

npx create-react-app project-name

npx is an npm package runner that uses the latest version of create-react-app for us.


Once the project is setup, run the application by changing directories into your project folder and running the start script:

cd project-name
npm start

This command will start our web application up in the browser, by default at the address http://localhost:3000/

If you want to host the app on a different port, change the start script to whatever port you like such as "PORT=3005 react-scripts start"

Create React App set up a folder structure for us with the following files:

 - node_modules
 - package.json
 - package-lock.json
 - .gitignore
 - public/
   - favico.ico
   - index.html
   - manifest.json
 - src/
   - App.css
   - App.js
   - App.test.js
   - index.css
   - index.js
   - logo.svg
   - serviceWorker.js
   - setupTests.js

create-react-app comes with start and build scripts sufficient to run and deploy an application on the web. The rest of this tutorial will explain the files that were created.

Project Breakdown

Each React application will include source code which is compiled into bundled javascript, and loaded into an HTML file. The source code is written in the src and HTML is output in the public folder.

This is a generic markdown file which can include information about the project and is displayed on a github repo page if code is stored there.


This folder contains all the 3rd party dependency modules which are installed in an application. This folder should not be included in the git repo as it is very large and other users can download the same versions from NPM. There is no need to change any of this code and it should be included in the .gitignore file.


This file is required for a node application and includes information about the project along with scripts and additional dependencies. Scripts can be added into an object here and run using npm run scriptname. Dependencies will be automatically tracked here along with their version number.


This file contains a list of files and folders in the project which should be ignored by git. This often includes dependencies or private environmental variables.

public folder

The public folder is where the bundled javascript code is output by create-react-app. There are a bunch of files generated here including icons which you can replace. Some files which are important to note include


This is the html file which runs the bundled javascript. A div is included here to populate the entire React application.


This is a json file that is meant to easily provide web crawlers with information about your application. Information here includes names, color themes, and site icons.

src folder

This folder is where all of you application logic will live. It also contains the entrypoint of your React code. There is a logo.svg file here pregenerated which can be replaced or deleted.


This is the JavaScript file which will run when your application is started. It imports your application code from the App.js component and renders it in the root div located in index.html in the public folder.


This is the main component for your React code. Each component you make in your project will be a descendant of this component. You can build an entire working application in this file.


This is your stylesheet for css rules. create-react-app comes preconfigured to use css stylesheets. Also, scss files can be used by simply installing the node-sass module.


This is a secondary css file with generic font data that can be deleted or utilized for global css code.


Service works can gather data about the users settings or browser configuration to act accordingly. This is a progressive web app feature which can be extremely helpful in production applications. This is another file which is safe to delete for development purposes.

Testing - setupTest.js and App.test.js

This build comes preconfigured with jest and react-testing-library as well. The setupTest.js file is where you can include your test configurations and App.test.js is a basic test file. You can also safely delete both of these files if you are not experienced in testing.


Most of the files here are already configured so that we won’t have to change them again. App.js is the main file and component for our development. Separate component files can and should be created for larger applications.


Let’s remove some of the excess code so we can start from scratch. Take out the logo import, and everything in the App div. Then, add a header with our project name.


In App.js:

import React from "react"
import "./App.css"

const App = () => {
  return (
    <div className="App">

export default App

loaded react app


Create React App is a very useful tool to quickly build a React project with little configuration necessary. The React docs themselves suggest to use it “If you’re learning React or creating a new single-page app”. There are other build tools such as Next.js and Gatsby, though it is generally easy to copy over all of your code if you decide to use a different tool.

Other React Tutorials


How to Setup Dark Mode in React