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) |
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 justity the complexity.
3For some of the helpers, Hugo offers a limited range of built-in options, e.g. for AsciiDoc (see markup/asciidocext/convert.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.