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 annd 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/2016-4-4-april-fourth.md.

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 YAML front matter, want to respect YAML 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 the YAML front matter. But what about static files, which don’t have YAML 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:

defaults:
  -
    scope:
      path: "pdfs/"
    values:
      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:

YYYY-MM-DD-title.extension

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:

%r!^(?:.+/)*(\d+-\d+-\d+)-(.*)(\.[^.]+)$!

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:

84093135-42842323-42000001-b890-136270f7e5f1.md

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:

%r!^(?:.+/)*(\d{4}-\d{2}-\d{2})-(.*)(\.[^.]+)$!

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:

%r!^(?:.+/)*(\d{2,4}-\d{1,2}-\d{1,2})-(.*)(\.[^.]+)$!

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 YAML 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 }} => https://jekyllrb.com/myproject/docs/assets

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:
collections:
  posts:
    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 GitHub.com 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 teams.jekyllrb.com.

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 IO.open.
  • 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 YAML 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/2016-22-01-future.md 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

Hey!

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)
  • YAML 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. collection.docs still holds exclusively content with YAML 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. YAML 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.