The repository that powers the k0sproject community blog static site. Built with Hugo and the PaperMod theme. If you can open a pull request, you can publish a post.
-
Create a new post (Hugo "leaf bundle" with its own folder):
hugo new content/posts/my-post-title/index.md
-
Open the generated file and fill in front matter (see below).
-
Add any images/files into the same folder as the post (e.g.,
content/posts/my-post-title/diagram.png). -
Preview locally:
hugo server -D
-
When ready to publish, set
draft: falseand open a pull request.
---
title: "Your Post Title"
date: 2025-09-25T09:00:00Z
author: "Your Name"
tags: ["k0s", "kubernetes", "how-to"]
draft: true
cover:
image: "cover.png" # relative to this post folder
caption: "Image caption"
# Optional
# summary: "1–2 sentence summary for list pages."
# description: "SEO description (140–160 chars)"
# canonicalURL: "https://example.com/original"
# categories: ["Engineering"]
---Write Markdown content below the front matter.
Additional notes:
dateis ISO-8601; use UTC or your local time.- Leave
draft: truewhile iterating; change tofalseto publish. - Use
tags/categoriesthat already exist where possible. - If the
summaryis omitted, the first paragraph in the article will be used as summary.
-
Keep assets inside the post's folder (leaf bundle). Example tree:
content/posts/my-post-title/ ├─ index.md ├─ cover.png └─ diagram.png -
Reference them with relative paths:

-
Optional Hugo figure shortcode:
{{< figure src="diagram.png" caption="Control plane layout" >}} -
Aim for small files (<1 MB). Add meaningful alt text.
Prerequisites:
- Git (for cloning the repository and its submodule)
- Hugo extended version (0.120.0 or newer recommended)
git clone https://github.com/k0sproject/blog.git blog.k0sproject.io
cd blog.k0sproject.io
git submodule update --init --recursiveStart a live-reloading development server (Hugo watches for changes and refreshes the browser automatically):
hugo server --buildDrafts --buildFutureVisit http://localhost:1313/ to preview the site. This approach ensures assets
such as CSS are served correctly; loading public/index.html directly from the
filesystem will usually miss theme assets because the site is built with the
production baseURL.
The server binds only to localhost by default. To allow testing with e.g. your mobile device, use:
hugo server --bind 0.0.0.0 --baseURL http://YOUR_COMPUTER_IP:1313/-
title,date,author,summaryset -
draft: falsefor publishing - Images load; alt text present
- Links/code blocks render correctly
- No broken relative paths
- Post matches the tone and headings of existing posts
- File/folder name: use-kebab-case (
my-post-title) - Code blocks: use fenced blocks with language hints (e.g.,
sh,yaml) - Internal links: prefer relative links within the repository
Content and configuration are distributed under the Creative Commons
Attribution-ShareAlike 4.0 International license. See LICENSE for the
full text.