Gotenberg vs Puppeteer
Both render with Chromium, so output fidelity is a tie. The difference is the interface. Gotenberg wraps Chromium in a Docker container behind a REST call, so any language can use it. Puppeteer drives the browser from Node code, so you get finer control from inside your own code, and you own the browser lifecycle. Choose by who makes you wait when rendering breaks.
Gotenberg vs Puppeteer: what each one is
Gotenberg: REST API in one Docker container, MIT license. Engine: headless Chromium (plus LibreOffice for office files). Ops: you run the container: upgrades, scaling, retries. Cost: free license, your infrastructure. Best for language-agnostic teams and self-hosters who want an API shape.
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 Node teams needing fine-grained control from inside the app.
Gotenberg vs Puppeteer at a glance
| Aspect | Gotenberg | Puppeteer |
|---|---|---|
| Engine | Chromium | Chromium |
| Hosting | your Docker | your Node process |
| JavaScript | executed | executed |
| Web fonts | loaded from CSS | loaded from CSS |
| Modern CSS | yes | yes |
| Ops burden | container lifecycle | browser lifecycle in code |
| Cost basis | infra only | infra only |
| Best for | backends in several languages | Node apps |
Same engine means the decision is operations, not output.
The verdict: when each one wins
Gotenberg wins: mixed-language stacks and ops teams that think in containers.
Puppeteer wins: Node codebases that want browser control without a network hop.
Neither wins: teams that do not want to operate Chromium at all: that is the hosted route, which is what webcapture sells (same engine, ops on us, priced per document at our published pricing).
How this connects
Decided on the container? The wkhtmltopdf migration hub is the same ops trade for teams leaving the archived binary.
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 open-source pricing comparison measures what self-hosting the container really costs next to the hosted rates, the formatting guide explains why identical engines can still print differently, and if you would rather not operate either side, the webcapture product page is the same trade, hosted.
Frequently asked questions
Is Gotenberg free?
The license is free: MIT, one Docker image. What you pay is infrastructure and operations, since the container, its Chromium upgrades, scaling, and retries are yours to run.
Does Gotenberg run JavaScript?
Yes. Gotenberg renders through a real headless Chromium, so client-side pages, web fonts, and modern CSS all arrive in the print.
Gotenberg or Puppeteer for a Python or PHP backend?
Gotenberg, in most cases: its REST interface speaks HTTP, so any language can call it. Puppeteer only drives the browser from Node code.
More comparisons: Gotenberg vs WeasyPrint, Gotenberg vs LibreOffice, Puppeteer vs wkhtmltopdf, webcapture vs PDFShift.
Method
Checked 2026-09-11: the Gotenberg repository and its docs and discussions; both tools speak the same Chrome DevTools Protocol.
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.