How to deploy a create React app to Github pages for free

Last updated on Sep 16, 2020 by Suraj Sharma

Github Pages allows you to host your static react.js website for free, with an additional option to add a custom domain name to your website.

This tutorial is about how you can deploy/host your website on Github pages for free.


  • This tutorial requires you to have an active github account.

  • A running react.js application, if you haven't created a react.js project yet, you can use npx create-react-app <your project name> to create one.

  • Git installed on your system

Getting started

I am going to use an existing react project for this tutorial, creativesuraj/react-material-ui-login

Let’s clone the repository on our local system

git clone

git clone repository

Change the current working directory to react-material-ui-login

cd react-material-ui-login

And run

npm install

to install all the dependencies defined in your package.json.

Open the project with your favorite editor.

Follow all the steps, if you want to successfully host your react.js app on github pages

Step 1: Add homepage

Open your package.json file and add

”homepage”: “”

If the project is for your github user page then add

”homepage”: “”

git clone repository

Note: this configuration is required otherwise your app will not deploy correctly.

Step 2: Add deploy script

Install gh-pages inside your project directory

npm install --save gh-pages

git clone repository

Open your package.json file and add the following script

For a project page

"scripts": {
   "predeploy": "npm run build",
   "deploy": "gh-pages -d build",
   "start": "react-scripts start",
   "build": "react-scripts build",
   "test": "react-scripts test",
   "eject": "react-scripts eject"

whenever you run npm run deploy , predeploy gets executed first, which creates the /build folder and then that /build folder gets deployed to the github pages.

For a Github user page

If you are deploying your user page then you would need to commit your deployment to master branch using "gh-pages -b master -d build"

Hence, add the following script to the package.json.

"scripts": {
   "predeploy": "npm run build",
   "deploy": "gh-pages -b master -d build",
   "start": "react-scripts start",
   "build": "react-scripts build",
   "test": "react-scripts test",
   "eject": "react-scripts eject"

Step 3: Push the changes to master branch

Create a .gitignore file, if you do not have it in your project.

Note: use .gitignore file to prevent commiting files, which you don’t want to push to your remote repository.

Add this to your .gitignore file

# See for more about ignoring files.
# dependencies
# testing
# production
# misc

Note: gh-pages requires you to commit the package-lock.json file, so if you have that in your .gitignore file then remove that line.

Then, Commit and push your unstaged changes

git add .

git commit -m ‘deploy to gh-pages’

git push

Step 4: Final Deployment

Now run,

npm run deploy

This command creates a /build folder and deploys the /build folder to the github pages.

git clone repository


Step 5: Configure your own custom domain

If you have a domain name and wants your github page to point to that DNS, then you have to create a CNAME file in your /public folder

Add your domain name

change homepage configuration on the package.json file to

“homepage”: “”

Commit and push these changes to your master and then run npm run deploy.

Congrats your react.js website is published at github pages!

Step 6: Change your github project settings to use gh-pages branch

You are done with all the hard work of deploying your project to github pages;

Only one final step is left, that is to set your github repository settings to use gh-pages branch

git clone repository

Your project is live under the homepage url defined on your package.json.

For Example,


In this tutorial, you have deployed your react website to github pages, this tutorial might not work if you are using react router's dynamic routings on your website

Related Solutions

Rate this post

Suraj Sharma is a Full Stack Software Engineer. He holds a B.Tech degree in Computer Science & Engineering from NIT Rourkela.