Benchmark
Five generators, one machine, one corpus — and the definitions published
minimal — a heading and a paragraph
sqzass18 ms
Hugo93 ms
Zola141 ms
Jekyll442 ms
Astro4,672 ms
blog — six paragraphs, a list, a quote, a link
sqzass25 ms
Hugo112 ms
Zola172 ms
Jekyll752 ms
Astro6,699 ms
heavy, repeated code — five identical 20-line Rust blocks per page
sqzass187 ms
Hugo3,559 ms
Zola5,084 ms
Jekyll10,850 ms
Astro22,090 ms
heavy, unique code — five distinct 20-line Rust blocks per page
sqzass1,298 ms
Hugo5,912 ms
Zola6,789 ms
Jekyll11,456 ms
Astro23,958 ms
Every number
Wall clock, median of three cold runs, and peak RSS.
| minimal | blog | heavy · repeat | heavy · unique | |
|---|---|---|---|---|
| sqzass 0.1.0 | 18 ms · 15 MB | 25 ms · 24 MB | 187 ms · 229 MB | 1,298 ms · 439 MB |
| Hugo 0.164.0 | 93 ms · 123 MB | 112 ms · 140 MB | 3,559 ms · 411 MB | 5,912 ms · 421 MB |
| Zola 0.22.1 | 141 ms · 136 MB | 172 ms · 142 MB | 5,084 ms · 269 MB | 6,789 ms · 279 MB |
| Jekyll 4.4.1 | 442 ms · 56 MB | 752 ms · 62 MB | 10,850 ms · 174 MB | 11,456 ms · 182 MB |
| Astro 5.18.2 | 4,672 ms · 555 MB | 6,699 ms · 604 MB | 22,090 ms · 2,578 MB | 23,958 ms · 2,607 MB |
Why heavy comes twice
Because code repetition decides rankings, and most benchmarks do not say what theirs is. sqzass highlights each distinct block once per build, so a corpus whose generator repeats the same block is a different measurement from one where every block is unique — the gap between 187 ms and 1,298 ms is that variable. A single "heavy" number that does not state its repetition has hidden the thing that produced it.
Method
- Cold. Before every run the output directory and each tool's caches are
removed —
.jekyll-cache, Astro'scacheDiranddist, Hugo'sresourcesand build lock. Wall clock and peak RSS come from GNU time. - Corpus. 1,000 pages plus a section index. The markdown bodies are byte-identical across tools; only the front matter syntax differs. A paragraph is one fixed 76-character sentence repeated four times.
- Highlighting is on everywhere, at build time, as each tool ships it: syntect + Oniguruma (sqzass), Chroma (Hugo), Giallo (Zola), Rouge (Jekyll), Shiki (Astro). Markup granularity differs — spans on the same heavy page: sqzass 3,205 · Jekyll 1,800 · Zola and Astro 1,700 · Hugo 600. sqzass emits the most detailed markup of the five and the numbers above.
- Templates. Each tool gets the same minimal no-theme layout: an HTML shell around the rendered content.
- Astro's time includes Node startup (~1 s). It is also doing more than markdown-to-HTML — it is a component framework. That is the honest caveat; the corpus is plain markdown, which is the workload this page is about.