How I chose a static site generator

website
Published

September 9, 2024

Recently, I wanted to update my website to look a bit more polished (and support additional features such as automatically generating pages for my publications). In the end I decided to completely switch from building my website with Jekyll to nikola instead. This post explains my thought process for this (in case anybody else is considering a similar switch).

Main findings

My website is fairly simple, so I only considered static site generators. When choosing a generator, I considered:

  • That my main programming language is python (and I have little knowledge of other languages)
  • I only needed a basic static website
  • I wanted to support a blog, a list of publications, a CV, and a few miscellaneous pages

Here are my thoughts on the main static site generators I considered:

Jekyll

Pros:

  • Simple
  • Supported out-of-the-box by GitHub pages
  • My website was already in Jekyll
  • Lots of nice themes, including a nice academic one

Cons:

  • Some issues previewing locally: one needed a different version of ruby than the default version on Mac, and then needed to install a bunch of “gems”. I remember this being a pain to set up.
  • I don’t know the ruby programming language so it’s hard for me to interpret and modify the features of the website (for example to generate a publication page from a bibliography file). I would likely need to look everything up.

Hugo

Pros:

  • Lots of themes available
  • Popular and well-supported
  • Good GitHub pages support

Cons:

  • I don’t know Go so it seemed like it might be hard to do anything custom

Pelican

Pros:

  • python-based
  • Decent number of themes

Cons:

  • A few nice features (like multi-lingual pages and rendering jupyter notebooks) were apparently harder to set up than in Nikola

NOTE: my consideration of Pelican was a bit superficial.

Nikola

Pros:

  • python-based
  • Package is very small: not too many hidden features
  • There are a few pre-existing add-ons for publications
  • Good multi-lingual support
  • Decent documentation
  • Out-of-the-box support for jupyter notebook pages
  • Easy to run locally (just one python package)

Cons:

  • Limited selection of templates
  • Default is for the site to just be a blog, so making a “website + blog” already required a bit of customization
  • Templates themselves seem hard to customize

Conclusion

My impression was that all of the static site generators I considered were pretty good. In the end I chose Nikola. My main reason for this was that the out-of-the-box website looked decent and had the features I needed. My guess was that if in the future I needed to do anything fancier, it would be easier to inspect the package and figure out how to do it than if I used another framework (especially one that was not python-based). Hopefully my decision is vindicated in the future.

If you find this list helpful, please do let me know!