A custom static site generator (SSG) written in Rust, replacing a Hugo + LoveIt stack for hakula.xyz.
kiln is purpose-built to support the specific needs of hakula.xyz — CJK content, KaTeX math, custom directive-based shortcodes, and full control over the rendering pipeline. Rather than fighting a general-purpose SSG's assumptions, kiln implements exactly what's needed with no more complexity than necessary.
- TOML configuration and frontmatter (
+++delimited) - Markdown with GFM extensions (tables, strikethrough, autolinks, footnotes)
- KaTeX math support (
$...$/$$...$$) - Syntax highlighting via syntect (CSS classes, no JS runtime)
-
:::fenced directive system with callouts and Pandoc fenced divs - CJK-aware heading ID generation
- Table of contents generation
- Open Graph / Twitter Card / SEO meta tags
- Template engine with block inheritance (MiniJinja)
- Theme system with site-level overrides
- Emoji shortcodes and Font Awesome icons
- Pandoc-style image attributes (
{#id .class width=N}) - Code blocks with language headers and collapsible max-lines
- Static file handling and co-located content assets
- Pretty URLs (
/post/instead of/post.html) - Additional directives (styled blocks, embeds, link cards)
- Hugo content migration tool (
kiln convert) - Taxonomy support (tags, categories) with pagination
- Home page, section pages, and special pages
- Dark theme with Tailwind CSS
- RSS feed + sitemap
- Full-text search via Pagefind
# Build the site (default root: current directory)
kiln build
# Build from a specific project root
kiln build --root /path/to/site
# Scaffold a new theme
kiln init-theme my-themeA kiln site is organized as follows:
.
├── config.toml # Site configuration (TOML)
├── content/ # Markdown content
│ ├── posts/ # Blog posts organized by category
│ └── about-me/ # Standalone pages
├── templates/ # MiniJinja templates (site overrides theme)
├── themes/ # Themes (git submodules)
├── static/ # Static assets (copied to output as-is)
└── public/ # Build output (configurable via output_dir)
- docs/syntax.md — Markdown extensions, frontmatter fields, and directive syntax
- docs/themes.md — Theme installation, configuration, and creation
Requires Rust 1.85+ (edition 2024).
cargo build --releaseThe binary will be at target/release/kiln.
cargo build # Build
cargo fmt --all --check # Check formatting
cargo clippy --all-targets # Lint (pedantic)
cargo test # Run testsCI runs these same checks on every push and pull request via GitHub Actions.
Copyright (c) 2026 Hakula. Licensed under the MIT License.