The wkhtmltopdf alternative for people tired of fighting 2015’s WebKit
wkhtmltopdf had a great run. But its last release was June 2020, the GitHub repository has been archived, and the engine inside is a Qt WebKit snapshot from around 2015. Every rendering bug you hit today — and you will hit them — is permanent.
What breaks, concretely
-
Page breaks. The single most-cited complaint: tables split
mid-row,
page-break-inside: avoidis honoured inconsistently, headers detach from their sections. We wrote up the real fixes — they help, but they are workarounds for an engine that will never be patched. - No modern CSS. Flexbox is effectively unsupported, grid does not exist, and custom properties are ignored. Your 2026 stylesheet needs a 2014 rewrite to print.
- Unicode and fonts. Complex scripts, emoji and fallback chains misrender, and output differs between your laptop and the server because it depends on system fontconfig.
- Security. It is an unmaintained browser engine. If you feed it user-supplied HTML, you are running untrusted input through software that stopped receiving security patches years ago.
The replacement path
The industry answer is Chromium-based rendering: what renders in Chrome renders in your PDF, page breaks follow the modern CSS fragmentation spec, and the engine gets patched. You can run Chromium yourself — then you inherit Puppeteer’s memory problems — or you can make it an API call:
# Before: shelling out to an archived binary
wkhtmltopdf --print-media-type --disable-smart-shrinking invoice.html invoice.pdf
# After: one HTTP call to a current Chromium engine
curl -X POST https://api.nippypdf.com/v1/pdf \
-H "Authorization: Bearer $NIPPYPDF_API_KEY" \
-H "Content-Type: application/json" \
-o invoice.pdf \
-d "{\"html\": $(jq -Rs . < invoice.html), \"format\": \"A4\", \"print_background\": true}"
NippyPDF is that API: a managed, current Chromium rendering core at around $0.003/document with 500 documents/month free. Working integration guides for Node.js, Python, PHP, Ruby, C# and Go.
FAQ
Is wkhtmltopdf really dead?
The last release, 0.12.6, shipped in June 2020, and the GitHub repository has since been archived — no maintainers, no security patches, no engine updates. It embeds a Qt WebKit build from roughly 2015, which predates flexbox-in-print, CSS grid, and much of the modern fragmentation spec.
Why do my tables split mid-row in wkhtmltopdf?
Its ancient WebKit build has incomplete CSS fragmentation support: page-break-inside: avoid is honoured inconsistently, table rows straddle page boundaries, and floats near a break can vanish content. There are partial workarounds — see our fix guide — but the engine is the root cause and it will never be updated.
wkhtmltopdf is free. Why pay for an API?
The binary is free; running it is not. Teams pay in engineering hours spent on page-break workarounds, dev-versus-server rendering drift, fontconfig issues and an unpatched browser engine exposed to user-supplied HTML. If those costs are near zero for you, keep it. NippyPDF is for teams whose time is worth more than ~$0.003 a document.
Will my existing HTML templates work?
Mostly yes, and usually better: NippyPDF renders with a current Chromium engine, so modern CSS just works. Remove wkhtmltopdf-specific hacks (fixed zoom values, table-based layouts you adopted to dodge its float bugs, --disable-smart-shrinking flags) and check the output in the live demo or Chrome print preview.
Done patching around an archived engine?
NippyPDF is a managed Chromium rendering core behind a single
POST /v1/pdf — no browser fleet, no page-break roulette,
around $0.003/document.
Try the live demo Join the waitlist Still on wkhtmltopdf? Fix the page breaks first →
Get early access to NippyPDF
Pre-launch. Join the waitlist and lock in early-access pricing — we email once, when your key is ready. No spam.