Config
thermite.toml
title = "My Site" # default: "Thermite Site"
base_url = "https://..." # default: "" — used for canonical/OG URLs
description = "..." # default: ""
[extra]
# Arbitrary key-value pairs, injected into every template by key name.
og_image = "https://..." # special: fallback OG image if page doesn't set one
author = "Your Name" # → {{ author }} in templates
anything = "you want" # → {{ anything }}
[extra] values are plain TOML types — strings, ints, bools. They appear in templates by their key name directly, no prefix.
Frontmatter
YAML between --- fences at the top of any .md file. All fields optional.
title: "Page Title" # falls back to "Untitled"
date: "2026-03-02" # ISO 8601, with or without time
template: "custom.html" # default: "index.html" for index.md,
# "page.html" for others
draft: true # skips page entirely when true
tags: [rust, ssg] # string array
description: "..." # used in OG meta tags
slug: "custom-slug" # overrides filename for URL path
og_image: "https://..." # per-page OG image, overrides site-level
extra: # arbitrary per-page values
foo: bar # → {{ fm_foo }} in templates
version: "1.0" # → {{ fm_version }}
Config vs frontmatter extras
| Source | Template access | Example |
|---|---|---|
[extra] in thermite.toml | {{ key }} | {{ author }} |
extra: in frontmatter | {{ fm_key }} | {{ fm_foo }} |
Config extras are global (every page). Frontmatter extras are per-page.
Gotchas
- Frontmatter extra values render via Rust's debug format. Fine for strings — ugly for nested types. Keep it simple.
- Date display strips the time component.
2026-03-02T18:00:00Z→2026-03-02. - No
[extra]key in config means no variable in templates — it won't default to empty, it just won't exist.