Hugo is one of those tools that gets out of your way fast — once you understand the moving parts. Here’s the shortest path I know from a blank directory to a working static site.
Install
On macOS with Homebrew:
brew install hugo
hugo version
If you have a Go toolchain, go install github.com/gohugoio/hugo@latest also works. Either way, you should see a version string that starts with hugo v.
Scaffold
Pick an empty directory and let Hugo generate the layout:
mkdir my-site && cd my-site
hugo new site . --force
The --force flag is needed when the directory isn’t completely empty. The result is a small tree of archetypes, content, layouts, themes, and a hugo.toml config file.
Add a theme
You can write your own theme — and for a personal blog, you probably should. Hugo themes are just a directory under themes/ with a theme.toml and a layouts/ tree. The minimum theme needs:
theme.toml— name and metadatalayouts/_default/baseof.html— the base templatelayouts/index.html— the homepagelayouts/_default/single.html— one postlayouts/_default/list.html— a list of posts
Then point Hugo at it in hugo.toml:
theme = "your-theme-name"
Write content
Each post is a markdown file with front matter:
+++
date = 2026-09-01
title = "My first post"
summary = "A short description for the post card."
tags = ["Meta"]
+++
Body content goes here. Standard markdown.
Build
hugo # writes static files to public/
hugo server # local dev server with live reload
That’s the whole loop. From here, every decision is an iteration, not an architecture choice.