I wanted to try out a Rust static site generator, so let’s walk through getting started with Zola.
For MacOs, you can use Brew:
brew install zola
For Arch Linux (yay!):
pacman -S zola
That was pretty painless.
The docs are very straight-forward. If I want to make a blog, I can follow the outlined steps.
zola init myblog
Now you’ll need to answer a few questions that are self-explanatory.
The Getting Started Guide now goes on to explain how to create templates and a folder structure.
The templating language looks like dozen others — which is a good thing!
But we want to add a theme and deploy the blog to Netlify, so let’s try that.
Install a Theme
I want to put my blog on a free Netlify domain via GitHub.
Let’s initialize a new Git repository:
cd zolablog git init
(You may need to configure your username and email address, if you haven’t done so before.)
Although the documentation does not spell it out, I’ll add a theme as a Git submodule.
Submodules is, in most cases, your best choice. You can easily pull in updated theme(s) when needed.
The feather theme looks pretty nice.
git submodule add https://github.com/piedoom/feather themes/feather
(If you want to update a git submodule, run
git submodule update --rebase --remote.)
Now, we need to edit the
config.toml to add the theme. Add this line:
theme = "feather"
Start the zola development server:
You’ll see your blog on
Adding Blog Posts
Luckily, the theme works out of the box (that wasn’t the case with all themes).
I’ll add a new blog post with some dummy text. For that to work, I need to add a new markdown file into the
We need to add some necessary frontmatter in
Example post (
+++ title = "My First Blog Post" date = 2021-08-08 +++ Bla bla bla
Deploy to Netlify
We’ll want to put that wonder of a blog on Netlify. Everyone should be able to see it!
I’ll use GitHub for source control and deployment.
Follow the instructions to add a new remote.
We also need a
.gitignore file which will ignore the
public folder. The
public folder is where the finished (built) blog will live, we don’t need it in source control.
echo "public" > .gitignore
Then we’ll add our work to the Git staging area and push it to GitHub:
git add -A git commit -m "Initial commit" git push origin main
Zola has a section in the documentation that deals with Netlify.
We’ll need a
# You do need the `publish` and `command` variables. [build] publish = "public" command = "zola build" [build.environment] # Set the version name that you want to use and Netlify will automatically use it. ZOLA_VERSION = "0.14.0" # The magic for deploying previews of branches. # We need to override the base url with whatever url Netlify assigns to our # preview site. We do this using the Netlify environment variable # `$DEPLOY_PRIME_URL`. [context.deploy-preview] command = "zola build --base-url $DEPLOY_PRIME_URL"
If you run
zola build locally, the tool will create a
public folder which contains the blog. That’s why we are using
publish = "public".
The Zola documentation does not explain how to setup Netlify and how to connect your GitHub repository to Netlify.
But we can follow the guide on the Hugo documentation which also comes with a few screenshots. Please ignore everything that’s specific to Hugo.
When you use the Netlify webpage to import your GitHub repository, Netlify will automatically read the necessary settings from
netlify.toml. That means that you can keep to the default settings.
The documentation is pretty solid. If you’ve worked with static site generators before, the site explains what you need to know.
For total beginners, the documentation is too sparse. But newbies probably won’t use Zola anyway as it’s unlikely that a new programmer will learn Rust as a first language.
I like the sensible templating language and structure of a Zola project. Some of the extra features (link checker, search index) are neat.
All in all, I can see Zola as an alternative to Hugo.