HTML in. Pixel-perfect PDFs out.
Generate invoices, reports, and certificates from HTML, React, or templates. One API call, milliseconds.
1,000 PDFs/month free. No credit card required.
import { Deckle } from 'deckle';
const client = new Deckle(process.env.DECKLE_API_KEY!);
const pdf = await client.generate({
html: '<h1>Invoice #1042</h1><p>Total: $69.98</p>',
options: { format: 'A4' }
});
console.log(pdf.url);
// → https://cdn.getdeckle.dev/gen_abc123.pdf{
"id": "gen_abc123",
"status": "completed",
"url": "https://cdn.getdeckle.dev/gen_abc123.pdf",
"pages": 1,
"file_size": 24531,
"generation_time_ms": 287
}Three steps to your first PDF
No headless browsers to manage. No complex setup. Just your content and one API call.
Write Your Template
Use HTML, React components, or Handlebars templates. Design exactly the PDF you want with the tools you already know.
Call the API
One POST request with your content. We handle browser rendering, fonts, page layout, and storage.
Get Your PDF
Receive a pixel-perfect PDF back in milliseconds. A CDN URL, ready to download, email, or embed.
Everything you need
From simple HTML-to-PDF to batch processing and form filling. One API for every PDF workflow.
HTML & React Rendering
Send raw HTML or React JSX. Playwright renders it with pixel-perfect fidelity, just like a browser.
Template Engine
Handlebars templates with variables, loops, and conditionals. Store and version them via API.
Batch Generation
Generate hundreds of PDFs asynchronously. Queue-based processing with webhook callbacks.
PDF Tools
Merge, split, fill forms, add visual signature annotations, and convert to PDF/A. One API for the full PDF workflow.
QR Codes & Barcodes
Drop {{qr:data}} or {{barcode:data}} placeholders in your HTML. We render inline SVGs automatically.
Headers & Footers
Dynamic page numbers, dates, and custom content in headers and footers across every page.
Multi-Cloud Storage
Store generated PDFs in Cloudflare R2, AWS S3, or Google Cloud Storage. Your choice.
Self-Hostable
Run the entire stack on your own infrastructure with Docker Compose. Full control, zero vendor lock-in.
Works with your stack
Send HTML, React components, or use stored templates. Pick the approach that fits your workflow.
import { Deckle } from 'deckle';
const client = new Deckle(process.env.DECKLE_API_KEY!);
const pdf = await client.generate({
html: `
<h1>Invoice #1042</h1>
<p>Billed to: Acme Corp</p>
<table>
<tr><td>Widget Pro</td><td>$49.99</td></tr>
<tr><td>Support Plan</td><td>$19.99</td></tr>
</table>
<p><strong>Total: $69.98</strong></p>
`,
options: { format: 'A4', margin: '20mm' }
});
console.log(pdf.url); // https://cdn.getdeckle.dev/gen_abc123.pdfYour language. Your framework.
First-class SDKs for every major language, plus a REST API for everything else.
npm i decklepip install decklego get github.com/Yoshyaes/deckle/packages/sdk-gogem install decklenpm i @deckle/react-pdfWhy developers choose Deckle
Stop maintaining headless browsers. Start shipping PDFs.
| Feature | Deckle | Puppeteer DIY | wkhtmltopdf | Prince XML |
|---|---|---|---|---|
| Setup Time | 5 minutes | 30+ minutes | 15 minutes | 1 hour |
| Maintenance | Zero | High (browser updates) | Medium | Low |
| React Support | Yes | Manual | No | No |
| Template Engine | Built-in | DIY | No | No |
| Batch Processing | Built-in queue | DIY | No | No |
| PDF Tools (merge, split) | Yes | No | No | No |
| Multi-language SDKs | TS, Python, Go, Ruby | JS only | CLI | CLI + Java |
| Self-hostable | Yes | Yes | Yes | Yes |
From the blog
View all postsStart generating PDFs for free
No credit card required. Upgrade when you need more volume.
- 1,000 PDFs per month
- All PDF generation features
- All SDK languages
- Template engine access
- PDF tools (merge, split, forms, PDF/A)
- Community support
Need more? Plans start at $29/month for 10,000 PDFs.
Ready to build?
Get your API key and generate your first PDF in under 5 minutes.