A Rust binary that turns Markdown into a static site
Zola is a static site generator written in Rust and distributed as a single executable, with prebuilt binaries for macOS, Linux and Windows. zola build renders Markdown content through Tera templates, an engine close to Jinja2 and Twig, and writes the result to public/. During development, zola serve rebuilds the site and reloads the browser whenever a file changes. Zola makes no assumption about how a site is laid out, so a project starts from its own templates or from a theme.
Sass in Rust, and broken links that fail the build
- No separate Sass toolchain: grass, a Rust implementation the docs call roughly equivalent to dart-sass, compiles the
sass/folder oncecompile_sassis set. - Giallo for syntax highlighting: it lives under the project's own GitHub organization and replaced syntect in 0.22.
- Images resized at build time:
resize_imageworks in templates and in content alike, and can convert to other formats, AVIF included. - Internal links are checked: an
@/blog/post.mdlink that points nowhere is a build error by default, andzola checkalso tests the external links in Markdown files without writing anything to disk. - Components inside content: since 0.23, the same Tera component can be called from a template or straight from a Markdown file.
- Everything opt-in:
base_urlis the only required setting, and almost every other feature stays off until the config turns it on.
Shortcodes gone in 0.23, and search ships with no UI
Upgrading to 0.23 is a migration. Released on August 5, 2026, it moves to Tera v2 and removes shortcodes, which have to be rewritten as components. The changelog calls it "probably the most breaking version of Zola that will happen" and warns that a theme will most likely need an update before a site can move to it. Back in January 2026, 0.22.0 had already swapped syntect for Giallo, with a different set of highlighting themes and relocated config options.
Zola is still on 0.x. The latest release is 0.23.6, published on September 12, 2026: the sixth patch release since 0.23.0, all within six weeks. The repository is not archived and was still getting commits in October 2026.
Search stops at the index. Setting build_search_index produces an index for elasticlunr or fuse.js, but the docs state that Zola does not provide the JavaScript or CSS that queries it and displays results. Chinese and Japanese indexing means recompiling Zola with dedicated features, which add roughly 5 MB and 70 MB to the binary. Pagefind works the other way round: it indexes the built HTML and ships its own UI components.
The README itself calls multilingual support basic. A file declares its language through its name (post.fr.md), and nothing falls back from one language to another, so every _index.md in the default language needs a translated twin.
Zola started as a reaction to Hugo. According to the README, Zola and its Tera engine grew out of an intense dislike of Go's template engine, and therefore of Hugo, which the author had used for six or more sites.
Two licences share the repository. Code added after 0.22 is under EUPL-1.2, while code that existed before commit 3c9131d remains MIT, including in later releases.
