Documentation

Last updated: 2026-07-24

site.toml reference

site.toml is the repo-local configuration for a site. It lives at the root of the site's content store, next to the pages. Every field is optional — a site serves without one — and it is read fresh on every request, so a git push applies changes with no restart.

Site creation and vhost mapping are admin-managed through /site (see the configuration reference); this page covers only the repo-local site.toml.

Example

title       = "My Notes"
description = "Personal knowledge base"
base_url    = "https://wiki.example.com"
paginate_by = 10
ignore_dirs = ["out", "vendor"]

[nav]
links = [
  { label = "Home",   url = "/" },
  { label = "Search", url = "/search" },
  { label = "Tags",   url = "/tags/" },
]

[markdown]
unsafe_html         = true
syntax_highlighting = true
highlight_style     = "base16-ocean.dark"

[taxonomies]
category = "categories"
series   = "series"

Top-level fields

FieldDefaultDescription
titlestore nameSite name shown in the navbar and browser <title>
descriptionMeta description; also the RSS <description>
base_urlAbsolute URL prefix for sitemap <loc> and RSS <link>
paginate_by0 (off)Max items per page in list views; 0 disables pagination
ignore_dirs[]Root-relative directories to exclude from the rendered site

[nav]

Navbar links, in order.

FieldDescription
links[].labelLink text
links[].urlLink destination

[markdown]

FieldDefaultDescription
unsafe_htmlfalsePass raw HTML in the Markdown through unescaped (wrapper <div>s, <iframe>, …). Enable only for first-party content.
syntax_highlightingfalseHighlight fenced code blocks (via syntect). Requires unsafe_html, since highlighting is emitted as raw HTML.
highlight_stylebase16-ocean.darksyntect theme name
smart_punctuationfalseConvert straight quotes to curly, -- to em-dashes, etc.

Themes include base16-ocean.dark / .light, Solarized (dark) / (light), InspiredGitHub, and Monokai Extended.

By default the renderer strips raw HTML for safety, so features that depend on it (a scoping <div>, embedded <iframe>, and syntax highlighting) are inert until unsafe_html = true. Enable it only when you author all of the site's content.

[taxonomies]

Declare frontmatter fields as navigable taxonomies — the key is the URL segment (singular), the value is the frontmatter field name. See taxonomies.

ignore_dirs

In markdown mode the store is filtered before any path becomes a page, a listing entry, or a static asset:

  • Hidden directories are always ignored — any path with a component starting with . (.git/, .venv/, .cache/, …). This is unconditional and needs no configuration.
  • ignore_dirs extends the filter to non-hidden directories. Each entry is a root-relative path; the directory and every descendant are excluded. Leading and trailing slashes are tolerated; globs are not — out matches out/ and out/a/b.md, while out* matches nothing.

An ignored file returns 404 and appears in no listing, sitemap, RSS feed, or search result, while staying in the store (still committed, pushed, and pulled). HTML-mode sites serve every file and ignore this setting.

[[redirect]] and [[asset]]

site.toml also serves redirects and file downloads directly:

[[redirect]]
from = "/old-page"
to   = "/new-page"

[[asset]]
url   = "/downloads/tool.bin"
parts = ["files/tool-v1.bin"]

See Downloads & redirects for the full behavior — composed multi-part bodies, custom headers, and HEAD-readable checksums.

sites config reference