How to Build a GitHub Template Repository for Scaffolding with React, Vite, and TailwindCSS
Developers love productivity. When it comes to coding, we want to do things fast and we look out for opportunities to re-use things as much as possible.
Say, you are getting started with a ReactJS
project and want to use TailwindCSS
for the same. The first time, it would be fine for you to create a project using the ViteJS
tool, and then configure TailwindCSS on top of it.
But the next time (and many more times after that), if you want to start a new React project, would you like to repeat these same steps over and over? A clever developer wouldn't do that. Instead, they'd create a "template" and use it every time they needed something similar in the future.
In this article, we are going to learn how to create a GitHub
template repository for scaffolding a new React project with Vite and TailwindCSS. The steps explained in this article will also help you to set up React using Vite, and configure TailwindCSS with it, even if you have reasons not to create the template repository. So, read on.
What is Vite?
Vite (aka ViteJS) is a next generation frontend tooling system that helps developers get started with local development quickly and easily. It supports super fast hot module replacement (HMR) so that there's hardly any lag between changing the source code and seeing it rendered on the browser.
Vite is way faster in starting the dev server than its predecessors like create-react-app (CRA) which was a go-to option for scaffolding React applications. Vite supports JSX, TypeScript, and CSS out-of-the box. It creates optimized builds and manages dependencies in an efficient manner.
Vite comes with templates available for all modern web technologies like vanilla JavaScript/TypeScript, React, Vue, Preact, Lit, Svelte, Solid, and Qwik.
At this moment, Vite is the most viable tooling system available to get started with React development.
How to Set Up a React Project with Vite
To get started, make sure you have Node.js
version 18+ installed. You can check this by executing the following command from your command prompt (terminal):
node -v
This will print the Node.js version you have installed. If you do not have Node.js installed or you have a lower version than v18, go ahead and download and install it from here.
You can use the --template
option of the vite
library to create a React project using the template. Just copy-paste the following command on your terminal and press enter to execute it:
npm create vite@latest your_app_name -- --template react
Note that you need to replace the your_app_name
with the name of your project/application. The vite
tool will create a directory with the same name with the generated source code under it.
Next, change directory to your project:
cd your_app_name
Now, install the dependencies using this command:
npm install
Once successful, run the app locally using the following command:
npm run dev
Vite will run the app locally on the URL http://localhost:5173
by default.
Vite running the app locally at http://localhost:5173
You can now open a browser tab and try the URL to see your React application up and running.
React app up and running
Congratulations! You have now successfully set up a React app with Vite. Feel free to make any changes to the src/App.jsx
source code file to see the changes reflected instantly on the browser.
How to Configure TailwindCSS with Vite
TailwindCSS is a utility-first CSS framework that can help make you more productive with its rapid development cycle. It provides utility classes you can use to translate any design into markup effortlessly.
Tailwind works quite well with React, and the two have become a modern combo for building fast websites and web applications.
Install TailwindCSS
We will now install and configure TailwindCSS with the React application we have created so far with Vite. You can now stop the Vite server if it's running locally for you.
First, let's install tailwindcss
, postcss
, and autoprefixer
as the dev dependencies of the project:
npm install -D tailwindcss postcss autoprefixer
A few points worth mentioning about the postcss
and autoprefixer
here:
The
tailwindcss
framework doesn't provide us the CSS styles that the bowser understands directly. It provides us the utility classes that some tool has to translate to regular CSS that the browser understands.Also, the produced CSS from the utility classes must work across all browsers (Edge, Chrome, Firefox, Safari, and so on).
So we need to have PostCSS and Autoprefixer along with TailwindCSS to set up the expected CSS output at the build phase.
Configure TailwindCSS
Now create the configuration file for Tailwind and PostCSS using this command:
npx tailwindcss init -p
It will create two files for you:
tailwind.config.js
: the configuration file for TailwindCSS. We will have to change this file to provide some basic configuration to start with. The same file must be edited with additional settings when you want to extend TailwindCSS for any advanced use cases.postcss.config.js
: the configuration file for PostCSS. In most cases you do not have to change anything in this file.
Open the tailwind.config.js
file and replace the existing content with the following:
/** @type {import('tailwindcss').Config} */
export default {
content: [
"./index.html",
"./src/**/*.{js,ts,jsx,tsx}",
],
theme: {
extend: {},
},
plugins: [],
}
Note that we have added a couple of entries to the content
array value to tell TailwindCSS what to consider for its utility classes to work. In our case, it must be the index.html
file and any .js
| .ts
or .jsx
| .tsx
files under the src/
directory.
Now open the ./src/index.css
file and add the @tailwind
directives for each of Tailwind’s layers:
@tailwind base;
@tailwind components;
@tailwind utilities;
That's it. We have done all the required configuration for TailwindCSS to run with a Vite app.
Let's Run Things Together
It's time to run things together. Start the Vite server back up locally using the command:
npm run dev
Now edit the src/App.jsx
file to replace its content with the following code snippet:
function App() {
return (
<>
<h1
className="text-3xl text-center text-red-700"
>Welcome to Vite with TailwindCSS and React</h1>
</>
)
}
export default App
Here, the JSX of the App component returns a heading tag (h1) with some welcome text. Notice the class names used with the <h1>
tag. These are all utility classes from the TailwindCSS framework. You can even read them like plain English. We asked TailwindCSS to render a bigger text (3XL), that should be center aligned, and in a shade of red.
Now access the app like before using the URL http://localhost:5173
. You should see the output as expected:
Welcome screen in your React/Vite app
Congratulations, again! You have now set up React and TailwindCSS with Vite and everything is working as expected.
How to Create the Template Repository on GitHub
All the hard work is done. Now we want to save this work somewhere so you can use it like a template every time you want to start a React project with TailwindCSS. There is no better place than GitHub to store and manage the source code.
Login to your GitHub account and create a new repository by clicking the New
button from the repositories
tab.
Creating a new repo on GitHub
Now, provide a repository name and description and create the repository.
Enter your repo details and click "create repository"
Next, commit, and push the entire project code to this repository. After pushing the project code, go to the Settings
of the repository. Under the general settings, you will find a checkbox with a label Template repository
. Check that checkbox to make this repository a template repository.
Make this repo a template repository by checking the checkbox
Great! Now you have created a template repository that'll let you create a React and TailwindCSS project with a single-click in the future.
Now, you will find a new button called Use this template
at the top-right corner of your repository. You can click on it to create a new project repository from this template. If your template repository is public, anyone else from the developer community can use it to create their project repository. Amazing, isn't it?