Writing Posts

Creating a post

Add a .md file to your posts directory. The file is detected on the next rescan (default: every minute).

Front matter

YAML front matter between --- delimiters at the top of the file:

---
title: My Post
description: A short summary.
date: 2025-06-15
author: Jane
tags: [go, tutorial]
visible: true
rss-visible: true
noindex: false
---

Post content starts here.

All fields are optional. Behavior when omitted:

Field Default Description
title "" Page title. Displayed in lists, feeds, og:image
description "" Summary. Used in feed entries and <meta> tags
date file mod time Publication date. Determines sort order
author "" Post author. Shown in post view and Atom entries
tags [] Categorization. Used for filtering in lists and feeds
visible true false hides from post list, search, feeds, and sitemap
rss-visible true false hides from RSS/Atom feeds only
noindex false true adds <meta name="robots" content="noindex">

Front matter also supports arbitrary keys via the Raw map, accessible in custom tooling.

Slugs

The URL slug is derived from the file path relative to the source root, without the .md extension:

File path Slug URL
hello.md hello /hello
guides/setup.md guides/setup /guides/setup
2025/my-post.md 2025/my-post /2025/my-post

Slugs are the URL identity of a post. Renaming a file changes its URL.

Special posts

Three slugs have special behavior. They have a default page built in, but can be overwritten. For this, simply define your own and the default will no longer be used. Typically, you would set Set visible: false on these, so that they don't appear in feeds and lists.

index.md

Rendered at / (the home page). When no index.md exists, / shows a placeholder.

404.md

Rendered when a requested URL doesn't match any post.

footer.md

Content injected as the page footer on every page. Set visible: false and rss-visible: false. The built-in footer links to RSS and Atom feeds.

Visibility rules

visible rss-visible In post list In feeds Directly accessible
true true yes yes yes
true false yes no yes
false any no no yes

Hidden posts (visible: false) are still accessible by direct URL. They are excluded from search, sitemap, and the post list.

Plain text

Every post is available as plain text at /plain/{slug}. HTML tags are stripped, block elements become newlines.

Media files

Non-markdown files in the source directory are served at /media/{path}. Relative links in markdown (images, downloads) are automatically rewritten to /media/... URLs.

![Photo](photo.jpg)

Becomes <img src="/media/photo.jpg"> (or /media/subdir/photo.jpg for posts in subdirectories).

Linking between posts

Relative .md links are rewritten to post URLs:

[See setup](setup.md)

Becomes <a href="/setup">See setup</a>.

Use wikilinks for title-based linking: [[Setup: Docker]].