Quire PDFComparisons

A wkhtmltopdf alternative for invoices and reports

If you use wkhtmltopdf to turn your own data into invoices, receipts or reports, Quire replaces the HTML templates and the binary with one API call that takes JSON and returns a PDF. If you need to convert arbitrary HTML or web pages, or must run offline, Quire isn't a replacement; look at the alternatives the wkhtmltopdf maintainers themselves recommend.

Where wkhtmltopdf stands

  • The GitHub repository was archived on 2 January 2023 and is read-only.
  • The last stable release is 0.12.6, from 11 June 2020.
  • It renders with QtWebKit. The project’s status page says that WebKit version hasn’t been updated since 2012, and that Qt 4, which it was built on, lost support in 2015.
  • The same page warns: “Do not use wkhtmltopdf with any untrusted HTML”, because it can lead to a takeover of the server.
  • It’s licensed LGPL-3.0 and converts HTML to PDF and to image formats.

It still runs, and plenty of production systems still use it. But no fixes are coming, for rendering bugs or for security.

How Quire is different

wkhtmltopdf turns HTML into a PDF. Quire turns data into a PDF. You don’t write or maintain an HTML template:

curl https://api.quirepdf.dev/v1/render \
  -H "Authorization: Bearer $QUIRE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "number": "INV-2026-0142",
    "issued": "1 Oct 2026",
    "due": "15 Oct 2026",
    "currency": "$",
    "seller": { "name": "Northwind Studio", "address": ["221 Market Street", "San Francisco, CA 94105"] },
    "customer": { "name": "Ravi Kumar", "address": ["14 Residency Road", "Bengaluru 560025"] },
    "items": [
      { "description": "Pro plan, monthly", "qty": 1, "unit_price": 49 },
      { "description": "Additional seats", "qty": 4, "unit_price": 12 }
    ],
    "tax": { "label": "GST (18%)", "rate": 0.18 }
  }' \
  -o invoice.pdf

Quire recognises this as an invoice, lays it out, computes the subtotal, tax and total, and repeats the table header if it runs onto a second page. Data that isn’t a standard business document gets a generic layout: objects become key/value sections and arrays become tables.

wkhtmltopdf Quire
Input HTML, or a URL A JSON object
You maintain HTML/CSS templates, the binary and its system libraries The JSON you send
Layout Anything you can build in 2012-era WebKit Seven built-in layouts: six document templates and a generic one
Page breaks, repeated table headers, “page x of y” Your CSS and command-line flags Built in
Invalid data Renders whatever the HTML says Rejected before rendering, with every field problem listed
Untrusted input Not safe with untrusted HTML Data is never executed as markup or script
Deployment A binary on your servers A hosted API
Maintenance status Archived Active
Cost Free, LGPL-3.0 Free to build (unlimited test renders, 20 PDFs a month), then from $19 a month

Speed and memory

Quire renders with a compiled typesetting engine, not a browser. Measured on a laptop, October 2026:

Document Render time (p50)
1-page invoice, 8 items 4.2 ms
4-page invoice, 60 items 12.3 ms
14-page invoice, 300 items 48 ms

End to end over HTTP, 400 requests at a concurrency of 8 took 16.6 ms at the median, with the server using 54 MB of memory afterwards. On the hosted API, add your network round trip.

Moving from wkhtmltopdf to Quire

  1. Find the data behind the HTML. Your template is filled from an object: an order, an invoice, a report. That object, as JSON, is what you send.
  2. Check whether a template fits. If you render invoices, receipts, quotes, credit notes, statements or certificates, look at that template’s fields in the gallery and rename your keys to match. npx quirepdf-cli templates invoice --sample prints a complete example.
  3. Otherwise shape it for the generic layout. Add title, from and to, set currency, and order the keys the way you want the sections. See Templates and layout.
  4. Validate in CI. POST /v1/validate is free and returns every problem, so a test can catch a renamed field before a customer sees a broken invoice.
  5. Delete the HTML template, the binary, and the fonts and libraries it needed.

When wkhtmltopdf is the better choice

Quire is deliberately narrow. Keep wkhtmltopdf, or move to another HTML-based tool, if:

  • You convert HTML you didn’t design for documents, such as web pages, help-centre articles or HTML emails. Quire only renders data into its own layouts.
  • Your layout is one of a kind. Quire has seven layouts and no custom template upload yet (it’s on the roadmap). If your document needs a specific design that none of them produce, you need a tool that renders your own HTML.
  • You must run offline or on your own servers. Quire is a hosted API; self-hosting isn’t offered yet.
  • You need US Letter or other paper sizes. Quire’s layouts are A4.
  • You render at a volume where a per-render price doesn’t make sense and you’re comfortable owning an archived binary.

For HTML you control, the wkhtmltopdf status page itself suggests WeasyPrint or the commercial Prince; for pages that rely on JavaScript, it suggests Puppeteer (source). See also Quire compared with Puppeteer and with Gotenberg.

Try it

npx quirepdf-cli login you@example.com
npx quirepdf-cli templates invoice --sample > invoice.json
npx quirepdf-cli render invoice.json --open

The quickstart has the same steps for curl, TypeScript and Python.