WeasyPrint alternative
WeasyPrint is the most interesting comparison on this site, because it is better than a browser at some things and cannot do others at all.
It is a pure-Python renderer built for print. Its CSS Paged Media support — named pages, margin boxes, running elements pulled from the document — is genuinely better than Chromium's. And it has no CSS grid support, with flexbox arriving late and still partial.
So the question is not which is better. It is which half of CSS your document needs.
The honest table
| Renderpaper | WeasyPrint | |
|---|---|---|
| Engine | Chromium | Pure Python |
| CSS grid | Yes | No |
| Flexbox | Full | Partial |
| CSS Paged Media: named pages, running elements | No | Yes — better than any browser |
| CSS margin boxes for page numbers | Yes | Yes |
| Web fonts | Yes | Yes |
| JavaScript executes before capture | Yes | No — none at all |
| Documents leave your infrastructure | Yes | No |
| Cost | Plan allowance | Free |
| System libraries to install (Pango, cairo) | No | Yes |
| Stored templates, editable without a deploy | Yes | No |
When to use WeasyPrint
Your document is print-first typography. A report with running chapter titles in the margin, a book, anything with named page templates. WeasyPrint does this properly and Chromium does not.
Documents must not leave your network, and you are already a Python shop.
Budget is zero. It is free and it is good.
When Renderpaper fits better
Your layout uses grid. This is the common blocker and it is absolute — grid is not supported, so the layout does not degrade, it fails to be the layout.
The document was designed in a browser and must match it. Same engine, same result.
Your document needs JavaScript. Charts drawn to a canvas, anything computed at render time. WeasyPrint runs no JavaScript at all; see charts in a PDF for what that enables here.
You do not want Pango and cairo in every environment. This is the operational complaint that sends most people looking: it works locally and then an Alpine image turns it into an afternoon.
Migrating from WeasyPrint
Templates are HTML and CSS, so the port is mostly mechanical. Two things to audit:
Paged Media rules that have no browser equivalent. Named pages
(@page chapter), running elements (position: running(), element()), and string
sets (string-set with content: string(...)) do not work in Chromium. If your
document depends on them, that is a genuine loss and worth checking before you
commit — the closest replacements are
CSS margin boxes for numbering and
an outer table's thead for repeating
content, and neither is as expressive.
Anything you worked around because grid was missing. Those workarounds can go, though they will still render.
Try it
https://renderpaper.com/try — paste your template and see whether the layout is
the same. No account.