Choosing a static site generator

They all do the same thing. Pick the one whose build will still run when you come back to it.

Every generator takes content, applies templates and writes pages. The differences that matter are about maintenance rather than capability.

Source content and templates producing a folder of finished pages.
Source content and templates producing a folder of finished pages.

They all do the same thing

Content in a source format, templates describing the pages, configuration, and a build command that produces a folder of files.

Feature comparisons between them are mostly about which extras are built in, and those extras are rarely the deciding factor. The deciding factors are the language and the dependencies.

Choose by Not by
Language your team reads Benchmark build times
Number of dependencies Number of plugins
Whether it builds in three years Popularity this year
Content in plain text Theme gallery size

The language matters more than the features

Something in the build will break, and somebody will have to read the error.

If that error is in a language nobody on the team uses, a small problem becomes an afternoon and eventually becomes a reason the site stops being updated.

Choose the ecosystem your team already reads. That single criterion outweighs most feature differences.

Dependencies decide whether it still builds

The practical failure with static sites is not the hosting. It is coming back after two years, running the build, and watching it fail.

Generators distributed as a single binary tend to keep working. Generators with a large dependency tree in a fast-moving ecosystem frequently do not: a dependency has a security advisory, the runtime has moved on, and a plugin was abandoned.

Neither is wrong, and the difference should be a known cost rather than a surprise.

Two builds run two years later, one succeeding and one failing on dependencies.
Two builds run two years later, one succeeding and one failing on dependencies.

Keep content in plain text

Whatever you choose, keep the content in plain text with light markup, separate from the templates.

Then the generator is replaceable. Changing it means rewriting templates, which is a week, rather than migrating content, which is a project.

Content outlives every tool that renders it, and treating it that way is the most useful structural decision available.

Build speed is mostly irrelevant

Below a few hundred pages, every generator builds in seconds.

The benchmarks comparing them run at tens of thousands of pages, which is not the situation almost anybody is in. Choosing on build speed for a fifty-page site is optimising something that was never a constraint.

When you do not need one

Under about ten pages, a generator is machinery around a small amount of markup.

Write the pages, share a stylesheet, and add a generator when repeating the header across eleven files starts to hurt. That moment is unmistakable when it arrives.

For the surrounding ground, see What people mean by a static site and What a static website is.

Put it at an address

Match the language to whoever maintains it, count the dependencies, keep content in plain text and separate, ignore build speed below a few hundred pages, and skip the whole category under ten pages.

Questions people ask

What does a generator do?

Takes content and templates and produces finished pages at build time. The output is files, with nothing running when somebody visits.

How do I choose between them?

By the language your team already reads, and by how much of an ecosystem the build depends on.

Which builds age best?

The ones with the fewest dependencies. A single binary or a small dependency tree will still build in three years; a large one may not.

Does build speed matter?

Only above a few hundred pages. Below that everything is fast enough and speed is a poor reason to choose.

When is a generator unnecessary?

Under about ten pages. Writing them directly is less work than maintaining a build.

Keep reading