How I chose a static site generator

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!