23 Oct 2013, 09:30

Static site generator

For the sailing association I am a member of, we are to build a new site. Creating the first pages, I quickly had the issue of copy/pasting html code from one file to another when I changed some common element (navigation menu, etc). Not willing to invest in a CMS at that step (not later for the need we have) I asked about tools to do a simple thing : allowing me to include some html code so that I could split HTML files and apply the DRY principle.

Below a summary of the tools mentionned :

  • Tacot : coded in python, it was exactly what I had in mind ; a cool feature is the "autoreload" which detectes when files are changed and it also uses the Mako template language which allows you to have some logic in your html.
  • Clay : coded in python and was exactly also what I had in mind. The only advantage over tacot, is the usage of the Jinja template language (which I'm familiar with as it's the one used in Django (almost) and Flask)
  • Pelican : coded in python but for what I have in mind it still seems more blog oriented than page oriented.
  • A solution based on Flask / Frozen-Flask : could be a interesting solution but would require too much work to start having something. It's more a CMS-like solution from which you generate a static html version. Too "complex"  for my needs.
  • Jekyll : coded in ruby, seems a very complete solution (autoreload, syntax highlighting, permalink, links, etc). If you want more than Jekyll for blogging purposes, you can have a look at octopress too.
  • Web Server (Apache / Nginx / ...) + SSI : I wanted pages to be generated at build level and not at rendering one and I would like to avoid being dependent from a given webserver at developement stage.
  • PHP : I could have used the require/include functions but same as above, I do not want to have a technical dependancy (I want only html files at the end) and I do not want to require PHP for such a need.
  • Punch : based on node.js but seemed too complex for my needs (or I missed something)

After a quick review, I chose Clay so far, which is at it defines itself : a rapid prototyping tool. It fits perfectly my current needs.