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: false
and 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:
date
is ISO-8601; use UTC or your local time.- Leave
draft: true
while iterating; change tofalse
to publish. - Use
tags
/categories
that already exist where possible. - If the
summary
is omitted, the first paragraph in the article will be used as summary.
-
Keep assets inside the post's folder (leaf bundle). Example tree:
content/blog/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 --recursive
Start a live-reloading development server (Hugo watches for changes and refreshes the browser automatically):
hugo server --buildDrafts --buildFuture
Visit 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
.
-
title
,date
,author
,summary
set -
draft: false
for 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.