When I decided to start a blog, I started looking for a blogging framework. Instead of choosing something like Wordpress or Blogger, I wanted to try something else. A desire not to re-invent the wheel lead me to look for an existing solution rather than making one myself. This lead me to my first discovery:
Static sites have a lot of upsides
Static site generators aren’t for everyone. For starters, they usually require a bit of technical ability, more so than Blogger or Wordpress at least. That’s not to say that they’re for programmers only, but the ability to use the command line, or a willingness to blindly copy instructions from the internet1 is almost universally required. For me I didn’t see that as an issue. In my work, I use the command line extensively, so that bar had already been met.
Static sites are however, faster, more secure, and cheaper to host. Without the need for a database and server side processing, you eliminate many of the more severe security issues that dynamic sites are vulnerable to (e.g. injection, stored xss), as well as making response times faster. The other upside is that you can host a static site from just about anywhere, often very cheaply. An S3 bucket will cost a few cents a month to host your site, or Github Pages will host it for free.
So what are the options?
There are already plenty of comparisons for these, so I won’t go into them in detail, but for what I wanted, each had its pros and cons.
When I first looked at Jekyll, it was close to2 the release of Jekyll 3.0, which had some potential breaking changes when compared to Jekyll 2. I decided to wait until version 3 was released so that I wouldn’t have to worry about migrations. Due to its popularity, there are also a great range of themes and plugins available. My biggest issue with Jekyll is that it wants to “own your world”. Things like posts needing to be named with a date and post title are annoyances that I don’t think are neccessary given that these can both be defined in the front matter of the post.
Middleman on the other hand is incredibly flexible and versatile. However, it’s not designed for blogs. Instead, there is a blogging plugin which allows you to write posts in markdown and compile them to HTML. The downside is that it all needs to be set up manually, which isn’t so much difficult as it is time consuming. It also suffers from the fact that blogging in middleman is relatively immature, and the ecosystem of extensions and plugins isn’t as extensive as Jekyll or Hexo.
Hexo strikes a decent middle ground, being both extensible and supporting a lot of functionality by default. The ecosystem of plugins for Hexo is extensive, and due to the fact that it runs on node.js, it’s also incredibly performant. However, theming in Hexo is again time consuming, and I didn’t like any of the Hexo themes I was able to find.
I reached a decision
By the time I’d
given up on decided against creating my own Hexo theme,
Jekyll 3 was out and becoming increasingly popular. Despite my reservations
about Jekyll, the extensive library of free themes available made Jekyll the
easy decision. It was relatively easy to find one that I liked and was happy
with after a little bit of tweaking. I came to the conclusion that getting
started was better seeking perfection. As all my posts are written in markdown,
changing platforms shouldn’t be too difficult if I decide to do so in the