Understory

311 words ~2 min read

A Rust-based static site generator that I built for Obsidian-flavoured digital gardens, after a couple of years of wrestling with Quartz's plugin ecosystem. This site is built with it.

TL;DR

  • Single Rust binary
  • Wikilinks, backlinks, callouts, marginalia, graph view as first-class features, not plugins
  • pagefind linked in as a Rust library, not shelled out as a subprocess
  • Frontmatter date: is the canonical date; git is a fallback
  • Pre-1.0; works on my ~1000-page vault, but has rough edges

Why a new SSG?

I'd been on Quartz user for several years, but it was getting slooooow to rebuild my notes, and updates with my customizations were a pain. I wanted something with a slightly different philosophy:

  • Clean separation of tools from the content it works on
  • Nix-friendly
  • Fast to live-rebuild for local edits1
  • Features I was missing baked in (e.g. dialogues)

Status

Pre-1.0. Works well enough that I run my own ~1000-page vault through it (the one you're reading right now). Bugs and missing features land on me — which is the point. When the vault wants something the renderer can't do, I change the renderer.

Obsidian's broader callout vocabulary is currently a thin layer — only GFM-recognized kinds ([!NOTE], [!TIP], [!IMPORTANT], [!WARNING], [!CAUTION]) get full styling. [!QUOTE], [!INFO], [!ABSTRACT], etc. fall back to plain blockquotes for now. On the list.

Note

Naming: "Understory" is both the SSG and this site. Context usually disambiguates; when it doesn't, I'll say "the SSG" or "the site". I've considered making a sharper distinction in naming, but I don't know that it matters that much at this stage and if anything the site name will change not the SSG

Graph