Code @ DanielLakes.com

Beyond Hexo

Last updated: Aug 24, 2022
5 minutes
Original date: Aug 07, 2015

Author note: Since originally writing this, I’ve decided to move on to 11ty. See my post on that for more details.

So, pretty early on, I’ve started exploring alternative site generation tools. For the first two posts on the site, I’ve been using Hexo. Overall, pretty big fan. Unfortunately, there’s a few things missing that leave me in want of something better.

Yes, Jekyll is the elephant in the room. But brief research suggests it’s a little slower on generation. So perhaps it’s worth looking at alternatives.

That’s where our new contender, Hugo, comes in to play.

Let’s start off with a comparison. First up, my current tool, Hexo.

Hexo

Taken from the platform’s GitHub page:

A fast, simple & powerful blog framework, powered by Node.js. Features

  • Blazing fast generating
  • Support for GitHub Flavored Markdown and most Octopress plugins
  • One-command deploy to GitHub Pages, Heroku, etc.
  • Powerful plugin system

You can read more about Hexo’s features on their site.

For me, the real driving factor that made me choose Hexo over some of the other static site generators (SSG) was its lack of dependency on external data stores (ex: SQLite), the theming, and the speed.

However, a couple of things are less-than-ideal.

  • Non-English Development Team - Ok, I know I’m going to catch some flack for this one. Don’t get me wrong here, the work put in to Hexo is incredible. The plugins are varied and robust, core documentation is easy to follow – all great stuff.

    However, having several GitHub issues in a non-native tongue is a challenge. While Google Translate may be pretty fun, it’s not something I want to employ during my limited free-time.

  • Eccentric with Vagrant - Currently, the watch functionality (regenerates static markup on content change) doesn’t work within a Vagrant install on Windows. The project page seems to point towards VirtualBox as the culprit. To watch for changes, you have to actually run the command from your Windows box. Obviously, it’d be great if that could be self contained.

Hugo

Again, taken from the project’s GitHub page

Hugo is a static site generator written in Go. It is optimized for speed, easy use and configurability. Hugo takes a directory with content and templates and renders them into a full HTML website.

Sound pretty similar, right? Let’s dive a little deeper…

Hugo - Pros

  • Written in Go - In case you missed it, Go is the new hotness. The primary driver of container wunderkind Docker, Go has really taken off in the past few years. Everyone’s talking about it. I’m not entirely prone to the flash-in-the-pan, but I also recognize the need to keep abreast of the latest developments in the field.
  • Major Contributor - Hugo is written by Steve Francia, aka spf13. He is currently the Chief Operator of aforementioned Docker. Needless to say, this project will have some weight thrown behind it.
  • English-speaking community - This may be lazy, but being able to search for issues/examples/themes in my native language is always nice.

Hugo - Cons

There are still a few snags to Hugo, unfortunately.

  • Searching is Hard - Each project I’m comparing today has the misfortune of sharing names similar to other popular search terms. For Hexo, it’s the Hexo Plus, a 2014 Kickstarter project. For Hugo: Victor Hugo, Hugo Awards…you get the idea. Jekyll fares no better, only placing a bit higher due to sheer popularity. Tacking on 'blog' to the searches helps, though.
  • Non-NPM - One nice thing about Hexo was that it all ran via Node.js. As such, it had the benefit of Node’s package manager. Hugo, on the other hand, is primarily focused on a binary installer (though packages are available). This leads to a slightly more complex install process for Vagrant/Pupppet setups.

Admittedly, though, the install process sorta killed it for me. Blew up on the launch pad. Perhaps I’ll research it later and report back.

Jekyll

As mentioned previously, Jekyll is gold standard here. It’s what GitHub uses for GitHub Pages (if you’re not familiar, it’s the sites with USERNAME.github.io URLs).

From their site:

Jekyll is a simple, blog-aware, static site generator. It takes a template directory containing raw text files in various formats, runs it through a converter […] and spits out a complete, ready-to-publish static website suitable for serving with your favorite web server.

Right off the bat, I’m pleased with the install. Being a Ruby gem, it hooks quite nicely into a Vagrant dev box. And, for all I’ve read about Jekyll’s speed, not that bad. To be fair, I’m not running a site with 1000s of posts. When we get there, that bridge can be crossed.

Jekyll - Pros

  • Themes Aplenty - Jekyll has a whole directory of user themes, for whatever aesthetic you please.
  • Travis CI - Jekyll is able to integrate with continuous integration for testing generated sites. Perhaps a touch overkill on a one-man site, but a nice feature, if only for the valid link checking.

Jekyll - Cons

  • Allegedly Slower - Several posts discussing Hexo, Hugo, and other SSGs noted that Jekyll got a little slow. Most were written before the recent release of Jekyll 3, however.
  • Limited Plugin Availability - If you’re using GitHub Pages for generation, plugins are a little sparse. Of course, if you’re using the tool standalone, this isn’t an issue.

Final Thoughts

For now, I’m sticking with Hexo. It’s good-enough, without forcing me to sink more time into yet-another-install. If I start to be frustrated with that approach, or find myself in want of features not available, I’ll move on to another platform.