Comparison with other static site generators

This table was compiled in the spring of 2022 (Soupault 4.0.0, Jekyll 4.2.1, Hugo 0.91.2, Zola 0.15.3). If you spot outdated or incorrect information, let me know!

Hugo Zola Jekyll Soupault
Single executable Yes Yes No Yes
Extensibility None1 Ruby plugins Lua plugins, external tools
Built-in web server Yes No (an intentional choice)2
Page formats Markdown, Org Mode (built-in); AsciiDoc, RST, Pandoc (external helpers, hardcoded3) Markdown Markdown (built-in), any (via convertor plugins) HTML (built-in), any (via page preprocessors)
Markdown processor GoldMark, BlackFriday pulldown-cmark kramdown (built-in), any (via plugins) No built-in, any (via page preprocessors)
Config format TOML, YAML, JSON TOML TOML, YAML TOML
Syntax highlighting Built-in (Chroma), hardcoded syntax rules Built-in, supports external syntax files Built-in (Rouge), any (via plugins). No built-in, any (via element preprocessors or plugins)
Pagination Built-in Built-in or plugins No built-in, done by Lua plugins
Multilingual sites Yes (built-in) Yes (built-in) Plugins exist Can be implemented with Lua
Content model Blog (built-in), extensible No built-in, extensible4
Front matter YAML, JSON, TOML, Org TOML YAML None. Metadata is extracted from HTML using CSS selectors, similar to microformats
Theming Requires a compatible theme Any HTML page can be used as a “theme”5
Can work with existing websites No Yes, supports an HTML post-processor mode
Table of contents Markdown and AsciiDoc only, black box6 Markdown only, ToC datastructure available to templates No built-in, various plugins available Any format (generated from HTML headings after preprocessing), picks up the id from <h*> tags for fully-persistent anchors, highly configurable, ToC datastructure is available to Lua plugins
Footnotes Markdown only, manual Markdown built-in, various plugins LaTeX-like, automatic back links, configurable

1Hugo and Zola include a Turing-complete template processor, so it's possible to add custom logic to control its built-in functions. However, it's impossible to add any new functionality with loadable plugins or external helpers.

2On most systems these days, you can serve a directory with python3 -m http.server, or one of the many small web server projects. As of page watching and live rebuild, I'm not convinced that it's useful enough to justify the complexity.

3For some of the helpers, Hugo offers a limited range of built-in options, e.g., for AsciiDoc (see markup/asciidocext/internal/converter.go). However, it's impossible to add new helpers or pass new options to existing helpers without modifying the Hugo source code.

4You configure a mapping of CSS selectors of elements to extract metadata from to index fields, then give a template or a script that defines how to render it.

5This is a complicated question, of course. A typical CMS/SSG “theme” isn't a theme in the same sense as a desktop theme—it's a mix of presentation (HTML/CSS) and logic (templates). Soupault separates presentation and logic, so it's possible to grab any empty HTML page and set up soupault to insert generated content into it. Of course, it does need to be configured to match the structure of that page to insert right things in the right places.

6ToC is a feature of the Markdown and AsciiDoc libraries it uses rather than of Hugo itself, so uses have limited control over its rendering and cannot use extracted headings in their own ways.