Authentic people growing open source code with taste

WeasyPrint v57 Has Been Released

Version 57 of WeasyPrint has been released. As usual, it comes with a lot of exciting new features and bug fixes.

What’s New?

Visible Features

This stable version includes all the changes from the beta version:

  • PDF/UA documents can now be generated,
  • variable fonts are now supported,
  • many bugs of footnotes in multicolumn layouts have been fixed.

Version 57 also includes many small bug fixes since the beta version, with an improved support of fonts, a bug fix for the skew transformation, the possibility to attach documents to PDF files with anchors, or a better handling of baselines in inline flex elements.

Note also that a lot of new CSS selectors are available in the latest versions of cssselect2 released in 2022. Don’t forget to update this library to get the possibility to put these very useful selectors in your stylesheets!

We would like to thank Code & Co., OpenZeppelin and Novareto for their financial support, we’ve had a great time working with them during this release 😻. If you want to be the next company to benefit from our savoir-faire, don’t hesitate to send a mail to share your great projects with us!

Invisible Work

As always, our work on WeasyPrint includes a lot of less visible but critical tasks.

Among these tasks, packaging is a very important one. We’ve spent a lot of time to get a nice workflow to easily generate our source and wheel packages on PyPI, so that pip install weasyprint works correctly on many platforms.

Linux is not the only platform where WeasyPrint is packaged: you can now easily install WeasyPrint with Homebrew on macOS 🍎 or with OpenBSD’s port 🐠.

Packaging takes a lot of time. Python’s packaging ecosystem is improving fast, tools change and sometimes things break… It’s important for us to take the time to talk with packagers, even when it’s difficult (and that’s not the only example), because they’re the people working in the shadows to give everyone the possibility to use software more easily. In this release, we had to remove the default use of Pytest’s plugins for coverage and linting, because of nasty compatibility bugs between Pytest and Pytest-Flake8. That’s also a way to improve the packagers’ life, because it avoids useless problems with these tools while they’re testing their packages.

Thanks to everyone working around our libraries 🙏, thanks to our wonderful contributors 💜, we’ll continue to do our best to make WeasyPrint easy to hack, to debug, to package, and of course to use!

What’s Coming Next?


Our work on Grid and Flex has been delayed so many times 📅… Sorry for all the people waiting for these features, we had a lot of work to do to please our lovely sponsors 🚀. Let’s hope that version 58 will finally bring good news for these topics!

Of course, if you really want some features to come earlier, don’t hesitate to send a message to share your needs with us, or to become a sponsor on OpenCollective. We’ve already had a lot of fun working with big companies on big projects with a lot code 🏭, we love small documents with cute handcrafted stylesheets 📑, and we always thank our beloved backers when we drink a cup of coffee ☕ or a pint of beer 🍺.

Each project and each donation, big or small, is important to keep WeasyPrint working well. CourtBouillon is now 2 years old 🎂 and we’ll do our best to continue providing high-quality libraries and support for a long time! If you’re interested in the technical and financial details about our second year, don’t forget to read our 2nd anniversary’s article to get a complete overview.

Your Turn!

It’s now your turn to work! Install version 57 and give us some feedback. We hope that the different improvements brought by this release will be helpful for you.