My Take on Jekyll

When I wanted to build a static blog I tried Jekyll first. I think that was a marketing accomplishment for its author(s). Thanks to all the buzz that it received following its release in late 2008, Jekyll is the first software I think of when I think of “static blogging.” Its popularity was probably boosted thanks to both GitHub’s support for Jekyll in GitHub Pages as well as a spate of WordPress vulnerabilities.

I acknowledge that Jekyll was far from the first “static site generator” or even “static blog generator.” Consider, for example, Blosxom which was around at least by 2002, or nanoc which was first released in 2007. Nonetheless, thanks to all the buzz around Jekyll, it became my prototype for “static blogging.” It then took me until 2014 to get around to taking it for a spin, and eventually rejecting it.

How I Set Up Jekyll

My use of Jekyll was pretty much by the book, but I did add some niceties. Here’s my Gemfile:

ruby '1.9.3'
source 'https://rubygems.org'
gem 'jekyll'
# When just playing with e.g. Compass and you don't need a whole
# "asset pipeline," it's much faster to use e.g. guard-compass than
# jekyll-assets, since Jekyll is... slow-ish.
#gem 'jekyll-assets'
gem 'compass'
gem 'guard'
gem 'guard-jekyll-plus'
gem 'guard-livereload'
gem 'guard-compass'

I included Guard because I wanted guard-livereload to reload my browser automatically when I changed some content, which made for much faster and more pleasant development, particularly when changing templates and CSS. I used guard-jekyll-plus because I wanted to run just one process to both make Jekyll regenerate changed files and also to trigger browser reloading. I also hoped to save some start-up time by not just having Guard run jekyll build. Finally, I decided to use Compass to make CSS a bit more pleasant to write, and also to take advantage of Compass’s “reusable patterns.”

Use of guard-jekyll-plus currently forces you to use pre-2.0 Guard. I suspect that, in turn, may have led me to step down from Ruby 2.1.0 to 1.9.3, after having problems that I attributed to running older versions of Guard and its dependencies in the latest Ruby. (I regret not having taken better notes on what, exactly, was breaking under 2.1.0.)

My Guardfile:

# Holy shit do not change my Emacs mode line color.
notification :off

guard "jekyll-plus", serve: true do
  watch(/.*/) {|m| (m[0] =~ %r{^_site/}) ? [] : m}
end

guard "compass", compile_on_start: true do
  watch(%r{^_sass/[A-Za-z0-9_][^/]*\.scss$})
end

guard "livereload" do
  watch(%r{^_site/.*})
end

My goal with this configuration was to be able to modify an SCSS file and have that trigger processing it with Compass. That would then trigger Jekyll to rebuild, which would in turn trigger a reload in my browser.

What I Like about Jekyll

As I said before, Jekyll defines my prototype for static blogging, so a lot of what I like about Jekyll is really what I like about static blogging in general:

Jekyll has other very nice features that aren’t necessarily implied by “static blogging” such as:

There are now many tools with these features, though. What features does Jekyll have that set it apart from its competitors?

If you want to publish to GitHub Pages, its support for Jekyll may be another good reason to use Jekyll, though I know of no reason you couldn’t use another static blog generator yourself and push its results to GitHub.

What I Liked Less about Jekyll

I ended up not using Jekyll for my blog. Some reasons why:

I did also toy with Pelican and Octopress, but I was looking for a minimal base to build upon, and they were both much more complex by default than Jekyll.

I ended up using Middleman, which I’ll post about in the future.

  1. I haven’t actually read Slashdot seriously in years, but Wikipedia still calls it the Slashdot effect, and I’m pleased to grant Slashdot a place in my vocabulary, out of respect.

  2. Actually, reStructuredText is pretty OK, but its lack of nested inline markup drives me up a wall, and the workarounds are insane. The language overall seems unnecessarily verbose compared to Markdown, too, but I could probably live with that.