Brool brool (n.) : a low roar; a deep murmur or humming

A Whirlwind Tour of Static Generators

 |  blog

Wordpress blares out notifications every time I log in — look, there is one now! — and eventually the constant need to upgrade and begins to wear and engender a slight paranoia about being hacked, making me look into alternate blogging platforms.

Because, clearly, the reason I haven’t written more is because of the blogging platform I’m using. To be honest, this is more than yak shaving, and really wanders into the area of a whole-day spa for yaks.

My requirements were simple: none! Just need to write content and have it published somehow.

Static generators are the new hotness — you can’t wander into the front page of HN without hitting at least one new one — although the road to blogging is littered with the bodies of abandoned generators. I fortunately was able to avoid the temptation of writing my own, although I have to admit that it was a close thing, especially after learning about Frozen-Flask and Flatpages: just write the blog dynamically and then Flask can “freeze” your app into static files. RSS seemed like a pain, though.

(Just for the record, Ghost is nice. Really nice! No API, though, and no defined static commenting system. Beautiful default theme. Will probably come back to this in a while.)

So, I basically worked down the systems at Staticgen in descending popularity.

Jekyll (and Octopress) are the category leaders. But, posts have to be prefixed with the date, and it looks like this is a hard restriction. Ugh. Really, just ugh. Also, generation seems really slow but given that I’m adding an article only a few times a year it seems churlish to complain about slow generation.

Pelican seems like a natural fit, since it uses Python. But, in playing around with it, I couldn’t get the theme I liked to work with pagination at all, instead just getting weird errors that were hard to track down. Update: Fixed the pagination problem, but… no hierarchical categories (and it’s by design)

Hexo pleasantly surprised me. Really good documentation and really good support features — for example, hexo-migrator-wordpress for importing Wordpress sites, or stuff like hex-migrator-image to download images that are referenced. Generation is fairly quick and the design seems clean. This is a really nice project.

Metalsmith is worth visiting just to see the clearest abstraction of static blog generation on the home page of the web site. Seemed like overkill for my blog, though.

Hugo is written in Go and is just ridiculously fast. I mean, really, a magnitude faster than almost anything else. Sadly, no pagination support.

Still looking at this. If I’m smart I’ll just use Jekyll and squint whenever I look at those horrible date-prefixed filenames.

Updated 9/5: Also looked at Middleman (a nice system, use middleman-blog to jump start everything) and nanoc (mentioned on HN favorably, with a really clean and intuitive system for controlling generation — well designed but you end up having to implement a lot more stuff for a blog than some other generators) and played around with the possibility of using Gulp (interesting experiment, but that’s basically writing my own blog generator). Finally decided that my effort would be better spent on making content rather than worrying about the content container.

Updated 9/6: Just spent a couple hours trying to figure out why the Wordpress 4.0 upgrade broke my code blocks. Somebody is toying with me, I just know it.

Updated 10/10: Sigh. Switched to a custom program for my blog, which is absolutely the wrong way to go about it – why spend time when it has been done by so many others so much better? – but it turns out that the cognitive load for Python is less than the cognitive load for learning another static generator. If I ever get to posting more than one post a quarter I’ll revisit it.

Updated 1/20: Looked at Hugo again which is close but hit a limitation in the lack of MD5 for gravatar URLs, and Hugo does not really have any way to add plugins / custom functions. Also new on the horizon is Lecktor, which is a neat hybrid of a static generator with a local admin interface for editing. It has a slightly wonky schema for its content, though (every page must be in its own directory).


Comments are moderated whenever I remember that I have a blog.

birch | 2014-12-22 20:58:46
Discussion over the ghost api is still taking place at . I definitely think this will be out soon. Contact form, feedburner, and disqus are the ways I'm making it work for me - though I know disqus isn't a fav of everyone, it is at least convenient as many people do already have a disqus account or can easily connect via fb etc. I am definitely loving my self hosted and will soon be closing my WP blog down permanenently.
Agam | 2015-01-19 23:16:54
Thanks for the writeup. "... clearly, the reason I haven’t written more is because of the blogging platform I’m using." -- as someone who's embarrassed by years of yak-shaving, I get the sentiment. I went through Hakyll->Jekyll->Octopress and am now itching to return to Wordpress and just _never_ get involved in these discussions about which static website generator is _cooler_. Is hosted on Wordpress?
tim | 2015-02-08 22:11:14
Yeah. I'm embarrassed about using Wordpress, a bit -- kind of like a cook using a prepackaged mix, maybe -- but on the other hand I should probably be concentrating on content, which I've never been blessed with a surfeit of in the first place. :-)
Add a comment