Having become nearly ubiquitous thanks to GitHub Pages, Jekyll is something I’ve had to put up with often enough that I’ve developed a number of strategies to avoid polluting my system with brittle Ruby gems over the years.

These days I tend to use bundler, but even that is fraught with breakage and all too frequent corner cases. Still, one manages…

Here is my typical setup:


source ''
gem 'github-pages'


# You should have bundler installed (sudo gem install bundler on vanilla OSX)
# On Yosemite, brew install libxml2 libxslt is your friend, too.

# On Windows/Cygwin, you need to make sure these are installed:
# - ruby-bundler
# - libffi-devel
# - libgmp-devel
# - libxml2-devel
# - libxslt-devel
# - libiconv-devel
# ...and that your PATH includes ~/bin.
# A clean install might need these:
# zlib-devel openssl openssl-devel libyaml-devel libyaml0_2 sqlite3 make libtool gcc-core autoconf automake bison m4 mingw64-i686-gcc mingw64-x86_64-gcc cygwin32-readline libffi6 libffi-devel cygwin32-libffi pkg-config python curl patch bash-completion libcrypt-devel git openssh python-libxml2 python-lxml python-libxslt vim vim-commonset wget libreadline7 libreadline-devel
# Prior to March 2015, nokogiri needed to be installed before the bundle like this:
# gem install nokogiri -- --use-system-libraries --with-xml2-include=/usr/include/libxml2 --with-xml2-lib=/usr/lib --with-xslt-dir=/usr/include/libxslt --with-iconv-include=/usr/include --with-iconv-lib=/usr/lib

    bundle install

    bundle exec jekyll serve --watch

See Also: