Hello, calliope

This blog is generated by calliope, a small static-site generator I wrote in Python.[1] The whole engine is a handful of files: parse frontmatter, render Markdown, apply a template, write HTML.

Why build my own?

Because the engine is the project. A blog is a low-stakes place to own the pipeline end to end.

Here's the highlight hook that wires Markdown fenced blocks to Pygments:

def _highlight(code: str, lang: str, _attrs: str) -> str:
    lexer = get_lexer_by_name(lang) if lang else guess_lexer(code)
    inner = highlight(code, lexer, _FORMATTER)
    return f'<pre class="highlight"><code>{inner}</code></pre>'

What's next

Tag pages, maybe KaTeX. Not today.


  1. It's named after the muse of epic poetry. ↩︎

← all posts