How to create a theme for Hugo
Install Hugo
First, install Hugo on your machine. For more information, read the official setup guide of Hugo.
Generate a new theme
Hugo doesn’t ship with a default theme, but it comes with a command to generate it. Run the following command after installing Hugo hugo new site [name]
, after that, navigate into the root of the new Hugo folder and run command hugo new theme [theme_name]
to generate the skeleton of a theme.
File structure
.
└── theme-name
├── LICENSE
├── archetypes
│ └── default.md
├── layouts
│ ├── 404.html
│ ├── _default
│ │ ├── baseof.html
│ │ ├── list.html
│ │ └── single.html
│ ├── index.html
│ └── partials
│ ├── footer.html
│ ├── head.html
│ └── header.html
├── static
│ ├── css
│ └── js
└── theme.toml
LICENSE
By default, Hugo applies the MIT license to your theme.
archetypes
You can create new content files in Hugo using the hugo new
command. If your theme makes use of specific keys in the front matter, it is a good idea to provide an archetype for each content type you have. By default, Hugo will create new content files with at least date
, title
and draft = true
.
content
All content for your website will live inside this directory.
layouts
The layouts directory contains all the HTML files that are used for generating HTML from the Markdown files. Templates include list pages, your homepage, taxonomy templates, partials, single-page templates, and more.
static
Stores all the static content: images, CSS, JavaScript, etc.
theme.toml
The theme.toml
file contains information about the theme such as the name of the theme, license, description, author, etc.
If you’re developing a real theme, please remember to fill out files theme.toml
and LICENSE.md
.
Add content
You can use the new
command to add title and date:
hugo new posts/my-first-post.md
When we created our site, Hugo created a default archetype in the /archetype/
folder.
Make changes to your theme files
Now we have a basic template upon which we can start building our theme. What’s next? I recommend a deep dive into the docs and check how to costumize your newly created theme. As for where to deploy your site, since Hugo is a static site generator, you can host it almost anywhere.