PDFPipe

Comparison

A hosted alternative to Gotenberg

Gotenberg is an excellent open-source PDF service. The cost shows up elsewhere: you run the Docker container, you manage the RAM each Chromium instance needs, you handle health checks and scaling, and you absorb a cold start on every deploy. For most teams that operational tax is not worth it. PDFPipe is the same idea, hosted, with several long-standing Gotenberg bugs already fixed.

Self-hosted versus hosted

PDFPipeSelf-hosted Gotenberg
You runNothingA Docker container sized for Chromium
ScalingAutomaticYour problem (Prometheus config required)
Cold startsNone you seeOn every deploy and scale-up
CostFlat per document, free below 500/moFree software, paid infrastructure and ops time
Memory leaksNone (managed renderer)Open issue, known to require container restarts
Duplicate image bloatFixed (deduplicate_images option)Open issue #1077, no fix
Digit renderingConsistent (tabular_nums option)Known inconsistency, open issue #921
Running headers/footersYes (header_html / footer_html)Partial (limited template substitution)
PDF mergeYes (/v1/pdf/merge)Merge via Chromium only, no post-processing
PDF/A outputBest-effort (pdf_a option)No
SecuritySSRF-sandboxed by defaultYou configure it
AI agentsMCP server (npx pdfpipe-mcp-server)None

Gotenberg issues that are fixed in PDFPipe

These are open issues in Gotenberg that affect production deployments. PDFPipe does not have these problems because the renderer is managed infrastructure, not a process you operate.

Memory leaks requiring container restarts

Gotenberg's Chromium pool leaks memory under sustained load. Teams running Gotenberg in production report needing scheduled container restarts or Kubernetes liveness probes to recover. PDFPipe manages the renderer: you never touch it.

Blank PDFs after version upgrades

Several Gotenberg versions have shipped with a regression that produces blank PDFs for specific HTML inputs. Diagnosing this requires rolling back the container version and diffing Chromium builds. PDFPipe upgrades are invisible to you.

Duplicate image bloat (issue #1077)

Chromium embeds the same image multiple times when it appears on multiple pages. A 200KB logo on a 50-page invoice inflates the output by ~10MB. PDFPipe's deduplicate_images option post-processes the PDF with pdf-lib to merge identical image XObjects.

Inconsistent digit rendering (issue #921)

Gotenberg inherits a Chromium bug where proportional digits render at slightly different widths, breaking column alignment in tables and invoices. PDFPipe's tabular_nums option injects font-variant-numeric: tabular-nums globally to fix it.

Large file failures (-32000 errors)

Gotenberg returns Chromium's internal -32000 error for HTML above a certain size. PDFPipe returns a structured 413 with a clear message and the exact limit so you can debug without reading Chromium internals.

The request looks familiar

curl -X POST https://api.pdfpipe.xyz/v1/pdf \
  -H "Authorization: Bearer pp_live_your_key" \
  -H "Content-Type: application/json" \
  -d '{
    "html": "<h1>Invoice #1042</h1>",
    "options": {
      "format": "A4",
      "header_html": "<div style=\"font-size:10px;text-align:right;width:100%\">Page <span class=\"pageNumber\"></span> of <span class=\"totalPages\"></span></div>",
      "deduplicate_images": true,
      "tabular_nums": true
    }
  }' \
  --output invoice.pdf

When to keep Gotenberg

If you need full data sovereignty, run very high volume where per-document pricing adds up, or require LibreOffice document conversion (DOCX, XLSX to PDF), self-hosting Gotenberg wins. PDFPipe is the better trade when you would rather ship product than operate a rendering service.

Try it on the live playground with no signup.

See pricing →