tags: meta
This site is built by jenny, a static blog generator written in bash, sed and awk. No node_modules, no build server, no framework — a handful of shell scripts and heredoc templates.
Why bother
Most static site generators solve a problem this site does not have. There is no client-side routing here, no hydration, no islands. There is markdown on disk and HTML on a CDN.
The whole pipeline is:
-
read
*.mdfrom the current directory - run each through a markdown parser
- fill in a heredoc template
-
write the result to
.dist/
That is it. The build for this page takes well under a second.
What the parser handles
The vendored parser is md2html.awk, about 500 lines of awk. It covers the MultiMarkdown subset this blog actually uses:
| Feature | Supported | Notes |
|---|---|---|
| Fenced code | yes | with a language class |
| Tables | yes | including alignment |
| Footnotes | yes | numbered, with back-links |
| Citations | yes | [#id] with optional locator |
| Reference links | yes | all three forms |
| Metadata blocks | yes | preserved, hidden by default |
Inline formatting works as expected: emphasis, strong, code, and escaping that leaves node_modules and snake_case alone.
Trying it
make sym-install PREFIX=$HOME/.local
mkdir blog && cd blog
jenny init
jenny
Four commands and you have a blog1. The generated .blogrc is a shell script, so configuring it is just setting variables.
Simple things should be simple, complex things should be possible.
What is here
Not much yet. That is the point of a placeholder — though this one at least exercises every feature the parser claims to support2.