Observations about the Zola static site generator after a month
25 February, 2025 - Categories: Zola - Tags: templates, RSS, Rust, static site generators
By Steven Rosenberg
I thought I'd have a lot more posts here over the last month than the one that appeared when I started this site. But aiming to make this blog more "real" and researched has stalled my effort to finish the entry on how I fixed my theme's RSS code so either or both of the atom.xml
and rss.xml
feeds render.
That post will appear. Eventually. But now it's time for quantity, not quality.
What's my general feeling about Zola? At this point I am mostly comparing it to (what I know about) Hugo.
At no time have I been a super-active Hugo blogger, but I have maintained Hugo sites with a handful of themes for a few years at this point. I always mean to write more. I don't create as many social media posts as I used to, but I still write a fair amount (on ruby.social and gts.passthejoe.net.
There's a certain ease in writing and publishing on social media sites. You type into a box, add a link and a few hashtags and click "Publish." Blogs have a lot of options, but it should still be easier to put an entry together that it is right now for everything from WordPress to Hugo and Zola. Social media software has taken away a lot of the friction of putting your thoughts out into the world, and I think blogging should try to get in on that simplicity and ease.
It's all about getting the idea out there quickly and with as little fiddling as possible.
Could Zola help me in this regard? This part of the blogging workflow is just about the same in Hugo. Both are static site generators. One is coded with Golang, the other with Rust. For my purposes, that doesn't matter very much.
Users of all the SSGs seem to gravitate toward a git-based workflow. You write the posts locally and commit them to a remote git repository, where a CI/CD system (continuous integration/continuous deployment??) builds the site and makes it available to a web server.
That's more complexity than I want. I'm running my Zola site the same way I run Hugo: I have everything on my laptop — mirrored from there to two other local systems via Syncthing. I write the posts, build the site and then send the public files to the web server via an rsync script.
As I do when I discover (or return to) a static site generator, I look at all the themes and try to find something that looks and works as much like I want it to as possible.
That part is harder than it looks.
As I wrote in the first post on this site, I went for the Hook theme.
It does fulfill a lot of my wants in a blog theme, and since I've started, I have been able to:
- Add my byline to entries
- Fix the rendering of atom.xml and rss.xml feeds
- Use the
[taxonomies]
section in front matter to simplify the use of categories and tags in posts - Confirm that
draft = true
anddraft = false
works in front matter for posts
With Hook, I can easily add pages to the links list, either in config.toml
or in post front matter. Pages for tags and categories are already there. The main page [won't be clogged with entries, and there's an archive page where everything will live.
I can run zola serve
to see how it's going to look, and then create the html with zola build.
It's all super fast.
So far, the relative simplicity of Zola has been one of its biggest draws. I'm able to figure out themes and modify them non-destructively by copying template files from /themes/zola-hook/templates
into /templates
and working on them over there.
And while Zola doesn't have a lot of documentation, it also doesn't have a lot of unhelpful documentation
. I'm picking up a lot by looking at other themes — especially those maintained by the Zola project — and from the Tera template engine's own documentation.
Zola 0.20 was just released, and it's hard to see if there were any significant changes. The project moves slow. Releases aren't coming out all the time like with Hugo, and if the project stays slow and steady — as opposed to abandoned — I will be happy. Like Hugo, Zola is flexible and programmable. The same number of batteries are not included, but there are more than enough for what I'm trying to do.
(To be continued ...)