Starting a Blog with Chirpy and GitHub Pages
If you want to start a technical blog with a clean design, good defaults, and strong writing features, Chirpy is a very good choice.
This guide shows a simple way to start from zero and publish a blog with the Chirpy theme on GitHub Pages. It is written for people who want a practical setup, not a complicated one.
At the time of writing, this setup uses Chirpy 7.4.x.
Why I Chose Chirpy
Chirpy is a Jekyll theme made for technical writing. It already includes many things that are useful for engineering blogs:
- a clean reading layout
- categories and tags
- syntax highlighting
- table of contents
- dark and light mode
- SEO and social metadata
- GitHub Pages friendly deployment
It lets you focus on writing instead of building a blog theme from scratch.
What You Need
Before you start, make sure you have:
- a GitHub account
- Git installed
- Ruby and Bundler installed locally
- a repository where the blog will live
If you want your site at https://yourname.github.io, create a repository with that exact name.
The Easiest Starting Point
The easiest way is to start from the official Chirpy starter project:
This matters because the gem-based theme does not expose every file you need. In practice, a working Chirpy blog usually needs these core files in your repository:
_config.yml_plugins/_tabs/index.html- a GitHub Pages deployment workflow
So even if you install the theme gem, the starter repository is still the best reference for a complete setup.
Basic Setup
Clone your blog repository and add Chirpy through Bundler.
Your Gemfile should contain this line:
1
gem "jekyll-theme-chirpy", "~> 7.4"
Then install dependencies:
1
bundle install
If you start from the Chirpy starter, most of the structure is already ready.
Required Repository Structure
The minimum practical structure looks like this:
1
2
3
4
5
6
7
8
.
├── _config.yml
├── _plugins/
├── _posts/
├── _tabs/
├── assets/
├── .github/workflows/
└── index.html
You do not need a large custom codebase for a normal blog.
Important Configuration
Most of your setup lives in _config.yml.
These fields matter first:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
lang: en
timezone: America/New_York
title: Your Blog Title
tagline: A short one-line description
description: >-
A short summary of what your blog is about.
url: "https://yourdomain.com"
baseurl: ""
github:
username: your-github-username
social:
name: Your Name
email: your@email.com
links:
- https://github.com/your-github-username
- https://www.linkedin.com/in/your-linkedin
avatar: "/assets/img/avatar.png"
toc: true
What These Settings Control
title,tagline, anddescriptioncontrol your site identity and SEOurlmust match your real site URLbaseurlshould stay empty for a root domain blogsociallinks are used in the sidebar and metadataavataris the profile image shown in the themetocenables the table of contents in posts
Pages You Will Usually Keep
Chirpy includes tab pages such as:
- About
- Archives
- Categories
- Tags
These live under _tabs/. You can edit them, keep them simple, or remove the ones you do not need.
Writing Your First Post
Create a file inside _posts/ using this format:
1
YYYY-MM-DD-title-of-post.md
Example:
1
2025-10-29-starting-a-blog-with-chirpy-and-github-pages.md
Each post needs front matter at the top:
1
2
3
4
5
6
---
title: "My Post Title"
date: 2025-10-29 09:00:00 +0000
categories: [Blogging, Web Development]
tags: [jekyll, chirpy, github-pages]
---
Then write in normal Markdown.
One important rule with Chirpy: the post title already comes from front matter, so you usually do not need another # H1 inside the post body.
Running the Site Locally
To preview your blog locally:
1
bundle exec jekyll serve -l
Then open:
1
http://127.0.0.1:4000
This is the fastest way to check formatting, links, and layout before pushing.
GitHub Pages Deployment
The cleanest modern setup is to deploy with GitHub Actions.
Your workflow should do four things:
- check out the repository
- configure GitHub Pages
- build the Jekyll site
- upload and deploy the built site
This is better than relying on the old branch-based Pages flow because it is clearer and easier to maintain.
Custom Domain
If you want to use your own domain:
- add your domain in GitHub Pages settings
- create the correct DNS record in your DNS provider
- add a
CNAMEfile to the repository root if needed - enable HTTPS after DNS is working
For subdomains, a CNAME record is usually the correct choice.
Files You Probably Do Not Need
If your workflow is simple and you only write posts, you usually do not need extra template conveniences such as:
.devcontainer/.vscode/- local helper scripts you never use
- unused submodules
Keep the repository focused on content and deployment.
How to Update Chirpy Later
This is the part that confuses many people.
If your Gemfile says:
1
gem "jekyll-theme-chirpy", "~> 7.4"
that means:
- you allow patch updates inside
7.4.x - you do not automatically move to
7.5.x
So your update process is:
- check the Chirpy release notes
- update the version constraint in
Gemfilewhen you want the new minor release - run
bundle update jekyll-theme-chirpy - review any release notes about breaking changes
- compare your copied starter files with the latest starter project when needed
This last part is important. When Chirpy changes, the gem may update cleanly but your copied repository files may still need manual edits.
My Recommendation
If you want a stable blog, keep your setup simple:
- use Chirpy through the gem
- keep
_config.ymlclean - write posts under
_posts/ - deploy through GitHub Actions
- update the theme only after reading release notes
That gives you a blog that feels modern without turning your blog repository into a large engineering project.
Final Thought
Chirpy is a strong choice for engineers who want to publish technical writing with very little visual work.
You can start small, keep the repository clean, and grow the blog over time without rebuilding the whole platform.