Lektor 3.2 Released

by Andreas Runfalk on Thursday, August 20, 2020

It's been a long time in the making, and on behalf of the Lektor Team I'm happy to introduce the 3.2 release of Lektor. As some of you may have noticed the development pace of Lektor has slowed down over the past two years. Those of you who have had open PRs for a long time, sorry for the delay and we'll try to do better going forward!

Recently we've made a big push to bring the project back on its feet. Our focus besides merging PRs and fixing various issues has been to streamline the CI and release process. The biggest change was the switch from Travis and Appveyor to GitHub actions which should make the release process a lot easier going forward.

We have also promoted lektor-tags and lektor-atom to official plugins. This represents our commitment to keep them up to date. We have also deployed a new CI workflow that can publish new versions using tags. This will be something all plugin authors can use in their own projects. Thank you Gonzalo Peña-Castellanos for spearheading the CI improvements.

A big shoutout to all the contributors who help make Lektor awesome!

Since Python 2 is EOL and its final release ever happened on April 20th, 2020, this will be the last Lektor release with Python 2 support. This is also the last release supporting Python 3.5 since it is very near EOL and we want to have opportunity to work with several benefits of Python 3.6 going forward.

The slugify change may mean that your URLs will change when you update to Lektor 3.2. This could lead to broken links from external sites such as search engines. This can be fixed by providing a custom slug for the necessary pages.



  • Fix to correctly calculate relative urls from slugs that contain dots. (thank you f-seven)
  • Fix to allow negative integers in integer fields in the admin UI. (thank you David Ferguson)
  • Fix lektor plugins reinstall triggered on_setup_env instead of just reinstalling plugins. (thank you Mikhail Gerasimov)
  • Fix failing dimensions detection for some JPEG thumbnails. (thank you Ionuț Ciocîrlan)
  • Fix mismatch between reported thumbnail size and on-disk image when both width & height are provided. (thank you Ionuț Ciocîrlan)
  • Return JPEG dimensions swapped when EXIF rotation is in effect. (thank you Ionuț Ciocîrlan)
  • Fix off-by-1px rounding discrepancy between reported thumbnail dimensions and actual dimensions. (thank you Ionuț Ciocîrlan)
  • Fix off-by-one error in pagination's iter_pages in the interpretation of the right_current argument, and adding an appropriate trailing None for some uses. (thank you Jeff Dairiki)

New features


  • Added support for setting the output_path in the project file. (thank you George Kussumoto)
  • Added support for deleting and excluding files for the rsync deployment publisher. (thank you m-lnrs)
  • Several modernization and performance improvements to the admin UI (thank you Jakob Schnitzer)
  • Improved speed of source info updates. (thank you Jeff Dairiki)
  • Set colorspace to sRGB for thumbnails. This should result in significantly reduced thumbnail file size when the source image uses a more exotic colorspace. (thank you Stavros Korokithakis)
  • Now stripping profiles and comments from thumbnails, for even smaller file size. (thank you Stavros Korokithakis)
  • Improved speed of flow rendering in the admin UI. (thank you David Ferguson)
  • Improved image-heavy build speeds by reducing the amount of data extracted from EXIFs. (thank you Tobias Pfeiffer)
  • Added the ability to collapse flow elements in the admin UI. (thank you Jason Traub)
  • Now extra_flags is passed to all plugin events. (thank you Joseph Nix)
  • Extra flags can now be passed to the clean and dev shell CLI commands. (thank you Joseph Nix)
  • Deprecate the crop thumbnail argument in favor of the new mode argument, which can be one of fit (the default), crop, or stretch. (thank you Ionuț Ciocîrlan)
  • upscale=False for thumbnails can now prevent up scaling. (thank you Ionuț Ciocîrlan)
  • Added a new CLI command lektor dev new-theme. (thank you Joseph Nix)
  • Made admin use full UTF-8 version of RobotoSlab. Fixes missing glyphs for some languages (thank you Jakob Schnitzer)
  • Bumped minimum Jinja2 version to 2.11 (thank you Joseph Nix)
  • Bumped filetype dependency to 1.0.7 because of API changes (thank you Ionuț Ciocîrlan)
  • Relative urls are now as short as possible. (thank you Oleg Geier and Ionuț Ciocîrlan)
  • Automatically include setup.cfg configured for universal wheels when creating plugins (thank you George Kussumoto)
  • Changed default slug creation to use python-slugify. This should mean greater language support, but this may produce slightly different results than before for some users (thank you Joseph Nix and Ionuț Ciocîrlan)