Jekyll 4.0.0 Released

Hi! 👋 I bring some good news! Jekyll 4.0.0 is finally here! 🎉

There’s quite a bit in this release to unpack, so let me hit the high points quickly:

  • Ruby 2.4.0 or greater is now required.
  • Rouge 3.0 or greater is now required for syntax highlighting.
  • Jekyll builds should be much faster.
  • Kramdown 2.1 is now the default markdown engine.
  • Sass processing should be faster.
  • We dropped support for a lot of stuff, specifically:
    • Pygments
    • RedCarpet
    • RDiscount

Alright, so with the high points out of the way, let’s get into the details a little bit.

Cache all the things! 💰

While some optimizations first made an appearance with Jekyll 3.8.0, Jekyll 4.0 takes it to another level altogether.

Jekyll 4.0 caches the processing done by Liquid in memory. So every Liquid template is processed only as required. If you have 10 pages depending on a single layout, the layout is cached and that data is then rendered as per the 10 different contexts of the individual files.

There’s also a disk cache! Jekyll can now cache data to disk to avoid repeated processing of content that doesn’t change between build sessions. Currently, this is limited to markdown. So while the very first build will take a certain amount of time, consequent builds for content that hasn’t changed will take much less time due to the disk-cache. Disk caching is disabled for safe mode, however.

Super-powered content transformations 💪

We’ve upgraded Sass support so it should be faster. There’s also support for sourcemaps now! Under the hood, our Sass support uses the SassC library now, which is supported directly by the Sass team, which should mean better support for everybody in the long run.

Kramdown is updated to version 2.1. This also brings with it a bunch of changes to the Kramdown configuration, as the Kramdown team have extracted a fair number of features into separate gems. Support for GitHub Flavored Markdown is enabled by default, but if you’re using another Kramdown extension in your site, you’ll likely need to update your plugin configuration. See the upgrade guide for more details.

The link and post_url tags no longer need site.baseurl prepended every time they’re used. Those tags now use our relative_url filter to take care of this for you. Existing uses of the prepending pattern will break though! Sorry! :sweat_smile:

A few other smaller features when it comes to content:

  • The link tag understands Liquid variables in the same fashion our include tag does now.
  • Disable Liquid processing for a particular page / document by adding render_with_liquid: false to its front matter.
  • Liquid’s binary and and or operations can be used in the where_exp filter for more powerful filtering

There’s some goodies for theme community as well. Developers may now bundle a config.yml into their theme-gem to provide some boilerplate configurations for the theme. Like other resources in the theme, these configuration values can also be customized at the user’s end.

Check out the full history and the various pull requests for more details on all the enhancements and bug-fixes.

Upgrading 📈

First, read the upgrade guide!

Next, Edit your project’s Gemfile to test Jekyll v4.x:

gem "jekyll", "~> 4.0"

Then run bundle update to update all dependencies. Unless you’re using third-party plugins that haven’t yet added support for Jekyll 4.0, you should be good to go.

Plugins and themes authors must relax the jekyll dependency in their gemspec file to allow for Jekyll v4.0:

spec.add_runtime_dependency "jekyll", ">= 3.6", "< 5.0"

If your favorite plugin hasn’t relaxed that dependency yet, please gently encourage them to do so. :slightly_smiling_face:

Have questions❓

Please reach out on our community forum

Thank you!! 🙇

Jekyll would not be possible without the many people who have taken the time to write issues, submit pull requests, create themes, answer questions for other users, or make their own sites using our project. Thanks to all of you who contribute, no matter how small you think your contribution might have been.

In addition, special thanks to the 139 contributors who made this release possible via a pull request submission (in alphabetical order): Aidan Fitzgerald, Akshat Kedia, Ale Muñoz, Alex Wood, Alexey Kopytko, Alexey Pelykh, Ali Thompson, Ana María Martínez Gómez, Ananthakumar, Andreas Möller, Andrew Lyndem, Andrew Marcuse, Andy Alt, Anne Gentle, Anny, Anuj Bhatnagar, argv-minus-one, Arjun Thakur, Arthur Attwell, Ashwin Maroli, Behrang, Belhassen Chelbi, Ben Keith, Ben Otte, Bilawal Hameed, Bjorn Krols, Boris Schapira, Boris van Hoytema, Brett C, Chris Finazzo, Chris Oliver, chrisfinazzo, Christian Oliff, Christoph Päper, Damien Solodow, Dan Allen, Dan Friedman, Daniel Höpfl, David J. Malan, David Kennell, David Zhang, Denis McDonald, Derek Smart, Derpy, Dusty Candland, Edgar Tinajero, Elvio Vicosa, ExE Boss, Fons van der Plas, Frank Taillandier, Gareth Cooper, Grzegorz Kaczorek, Haris Bjelic, Hodong Kim, ikeji, Isaac Goodman, Jacob Byers, Jakob Krigovsky, James Rhea, Jan Pobořil, jess, jingze_lu, Joe Shannon, Jordan Morgan, Jörg Steinsträter, Jorie Tappa, Josue Caraballo, jpasholk, Justin Vallelonga, Karel Bílek, Keith Mifsud, Kelly-Ann Green, Ken Salomon, Kevin Plattret, krissy, Kyle Barbour, Lars Kanis, Leandro Facchinetti, Liam Rosenfeld, Luis Enrique Perez Alvarez, Luis Guillermo Yáñez, Ma HongJun, makmm, Manu Mathew, Mario, Martin Scharm, Matt Kraai, Matt Massicotte, Matt Rogers, Matthew Rathbone, Maxwell Gerber, Mertcan Yücel, Michael Bishop, Michael Hiiva, Michelle Greer, Mike Kasberg, Mike Neumegen, mo khan, Monica Powell, Nicolas Hoizey, Nikhil Benesch, Nikhil Swaminathan, Nikita Skalkin, Niklas Eicker, ninevra, Olivia Hugger, Parker Moore, Pat Hawks, Patrick Favre-Bulle, Paul Kim, penguinpet, Philip Belesky, Preston Lim, Ralph, Robert Riemann, Rosário Pereira Fernandes, Sadik Kuzu, Samuel Gruetter, Scott Killen, Sri Pravan Paturi, Stephan Fischer, Stephen Weiss, Steven Westmoreland, strangehill, Sundaram Kalyan Vedala, Thanos Kolovos, Timo Schuhmacher, Tobias, Tom Harvey, Tushar Prajapati, Victor Afanasev, Vinicius Flores, Vitor Oliveira, Wouter Schoot, XhmikosR, Yi Feng Xie, Zhang Xiangze, 김정환, 104fps.

Happy Jekylling everyone!

Jekyll 4.0.0.pre.beta1 Released

Dear Jekyllers,

It’s time for another pre-release of Jekyll 4! 🎉

This pre-release moves us further down the path of releasing Jekyll 4.0.0. All the same goodies from the last pre-release are here, along with a few more things I want to highlight:

Jekyll 4.0 is a new major version and it comes with a few breaking changes, notably :

  1. We dropped support for Ruby 2.3 which EOL at the end of March 2019. GitHub Pages runs Ruby 2.5.x, services like Netlify or Forestry already upgraded to latest Ruby 2.6.x.
  2. link tag now include relative_url filter, hurray no more need to prepend {{ site.baseurl }} .
  3. {% highlight %} now behaves like {% raw %}, so you can no longer use include tags within.
  4. We dropped support for Pygments, RedCarpet and rdiscount.
  5. We bumped kramdown to v2.

If you’re a plugin developer, we still need your feedback! Your plugin may not work with version 4 and we’d like to fix those issues before we release.

Checkout the complete changelog for more details.

To test this pre version run:

gem install jekyll --pre

Please test this version thoroughly and file bugs as you encounter them.

Thanks to our dear contributors for helping making Jekyll better:

Aidan Fitzgerald, Akshat Kedia, Alex Wood, Alexey Kopytko, Alexey Pelykh, Ali Thompson, Ana María Martínez Gómez, Ananthakumar, Andreas Möller, Andrew Lyndem, Andy Alt, Anne Gentle, Anny, Arjun Thakur, Arthur Attwell, Ashwin Maroli, Behrang, Belhassen Chelbi, Ben Keith, Ben Otte, Bilawal Hameed, Boris Schapira, Boris van Hoytema, Brett C, Chris Finazzo, Christian Oliff, Damien Solodow, Dan Allen, Dan Friedman, Daniel Höpfl, David J. Malan, Denis McDonald, Derek Smart, Derpy, Dusty Candland, ExE Boss, Frank Taillandier, Gareth Cooper, Grzegorz Kaczorek, Isaac Goodman, Jacob Byers, Jakob Krigovsky, Jan Pobořil, Joe Shannon, Jordan Morgan, Jorie Tappa, Josue Caraballo, Justin Vallelonga, Jörg Steinsträter, Karel Bílek, Keith Mifsud, Kelly-Ann Green, Ken Salomon, Kevin Plattret, Kyle Barbour, Lars Kanis, Leandro Facchinetti, Luis Enrique Perez Alvarez, Luis Guillermo Yáñez, Ma HongJun, Manu Mathew, Mario, Martin Scharm, Matt Massicotte, Matthew Rathbone, Maxwell Gerber, Mertcan Yücel, Michael Hiiva, Mike Kasberg, Mike Neumegen, Monica Powell, Nicolas Hoizey, Nikhil Swaminathan, Nikita Skalkin, Olivia Hugger, Parker Moore, Pat Hawks, Patrick Favre-Bulle, Paul Kim, Philip Belesky, Preston Lim, Ralph, Robert Riemann, Rosário Pereira Fernandes, Samuel Gruetter, Scott Killen, Sri Pravan Paturi, Stephan Fischer, Stephen Weiss, Steven Westmoreland, Sundaram Kalyan Vedala, Thanos Kolovos, Timo Schuhmacher, Tobias, Tom Harvey, Tushar Prajapati, Victor Afanasev, Vitor Oliveira, Wouter Schoot, XhmikosR, Zhang Xiangze, _94gsc, argv-minus-one, chrisfinazzo, ikeji, jess, jpasholk, makmm, mo khan, ninevra, penguinpet, 김정환, 104fps

Happy Jekylling everyone!

Jekyll 3.8.6 Released

We have another patch release in the 3.8 series! This time, we have one security patch and a handful of bug patches, including:

  • Filter symlinks from theme gems
  • Fix excerpt handling of some Liquid tags
  • Handle case where a theme directory doesn’t exist
  • A few internal optimizations to reduce memory overhead

… and a few more! You can check out the patches and see all the details in the release notes

Happy Jekylling!

Jekyll 4.0.0.pre.alpha1 Released

Dear Jekyllers,

Time has come to release a first alpha for Jekyll 4!

This pre version fixes many bugs, and should improve your build times. Some of you already shared really good results. We hope your Jekyll sites will also benefit from these optimizations.

If you’re a plugin developer, we definitely need your feedback, especially if your plugin does not work with v4.

Jekyll now exposes a caching API, that some plugins could benefit from.

Also be aware that it’s a new major version, and it comes with a few breaking changes, notably :

  1. We dropped support for Ruby 2.3 who goes EOL at the end of the month. GitHub Pages runs Ruby 2.5.x, services like Netlify or Forestry already upgraded to latest Ruby 2.6.x.
  2. link tag now include relative_url filter, hurray no more need to prepend {{ site.baseurl }} .
  3. {% highlight %} now behaves like {% raw %}, so you can no longer use include tags within.
  4. We dropped support for Pygments, RedCarpet and rdiscount.
  5. We bumped kramdown to v2.

Checkout the complete changelog for more details.

To test this pre version run:

gem install jekyll --pre

Please test this version thoroughly and file bugs as you encounter them.

Thanks to our dear contributors for helping making Jekyll better:

Aidan Fitzgerald, Akshat Kedia, Alex Wood, Alexey Kopytko, Alexey Pelykh, Ali Thompson, Ana María Martínez Gómez, Ananthakumar, Andreas Möller, Andrew Lyndem, Andy Alt, Anne Gentle, Anny, Arjun Thakur, Arthur Attwell, Ashwin Maroli, Behrang, Belhassen Chelbi, Ben Keith, Ben Otte, Bilawal Hameed, Boris Schapira, Boris van Hoytema, Brett C, Chris Finazzo, Christian Oliff, Damien Solodow, Dan Allen, Dan Friedman, Daniel Höpfl, David J. Malan, Denis McDonald, Derek Smart, Derpy, Dusty Candland, ExE Boss, Frank Taillandier, Gareth Cooper, Grzegorz Kaczorek, Isaac Goodman, Jacob Byers, Jakob Krigovsky, Jan Pobořil, Joe Shannon, Jordan Morgan, Jorie Tappa, Josue Caraballo, Justin Vallelonga, Jörg Steinsträter, Karel Bílek, Keith Mifsud, Kelly-Ann Green, Ken Salomon, Kevin Plattret, Kyle Barbour, Lars Kanis, Leandro Facchinetti, Luis Enrique Perez Alvarez, Luis Guillermo Yáñez, Ma HongJun, Manu Mathew, Mario, Martin Scharm, Matt Massicotte, Matthew Rathbone, Maxwell Gerber, Mertcan Yücel, Michael Hiiva, Mike Kasberg, Mike Neumegen, Monica Powell, Nicolas Hoizey, Nikhil Swaminathan, Nikita Skalkin, Olivia Hugger, Parker Moore, Pat Hawks, Patrick Favre-Bulle, Paul Kim, Philip Belesky, Preston Lim, Ralph, Robert Riemann, Rosário Pereira Fernandes, Samuel Gruetter, Scott Killen, Sri Pravan Paturi, Stephan Fischer, Stephen Weiss, Steven Westmoreland, Sundaram Kalyan Vedala, Thanos Kolovos, Timo Schuhmacher, Tobias, Tom Harvey, Tushar Prajapati, Victor Afanasev, Vitor Oliveira, Wouter Schoot, XhmikosR, Zhang Xiangze, _94gsc, argv-minus-one, chrisfinazzo, ikeji, jess, jpasholk, makmm, mo khan, ninevra, penguinpet, 김정환, 104fps

Happy Jekylling everyone!

Security Fixes for series 3.6, 3.7 and 3.8

Hi Jekyllers,

We have patched a critical vulnerability reported to GitHub a couple of weeks ago and have released a set of new gems to bring that patch to you. The vulnerability allowed arbitrary file reads with the cunning use of the include: setting in the config file.

By simply including a symlink in the include array allowed the symlinked file to be read into the build when they shouldn’t actually be read in any circumstance.   Further details regarding the patch can be viewed at the pull request URL

The patch has been released as versions 3.6.3, 3.7.4 and 3.8.4.   Thanks to @parkr v3.7.4 was released a couple of weeks prior and has been bundled with github-pages-v192.

Please keep in mind that this issue affects all previously released Jekyll versions. If you have not had a good reason to upgrade to 3.6, 3.7 or 3.8 yet, we advise that you do so at the earliest.

As always, Happy Jekylling! :sparkles:

Sponsoring Jekyll's development

(TL;DR: We’re open for sponsorships on our OpenCollective page)

Hi Jekyllers,

As you may know, Jekyll is a completely free and open source project. We offer our software and its related plugins and documentation at no cost because we believe that good software should not cost anything. We’re not planning on changing that, but today I want to talk about a different monetary aspect of open source.

Open source developers being paid for the work they do is a rare sight. Most open source software is effectively the result of hundreds and thousands of hours of free labor provided by individuals who are passionate enough to work outside of their day job to create software that, ironically, is being used by almost every company that offers digital services. It’s a problem that has gotten more attention in recent years, with the open source community becoming more diverse and more and more companies actively investing in providing monetary support for open source developers.

Jekyll has always been a product of volunteers. Rarely has someone been paid to implement a certain plugin or feature. Today, we’re excited to announce that we will finally be able to fund our contributors! We are opening an OpenCollective to receive individual and corporate sponsorships. This is not unheard of, Hugo is also funded by sponsorships, as are many other similar projects, such as webpack, Babel or RuboCop.

OpenCollective is a service that makes it easy for open source projects to receive funding from individuals and companies alike. It’s specifically designed for open source and many other projects already use it for funding.

Sponsoring is, for us, a method to finally realize some of the more ambitious goals we’ve had with the project for years. The closest thing we want to realize is to release Jekyll 4.0, and to make it as polished as we can. In the future, we would also like to work on other things that will improve the Jekyll ecosystem. Here’s a couple of ideas:

  • Create a comprehensive official plugin and theme directory site
  • Improve tooling built around measuring and improving Jekyll’s performance
  • Improve maintenance for official plugins
  • Including the community into official decisions; making Jekyll more friendly to folks in the community

Again, these are just some ideas, but with the help of sponsoring, they are now one step closer to being realized :heart:


With that, we would like to announce our very first sponsor:! Forestry is a CMS that integrates with your Jekyll sites and lets you update content using a beautiful interface, and then automatically commits it back to your GitHub repository. We’re excited to have them on board on a new, exciting step of our journey.

Will anything change for Jekyll users? The answer is no - this step does not impact the Jekyll software in any aspect. In fact, you might see positive changes, such as more features and better performance. Surprisingly, that’s what happens when you properly fund people for their work!

If you have been a long time user for Jekyll and would like to give something back to the project, you can consider a small monthly donation to our OpenCollective page. If your company heavily relies on Jekyll, do consider sponsoring us!

Contact and we’ll figure something out together.

Thanks for sticking with us, and happy Jekylling! :tada:

Jekyll 3.8.3 Released

This release fixes a regression in 3.8 where collections with published: false do not show when using the --unpublished flag.

Thanks to @philipbelesky for reporting and fixing this issue; collections with published: false now behave the same way as Posts.

Jekyll 3.8.2 Released

Hello Jekyllers!!

Today we are releasing v3.8.2, which fixes the way Jekyll generates excerpts for posts when the first paragraph of the post contains Liquid tags that take advantage of Liquid’s whitespace control feature.

Big thanks to @kylebarbour, who first reported this issue and also very quickly submitted a fix. Also thanks to @nickskalkin for making sure that we are using the latest version of Rubocop to lint our code.

Jekyll 3.8.1 Released

Happy May Day :tada:

The Jekyll team is happy to announce the release of v3.8.1, which fixes a couple of bugs that were introduced two weeks ago in v3.8.0. If you have experienced trouble regarding post excerpts or non-published posts, this release should be the remedy. Thanks to @Chaosed0 and @domLocalHeroes for originally reporting these issues, and to @ashmaroli for fixing them so quickly.

As a reminder, we have started work on Jekyll 4.0. If there are any features that you would love to see added to Jekyll, or any pain points you would like to see removed, please do add your ideas to the Jekyll 4.0 idea list.

Jekyll 4.0 is on the Horizon!

With the release of Jekyll 3.8.0, it’s been 2 and a half years since the last major release. Jekyll 3.0.0 was released in late October of 2015! That’s a long time ago, and we’ve been working towards the next major release of Jekyll for a couple of months now. Here’s a small preview of what’s to come:

  • Dropping support for Ruby 2.1 and 2.2. Both versions have reached their EOL period.
  • Dropping Pygments as a dependency. We’re already defaulting to Rouge, and this removes the implicit Python dependency. (finally!)
  • Making the link tag use relative URLs. This is a big breaking change, but it’s the cleaner solution.

We’re open to more ideas, though. If the development cost isn’t too high, or if someone volunteers to take care of the implementation, it’s likely that your suggestion might make it into Jekyll 4.0. Head over to this issue for more details. Some interesting topics might be improving Internationalization support in Jekyll, creating convenience Liquid tags, et cetera.

That being said, the development period of version 4.0 begins now. This means a couple of things:

  • New features will only be implemented in Jekyll 4.0. There will be no 3.9.0 or the like.
  • Same with bug fixes, unless they concern something introduced in Jekyll 3.7 or 3.8, in which case we will backport the fixes and release a patch version.
  • Now is a great time to finally take on the feature you’ve wanted to see in Jekyll for ages! Just open an issue or experiment with the code to get going!

As for a release date, we’re currently aiming for late summer, around September or so. However, keep in mind that this project is purely volunteer-run, and as such, delays might occur and we might not hit that release date.

Finally, this is a great time for newcomers to open-source to make their first contribution. We’ll be doing our best to mark recommended contributions and create newcomer-friendly issues, as well as to provide mentoring throughout the contribution process (although we’d like to think that we’re already pretty proficient at that). So if you’ve always been hestitant about contributing to a large open-source project, Jekyll is a good place to start!

Happy Jekylling! :wave:

Jekyll 3.8.0 Released

Aloha Jekyllers!! :wave:

After months of toiling on the codebase and shipping a couple of release-candidates, the Jekyll Team is delighted to finally present v3.8.0, packed with optimizations, improvements, some new features and a couple of bug-fixes. Yay!!!

Under the hood, Jekyll has undergone many minor changes that will allow it to run more performantly in the coming years. :smiley: Rest assured, our users should see minor improvements in their site’s build times.

Speaking of improvements, users running a site containing a huge amount of posts or those who like to use our where filter frequently in a single template, are going to see a massive reduction in their total build times!! :tada:

Hold on, this version is not just about optimizations, there are some new features as well..:

  • Detect non-existent variables and filters specified in a template by enabling strict_variables and strict_filters under the liquid key in your config file.
  • Allow date filters to output ordinal days.
  • jekyll doctor now warns you if you have opted for custom collections_dir but placed _posts directory outside that directory.

..and yes, a couple of bug-fixes, notably:

  • Jekyll now handles future-dated documents properly.
  • Jekyll is able to handle Liquid blocks intelligently in excerpts.
  • A few methods that were not meant to be publically accessible have been entombed properly.
  • A few bugs that still plagued our collections_dir feature from v3.7 got crushed.

As always, the full list of changes since last release can be viewed here.

A big thanks to the following people who contributed to our repository with pull-requests that improved our codebase, documentation and tests:

Ana María Martínez Gómez, Antonio Argote, Ashwin Maroli, Awjin Ahn, Ben Balter, Benjamin Høegh, Christian Oliff, Damien Solodow, David Zhang, Delson Lima, Eric Cornelissen, Florian Thomas, Frank Taillandier, Heinrich Hartmann, Jakob Vad Nielsen, John Eismeier, Kacper Duras, KajMagnus, Mario Cekic, Max Vilimpoc, Michael H, Mike Kasberg, Parker Moore, Pat Hawks, Paweł Kuna, Robert Riemann, Roger Rohrbach, Semen Zhydenko, Stefan Dellmuth, Tim Carry, olivia, and steelman.

Happy Jekylling!! :sparkles:

Jekyll 3.7.3 Released

Hello Jekyllers!! :wave:

We’re pleased to announce the release of v3.7.3 which fixes a bug one might encounter while using Jekyll - 3.7.x along with a Jekyll plugin that in turn uses the I18n library.

When v3.7.0 enhanced our slugify filter with a latin option, we also hardcoded a default fallback locale for the I18n library to avoid an exception raised in the event the library fails to find any locale. This led to issues with third-party i18n plugins for Jekyll, especially since the default locale got assigned before the plugin was loaded, irrespective of whether the slugify filter was used.

Jekyll will henceforth set the default locale if and only if necessary.

Meet Jekyll's New Lead Developer

Jekyll has a new Lead Developer: Olivia!

After over 5 years of leading Jekyll, many releases from 0.12.1 to 3.6.0, and countless conversations in GitHub Issues, Pull Requests, Jekyll Talk, and more, I am passing on the torch as Lead Developer of Jekyll.

Olivia has been working with the Jekyll community for some time now. You may have seen her around in issues and pull requests on the various Jekyll repositories. She started as a contributor, then joined the Core team as our community lead. Olivia joined the Jekyll Core Team with experience in the Node.js community, both online and as a volunteer organizer with JSConf EU.

In my conversations with Olivia, it is clear that Jekyll’s vision of simplicity for the user (no magic!) and letting users’ content be king will remain a top priority. In just the last few weeks as the transition has been occurring, we have seen some incredible work on performance that will make future versions of Jekyll work better at scale. She will be prioritizing work on innovative improvements to make Jekyll that much better for all of us. Olivia balances an eye for quality with the need for shipping well.

When Tom Preston-Werner met me at GitHub HQ 2.0 in January 2013 to pass on the torch, I could never have dreamed of all the amazing experiences this community would share with me over the next 5 years. From visiting @qrush in Buffalo, NY for a hack night on Jekyll to attending a Jekyll planning session hosted by @benbalter at GitHub to Google Summer of Code which gave us jekyll-admin, I am eternally grateful to all of you for the opportunity to lead this excellent community. I’m confident Olivia will continue to lead Jekyll to even greater heights.

As always, Happy Jekylling!


Curious about who else runs this show? Check out our excellent team.

Jekyll 3.7.2 Released

Close on the heels of shipping 3.7.0, we were informed of a couple of regressions due to the changes made in that release. In due time, Team Jekyll set out to address those issues as early as possible.

Days later here we’re, announcing 3.7.2 (sorry for skipping 3.7.1, RubyGems didn’t want to play nice) that fixes numerous issues! :tada: The highlights being:

  • A major regression in 3.7.0 was that when a Front Matter Default was configured with a scope["path"] set to a directory, Jekyll would scan that directory for any subfolders and files, for each document in that path. Though this is intended, it increases build times in proportion to the size of the directory.

    We addressed this by having Jekyll scan the directory path only if the user explicitly configures the scope["path"] using wildcards.

    Read our documentation for more details.

    A huge shout-out to @mmistakes for bringing this to our notice and additionally providing us with a test repository to aid in resolving the issue.

  • Another regression reported was related to our “Custom collections directory” feature introduced in 3.7.0.

    Users setting collection_dir to a certain directory would have altered paths to their posts still at the root of their site’s source. This roughly translated to 404 errors on URLs to their posts.

    Props to @localheinz for bringing this regression to our notice.

    We decided to resolve this by having Jekyll ignore posts and drafts at the root of the site’s source directory if the user customizes the collection_dir setting.

    Ergo, if you set a custom location for your collections, please ensure you move all of your collections into that directory. This includes posts and drafts as well. Your links generated by {% post_url %} or {% link %} will adapt automatically.

  • We also found out that gem "wdm" boosts performance while directories are being watched on Windows. So we recommend having it included in your Gemfile for a better development experience on Windows. (Newly generated Gemfiles will hereafter have that gem listed automatically :wink:)

In addition to the above, numerous other minor fixes and documentation updates have been made that should improve your Jekyll experience. All of which, would not have been possible without our wonderful contributors:

Alexandr, Andreas Möller, Ashwin Maroli, Chayoung You, Florian Thomas, Frank Taillandier, Hendrik Schneider, Kacper Duras, Olivia, Parker Moore and Paul Robert Lloyd.

As always, you can see our full changelog on the History page.

Happy Jekylling! :sparkles:

Jekyll 3.7.0 Released

We’re happy to release a new minor for the new year. Here are a few of the latest additions from our contributors:

  • LiveReload is available as an option during development: with jekyll serve --livereload no more manual page refresh. A big thanks to @awood for this feature and to @andreyvit, LiveReload author.
  • New collections_dir configuration option allows you to store all your collections in a single folder. Your source root folder should now look cleaner :sparkles: .
  • If you’re using a gem-based theme in coordination with the --incremental option, you should notice some significant speed during the regeneration process, we did see build time went down from 12s to 2s with @mmistakes minimal-mistakes theme during our tests.
  • Jekyll will now check to determine whether host machine has internet connection.
  • A new latin option is available to better handle URLs slugs.
  • And of course many bug fixes and updates to our documentation — which you can now search thanks to our friends @Algolia.
  • Full history is here.

This release wouldn’t have been possible without all the following people:

Aaron Borden, Alex Tsui, Alex Wood, Alexey Pelykh, Andrew Dassonville, Angelika Tyborska, Ankit Singhaniya, Ashwin Maroli, bellvat, Brandon Dusseau, Chris Finazzo, Doug Beney, Dr. Wolfram Schroers, Edward Shen, Florian Thomas, Frank Taillandier, Gert-jan Theunissen, Goulven Champenois, János Rusiczki, Jed Fox, Johannes Müller, Jon Anning, Jonathan Hooper, Jordon Bedwell, Junko Suzuki, Kacper Duras, Kenton Hansen, Kewin Dousse, Matt Rogers, Maximiliano Kotvinsky, mrHoliday, Olivia, Parker Moore, Pat Hawks, Sebastian Kulig, Vishesh Ruparelia, Xiaoiver and Yashu Mittal.

A big thanks to everyone!

Oh, one last thing…

:pray: upgrade your Ruby

Prepare for the next major update, as next major version Jekyll 4.0 will drop support for Ruby 2.1 and 2.2.

Ruby 2.2 is now under the state of the security maintenance phase, until the end of the March of 2018. After the date, maintenance of Ruby 2.2 will be ended. We recommend you start planning migration to newer versions of Ruby, such as 2.4 or 2.3. — Ruby Core Team

We strongly encourage you to upgrade to at least Ruby 2.4.x like our friends at GitHub Pages or even go with Ruby 2.5.

Happy new year to all from the Jekyll team!

Jekyll 3.6.2 Released

3.6.2 is out, it’s a tiny patch release and we invite you to run bundle update if you want to avoid possible build problems with:

  • some UTF-8 and UTF-16 encoded files,
  • fully numeric layout names (we convert those to string for you now).

Other changes include updates to our documentation, like this complete video series by Giraffe Academy aimed at complete beginners. A big thanks to Mike for this.

And if you’re wondering what happened to version 3.6.1, it was just our new release maintainer getting familiar with the release process. 😄

We try to release patch releases as quickly as possible and we’re already working on the next minor version 3.7.0 that will allow you to store all your collections in a single directory. Stay tuned.

Theme developers are invited to test the brand new jekyll-remote-theme plugin and give their feedback to @benbalter. This plugin allows you to use any GitHub hosted theme as a remote theme!

Once again, many thanks to our contributors who helped make this release possible: ashmaroli, bellvat, Frank Taillandier, i-give-up, Jan Piotrowski, Maximiliano Kotvinsky, Oliver Steele and Pat Hawks. For some it was their first contribution to open-source 👏

As it’s been nine years this week that Tom Preston-Werner started this project, I also wanna seize this opportunity to thank all of the 732 contributors who helped make it possible for Jekyll to power millions of websites around the world today.

Happy Birthday Jekyll! 🎂

Diversity in Open Source, and Jekyll's role in it

Open Source has a problem with diversity. GitHub recently conducted a survey which revealed that 95% of the respondents were identifying as male. This is even worse than in the tech industry overall, where the percentage is only about 76%. Every other week, there seems to be another case of a maintainer engaging in targeted harassment against minorities. People somehow deem it completely okay to let these things slide, though.

Fortunately, there’s a couple of things we can do to make it easier and more comfortable for people that have never contributed to any open source project before, to contribute to our projects.

Add a Code of Conduct, and enforce it

This might seem like one of the easiest steps to do, but it actually requires a lot of dedication to pull through with. Basically, a Code of Conduct is a document detailing what is and what isn’t acceptable behavior in your project. A good Code of Conduct also details enforcement procedures, that means how the person violating the Code of Conduct gets dealt with. This is the point at which I’ve seen a looooot of projects fail. It’s easy enough to copy-paste a Code of Conduct into your project, but it’s more important to be clear on how to enforce it. Inconsistent —or worse, nonexistent— enforcement is just going to scare off newcomers even more!

The most widely adopted Code of Conduct is the Contributor Covenant. It’s a very good catch-all document, but it is a bit light in the enforcement section, so I’d recommend to flesh it out by yourself, be it by means of adding contact information or expanding the enforcement rules.

No matter which Code of Conduct you pick, the most important thing is to actually read it for yourself. The worst thing in open source is a maintainer that doesn’t know when they’ve violated their own Code of Conduct.

Document your contributing workflow

The problem that puts people off the most is incomplete or missing documentation, as revealed through GitHub’s open source survey. A very popular myth in programming is that good code explains itself, which might be true, but only for the person writing it. It’s important, especially once you put your project out there for the world to see, to document not only your code, but also the process by which you maintain it. Otherwise, it’s going to be extremely hard for newcomers to even figure out where to begin contributing to your project.

Jekyll has an entire section of its docs dedicated to information on how to contribute for this very reason. Every documentation page has a link to directly edit and improve it on GitHub. It’s also important to realize that not all contributions are code. It can be documentation, it can be reviewing pull requests, but it can also just be weighing into issues, and all of this should be recognized in the same way. At Jekyll, out of 397 total merged pull requests in the last year, 204 were documentation pull requests!

Create newcomer-friendly issues

For most people new to open source, the biggest hurdle is creating their first pull request. That’s why initiatives such as YourFirstPR and First Timers Only were started. Recently, a GitHub bot that automatically creates first-timer friendly issues was launched, which makes it very easy for maintainers to convert otherwise small or trivial changes into viable pull requests that can be taken on by newcomers! So we decided to give it a shot, and we’ve created a couple of very easy first timers only issues:

(There’s also an up-to-date listing of all of our first timers only issues here)

These issues are designed to be taken on only by someone who has had little to no exposure to contributing to open source before, and additionally, project maintainers offer support in case a question arises.

Jekyll is a very big and popular open source project, and we hope that with these special issues, we can help people who haven’t contributed to open source before to catch a footing in these unsteady waters.

Be nice

I know this is a cliche and a overused phrase, but really, it works if you pull through with it. Come to terms with the fact that some people aren’t as fast or reliable as you might want to think. Don’t get angry when a contributor takes a day longer than you might like them to. Treat new contributors to your project with respect, but also with hospitality. Think twice before you send that comment with slurs in it.

I’ve been contributing to open source for about 4 years now, and I’ve had my fair share of horrible, horrible experiences. But Jekyll has historically been a project that has always valued the people contributing to it over the code itself, and I hope we can keep it that way. I also hope that other project maintainers read this and take inspiration from this post. Every project should be more diverse.

Jekyll turns 3.6!

Another much-anticipated release of Jekyll. This release comes with it Rouge 2 support, but note you can continue to use Rouge 1 if you’d prefer. We also now require Ruby 2.1.0 as 2.0.x is no longer supported by the Ruby team.

Otherwise, it’s a massive bug-fix release! A few bugs were found and squashed with our Drop implementation. We’re using the Schwartzian transform to speed up our custom sorting (thanks, Perl community!). We now protect against images that are named like posts and we generally worked on guarding our code to enforce requirements, instead of assuming the input was as expected.

Please let us know if you find any bugs! You can see the full history here.

Many thanks to our contributors who helped make this release possible: Aleksander Kuś, André Jaenisch, Antonio Argote, ashmaroli, Ben Balter, Bogdan, Bradley Meck, David Zhang, Florian Thomas, Frank Taillandier, Jordon Bedwell, Joshua Byrd, Kyle Zhao, lymaconsulting, Maciej Bembenista, Matt Sturgeon, Natanael Arndt, Ohad Schneider, Pat Hawks, Pedro Lamas, and Sid Verma.

As always, Happy Jekylling!

Jekyll 3.5.2 Released

3.5.2 is out with 6 great bug fixes, most notably one which should dramatically speed up generation of your site! In testing #6266, generation when from 18 seconds down to 8! Here is the full line-up of fixes:

  • Backport #6266 for v3.5.x: Memoize the return value of Document#url (#6301)
  • Backport #6247 for v3.5.x: kramdown: symbolize keys in-place (#6303)
  • Backport #6281 for v3.5.x: Fix Drop#key? so it can handle a nil argument (#6288)
  • Backport #6280 for v3.5.x: Guard against type error in absolute_url (#6287)
  • Backport #6273 for v3.5.x: delegate StaticFile#to_json to StaticFile#to_liquid (#6302)
  • Backport #6226 for v3.5.x: Reader#read_directories: guard against an entry not being a directory (#6304

A full history is available for your perusal. As always, please file bugs if you encounter them! Opening a pull request with a failing test for your expected behaviour is the easiest way for us to address the issue since we have a reproducible example to test again. Short of that, please fill out our issue template to the best of your ability and we’ll try to get to it quickly!

Many thanks to our contributors without whom this release could not be possible: Ben Balter & Kyle Zhao.

Happy Jekylling!

Jekyll 3.5.1 Released

We’ve released a few bugfixes in the form of v3.5.1 today:

  • Some plugins stopped functioning properly due to a NoMethodError for registers on NilClass. That’s been fixed.
  • A bug in relative_url when baseurl is nil caused URL’s to come out wrong. Squashed.
  • Static files’ liquid representations should now have all the keys you were expecting when serialized into JSON.

We apologize for the breakages! We’re working diligently to improve how we test our plugins with Jekyll core to prevent breakages in the future.

More details in the history. Many thanks to all the contributors to Jekyll v3.5.1: Adam Voss, ashmaroli, Ben Balter, Coby Chapple, Doug Beney, Fadhil, Florian Thomas, Frank Taillandier, James, jaybe, Joshua Byrd, Kevin Plattret, & Robert Jäschke.

Happy Jekylling!

Jekyll turns 3.5, oh my!

Good news! Nearly 400 commits later, Jekyll 3.5.0 has been released into the wild. Some new shiny things you might want to test out:

  • Jekyll now uses Liquid 4, the latest! It comes with whitespace control, new filters concat and compact, loop performance improvements and many fixes
  • Themes can specify runtime dependencies (in their gemspecs) and we’ll require those. This makes it easier for theme writers to use plugins.
  • Speaking of themes, we’ll properly handle the discrepancy between a convertible file in the local site and a static file in the theme. Overriding a file locally now doesn’t matter if it’s convertible or static.
  • Pages, posts, and other documents can now access layout variables via {{ layout }}.
  • The gems key in the _config.yml is now plugins. This is backwards-compatible, as Jekyll will gracefully upgrade gems to plugins if you use the former.
  • Filters like sort now allow you to sort based on a subvalue, e.g. {% assign sorted = site.posts | sort: "image.alt_text" %}.
  • You can now create tab-separated data files.
  • Using layout: none will now produce a file with no layout. Equivalent to layout: null, with the exception that none is a truthy value and won’t be overwritten by front matter defaults.
  • No more pesky errors if your URL contains a colon (sorry about those!)
  • We now automatically exclude the Gemfile from the site manifest when compiling your site. No more _site/Gemfile!
  • We fixed a bug where abbreviated post dates were ignored, e.g. _posts/

And so much more!

There was a huge amount of effort put into this release by our maintainers, especially @pathawks, @DirtyF, and @pup. Huge thanks to them for ushering this release along and keeping the contributions flowing! Jekyll wouldn’t work without the tireless dedication of our team captains & maintainers. Thank you, all!

A huge thanks as well to our contributors to this release: Adam Hollett, Aleksander Kuś, Alfred Myers, Anatoliy Yastreb, Antonio Argote, Ashton Hellwig, Ashwin Maroli, Ben Balter, BlueberryFoxtrot, Brent Yi, Chris Finazzo, Christoph Päper, Christopher League, Chun Fei Lung, Colin, David Zhang, Eric Leong, Finn Ellis, Florian Thomas, Frank Taillandier, Hendrik Schneider, Henry Kobin, Ivan Storck, Jakub Klímek, Jan Pobořil, Jeff Puckett, Jonathan Hooper, Kaligule, Kevin Funk, Krzysztof Szafranek, Liu Cheng, Lukasz Brodowski, Marc Bruins, Marcelo Canina, Martin Desrumaux, Mer, Nate, Oreonax, Parker Moore, Pat Hawks, Pedro Lamas, Phil Nash, Ricardo N Feliciano, Ricky Han, Roger Sheen, Ryan Lue, Ryan Streur, Shane Neuville, Sven Meyer, Tom Johnson, William Entriken, Yury V. Zaytsev, Zarino Zappia, dyang, jekylltools, sean delaney, zenHeart

Please file any bugs with detailed replication instructions if you find any bugs. Better yet, submit a patch if you find the bug in the code and know how to fix it! :heart:

Happy Jekylling! :tada:

Jekyll 3.4.3 Released

Another one-PR patch update as we continue our quest to destroy all bugs. A fairly technical debriefing follows, but the TLDR is that we have updated the uri_escape filter to more closely follow the pre-v3.4.0 behavior.

In v3.4.0, we moved away from using the deprecated URI.escape in favor of Addressable::URI.encode. This is what powers our uri_escape filter.

While this transition was mostly a smooth one, the two methods are not identical. While URI.escape was happy to escape any string, Addressable::URI.encode first turns the string into an Addressable::URI object, and will then escape each component of that object. In most cases, this difference was insignificant, but there were a few cases where this caused some unintended regressions when encoding colons.

While Addressable can understand that something like "/example :page" is a relative URI, without the slash it cannot figure out how to turn "example :page" into an Addressable::URI object. URI.escape had no such objection. This lead to the following Liquid code working fine in Jekyll 3.3.x but breaking in 3.4.0:

{{ "example :page" | uri_escape }}

This was not an intended consequence of switching to Addressable.

Fortunately, the solution was not complicated. Addressable has a method Addressable::URI.normalize_component which will simply escape the characters in a string, much like URI.escape.

Thanks to @cameronmcefee and @FriesFlorian for reporting this issue.

Happy Jekylling!

Jekyll 3.4.2 Released

Another one-PR patch update, though without the same lessons as for the previous release.

This release includes a beneficial change for a number of plugins: static files now respect front matter defaults.

You might be asking yourself: “why would static files, files that are static files explicitly because they don’t have front matter, want to respect front matter?” That’s a great question. Let me illustrate with an example.

Let’s look at jekyll-sitemap. This plugin generates a list of documents, pages, and static files, and some metadata for them in an XML file for a Google/Yahoo/Bing/DuckDuckGo crawler to consume. If you don’t want a given file in this list, you set sitemap: false in front matter. But what about static files, which don’t have front matter? Before this release, they could not be excluded because they had no properties in YAML other than the ones we explicitly assigned. So if you had a PDF you didn’t want to be in your sitemap, you couldn’t use jekyll-sitemap.

With this release, you can now set front matter defaults for static files:

      path: "pdfs/"
      sitemap: false

Now, for every file in the Liquid site.static_files loop which is in the folder pdfs/, you’ll see sitemap equal to false.

Many thanks to @benbalter for coming up with the solution and ensuring sitemaps everywhere are filled with just the right content.

As always, if you notice any bugs, please search the issues and file one if you can’t find another related to your issue.

Happy Jekylling!

Jekyll 3.4.1, or "Unintended Consequences"

Conformity is a confounding thing.

We write tests to ensure that a piece of functionality that works today will work tomorrow, as further modifications are made to the codebase. This is a principle of modern software development: every change must have a test to guard against regressions to the functionality implemented by that change.

And yet, occasionally, our very best efforts to test functionality will be thwarted. This is because of how our code produces unintended functionality, which naturally goes untested.

In our documentation, we tell users to name their posts with the following format:


That format specifies exactly four numbers for the year, e.g. 2017, two letters for the month, e.g. 03, and two letters for the day, e.g. 02. To match this, we had the following regular expression:


You might already see the punchline. While our documentation specifies the exact number of numbers that is required for each section of the date, our regular expression does not enforce this precision. What happens if a user doesn’t conform to our documentation?

We recently received a bug report that detailed how the following file was considered a post:

Of course! It matches the above regular expression, but doesn’t satisfy other requirements about those numbers being a valid date (unless you’re living in a world that has 43 million months, and 42 million (and one) days). So, we modified the regular expression to match our documentation:


Our tests all passed and we were properly excluding this crazy date with 43 million months and days. This change shipped in Jekyll v3.4.0 and all was well.

Well, not so much.

A very common way to specify the month of February is 2. This is true for all single-digit months and days of the month. Notice anything about our first regular expression versus our second? The second regular expression imposes a minimum, as well as maximum, number of digits. This change made Jekyll ignore dates with single-digit days and months.

The first eight years of Jekyll’s existence had allowed single-digit days and months due to an imprecise regular expression. For some people, their entire blog was missing, and there were no errors that told them why.

After receiving a few bug reports, it became clear what had happened. Unintended functionality of the last eight years had been broken. Thus, v3.4.0 was broken for a non-negligible number of sites. With a test site in-hand from @andrewbanchich, I tracked it down to this regular expression and reintroduced a proper minimum number of digits for each segment:


And, I wrote a test.

This change was quickly backported to v3.4.0 and here we are: releasing v3.4.1. It will fix the problem for all users who were using single-digit months and days.

With this, I encourage all of you to look at your code for unintended functionality and make a judgement call: if it’s allowed, should it be? If it should be allowed, make it intended functionality and test it! I know I’ll be looking at my code with much greater scrutiny going forward, looking for unintended consequences.

Many thanks to our Jekyll affinity team captains who helped out, including @pathawks, @pnn, and @DirtyF. Thanks, too, to @ashmaroli for reviewing my change with an eye for consistency and precision. This was certainly a team effort.

We hope Jekyll v3.4.1 brings your variable-digit dates back to their previous glory. We certainly won’t let that unintended functionality be unintended any longer.

As always, Happy Jekylling!

Jekyll turns 3.4.0

Hey there! We have a quick update of Jekyll for you to enjoy this January. Packed full of bug fixes as usual, thanks to the tireless efforts of our exceptional Jekyll community. Three changes to call out:

  1. If you’re a big fan of where_by_exp, you’ll be an even bigger fan of group_by_exp.
  2. Using a custom timezone in Jekyll on Windows? Yeah, sorry that hasn’t ever worked properly. We made it possible to accurately set the timezone using IANA timezone codes.
  3. Documentation has been improved, notably on themes, includes and permalinks.

And lots and lots more!

This update was made possible by the dedicated efforts of our excellent contributors: Ajay Karwal, Alexey Rogachev, Ashwin Maroli, BlueberryFoxtrot, Chase, Chayoung You, Dean Attali, Dmitrii Evdokimov, Don Denton, Eldritch Cheese, Fabrice Laporte, Florian Thomas, Frank Taillandier, Hugo, Ivan Dmitrievsky, Joel Meyer-Hamme, Josh Habdas, Kenton Hansen, Kevin Wojniak, Kurt Anderson, Longwelwind, Max Chadwick, Nicolas Hoizey, Nursen, Parker Moore, Pat Hawks, Purplecarrot, Ricardo N Feliciano, Rob Crocombe, Roger Ogden, Skylar Challand, Thiago Arrais, Tim Banks, Tom Johnson, Tunghsiao Liu, XhmikosR, Zlatan Vasović, alexmalik, brainscript, kimbaudi, muratayusuke, penny, and yoostk.

As always, if you encounter bugs, please do search the issues and file an issue if you aren’t able to find a resolution. We also have our Jekyll Talk forum for those of you with general questions about how to accomplish certain tasks with Jekyll.

We have some exciting updates in store for v3.5, and we’re hard at work on those already.

Happy Jekylling!

Jekyll 3.3.1 Released

Hello! We have a bugfix release of Jekyll hot off the presses for you. Key fixes to call out:

  1. Only warn about auto-regeneration issues on Windows instead of disabling
  2. Exclude very specific vendor/ subdirectories instead of all of vendor/
  3. Allow permalink templates to have plaintext underscores

..and lots more! Check out the full history for more.

Happy Jekylling!

Jekyll 3.3 is here with better theme support, new URL filters, and tons more

There are tons of great new quality-of-life features you can use in 3.3. Three key things you might want to try:

1. Themes can now ship static & dynamic assets in an /assets directory

In Jekyll 3.2, we shipped the ability to use a theme that was packaged as a gem. 3.2 included support for includes, layouts, and sass partials. In 3.3, we’re adding assets to that list.

In an effort to make theme management a bit easier, any files you put into /assets in your theme will be read in as though they were part of the user’s site. This means you can ship SCSS and CoffeeScript, images and webfonts, and so on – anything you’d consider a part of the presentation. Same rules apply here as in a Jekyll site: if it has YAML front matter, it will be converted and rendered. No front matter, and it will simply be copied over like a static asset.

Note that if a user has a file of the same path, the theme content will not be included in the site, i.e. a user’s /assets/main.scss will be read and processed if present instead of a theme’s /assets/main.scss.

See our documentation on the subject for more info.

2. relative_url and absolute_url filters

Want a clean way to prepend the baseurl or url in your config? These new filters have you covered. When working locally, if you set your baseurl to match your deployment environment, say baseurl: "/myproject", then relative_url will ensure that this baseurl is prepended to anything you pass it:

{{ "/docs/assets/" | relative_url }} => /myproject/docs/assets

By default, baseurl is set to "" and therefore yields (never set to "/"):

{{ "/docs/assets/" | relative_url }} => /docs/assets

A result of relative_url will safely always produce a URL which is relative to the domain root. A similar principle applies to absolute_url. It prepends your baseurl and url values, making absolute URLs all the easier to make:

{{ "/docs/assets/" | absolute_url }} =>

3. site.url is set by the development server

When you run jekyll serve locally, it starts a web server, usually at http://localhost:4000, that you use to preview your site during development. If you are using the new absolute_url filter, or using site.url anywhere, you have probably had to create a development config which resets the url value to point to http://localhost:4000.

No longer! When you run jekyll serve, Jekyll will build your site with the value of the host, port, and SSL-related options. This defaults to url: http://localhost:4000. When you are developing locally, site.url will yield http://localhost:4000.

This happens by default when running Jekyll locally. It will not be set if you set JEKYLL_ENV=production and run jekyll serve. If JEKYLL_ENV is any value except development (its default value), Jekyll will not overwrite the value of url in your config. And again, this only applies to serving, not to building.

A lot more!

There are dozens of bug fixes and minor improvements to make your Jekyll experience better than ever. With every Jekyll release, we strive to bring greater stability and reliability to your everyday development workflow.

As always, thanks to our many contributors who contributed countless hours of their free time to making this release happen:

Anatoliy Yastreb, Anthony Gaudino, Antonio, Ashwin Maroli, Ben Balter, Charles Horn, Chris Finazzo, Daniel Chapman, David Zhang, Eduardo Bouças, Edward Thomson, Eloy Espinaco, Florian Thomas, Frank Taillandier, Gerardo, Heng Kwokfu, Heng, K. (Stephen), Jeff Kolesky, Jonathan Thornton, Jordon Bedwell, Jussi Kinnula, Júnior Messias, Kyle O’Brien, Manmeet Gill, Mark H. Wilkinson, Marko Locher, Mertcan GÖKGÖZ, Michal Švácha, Mike Kasberg, Nadjib Amar, Nicolas Hoizey, Nicolas Porcel, Parker Moore, Pat Hawks, Patrick Marsceill, Stephen Checkoway, Stuart Kent, XhmikosR, Zlatan Vasović, mertkahyaoglu, shingo-nakanishi, and vohedge.

Full release notes are available for your perusal. If you notice any issues, please don’t hesitate to file a bug report.

Happy Jekylling!

Jekyll Admin Initial Release

Jekyll’s Google Summer of Code Project has concluded. After three months of hard (but fun) work with my mentors @benbalter, @jldec, and @parkr, I’m proud to announce Jekyll Admin’s initial release. Jekyll admin is a Jekyll plugin that provides users with a traditional CMS-style graphical interface to author content and administer Jekyll sites. You can start to use it right away by following these instructions.

As a Google Summer of Code student, I feel very lucky to be part of a project that the community has been wanting for such a long time. The three-month Google Summer of Code period was a great journey. It was a lot of fun developing the project and seeing how it could help the community, and going forward, we are really excited to see where the project goes with the help of the amazing Jekyll community.

I would like to thank my mentors who embraced me as their teammate and guided me throughout the process. They have put a lot of work and time to mentor me and helped me with everything. It was a great pleasure to work with them. I also would like to thank the wonderful Jekyll community for making Jekyll what it is today. It was amazing to see the community contribute to the project and give their feedback prior to its release. I’m sure that they will support Jekyll Admin as much as they can and move Jekyll even further.

Please let us know what you think about Jekyll Admin and feel free to contribute. Your feedback and contributions are greatly appreciated.

Happy (graphical) Jekylling!

Jekyll 3.2.1 Released with Fix for Windows

Well, 3.2.0 has been a success, but with one fatal flaw: it doesn’t work on Windows! Sorry, Windows users. Hot on the trail of 3.2.0, this release should squash that :bug:. Sorry about that!

This release also fixes an issue when using gem-based themes where the theme was rejected if it existed behind a symlink. This is a common setup for the various ruby version managers, and for Ruby installed via Homebrew. Props to @benbalter for fixing that up.

Thanks to the contributors for this release: Adam Petrie, Ben Balter, Daniel Chapman, DirtyF, Gary Ewan Park, Jordon Bedwell, and Parker Moore.

As always, you can see our full changelog on the History page.

Happy Jekylling!

Jekyll turns 3.2

Happy Day! Jekyll v3.2.0 is out, and packed full of goodies.

Our flagship feature for this release has been themes. Themes?!, you say? Yes, proper, versionable, releasable, first-class themes. We’re pretty stoked about it and we hope you like building and using them. For now, it only supports layouts, includes, and sass, but we have plans to include static assets like images and CSS/JS in a future release. Read more about it in the docs. Our site template generated by jekyll new now dogfoods this feature, using the minima theme.

Some other notable changes:

  • Symlinks are allowed as long as they target a file in the site source
  • Explicit support for Ruby 2.0.x was dropped
  • Added an :after_init Hook
  • Added a where_exp filter to provide more powerful filtering
  • Added a link liquid tag which can be used to generate URLs for any post or document based on its path relative to the site source
  • … and lots more!

As always, there is a full list of changes for your perusal.

Every release is made possible by the countless hours of hard work that our fellow community members put into sending patches, filing thoughtful patches, and so on. These release took the work of over 80 people:

  • Aaron Sky
  • Adam Hollett
  • ajhit406
  • Aki
  • Alex Hanselka
  • Alex Hoyau
  • Alex Ivkin
  • Alex Kitchens
  • Alex Plescan
  • Alex Wood
  • Anatoliy Yastreb
  • Andrew Artajos
  • Andrew Munsell
  • AndrewCz
  • Ankush Menat
  • Anthony Smith
  • Ben Balter
  • Brian Jones
  • Brint O’Hearn
  • Chayoung You
  • Chris Wells
  • chrisfinazzo
  • Clark Winkelmann
  • Dan Allen
  • David Von Lehman
  • David Zhang
  • Derek Gottlieb
  • Enes Gönültaş
  • EricH
  • Erick Sasse
  • Eugênio Cabral
  • Florian Thomas
  • Frank Taillandier
  • Henry Goodman
  • Henry Wright
  • Hugo Duksis
  • Hugo Giraudel
  • Jack Reed
  • Jamie Bilinski
  • Jeff Kolesky
  • Jens Willmer
  • Jordon Bedwell
  • Josh Waller
  • Joshua Barnett
  • Keegan Mullaney
  • Kevin Miller
  • Krzysztof Jurewicz
  • Loren Rogers
  • Marcos Brito
  • Marcus Stollsteimer
  • Matt Rogers
  • Michaël Guitton
  • Mike Linksvayer
  • Mike Neumegen
  • Nathan Hazout
  • Nick
  • No
  • nscyclone
  • Parker Moore
  • Pat Hawks
  • Pierre Fenoll
  • Praveen Kumar
  • Rares Vernica
  • Saleem Rashid
  • Sam Dutton
  • Shengbin Meng
  • Shinn Kondo
  • Shinnosuke Kondo
  • skim
  • Sondre Nilsen
  • Spencer A. Bywater
  • Stephen Checkoway
  • Suriyaa Kudo
  • surrim
  • TheLucasMoore
  • Thomas Wood
  • Tim Wisniewski
  • Tom Fejfar
  • Tony Garnock-Jones
  • Vincent Wochnik
  • XhmikosR
  • Yanis Vieilly
  • Yordis Prieto
  • Zack Spencer

We are so grateful to all of you for helping to put together a terrific release. Thank you!

Happy Jekylling!

Jekyll's Google Summer of Code Project: The CMS You Always Wanted

This year, Jekyll applied to be a part of Google Summer of Code. Students were able to propose any project related to Jekyll. With a gracious sponsorship from GitHub and the participation of myself, @benbalter and @jldec, Jekyll was able to accept two students for the 2016 season, @mertkahyaoglu and @rush-skills.

These students are working on a project that fills a huge need for the community: a graphical solution for managing your site’s content. Current plans include a fully-integrated admin which spins up when you run jekyll serve and provides a friendly web interface for creating and editing your content. The server and web interface will speak a common HTTP interface so either piece could be switched out for, e.g. a server which writes directly to a repository on GitHub.

The strength of text files as the storage medium for content has been part of Jekyll’s success. Our homepage lauds the absence of a traditional SQL database when using Jekyll – your content should be what demands your time, not pesky database downtime. Unfortunately, understanding of the structure of a Jekyll site takes some work, enough that for some users, it’s prohibitive to using Jekyll to accomplish their publishing goals.

Mert and Ankur both applied to take on this challenge and agreed to split the project, one taking on the web interface and the other taking on the backend. We’re very excited to see a fully-functional CMS for Jekyll at the end of the summer produced by these excellent community members, and we hope you’ll join us in cheering them on and sharing our gratitude for all their hard work.

Thanks, as always, for being part of such a wonderful community that made this all possible. I’m honored to work with each of you to create something folks all around the globe find a joy to use. I look forward to our continued work to move Jekyll forward.

As always, Happy Jekylling!

Jekyll 3.1.6 Released

Upon releasing 3.1.5 and kicking the tires, we noticed a glaring bug: our beloved jsonify filter doesn’t work! With that, our work was cut out for us and we decided a 3.1.6 was necessary. This release restores sanity to our object-to-JSON generation in Liquid and we hope you enjoy.

For the gory details, see the pull request or the changelog.

Happy Jekylling!

Jekyll 3.1.4 "Stability Sam" Released

Hey Jekyllites!

Today, we released v3.1.4 in an effort to bring more stability to the v3.1.x series. This bugfix release consists of:

  • A fix for layout in Liquid where values would carry over from one document to the next
  • A fix for layout in Liquid where a parent layout (e.g. default or base) would overwrite the metadata of the child layout (e.g. post or special).
  • A fix where page.excerpt referencing its excerpt would cause an infinite loop of recursive horror.
  • We added Configuration.from and the great permalink fix from v3.0.4 to the v3.1.x series
  • site.collections in Liquid is now sorted alphabetically by label, so docs shows up before posts reliably.

The fixes for layout may not be seamless for everyone, but we believe they will be the “right thing to do” going forward.

We are alwawys striving to make Jekyll more straight-forward to use. Please do open an issue if you believe an aspect of Jekyll’s user experience isn’t up to par.

For a full history of our changes, see the changelog.

As always, Happy Jekylling!

Jekyll 3.0.5 Released

This version fixes a bug affecting only v3.0.4 where autoregeneration was always disabled when running Jekyll locally. This feature is a huge reason why Jekyll (or any static site generator, for that matter) is a joy to use. Sorry for the regression!

If you’re using GitHub Pages, you can follow the progress of the upgrade on the github/pages-gem repo.

As always, our history doc has links to the pull requests and issues associated with the release for your perusal.

We’re looking forward to the upcoming release of v3.2 which has some excellent goodies we think you’ll love.

Happy Jekylling!

Jekyll 3.1.3 Released

v3.1.3 is a patch release which fixes the follow two issues:

  • Front matter defaults may not have worked for collection documents and posts due to a problem where they were looked up by their URL rather than their path relative to the site source
  • Running jekyll serve with SSL enabled was broken due to a bad configuration.

Both of these issues have been resolved. For more information, check out the full history.

Happy Jekylling!

Jekyll 3.0.4 Released

v3.0.4 is a patch release which fixes the follow two issues:

  • Front matter defaults may not have worked for collection documents and posts due to a problem where they were looked up by their URL rather than their path relative to the site source
  • Configuration for the posts permalink might be borked when a user specified a value for collections.posts.permalink directly. This forced the use of permalink at the top level, which also affected pages. To configure a permalink just for posts, you can do so with:
    output: true
    permalink: /blog/:year/:title/

Both of these issues have been resolved. For more information, check out the full history.

Happy Jekylling!

Making it easier to contribute to Jekyll

Jekyll is an open source project, built one contribution at a time by community members just like you. These community contributions can come in many forms beyond just writing code, from reporting an issue or suggesting a new feature to improving documentation or providing feedback on proposed changes.

If you’ve been looking to get involved with the Jekyll community, but didn’t know, we’ve recently made it easier to contribute to Jekyll in two ways:

First, we’ve completely rewritten the project’s contributing guidelines, outlining the various ways you can contribute, and including better instructions for submitting proposed changes via or for submitting your first code improvement. And if you have any feedback, we’d love to hear it! Simply click the “improve this page” button in the top right corner of the contributing documentation.

Second, this week, we created six community interest groups, we’re calling Jekyll affinity teams. If you’re interested in a particular aspect of the project (or just want to learn more), you can join any one of these teams (or two, or three), to participate in discussions about potential bugs and proposed improvements. And the best part is there’s no commitment. If you just want to listen, or if at any point you want to leave (or switch teams), that’s totally fine. We won’t say a thing. To learn more about the various affinity teams, or to join one (please do!), just head on over to

We hope these changes will make it easier for you to make your first (or second, or third) contribution to Jekyll today. Thanks for helping to make Jekyll awesome!

Jekyll 3.1.2 Released!

Happy Friday from sunny California! Today, we’re excited to announce the release of Jekyll v3.1.2, which comes with some crucial bug fixes:

  • If a syntax error is encountered by Liquid, it will now print the line number.
  • A nasty war between symbols and strings in our configuration hash caused kramdown syntax highlighting to break. That has been resolved; you stand victorious!
  • A tilde at the beginning of a filename will no longer crash Jekyll.
  • The titleize filter mistakenly dropped words that were already capitalized. Fixed!
  • Permalinks which end in a slash will now always output as a folder with an index.html inside.

Nitty-gritty details, like always, are available in the history.

Thanks to those who contributed to this release: Alfred Xing, atomicules, bojanland, Brenton Horne, Carlos Garcés, Cash Costello, Chris, chrisfinazzo, Daniel Schildt, Dean Attali, Florian Thomas, Jordon Bedwell, Juuso Mikkonen, Katya Demidova, lonnen, Manabu Sakai, Michael Lee, Michael Lyons, Mitesh Shah, Nicolas Hoizey, Parker Moore, Pat Hawks, Prayag Verma, Robert Martin, Suriyaa Kudo, and toshi.

Jekyll 3.0.3 Released

GitHub Pages upgraded to Jekyll 3.0.2 last week. With a testbed of over a million sites, this really put Jekyll 3 through the wringer. This release addresses a handful of bugs that were surfaced as a result. The fixes:

  • Fix problem where outputting to a folder would have two extensions
  • Handle tildes (~) in filenames properly
  • Fix issue when comparing documents without dates
  • Include line numbers in liquid error output

Read more on the changelog with links to the related patches.

Please keep submitting bugs as you find them! Please do take a look in our various help resources before filing a bug and use our forum for asking questions and getting help on a specific problem you’re having.

Happy Jekylling!

Jekyll 3.1.1 Released

This release squashes a few bugs :bug: :bug: :bug: noticed by a few wonderful Jekyll users:

  • If your permalink ended with a /, your URL didn’t have any extension, even if you wanted one
  • We now strip the BOM by default per Ruby’s
  • page.dir will not always end in a slash.

We also updated our Code of Conduct to the latest version of the Contributor Covenant. The update includes language to ensure that the reporter of the incident remains confidential to non-maintainers and that all complaints will result in an appropriate response. I care deeply about Jekyll’s community and will do everything in my power to ensure it is a welcoming community. Feel free to reach out to me directly if you feel there is a way we can improve the community for everyone! If you’re interested in more details, there is a diff for that.

See links to the PR’s on the history page.

Thanks to Jordon Bedwell, chrisfinazzo, Kroum Tzanev, David Celis, and Alfred Xing for their commits on this latest release! :sparkles:

Happy Jekylling!

Jekyll 3.1.0 Released

Happy weekend! To make your weekend all the better, we have just released v3.1.0 of Jekyll.

There are lots of great performance improvements, including a huge one which is to use Liquid drops instead of hashes. Much of the slowness in Jekyll is due to Jekyll making lots of objects it doesn’t need to make. By making these objects only as they’re needed, we can speed up Jekyll considerably!

Some other highlights:

  • Fix: permalinks with non-HTML extensions will not be honored
  • Fix: jekyll clean now accepts build flags like --source.
  • Enhancement: include tags can now accept multiple liquid variables
  • Feature: adds new sample liquid tag which gets random element from an array
  • Fix: Jekyll will read in files with front matter that has extraneous spaces after the first line
  • Enhancement: extract the title attribute from the filename for collection items without a date
  • Fix: gracefully handle empty configuration files

… and a whole bunch more!

Please file a bug if you encounter any issues! As always, Jekyll Talk is the best place to get help if you’re encountering a problem.

Special thanks to all our amazing contributors who helped make v3.1.0 a possibility:

Alex J Best, Alexander Köplinger, Alfred Xing, Alistair Calder, Atul Bhosale, Ben Orenstein, Chi Trung Nguyen, Conor O’Callaghan, Craig P. Motlin, Dan K, David Burela, David Litvak Bruno, Decider UI, Ducksan Cho, Florian Thomas, James Wen, Jordon Bedwell, Joseph Wynn, Kakoma, Liam Bowers, Mike Neumegen, Nick Quaranto, Nielsen Ramon, Olivér Falvai, Pat Hawks, Paul Robert Lloyd, Pedro Euko, Peter Suschlik, Sam Volin, Samuel Wright, Sasha Friedenberg, Tim Cuthbertson, Vincent Wochnik, William Entriken, Zshawn Syed, chrisfinazzo, ducksan cho, leethomas, midnightSuyama, musoke, and rebornix

Happy Jekylling!

Jekyll 3.0.2 Released

A crucial bug was found in v3.0.1 which caused invalid post dates to go unnoticed in the build chain until the error that popped up was unhelpful. v3.0.2 throws errors as you’d expect when there is a post like _posts/ or a post has an invalid date like date: "tuesday" in their front matter.

This should make the experience of working with Jekyll just a little better.

Happy Jekylling!

Jekyll 3.0.1 Released

Hey, folks! Bunch of bug fixes here. Notables:

  • Only superdirectories of _posts will be categories.
  • :title in permalink templates are now properly cased as before
  • .jekyll-metadata being erroneously written when not using incremental build.
  • Failure in liquid will now always fail the jekyll process.
  • All hooks should now be properly registered & documented

And a bunch more changes which you can see over in the changelog.

Thanks to the 17 developers who contributed code and documentation to this patch release: Alfred Xing, Christian Trosell, Jordan Thornquest, Jordon Bedwell, Larry Fox, Lawrence Murray, Lewis Cowles, Matt Rogers, Nicole White, Parker Moore, Paul Robert Lloyd, Sarah Kuehnle, Vincent Wochnik, Will Norris, XhmikosR, chrisfinazzo, and rebornix.

Jekyll 3.0 Released

The much-anticipated Jekyll 3.0 has been released! Key changes:

  • Incremental regeneration (experimental, enable with --incremental)
  • Liquid profiler (add --profile to a build or serve)
  • Hook plugin API (no more monkey-patching!)
  • Dependencies reduced from 14 to 8, none contain C extensions. We’re hoping to reduce this even more in the future.
  • Changed version support: no support for Ruby 1.9.3, added basic JRuby support. Better Windows support.
  • Extension-less URLs
  • site.collections is an array of collections, thus:
    • collection[0] becomes collection.label
    • collection[1] becomes collection
  • Default highlighter is now Rouge instead of Pygments
  • Lots of performance improvements
  • … and lots more!

We also added a Code of Conduct to encourage a happier, nicer community where contributions and discussion is protected from negative behaviour.

A huge shout-out to the amazing Jekyll Core Team members Jordon Bedwell, Alfred Xing, and Matt Rogers for all their hard work in making Jekyll 3 the best release yet.

We also added Jekyll Talk, managed solely by Jordon, which offers a modern forum experience for Jekyllers across the globe to talk and learn about Jekyll!

As always, check out the full history for more details.

Our contributors are the core of what makes Jekyll great! Many thanks to the 132 contributors who made this release possible (in alphabetical order): AJ Acevedo, Adam Richeimer, Alan Scherger, Alfred Xing, Anatol Broder, Andrew Dunning, Anna Debenham, Anton, Arne Gockeln, Arthur Hammer, Arthur Neves, BRAVO, Ben Balter, Bernardo Dias, BigBlueHat, Brandon Mathis, Bruce Smith, Cai⚡️, Carlos Matallín, ChaYoung You, Christian Vuerings, Cory Simmons, David Herman, David Silva Smith, David Smith, David Wales, David Williamson, DigitalSparky, Dimitri König, Dominik, Eduardo Boucas, Eduardo Bouças, Eduardo Bouças, Erlend Sogge Heggen, Eugene Pirogov, Ezmyrelda Andrade, Fabian Rodriguez, Fabian Tamp, Fabio Niephaus, Falko Richter, Florian Weingarten, Fonso, Garen Torikian, Guillaume LARIVIERE, Günter Kits, I´m a robot, Jason Ly, Jedd Ahyoung, Jensen Kuras, Jesse Pinho, Jesse W, Jim Meyer, Joel Glovier, Johan Bové, Joop Aué, Jordan Thornquest, Jordon Bedwell, Joseph Anderson, Julien Bourdeau, Justin Weiss, Kamil Dziemianowicz, Kevin Locke, Kevin Ushey, Leonard, Lukas, Mads Ohm Larsen, Malo Skrylevo, Marcus Stollsteimer, Mark Phelps, Mark Tareshawty, Martijn den Hoedt, Martin Jorn Rogalla, Martin Rogalla, Matt Rogers, Matt Sheehan, Matthias Nuessler, Max, Max Beizer, Max White, Merlos, Michael Giuffrida, Michael Tu, Mike Bland, Mike Callan, MonsieurV, Nate Berkopec, Neil Faccly, Nic West, Nicholas Burlett, Nicolas Hoizey, Parker Moore, Pascal Borreli, Pat Hawks, Paul Rayner, Pedro Euko, Peter Robins, Philipp Rudloff, Philippe Loctaux, Rafael Picanço, Renaud Martinet, Robert Papp, Ryan Burnette, Ryan Tomayko, Seb, Seth Warburton, Shannon, Stephen Crosby, Stuart Kent, Suriyaa Kudo, Sylvester Keil, Tanguy Krotoff, Toddy69, Tom Johnson, Tony Eichelberger, Tunghsiao Liu, Veres Lajos, Vitaly Repin, Will Norris, William Entriken, XhmikosR, chrisfinazzo, eksperimental, hartmel, jaybe@jekyll, kaatt, nightsense, nitoyon, robschia, schneems, sonnym, takuti, and tasken.

Happy Jekylling!

Join the Discussion at Jekyll Talk

We’re super excited to announce the launch of Jekyll Talk, a Discourse forum for anything related to Jekyll!

The forum was set up by @envygeeks to build a community more accessible to Jekyll users and more suitable for general discussion.

There’s already been a lot of interesting topics, including a site showcase and a poll for Jekyll 3.0 priorities.

Come join the fun!

Jekyll 3.0.0.beta1 Released


Exciting news! First beta for Jekyll 3 is out. Check out the sizable changelog to get a feel for what changes are afoot. Key features:

  1. Speed. Jekyll now features incremental regeneration and greatly improved problematic code that caused slow-downs.
  2. Gobs of bugfixes and customization.
  3. Uniformity and sanity to Jekyll extensions of Liquid.

To install just run:

$ gem install jekyll --pre

Future versions will include some awesome new features that we haven’t built yet. If you see one you want to tackle, submit a PR & you’ll be featured in the Jekyll 3.0 release post as a contributor to that epic release.

Please file bugs as you encounter them, being sure to include your version of Ruby, the Jekyll version, and (if possible) a link to your site so we can reproduce.

If you think there’s room for improvement in the UX, also do let us know. We’re always looking to make Jekyll easier to use!

Happy Jekylling!

Jekyll Meet & Greet at GitHub HQ

Hey! Our friends at GitHub have agreed to host a Jekyll meet & greet on February 5, 2015 at 7pm. The event will be hosted at GitHub’s Headquarters here in San Francisco, CA. Pizza & beer will be available for those interested, and there will be much time to sit and chat about all things Jekyll. This would be an especially good time to get help with bugs you’ve encountered or to talk over a potential feature with the core team in attendance.

A special thanks to @gjtorikian for making this all possible! You rock.

We look forward to meeting all you fine folks. Cheers!

Alfred Xing has joined the Jekyll core team

We’re excited to announce that @alfredxing has joined the @jekyll/core team!

He hails from Vancouver, BC, Canada, where he is studying Economics and Computer Science at the University of British Columbia. Alfred popped up in the issues a few months ago with terrific insights, focus, and humility. Performance buffs may be pleased to hear incremental regeneration will be released in a future version of Jekyll – a significant piece of the feature written by Alfred.

Please join me in welcoming Alfred to the Jekyll core team. We’re excited he’s agreed to lend his talents to this project. The future is an exciting place!

Happy Jekylling!

Jekyll 2.5.2 Released

A very minor release, 2.5.2 fixes a bug with path sanitation that 2.5.1 introduced. It also improves the post_url tag such that it checks the posts’ name (e.g. 2014-03-03-my-cool-post) instead of a compiled time and name. This fixes issues where posts are created and the day changes based on timezone discrepancies.

Full history here.

Happy Jekylling!

Jekyll 2.5.1 Released

Hot on the heels of v2.5.0, this release brings relief to our Windows users. It includes a fix for a 2.5.0 path sanitation change that has been confirmed to work on Windows.

To our Windows users: while we don’t officially support Windows, we don’t wish to impede your normal use of Jekyll at all. Our lack of full support for Windows is due to our lack of a Windows machine for development testing (no one on the core team has a Windows machine upon which to test new release candidates), not due to any malice or willful oversight. If you come to us with an issue, we are more than happy to work through it with you to come to a solution that works for all platforms. Along those lines, we have created a Windows Test Force (WTF) which is a group of Jekyll users dedicated to making sure all future releases work on Windows before they’re released so we don’t have this issue again. A special thanks goes out to the initial WTF team members, XhmikosR, Julian Thilo, Pedro Rogério, and Alfred Xing.

Happy Jekylling!

Jekyll's Mid-Life Crisis (Or, Jekyll turns 2.5.0)

A new day, a new release! Jekyll just turned 2.5.0 and has gained a lot of wisdom along the way. This 2.5.0 release also comes just a few weeks after Jekyll turned 6 years old! In fashion, we’re celebrating this huge milestone with a pretty big release. What’s changed in 2.5.0? Here are some highlights:

  • Require plugins in the :jekyll_plugins Gemfile group (turned off with an environment variable)
  • Front matter permalinks can now contain placeholders like :name. Check out all the placeholders on the Permalinks docs page.
  • The jsonify filter now deep-converts arrays to liquid.
  • Shorted build and serve commands with b and s aliases, respectively
  • WEBrick will now list your directory if it can’t find an index file.
  • Any enumerable can be used with the where filter.
  • Performance optimizations thanks to @tmm1’s stackprof
  • Fix for Rouge’s Redcarpet interface
  • Security auditors will love this: path sanitation has now been centralized.
  • Specify a log level with JEKYLL_LOG_LEVEL: debug, info, warn, or error.

…and a whole bunch of other fixes and enhancements you can read more about in the changelog!

As always, if you run into issues, please check the issues and create an issue if one doesn’t exist for the bug you encountered. If you just need some help, the extraordinary jekyll help team is here for you!

When was the first commit to Jekyll? All the way back on October 19, 2008. It features interesting historical tidbits, such as the old name for Jekyll was “autoblog”, and was first released via Rubyforge. What a difference 6 years has made!

Thanks to the following contributors for making this release possible:

Parker Moore, XhmikosR, Alfred Xing, Ruslan Korolev, Pat Hawks, chrisfinazzo, Mike Kruk, Tanguy Krotoff, Matt Hickford, Philipp Rudloff, Rob Murray, Sean Collins, Seth Warburton, Tom Thorogood, Vasily Vasinov, Veres Lajos, feivel, mitaa, nitoyon, snrbrnjna, tmthrgd, Bret Comnes, Charles Baynham, Christian Mayer, Dan Croak, Frederic Hemberger, Glauco Custódio, Igor Kapkov, and Kevin Ndung’u!

A Wild Jekyll 2.4.0 Appeared!

Well, lookie here! A new release of Jekyll! v2.4.0 contains lots of goodies, including some brilliant new additions:

  • A new relative_include Liquid tag (#2870)
  • Render Liquid in CoffeeScript files (#2830)
  • Add 4 new array Liquid filters: push, pop, shift, and unshift (#2895)
  • Auto-enable watch on ‘serve’ (#2858). No more -w!
  • Add :title and :name to collection URL template fillers (#2864 & #2799)
  • Add support for CSV files in the _data directory (#2761)
  • Add inspect liquid filter (#2867)
  • Add a slugify Liquid filter (#2880)

Some other wunderbar bug fixes in there as well. Check out the full changelog for the whole scoop.

As always, many thanks to our amazing contributors who made this release possible: Chris Frederick, Garen Torikian, James Smith, Ruslan Korolev, Joel Glovier, Michael Kühnel, Minn Soe, Pat Hawks, Peter deHaan, Shu Uesugi, TJ, Zhuochun, Alfred Xing, nitoyon, Anatol Broder, Faruk AYDIN, Frederic Hemberger, and Gordon Gao. Thank you!!

Happy Jekylling!

Jekyll 2.3.0 Released

This latest release of Jekyll includes a slew of enhancements and bug fixes. Some of the highlights:

  • Strange bug around spacing/indentation should be resolved. It was a curious bug indeed.
  • Pages, Posts, and Drafts can now be converted by multiple converters.
  • Static files can now be safely included in collections. They’ll be placed in a collection.files array. still holds exclusively content with front matter.
  • Sass files can once again be rendered by Liquid. However, neither Sass nor CoffeeScript can ever have a layout. Bonus: scssify and sassify Liquid filters.
  • Partial variables allowed now in the path argument of include calls
  • We added a jekyll help command. Pass it a subcommand to see more info about that subcommand. Or don’t, to see the help for jekyll itself.
  • Lots of fixes to the site template we use for jekyll new, including converting the CSS into SCSS.
  • The jsonify filter will now call #to_liquid for you
  • Lots, lots more!

One change deserves special note. In #2633, subfolders inside a _posts folder were processed and added as categories to the posts. It turns out, this behaviour was unwanted by a large number of individuals, as it is a handy way to organize posts. Ultimately, we decided to revert this change in #2705, because it was a change in behaviour that was already well-established (at least since Jekyll v0.7.0), and was convenient.

For more excellent CHANGELOG reading material, check out the History page! Happy Jekylling!

Jekyll 2.2.0 Released

Jekyll 2.2.0 contains a few key updates:

  1. A warning will now fire if you specify a layout in any of your pages or posts that doesn’t exist.
  2. Certain Pygments options are now whitelisted in safe mode
  3. Categories in a post’s path are now respected (i.e. folders in _posts will now work properly).

As always, a full list of the updates are on the history page. Happy Jekylling!

Jekyll 2.1.1 Released

This is a minor release for Jekyll 2.1.0. It fixes a couple bugs and introduces fixes for a couple security-related issues.

It covers two security vulnerabilities:

  1. One in the reading of data
  2. One in the layouts setting

They were identified in Jekyll 1.5.1 and has been confirmed as patched in this version and the version used by GitHub Pages. If you are in the business of building Jekyll sites, please ensure you upgrade to 2.1.1 as soon as possible.

For more, check out jekyll/jekyll#2563.

Additionally, the dependency on Maruku has been loosened and a bug was fixed with document URLs.

As always, check out the full changelog for more info!

Happy Jekylling!

Jekyll Turns 21! Err... I mean 2.1.0.

Jekyll’s finally legal to drink in the States. And he’s done a lot of learning in the process! Here are some of the new things to look forward to:

  • Uses the latest Liquid version (2.6.1) (#2495)
  • Set front matter defaults for collections (#2419)
  • Set a collection-specific URL template (#2418)
  • pygments.rb 0.6.0! (#2504)
  • .json files in _data (#2369)
  • Allow subdirectories in _data (#2395)
  • Add support for hl_lines in highlight tag (#2532)
  • Post categories now merge with directory, front matter, and defaults (#2373)
  • New --skip_initial_build flag for jekyll serve (#2477)
  • A bajilion bug fixes and site updates!

Let’s go party!

Check out the full changelog for more.

Many thanks to these 37 contributors for the 2.1.0 release:

Alberto Grespan, Alessandro Lorenzi, Alex Medearis, Alfred Xing, Anatol Broder, Ben, Ben Balter, Bud Parr, Chezou, Denilson Figueiredo de Sá, Denilson Sá, Ivan Tse, Jens Nazarenus, Jesse Shawl, Jordon Bedwell, Josh Davis, János Rusiczki, Marc Ransome, Mathieu Bruyen, Matt Rogers, Parker Moore, Pat Hawks, Paul Henry, Peter Rhoades, Philipp Rudloff, Quinn Shanahan, Renaud Martinet, Rob Murray, Rodrigo Dumont, Simon Sarris, Terry, Terry Schmidt, Tomer Cohen, XhmikosR, Yihang Ho, jaybe@jekyll, and mikecole.

Pick Up your $1 Jekyll Sticker

Jekyll Sticker

You may have heard that @cobyism’s excellent Jekyll logo has been made into a sticker. You may have sat idly by, wishing that you could have a sticker honoring your beloved Jekyll.

The StickerMule team says, “Pine no longer!” StickerMule has discounted the price of Jekyll stickers down to $1 and are offering free (domestic) shipping! Go grab one now on the StickerMule marketplace – they’ll look swell on your favourite hardware.

Jekyll 2.0.3 Released

Hey again! Just wanted to let you know we’ve released another version of Jekyll, jam-packed with bug fixes.

A huge “thank you” is in order for all the folks who have submitted bug reports over the last 2 days — your input is what allows this project to continue. It’s always a pain to deal with a MAJOR version bump release, but it’s been pretty smooth so far and you have all been nice about the flaws you’ve found in the tool. Keep filing those reports so we can continue to make Jekyll even better!

Thank you to the contributors that contributed code to 2.0.1, 2.0.2, and/or 2.0.3:

Parker Moore, Yi Zeng, Gabe Ortiz, Aaron Broder, Alberto Grespan, gpxl, David Briggs, Kevin Ingersoll, and Troy Swanson.

As always, check out the changelog for more info. Happy Jekylling!

Jekyll turns 2.0.0

A year ago to the day, we released Jekyll 1.0.0. One year later, we present to you the next major version: Jekyll 2.0.0.

Jam-packed with some highly-requested features and bugfixes galore, this is the best Jekyll yet. Some notable changes:

  1. Collections - Collections allow you to define an unlimited number of custom document types (beyond just posts and pages) for different types of content you may want to author in Jekyll such as API documentation or a cookbook!
  2. Brand new site template (thanks @jglovier!) - Getting started with Jekyll just got a lot easier and a lot more beautiful. Just run jekyll new <path> and you’re good to go.
  3. Native Sass & CoffeeScript support - We love CSS and JavaScript as much as the next guy, but there will always be a special place in our hearts for Sass and CoffeeScript. We now offer native support for these file types — no more messing around with Rake or Grunt!
  4. Front Matter defaults - If you’ve set layout: post more than once in your life, you’ll love this new feature: set front matter defaults for a given directory or type.
  5. Custom markdown processors - Always wanted to use your favourite home-grown Markdown converter, but couldn’t with Jekyll? Now you can. Simply specify markdown: MyConverterClass and you’re on your way.
  6. Addition of where and group_by Liquid filters - Simplifying your Liquid templates one filter at a time. The where filter selects from an array all items within which have a given value for a property. The group_by filter groups all items in an array which have the same value for a given property.
  7. Switch from Maruku to Kramdown as default markdown converter - Maruku is dead. We’ve replaced it with the converter which has the closest feature parity: Kramdown!

Check out our changelog for a complete list of all (200+) changes.

Many thanks to these 183 contributors for making Jekyll 2.0.0 happen:

Parker Moore, Matt Rogers, maul.esel, Anatol Broder, Zach Gersh, Joel Glovier, Ben Balter, XhmikosR, Coby Chapple, John Piasetzki, Aidan Feldman, Robin Dupret, Pascal Borreli, Troy Swanson, Erik Michaels-Ober, albertogg, Lucas Jenss, Matt Rogers & Persa Zula, Eric Mill, Shigeya Suzuki, Jens Nazarenus, ddavison, Pat Hawks, Rob Wierzbowski, MURAOKA Taro, Casey Lang, Fabian Rodriguez, Greg Karékinian, Zlatan Vasović, Christopher Nicotera, Dmitry Chestnykh, Ryan Morrissey, Jordon, John Hughes, akira yamada, Matt Swanson, Jashank Jeremy, Matthew Iversen, Meeka, liufengyun, Anand Narayan, nitoyon, Geoff Shannon, Benjamin J. Balter, Juan Ignacio Donoso, David Briggs, Benjamin Esham, Slava Pavlutin, Assaf Gelber, Josh Brown, Nick Fagerlund, Davide Ficano, pilosus, Anthony Smith, André Arko, Mikael Konutgan, Matthew Scharley, Dan Tao, scribu, Mort Yao, m, Stephen McDonald, Marcus Stollsteimer, Thomas Torsney-Weir, Jordon Bedwell, Tom Preston-Werner, Lincoln Mullen, Philip Poots, Ivan Tse, Christopher Giroir, Valery Tolstov, Wlodek Bzyl, Xavier Noria, Yi Zeng, Persa Zula, Phil Leggetter, Pirogov Evgenij, Rafael Revi, Rob McGuire-Dale, Rob Muhlestein, Robin Mehner, Roland Warmerdam, Rusty Geldmacher, Sam Rayner, Santeri Paavolainen, Sebastian Morr, Stephan Groß, Steven Spasbo, Tobias Brunner, Tuomas Kareinen, Tyler Margison, Uwe Dauernheim, Yihang Ho, Zach Leatherman, Zequez, andrew morton, andrewhavens, imathis, jannypie, jaybe@jekyll, kk_Ataka, markets, redwallhp, schneems, szymzet, thomasdao, tomsugden, wǒis神仙, 张君君, Noah Slater, Abhi Yerra, Adam Heckler, Ahmed Hazem, Aigars Dzerviniks, Aleksey V. Zapparov, Andreas Möller, Andy Lindeman, Arlen Cuss, Aziz Shamim, Ben Baker-Smith, Ben Hanzl, Ben Hildred, Brian Kim, Brice, Carol Nichols, Chezou, Chris Jones, Christian Grobmeier, Christoph Hochstrasser, Christoph Schiessl, Clint Shryock, Colin Dean, Corey Ward, Damian Lettie, Daniel Schauenberg, David Ensinger, David Paschich, David Sawyer, David Silva Smith, Donald Perry, Doug Johnston, Edward Ball, Eric Dobson, Erik Dungan, Florent Guilleux, Francis, Frederic ROS, GSI2013, Garen Torikian, George Anderson, Giuseppe Capizzi, Ishibashi Hideto, Jarrod Birch, Jeff Kolesky, Jens Bissinger, Jens Krause, John Firebaugh, John Papandriopoulos, Josh Branchaud, Katy DeCorah, Lachlan Holden, Mark Prins, Markus Roth, Martin Charles, Matt Iversen, Matt Sheehan, Matt Swensen, Matthias Vogelgesang, Michael Parker, Miha Rekar, Nathan Youngman, Nick Quaranto, Nick Quinlan, Nick Schonning, Nicolas Alpi, Nicolás Reynolds, Nikkau, 4ensicLog, Octavian Damiean, Olov Lassus, PatrickC8t, Paul Annesley, and Paul Oppenheim.

Happy developing!

Jekyll 1.5.1 Released

The hawk-eyed @gregose spotted a bug in our Jekyll.sanitized_path code:

> sanitized_path("/tmp/foobar/jail", "..c:/..c:/..c:/etc/passwd")
=> "/tmp/foobar/jail/../../../etc/passwd"

Well, we can’t have that! In 1.5.1, you’ll instead see:

> sanitized_path("/tmp/foobar/jail", "..c:/..c:/..c:/etc/passwd")
=> "/tmp/foobar/jail/..c:/..c:/..c:/etc/passwd"

Luckily not affecting 1.4.x, this fix will make 1.5.0 that much safer for the masses. Thanks, Greg!

Jekyll 1.5.0 Released

As work continues on Jekyll 2.0.0, we felt it was important to address two key issues of Jekyll 1.4.3, namely the safe_yaml dependency below 1.0 and the inability to use Jekyll 1.4.3 on Windows due to a fun issue with path sanitizing.

For a full changelog, check out our history page.

Now, back to work on 2.0.0!

Jekyll 1.4.3 Released

Jekyll 1.4.3 contains two critical security fixes. If you run Jekyll locally and do not run Jekyll in “safe” mode (e.g. you do not build Jekyll sites on behalf of others), you are not affected and are not required to update at this time. (See pull request.)

Versions of Jekyll prior to 1.4.3 and greater than 1.2.0 may allow malicious users to expose the content of files outside the source directory in the generated output via improper symlink sanitization, potentially resulting in an inadvertent information disclosure.

Versions of Jekyll prior to 1.4.3 may also allow malicious users to write arbitrary .html files outside of the destination folder via relative path traversal, potentially overwriting otherwise-trusted content with arbitrary HTML or Javascript depending on your server’s configuration.

Maintainer’s note: Many thanks to @gregose and @charliesome for discovering these vulnerabilities, and to @BenBalter and @alindeman for writing the patch.

Jekyll 1.4.2 Released

This release fixes a regression where Maruku fenced code blocks were turned off, instead of the previous default to on. We’ve added a new default configuration to our maruku config key: fenced_code_blocks and set it to default to true.

If you do not wish to use Maruku fenced code blocks, you may turn this option off in your site’s configuration file.

Jekyll 1.4.1 Released

Another quick turnover, anyone? A critical bug in the reading of posts snuck itself into the 1.4.0 release.

To address this issue, we’re releasing v1.4.1 of Jekyll so that you can keep on writing without any problems.

As always, you can find the full list of fixes in this release in the change log!

Jekyll 1.4.0 Released

About a month after the release of Jekyll v1.3.0, we are releasing Jekyll v1.4.0. This release will be the last non-patch release to support Ruby 1.8.7 and our next release will be Jekyll 2.0.0.

Here are a few things we think you’ll want to know about this release:

  • TOML is now a supported markup language for config files.

  • Maruku has been updated to 0.7.0 which provides some new features and a ton of bugfixes over the previous 0.6.x releases.

  • Non-gem Plugins are now sorted alphabetically by filename before they’re processed, which can provide a rudimentary way to establish a load order for plugins.

For a full run-down, visit our change log!

As always, Jekyll wouldn’t be possible without the contributions from others in the Jekyll community. We’d like to thank the following people for contributing to this release: Anatol Broder, David Sawyer, Greg Karékinian, Jordon Bedwell, Matthew Iversen, Persa Zula, and Yi Zeng.

Jekyll 1.3.1 Released

Just in time for the US holiday Thanksgiving, we’re releasing version 1.3.1 of Jekyll to address some of the issues seen since the release of 1.3.0.

In addition to a couple of other smaller bug fixes, the biggest thing we’ve fixed is an issue with the --watch option with Ruby 1.8.7. For a full run-down, visit our change log!

Thanks to all the people who have contributed to this release! They are (in alphabetical order): Abhi Yerra, Anatol Broder, Andreas Möller, Greg Karékinian, Sam Rayner, Santeri Paavolainen, Shigeya Suzuki, Yihang Ho, albertogg, andrewhavens, maul.esel, and thomasdao

Jekyll 1.3.0 Released

It’s been about six weeks since v1.2.0 and the Jekyll team is happy to announce the arrival of v1.3.0. This is a huge release full of all sorts of new features, bug fixes, and other things that you’re sure to love.

Here are a few things we think you’ll want to know about this release:

  • You can add arbitrary data to the site by adding YAML files under a site’s _data directory. This will allow you to avoid repetition in your templates and to set site specific options without changing _config.yml.

  • You can now run jekyll serve --detach to boot up a WEBrick server in the background. Note: you’ll need to run kill [server_pid] to shut the server down. When ran, you’ll get a process id that you can use in place of [server_pid]

  • You can now disable automatically-generated excerpts if you set excerpt_separator to "".

  • If you’re moving pages and posts, you can now check for URL conflicts by running jekyll doctor.

  • If you’re a fan of the drafts feature, you’ll be happy to know we’ve added -D, a shortened version of --drafts.

  • Permalinks with special characters should now generate without errors.

  • Expose the current Jekyll version as the jekyll.version Liquid variable.

For a full run-down, visit our change log!

Jekyll 1.3.0.rc1 Released

Jekyll 1.3.0 is going to be a big release! In order to make sure we didn’t screw anything up too badly, we’re making a release candidate available for any early adopters who want to give the latest and greatest code a spin without having to clone a repository from git.

Please take this prerelease for a spin and let us know if you run into any issues!

Jekyll 1.2.1 Released

Quick turnover, anyone? A recent incompatibility with Liquid v2.5.2 produced a nasty bug in which include tags were not rendered properly within if blocks.

This release also includes a better handling of detached servers (prints pid and the command for killing the process). Note: the --detach flag and --watch flags are presently incompatible in 1.2.x. Fix for that coming soon!

For a full list of the fixes in this release, check out the change log!

Jekyll 1.2.0 Released

After nearly a month and a half of hard work, the Jekyll team is happy to announce the release of v1.2.0. It’s chock full of bug fixes and some enhancements that we think you’ll love.

Here are a few things we think you’ll want to know about this release:

  • Run jekyll serve --detach to boot up a WEBrick server in the background. Note: you’ll need to run kill [server_pid] to shut the server down.
  • You can now disable automatically-generated excerpts if you set excerpt_separator to "".
  • If you’re moving around pages and post, you can now check for URL conflicts by running jekyll doctor.
  • If you’re a fan of the drafts feature, you’ll be happy to know we’ve added -D, a shortened version of --drafts.
  • Permalinks with special characters should now generate without errors.
  • Expose the current Jekyll version as the jekyll.version Liquid variable.

For a full run-down, visit our change log!

Jekyll 1.1.2 Released

Version 1.1.2 fixes a minor, but nonetheless important security vulnerability affecting several third-party Jekyll plugins. If your Jekyll site does not use plugins, you may, but are not required to upgrade at this time.

Community and custom plugins extending the Liquid::Drop class may inadvertently disclose some system information such as directory structure or software configuration to users with access to the Liquid templating system.

We recommend you upgrade to Jekyll v1.1.2 immediately if you use Liquid::Drop plugins on your Jekyll site.

Many thanks for Ben Balter for alerting us to the problem and submitting a patch so quickly.

Jekyll 1.0.4 Released

Version 1.0.4 fixes a minor, but nonetheless important security vulnerability affecting several third-party Jekyll plugins. If your Jekyll site does not use plugins, you may, but are not required to upgrade at this time.

Community and custom plugins extending the Liquid::Drop class may inadvertently disclose some system information such as directory structure or software configuration to users with access to the Liquid templating system.

We recommend you upgrade to Jekyll v1.0.4 immediately if you use Liquid::Drop plugins on your Jekyll site.

Many thanks for Ben Balter for alerting us to the problem and submitting a patch so quickly.

Jekyll 1.1.1 Released

Coming just 10 days after the release of v1.1.0, v1.1.1 is out with a patch for the nasty excerpt inception bug (#1339) and non-zero exit codes for invalid commands (#1338).

To all those affected by the strange excerpt bug in v1.1.0, I’m sorry. I think we have it all patched up and it should be deployed to GitHub Pages in the next couple weeks. Thank you for your patience!

If you’re checking out v1.1.x for the first time, definitely check out what shipped with v1.1.0!

See the GitHub Release page for more a more detailed changelog for this release.

Jekyll 1.1.0 Released

After a month of hard work, the Jekyll core team is excited to announce the release of Jekyll v1.1.0! This latest release of Jekyll brings some really exciting new additions:

  • Add docs subcommand to read Jekyll’s docs when offline. (#1046)
  • Support passing parameters to templates in include tag (#1204)
  • Add support for Liquid tags to post excerpts (#1302)
  • Fix pagination for subdirectories (#1198)
  • Provide better error reporting when generating sites (#1253)
  • Latest posts first in non-LSI related_posts (#1271)

See the GitHub Release page for more a more detailed changelog for this release.

Jekyll 1.0.3 Released

v1.0.3 contains some key enhancements and bug fixes:

  • Fail with non-zero exit code when MaRuKu errors (#1190) or Liquid errors (#1121)
  • Add support for private gists to gist tag (#1189)
  • Add --force option to jekyll new (#1115)
  • Fix compatibility with exclude and include with pre-1.0 Jekyll (#1114)
  • Fix pagination issue regarding File.basename and page:num (#1063)

See the History page for more information on this release.

Jekyll 1.0.2 Released

v1.0.2 has some key bugfixes that optionally restore some behaviour from pre-1.0 releases, and fix some other annoying bugs:

  • Backwards-compatibilize relative permalinks (#1081)
  • Add jekyll doctor command to check site for any known compatibility problems (#1081)
  • Deprecate old config server_port, match to port if port isn’t set (#1084)
  • Update pygments.rb and kramdon versions to 0.5.0 and 1.0.2, respectively (#1061, #1067)
  • Fix issue when post categories are numbers (#1078)
  • Add a data-lang="<lang>" attribute to Redcarpet code blocks (#1066)
  • Catching that Redcarpet gem isn’t installed (#1059)

See the History page for more information on this release.

Jekyll 1.0.1 Released

Hot on the trails of v1.0, v1.0.1 is out! Here are the highlights:

  • Add newer language- class name prefix to code blocks (#1037)
  • Commander error message now preferred over process abort with incorrect args (#1040)
  • Do not force use of toc_token when using generate_toc in RDiscount (#1048)
  • Make Redcarpet respect the pygments configuration option (#1053)
  • Fix the index build with LSI (#1045)
  • Don’t print deprecation warning when no arguments are specified. (#1041)
  • Add missing </div> to site template used by new subcommand, fixed typos in code (#1032)

See the History page for more information on this release.

Jekyll 1.0.0 Released

Hey! After many months of hard work by Jekyll’s contributors, we’re excited to announce the first major release of the project in a long while. v1.0.0 is finally here! While the list of improvements and bug fixes is quite lengthy, here are the highlights (thanks to @benbalter for the examples and for compiling this list):

  • Support for the Gist tag for easily embedding Gists (example)
  • Automatically generated post excerpts (example)
  • Save and preview drafts before publishing (example)

Take a look at the Upgrading page in the docs for more detailed information.