Puppeteer vs wkhtmltopdf
wkhtmltopdf was archived on Jan 2, 2023 and has received no fixes since. Puppeteer drives a maintained Chromium: modern CSS actually applies, JavaScript executes, web fonts load from the page. The comparison ends at support; the migration is mostly deleting the workarounds the old engine forced on you.
Puppeteer vs wkhtmltopdf: what each one is
Puppeteer: Node.js library that drives Chrome. Engine: headless Chromium via the Chrome DevTools Protocol. Ops: your code starts, pools, and crashes with the browser. Cost: free library, your infrastructure. Best for everything still being maintained.
wkhtmltopdf: the archived Qt WebKit command-line converter. Engine: WebKit-era, frozen in 2023. Ops: a native binary you build or fetch, no longer receiving fixes. Cost: free, unmaintained. Best for legacy environments pinned to very old Linux where a Chrome dependency cannot fit, and even there, plan the exit.
Puppeteer vs wkhtmltopdf at a glance
| Aspect | Puppeteer | wkhtmltopdf |
|---|---|---|
| Engine | Chromium | WebKit (archived) |
| Hosting | your Node process | your host's binary |
| JavaScript | executed | partial, era-frozen |
| Web fonts | loaded from CSS | installed on the server |
| Modern CSS | yes | no reliable flexbox or grid |
| Ops burden | browser lifecycle in code | unmaintained binary drift |
| Cost basis | infra only | free, unsupported |
| Best for | maintained products | nothing new |
A maintained engine against an archived one; support decides this comparison.
The verdict: when each one wins
Puppeteer wins: everything still being maintained; for flag-by-flag migration see the Python migration guide and its sibling languages.
wkhtmltopdf wins: only legacy environments pinned to old Linux that cannot carry a Chrome dependency, and even there, plan the exit.
Neither wins: anyone starting fresh has no reason to adopt an archived binary; if operating Chromium yourself is the concern, that is the hosted route (webcapture, same Chromium as Puppeteer, per-document pricing at our published pricing).
How this connects
Migrating either way, the flag table on the alternatives hub maps each old flag to its browser equivalent.
Wider than this pair: the capability matrix reads eight vendors across fourteen rows, each cell sourced from the vendor's own docs.
Going deeper: the formatting guide walks the breakages the old engine causes and the settings that fix them, the open-source comparison prices the free routes against hosted ones, and the webcapture product page states engine, pricing, and a curl quick start.
Frequently asked questions
Should I migrate from wkhtmltopdf to Puppeteer?
Yes, if the output still matters. wkhtmltopdf was archived on Jan 2, 2023 and its WebKit engine predates flexbox and grid; Puppeteer drives a maintained Chromium that applies both. The side-by-side table above is the short version.
Is Puppeteer a drop-in replacement for wkhtmltopdf?
Close to a rename, not a drop-in: page size, orientation, margins, and print background each map to one option on the print call. What changes is the engine underneath, so tuned templates deserve a visual check before cutover.
What breaks first in a wkhtmltopdf migration?
Two things: the smart-shrinking workarounds, which have no counterpart in Chromium and should be deleted rather than ported, and server-installed fonts, which the page's own web fonts replace. The formatting guide covers both.
More comparisons: Gotenberg vs Puppeteer, Gotenberg vs WeasyPrint, Gotenberg vs LibreOffice, webcapture vs PDFShift.
Method
Checked 2026-09-11: the wkhtmltopdf repository archive banner (Jan 2, 2023, read-only) and current Puppeteer documentation.
Render your first page in seconds
Mint a key, POST a URL, and the finished document comes back in the same response; pass ?wait=false for a job ticket with poll and download URLs. The first 50 renders a month are free, and there is no credit card. Not ready for a key? The free URL to PDF tool renders public pages without one.