NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
PyPI · #669 most downloaded on PyPI
The Awesome Document Factory
Last release 19 days ago
08 Sep 2026
Ships fairly regularly
a new release about every 2 months
Nearly every release is documented
notes for 60 of the last 60 stable releases
Nothing withdrawn
no release was ever pulled
15 years old
120 releases · first in 2011
WeasyPrint now has a code of conduct.
WeasyPrint now has a code of conduct.
A new website has been launched, with beautiful and useful graphs about speed and memory use across versions: check WeasyPerf.
--quiet CLI parameter--debug CLI parameter and set debug level for unknown prefixed CSS propertiesOne column per quarter.
Improve speed and memory usage for long texts.
## Bug fixes * #726: Make empty strings clear previous values of named strings * #729: Include tools in packaging
## Bug fixes * #706: Fix text-indent at the beginning of a page * #687: Allow query strings in file:// URIs * #720: Optimize minimum size calculation
<details> tags as blocksPython 3.4+ is now needed, Python 2.x is not supported anymore
Bug fixes: * #583: Fix floating-point number error to fix floating box layout * #586: Don't optimize resume_at when splitting lines with trailing spac
Bug fixes:
Bug fixes: * #560: Fix a couple of crashes and endless loops when breaking lines.
Bug fixes:
Released on 2018-02-04.
Bug fixes:
#560: Fix a couple of crashes and endless loops when breaking lines.
Bug fixes: * #566: Don't crash when using @font-config. * #567: Fix text-indent with text-align: justify. * #465: Fix string(*, start). * #562: Handle
Bug fixes:
WeasyPrint is not tested with (end-of-life) Python 3.3 anymore.
WeasyPrint is not tested with (end-of-life) Python 3.3 anymore.
This release is probably the last version of the 0.x series.
Next version may include big changes:
New features:
Bug fixes:
@page rules that are imported by an @import rule.WeasyPrint now depends on pdfrw >= 0.4.
WeasyPrint now depends on pdfrw >= 0.4.
New features:
Bug fixes:
Documentation:
WeasyPrint now depends on cssselect2 instead of cssselect and lxml.
WeasyPrint now depends on cssselect2 instead of cssselect and lxml.
New features:
Bug fixes:
Fix the use of WeasyPrint's URL fetcher with CairoSVG
Bug fixes:
Released on 2017-06-24.
Bug fixes:
Fix the use of WeasyPrint's URL fetcher with CairoSVG.
Bug fixes: * #477: Don't crash on font-face's src attributes with local functions.
Bug fixes:
Released on 2017-06-16.
Bug fixes:
#477: Don't crash on font-face's src attributes with local functions.
WeasyPrint now depends on tinycss2 instead of tinycss.
WeasyPrint now depends on tinycss2 instead of tinycss.
New features:
Bug fixes:
New features: - #407 Handle ::first-letter. - #423 Warn user about broken cairo versions. Bug fixes: - #411 Typos fixed in command-line help.
New features:
::first-letter.Bug fixes:
Bug fixes: - #410 Fix AssertionError in split_text_box.
Fix multi-page multi-columns and add related tests.
Bug fixes:
New features: - #393: Add tests on MacOS. - #370: Enable @font-face on MacOS. Bug fixes: - #389: Always update resume_at when splitting lines. - #394:
New features:
@font-face on MacOS.Bug fixes:
Support CSS fonts level 3 almost entirely, including OpenType features.
New features:
Bux fixes:
Documentation:
New features: - #124: Add MIME sniffing for images. - #60: CSS Multi-column Layout. - #197: Add hyphens at line breaks activated by a soft hyphen. Bux
Released on 2016-08-28.
New features:
#124: Add MIME sniffing for images.
#60: CSS Multi-column Layout.
#197: Add hyphens at line breaks activated by a soft hyphen.
Bux fixes:
#132: Fix Python 3 compatibility on Windows.
Documentation:
#329: Add documentation about installation on Windows.
WeasyPrint now depends on html5lib-0.999999999.
Released on 2016-07-18.
WeasyPrint now depends on html5lib-0.999999999.
Bux fixes:
Bug fixes: - #263: Don't crash with floats with percents in positions. - #323: Fix CairoSVG 2.0 pre-release dependency in Python 2.x.
Bug fixes:
Don't crash when transform matrix isn't invertible
Bug fixes:
white-space: nowrap still wraps on hyphensThe website is now on GitHub Pages, the documentation is on Read the Docs.
Support the empty-cells attribute.
New features:
empty-cells attribute.Bug fixes:
Released on 2015-12-17. New features: * Support the 'q' unit. Bug fixes: * #285 _: Fix a crash happening when splitting lines. * #284 _: Escape parent
Released on 2015-12-17.
New features:
Support the 'q' unit.
Bug fixes:
Fix some wrong conflict resolutions for table borders with inset and outset styles.
Released on 2015-08-04.
New features:
#174: Basic support for Named strings.
Bug fixes:
#207: Draw rounded corners on replaced boxes.
#224: Rely on the font size for rounding bug workaround.
#31: Honor the vertical-align property in fixed-height cells.
#202: Remove unreachable area/border at bottom of page.
#225: Don't allow unknown units during line-height validation.
Fix some wrong conflict resolutions for table borders with inset and outset styles.
Start testing on Python 3.4 on Travis-CI.
Released on 2014-09-16.
Bug fixes:
#196: Use the default image sizing algorithm for images’s preferred size.
#194: Try more library aliases with dlopen().
#201: Consider page-break-after-avoid when pushing floats to the next page.
#217: Avoid a crash on zero-sized background images.
Release process:
Start testing on Python 3.4 on Travis-CI.
Set up Travis CI to automatically test all pushes and pull requests.
Released on 2014-05-05.
New features:
Bug fixes:
#169: Fix a crash on percentage-width columns in an auto-width table.
#168: Make <fieldset> a block in the user-agent stylesheet.
#175: Fix some dlopen() library loading issues on OS X.
#183: Break to the next page before a float that would overflow the page. (It might still overflow if it’s bigger than the page.)
#188: Require a recent enough version of Pyphen
Release process:
Drop Python 3.1 support.
Set up [Travis CI](https://travis-ci.org/) to automatically test all pushes and pull requests.
Start testing on Python 3.4 locally. (Travis does not support 3.4 yet.)
Add the overflow-wrap _ property, allowing line breaks inside otherwise-unbreakable words. Thanks Frédérick Deslandes!
Released on 2014-01-11.
New features:
Add the overflow-wrap property, allowing line breaks inside otherwise-unbreakable words. Thanks Frédérick Deslandes!
Add the image-resolution property, allowing images to be sized proportionally to their intrinsic size at a resolution other than 96 image pixels per CSS in (ie. one image pixel per CSS px)
Bug fixes:
#145: Fix parsing HTML from an HTTP URL on Python 3.x
#40: Use more general hyphenation dictionaries for specific document languages. (E.g. use hyph_fr.dic for lang="fr_FR".)
#26: Fix min-width and max-width on floats.
#100: Fix a crash on trailing whitespace with font-size: 0
#82: Borders on tables with border-collapse: collapse were sometimes drawn at an incorrect position.
#30: Fix positioning of images with position: absolute.
#118: Fix a crash when using position: absolute inside a position: relative element.
Fix visibility: collapse to behave like visibility: hidden on elements other than table rows and table columns.
#147 and #153: Fix dependencies to require lxml 3.0 or a more recent version. Thanks gizmonerd and Thomas Grainger!
#152: Fix a crash on percentage-sized table cells in auto-sized tables. Thanks Johannes Duschl!
Fix #146 _: don't crash when drawing really small boxes with dotted/dashed borders
Released on 2013-12-18.
Fix #146: don't crash when drawing really small boxes with dotted/dashed borders
Depend on html5lib >= 0.99 instead of 1.0b3 to fix pip 1.4 support.
Use logger.warning instead of deprecated logger.warn.
Fix #88 _: text-decoration: overline not being drawn above the text
Released on 2013-06-18.
Bug fix release:
Fix #88: text-decoration: overline not being drawn above the text
Bug fix: Actually draw multiple lines when multiple values are given to text-decoration.
Use the font metrics for text decoration positioning.
Bug fix: Don't clip the border with overflow: hidden.
Fix #99: Regression: JPEG images not loading with cairo 1.8.x.
Fix incorrect intrinsic width calculation leading to unnecessary line breaks in floats, tables, etc.
Released on 2013-04-30.
Bug fix release:
Fix incorrect intrinsic width calculation leading to unnecessary line breaks in floats, tables, etc.
Tweak border painting to look better
Fix unnecessary page break before big tables.
Fix table row overflowing at the bottom of the page when there are margins above the table.
Fix position: fixed to actually repeat on every page.
Fix #76: repeat <thead> and <tfoot> elements on every page, even with table border collapsing.
Add support for linear-gradient() and radial-gradient in background images.
Released on 2013-04-18.
Add support for linear-gradient() and radial-gradient in background images.
Add support for the ex and ch length units. (1ex is based on the font instead of being always 0.5em as before.)
Add experimental support for Level 4 hyphenation properties.
Drop support for CFFI < 0.6 and cairocffi < 0.4.
Many bug fixes, including:
Add support for Level 3 backgrounds, including multiple background layers per element/box.
Released on 2013-03-30.
Add support for Level 3 backgrounds, including multiple background layers per element/box.
Forward-compatibility with (future releases of) cairocffi 0.4+ and CFFI 0.6+.
Bug fixes:
Avoid some unnecessary line breaks for elements sized based on their content (aka. “shrink-to-fit”) such as floats and page headers.
Allow page breaks between empty blocks.
Fix #66: Resolve images’ auto width from non-auto height and intrinsic ratio.
Fix #21: The data: URL scheme is case-insensitive.
Fix #53: Crash when backtracking for break-before/after: avoid.
Fix #41 _: GObject initialization when GDK-PixBuf is not installed.
Released on 2013-03-18.
Bug fixes:
Fix #41: GObject initialization when GDK-PixBuf is not installed.
Fix #42: absolute URLs without a base URL (ie. document parsed from a string.)
Fix some whitespace collapsing bugs.
Fix absolutely-positioned elements inside inline elements.
Fix URL escaping of image references from CSS.
Fix #49: Division by 0 on dashed or dotted border smaller than one dot/dash.
Fix #44: bad interaction of page-break-before/after: avoid and floats.
Added text hyphenation_ with the -weasy-hyphens property.
Released on 2013-02-27.
Added text hyphenation with the -weasy-hyphens property.
When a document includes JPEG images, embed them as JPEG in the PDF output. This often results in smaller PDF file size compared to the default deflate compression.
Switched to using CFFI instead of PyGTK or PyGObject-introspection.
Layout bug fixes:
Correctly trim whitespace at the end of lines.
Fix some cases with floats within inline content.
Add the zoom parameter to HTML.write_pdf and Document.write_pdf()
Released on 2012-12-13.
Add the zoom parameter to HTML.write_pdf and Document.write_pdf() <weasyprint.document.Document.write_pdf>
Fix compatibility with old (and buggy) pycairo versions. WeasyPrint is now tested on 1.8.8 in addition to the latest.
Fix layout bugs related to line trailing spaces.
Add a low-level API that enables painting pages individually on any cairo surface.
Released on 2012-10-09.
Add a low-level API that enables painting pages individually on any cairo surface.
Backward-incompatible change: remove the HTML.get_png_pages method. The new low-level API covers this functionality and more.
Add support for the font-stretch property.
Add support for @page:blank to select blank pages.
New Sphinx-based and improved docs
Bug fixes:
Importing Pango in some PyGTK installations.
Layout of inline-blocks with vertical-align: top or bottom.
Do not repeat a block’s margin-top or padding-top after a page break.
Performance problem with large tables split across many pages.
Anchors and hyperlinks areas now follow CSS transforms. Since PDF links have to be axis-aligned rectangles, the bounding box is used. This may be larger than expected with rotations that are not a multiple of 90 degrees.
Add a public API to choose media type used for @media. (It still defaults to print). Thanks Chung Lu!
Released on 2012-08-03.
Add a public API to choose media type used for @media. (It still defaults to print). Thanks Chung Lu!
Add --base-url and --resolution to the command-line API, making it as complete as the Python one.
Add support for the <base href="..."> element in HTML.
Add support for CSS outlines
Switch to gdk-pixbuf instead of Pystacia for loading raster images.
Bug fixes:
Handling of filenames and URLs on Windows
Unicode filenames with older version of py2cairo
base_url now behaves as expected when set to a directory name.
Make some tests more robust
Add support for PyGTK, as an alternative to PyGObject + introspection. This should make WeasyPrint easier to run on platforms that not not have packag
Released on 2012-07-23.
Add support for PyGTK, as an alternative to PyGObject + introspection. This should make WeasyPrint easier to run on platforms that not not have packages for PyGObject 3.x yet.
Bug fix: crash in PDF outlines for some malformed HTML documents
Add support for collapsed borders on tables. This is currently incompatible with repeating header and footer row groups on each page: headers and foot
Released on 2012-07-19.
Add support for collapsed borders on tables. This is currently incompatible with repeating header and footer row groups on each page: headers and footers are treated as normal row groups on table with border-collapse: collapse.
Add url_fetcher to the public API. This enables users to hook into WeasyPrint for fetching linked stylesheets or images, eg. to generate them on the fly without going through the network. This enables the creation of Flask-WeasyPrint.
Add support for floats and clear. Together with various bug fixes, this enables WeasyPrint to pass the Acid2 test! Acid2 is now part of our automated
Released on 2012-07-04.
Add support for floats and clear. Together with various bug fixes, this enables WeasyPrint to pass the Acid2 test! Acid2 is now part of our automated test suite.
Add support for the width, min-width, max-width, height, min-height and max-height properties in @page. The size property is now the size of the page’s containing block.
Switch the Variable Dimension rules to the new proposal. The previous implementation was broken in many cases.
The image-rendering, transform, transform-origin and size properties are now unprefixed. The prefixed form (eg. -weasy-size) is ignored but gives a specific warning.
Add get_png_pages() to the public API. It returns each page as a separate PNG image.
Released on 2012-06-25.
Add get_png_pages() to the public API. It returns each page as a separate PNG image.
Add a resolution parameter for PNG.
Add WeasyPrint Navigator, a web application that shows WeasyPrint’s output with clickable links. Yes, that’s a browser in your browser. Start it with python -m weasyprint.navigator
Add support for vertical-align: top and vertical-align: bottom
Add support for page-break-before: avoid and page-break-after: avoid
Bug fixes
Relative, absolute and fixed positioning
Released on 2012-06-04.
Relative, absolute and fixed positioning
Proper painting order (z-index)
In PDF: support for internal and external hyperlinks as well as bookmarks.
Added the tree parameter to the HTML class: accepts a parsed lxml object.
Bug fixes, including many crashes.
Bookmarks can be controlled by the -weasy-bookmark-level and -weasy-bookmark-label properties, as described in CSS Generated Content for Paged Media Module.
The default UA stylesheet sets a matching bookmark level on all <h1> to <h6> elements.
Switch from cssutils to tinycss_ as the CSS parser.
Released on 2012-05-07.
Switch from cssutils to tinycss as the CSS parser.
Switch to the new cssselect, almost all level 3 selectors are supported now.
Support for inline blocks and inline tables
Automatic table layout (column widths)
Support for the min-width, max-width, min-height and max-height properties, except on table-related and page-related boxes.
Speed improvements on big stylesheets / small documents thanks to tinycss.
Many bug fixes
Change the license from AGPL to BSD.
Released on 2012-03-21.
Change the license from AGPL to BSD.
Support page breaks between table rows
Released on 2012-03-21.
Support page breaks between table rows
Support for the orphans and widows properties.
Support for page-break-inside: avoid
Bug fixes
Only avoiding page breaks before/after an element is still missing.
Fix a packaging bug. (Remove use_2to3 in setup.py. We use the same codebase for Python 2 and 3.)
Released on 2012-03-01.
Fix a packaging bug. (Remove use_2to3 in setup.py. We use the same codebase for Python 2 and 3.)
*Backward incompatible*: completely change the Python API. See the documentation: https://weasyprint.readthedocs.io/en/latest/tutorial.html#as-a-pytho…
Released on 2012-02-29.
Backward incompatible: completely change the Python API. See the documentation: https://weasyprint.readthedocs.io/en/latest/tutorial.html#as-a-python-library
Backward incompatible: Proper margin collapsing. This changes how blocks are rendered: adjoining margins "collapse" (their maximum is used) instead of accumulating.
Support images in embed or object elements.
Switch to pystacia instead of PIL for raster images
Add compatibility with CPython 2.6 and 3.2. (Previously only 2.7 was supported)
Many bug fixes
Support for the overflow and clip properties.
Released on 2012-02-08.
Support for the overflow and clip properties.
Support for the opacity property from CSS3 Colors.
Support for CSS 2D Transforms. These are prefixed, so you need to use -weasy-transform and -weasy-transform-origin.
Support text-align: justify, word-spacing and letter-spacing.
Released on 2012-02-07.
Support text-align: justify, word-spacing and letter-spacing.
Partial support for CSS3 Paged Media: page size and margin boxes with page-based counters.
All CSS 2.1 border styles
Fix SVG images with non-pixel units. Requires CairoSVG 0.3
Support for page-break-before and page-break-after, except for the value avoid.
Support for the background-clip, background-origin and background-size from CSS3 (but still with a single background per element)
Support for the image-rendering from SVG. This one is prefixed, use -weasy-image-rendering. It only has an effect on PNG output.
Compatibility with CairoSVG 0.1.2
Released on 2011-12-14.
Compatibility with CairoSVG 0.1.2
Backward-incompatible change: the 'size' property is now prefixed (since it is in an experimental specification). Use '-weasy-size' instead.
Released on 2011-12-13.
Backward-incompatible change: the 'size' property is now prefixed (since it is in an experimental specification). Use '-weasy-size' instead.
cssutils 0.9.8 or higher is now required.
Support SVG images with CairoSVG
Support generated content: the :before and :after pseudo-elements, the content, quotes and counter-* properties.
Support ordered lists: all CSS 2.1 values of the list-style-type property.
New user-agent stylesheet with HTML 5 elements and automatic quotes for many languages. Thanks Peter Moulder!
Disable cssutils validation warnings, they are redundant with WeasyPrint’s.
Add --version to the command-line script.
Various bug fixes
Nothing published for this version
Nothing published for this version
Support the box-sizing property from CSS 3 Basic User Interface
Released on 2011-11-25.
Support for tables.
Support the box-sizing property from CSS 3 Basic User Interface
Support all values of vertical-align except top and bottom. They are interpreted as text-top and text-bottom.
Minor bug fixes
Tables have some limitations: Only the fixed layout and separate border model are supported. There are also no page break inside tables so a table higher than a page will overflow.
First packaged release. Supports "simple" CSS 2.1 pages: there is no support for floats, tables, or absolute positioning. Other than that most of CSS
Released on 2011-10-28.
First packaged release. Supports "simple" CSS 2.1 pages: there is no support for floats, tables, or absolute positioning. Other than that most of CSS 2.1 is supported, as well as CSS 3 Colors and Selectors.
Your coding agent can read these notes before it upgrades. Set up the MCP server →