Jekyll
Simple, blog-aware static site generator
Jekyll is a popular open-source static site generator that transforms Markdown and Liquid templates into static blogs and websites. It pioneered the modern static-site approach and integrates with GitHub Pages.
Key features
- Blog-aware by design
- Markdown and Liquid templating
- Large plugin ecosystem
- GitHub Pages support
Pros & cons
Strengths
- Mature and well documented
- Great for personal blogs
Trade-offs
- Slower builds on large sites
- Ruby toolchain required
Jekyll replaces
Last reviewed Aug 26, 2026 · 984 words
Choose Jekyll in 2026 for one of two reasons: you publish on GitHub Pages, where it builds for free with no pipeline to maintain, or you already have a Ruby toolchain and want the largest back-catalogue of themes, plugins, and answered questions any static generator has accumulated since 2008. If neither applies and you are starting a self-hosted blog from a blank directory, Hugo does the same job as one binary and builds an order of magnitude faster, and I say that as someone whose first static site was Jekyll and who still runs one. The MIT licence, the Markdown-plus-front-matter model, and the _posts convention Jekyll invented are now the shared vocabulary of the whole category; what you are choosing is the Ruby runtime that comes with them.
Ruby is the install; Jekyll is just a gem
Nearly every bad Jekyll experience is a Ruby experience: a system Ruby that is too old, gems installed as root, native extensions failing to compile. On Debian or Ubuntu, this sequence follows the official docs and avoids all three:
sudo apt install ruby-full build-essential zlib1g-dev
echo 'export GEM_HOME="$HOME/gems"' >> ~/.bashrc
echo 'export PATH="$HOME/gems/bin:$PATH"' >> ~/.bashrc
source ~/.bashrc
gem install jekyll bundler
jekyll new blog && cd blog
bundle exec jekyll serve --livereload
The preview is on port 4000 and rebuilds on save. On macOS, skip the bundled system Ruby entirely and install one through Homebrew or a version manager, then do the same GEM_HOME trick. Always run Jekyll through bundle exec so the gems from the site's Gemfile.lock are the ones used; the bare jekyll command picks whatever is newest on the machine and that mismatch is the classic "works here, breaks in CI" story. If you would rather not touch Ruby on the host at all, the official ruby:3 image builds a site in one line: docker run --rm -v "$PWD:/site" -w /site ruby:3 sh -c "bundle install && bundle exec jekyll build".
GitHub Pages runs Jekyll 3 with a plugin allowlist
This is the trap the catalogue's "GitHub Pages support" highlight does not mention. The built-in Pages build uses the github-pages gem, which pins Jekyll to the 3.x line and permits only a fixed list of plugins. Jekyll 4 features and any plugin outside that list are silently ignored, and people spend an evening wondering why their site renders differently from the local preview. The fix is to switch the repository's Pages source to GitHub Actions and use the starter Jekyll workflow, which runs whatever Gemfile you specify and deploys the built artifact. Self-hosting removes the constraint entirely, since the server never sees Ruby.
Posts, front matter, and the three plugins every blog needs
Content goes in _posts/2026-08-26-my-title.md with YAML front matter at the top; layouts in _layouts, partials in _includes, structured data in _data, and everything is wired through _config.yml. A minimal config that gets the SEO plumbing right on day one:
title: A Blog
url: https://blog.example.com
permalink: /:title/
plugins:
- jekyll-feed
- jekyll-seo-tag
- jekyll-sitemap
Add those three gems to the Gemfile, put {% seo %} in the layout's <head>, and you have an RSS feed, Open Graph and JSON-LD tags, and sitemap.xml with no further work. permalink: /:title/ drops the date from URLs, which you will want the first time you update a post. Themes are gems too; the default minima is deliberately plain and swapping it is a one-line change, but a theme that also ships its own plugins will need the Actions build if you are on Pages.
Build time is the real con, and it scales with post count
Jekyll builds are roughly linear in page count and the constant is high: on my hardware a few hundred posts build in a handful of seconds, a couple of thousand take a minute or more, and every Liquid loop over site.posts inside a layout multiplies that. --incremental exists but is marked experimental and misses changes that affect other pages, so I do not rely on it. bundle exec jekyll build --profile prints a table of which templates cost the most, and the usual culprit is a related-posts or tag-cloud include doing a full scan per page. For a personal blog this never matters; for a 5,000-page site it is why Hugo vs Jekyll has a clear answer in one direction.
Self-hosting means hosting the output, not Jekyll
There is no Jekyll server to run. bundle exec jekyll build writes plain HTML into _site/, and that directory is the entire deployment. Build it in CI (Gitea Actions or Woodpecker both handle a Ruby container) or on your laptop, then rsync -av --delete _site/ server:/srv/blog/ and serve it:
blog.example.com {
root * /srv/blog
file_server
encode zstd gzip
}
That is a complete Caddy site with automatic TLS. The server has no runtime, no database, and nothing to patch, and a plain HTML page behind gzip passes Core Web Vitals without effort, which core web vitals on static sites goes into. Jekyll's Ruby dependency lives on the build machine only, which is the strongest argument for keeping it if you already like it.
What I'd do
On GitHub Pages: keep Jekyll, switch the build to Actions so you can use Jekyll 4 and any plugin, add the three plugins above, and never think about it again. Self-hosting from scratch with no Ruby on the machine: start with Hugo instead. Self-hosting with an existing Jekyll site: do not migrate, it is not worth the broken URLs; build in CI, rsync to Caddy, and enjoy a blog whose server side needs zero maintenance.
Compare Jekyll
31 head-to-head comparisons.
- Jekyll vs Hugo
- Jekyll vs Astro
- Jekyll vs Gatsby
- Jekyll vs Hexo
- Jekyll vs Halo
- Jekyll vs Eleventy
- Jekyll vs Zola
- Jekyll vs Pelican
- Jekyll vs Typecho
- Jekyll vs Gridsome
- Jekyll vs Metalsmith
- Jekyll vs Publii
- Jekyll vs Middleman
- Jekyll vs Lektor
- Jekyll vs Wintersmith
- Jekyll vs DocPad
- Jekyll vs Nikola
- Jekyll vs Scully
- Jekyll vs Bashblog
- Jekyll vs Hexo Admin
- Jekyll vs Bridgetown
- Jekyll vs HTMLy
- Jekyll vs BlogEngine.NET
- Jekyll vs Textpattern
- Jekyll vs Blogofile
- Jekyll vs Acrylamid
- Jekyll vs PluXml
- Jekyll vs Nibbleblog
- Jekyll vs Serendipity
- Jekyll vs FlatPress
- Jekyll vs Dotclear
Similar blogging platforms apps
Hugo
Blogging PlatformsBlazing fast static site generator for blogs and sites
Replaces WordPress, Medium
Astro
Blogging PlatformsModern static site framework for content-driven sites
Replaces WordPress, Medium
Gatsby
Blogging PlatformsReact-based static site and blog generator
Replaces WordPress, Medium
Hexo
Blogging PlatformsFast and simple blog framework powered by Node.js
Replaces WordPress, Blogger
Halo
Blogging PlatformsPowerful and easy-to-use open-source website builder
Replaces WordPress, Medium
Eleventy
Blogging PlatformsSimpler static site generator for fast websites
Replaces WordPress, Medium