From Jekyll to Hugo

I have completed the migration of this site from Jekyll to Hugo. After using Jekyll for a few days, I quickly discovered many of its limitations, and felt it would be useful to provide a bit of a comparison.

  • Common
    • Both are static site generators, and use fairly similar configuration formats.
    • Both prefer Markdown for page markup. Both also contain specific implementations of Markdown, and so will likely differ slightly in their interpretation of the poorly-defined ill-conceived “specification” of Markdown. As long as I stick with one particular implementation, I can probably get reasonable results.
    • Jekyll is written in Ruby, and Hugo in Go. There seems to be a lot of influence of Rails’ convention over configuration in Jekyll. I found it more difficult to do things differently than the particular conventions it was set up for. To me, this also has the advantage that Hugo compiles to a single executable, and doesn’t require an external environment manager (bundle) to be able to run the tool. I can copy the built executable to other machines and just run it.
    • Using Jekyll for blog-style writing only seems to work with a small subset of the themes. It seems that the blog support is more a feature of particular themes than of Jekyll itself.
    • Themes in Jekyll are managed through gem dependencies. This restricts the themes available within Github pages (basically one blogging theme). In Hugo, the themes are in a subdirectory, and are typically brought in through a git submodule.
  • Disadvantages of Hugo
    • The BlackFriday Markdown parser in Hugo is, unfortunately, strict about requiring 4 spaces for indentation of nested lists. This tends to look weird in the input source, and two character indented lists get flattened. Apparently, the creator of Markdown thought tabs were 4-spaces (they are not), and that lists should be indented with tabs.
  • Advantages of Hugo
    • Hugo also supports Emacs org mode as a markup format. I have not experimented with this, but it may be useful for rendering data that is primarily list oriented.
    • Hugo seems to be a bit better at typography. For example, it converts plain ASCII quotation marks into typography quotes, as in “This is quoted”. It recognies two hyphens as an n-dash: 5–7; three hyphens as an m-dash—such as this.
    • There seem to be a lot more support for things built-in to Hugo. Perhaps these are available as extensions to Jekyll. I will perhaps investigate using LaTeX style math if I ever need that.

I’ll perhaps update this post a bit as I discover other things I like or dislike about Hugo.

About David Brown
Software engineer and Jazz musician, currently living in the Denver, CO area.
comments powered by Disqus