Build from source (Go 1.23+):
git clone https://github.com/<you>/gohyde && cd gohyde
make build # produces ./gohyde
sudo install gohyde /usr/local/bin/gohyde # optional
Verify the environment:
gohyde doctor
# Gohyde Doctor
# ✓ Go 1.23
# ✓ Dart Sass 1.69.5
# ✗ Tailwind CSS (not installed)
# ✓ Python 3.11 ✓ Ruby 3.2
gohyde new myblog
cd myblog
npm install # one-time: installs the Tailwind 4 CLI
gohyde serve # dev server + live Tailwind at http://localhost:4000
gohyde new writes a full blog theme: Tailwind 4 styling (single
--color-brand-500 variable to rebrand), Alpine.js mobile menu, dark/light
mode with a no-flash toggle, a post blueprint for the CMS, a sample
Python plugin, and three example posts. gohyde new --blank writes a minimal
_config.yml and empty dirs instead.
Layout produced:
myblog/
├── _config.yml # site config: collections, blueprints, nav, tailwind
├── _layouts/ # default, home, blog, post, page
├── _includes/ # header (nav + theme toggle), footer, post-card, head
├── _posts/ # dated blog posts: YYYY-MM-DD-title.md
├── _pages/ # standalone pages (about, blog index)
├── _plugins/ # reading_time.py — example Python plugin
├── _data/ # data files (.yml/.json/.csv) → site.data.*
├── assets/css/input.css # Tailwind source (brand color, article styles)
├── package.json # @tailwindcss/cli dev dependency
├── Makefile # make build = minified CSS + gohyde build
└── index.md # home page
gohyde build # full build → _site/ (default) or _builds/
gohyde build --incremental # only rebuild changed files (uses .gohyde-cache.json)
gohyde build --watch # rebuild on file change
Output goes to destination from _config.yml (default _site; some sites use
_builds). Always clean the destination if you suspect stale files:
rm -rf _site && gohyde build
gohyde serve # http://localhost:4000, live reload, CMS at /_gohyde
gohyde serve --port 8080 --no-cms
serve always watches the source tree via fsnotify and reloads the browser on
change — the --watch flag is a no-op there (it only matters for build).
layout, permalink,categories, tags, published, date.categories/tags accept either a YAML list or a space-separated string —tags: [go, jekyll] # list
tags: go jekyll # space-separated string — also fine