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 lile 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:

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 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.

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! 🎂

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 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 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!

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!

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 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.

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.