Blog
Articles about PDF generation, JSX rendering, and building with Forme.
Why Your Redacted PDFs Aren't Actually Redacted (And How to Fix It)
Most PDF redaction tools just draw a black box over text. The data is still there. Here's how true content-stream redaction works and how to do it programmatically.
How to Redact a PDF Without Adobe
Adobe Acrobat Pro costs $19.99/month and requires a desktop app. Here's how to redact PDFs programmatically with true content stream removal — no Adobe required.
The Best Puppeteer Alternative for PDF Generation
Puppeteer boots a full Chrome instance to generate PDFs. Here's how to replace it with a Rust WASM engine that runs anywhere JavaScript runs — in milliseconds, not seconds.
Forme 0.8.0: Forms, Accessibility, and Digital Signatures
AcroForms, PDF/UA-1 compliance, PDF/A archival, and PKCS#7 digital signatures.
Generating invoices on Cloudflare Workers with Hono and D1
Build a complete invoice generation API on Cloudflare Workers using Hono, D1, and Forme. No Puppeteer, no Chrome, no cold starts.
Engine-native charts: BarChart, LineChart, PieChart, AreaChart, and DotPlot
Charts are now rendered directly by the Rust engine as PDF vector graphics. Five chart types, multi-series support, and zero external dependencies.
Forme is now on crates.io
The Rust PDF engine that powers Forme is now available as forme-pdf on crates.io. Use the layout engine and PDF writer directly from Rust — cargo add forme-pdf.
How to Generate PDFs in JavaScript
The modern options for generating PDFs in JavaScript — from Puppeteer to PDFKit to JSX components. Code examples for Node, Next.js, Express, and Cloudflare Workers.
PDF generation in Go without cgo or external processes
Generate PDFs from Go with a zero-dependency API client or local WASM rendering via wazero. No Puppeteer, no LaTeX, no cgo.
Generate a PDF template from any image using AI
Upload a screenshot, PDF, or photo of any document and Forme's AI recreates it as an editable JSX template. No starting from scratch.
Tailwind CSS for PDFs
Style Forme PDF components with Tailwind utility classes. Use tw("p-4 text-lg font-bold") instead of writing style objects by hand.
PDF generation in Python without headless Chrome
Generate PDFs from Python with a hosted API or local WASM rendering. No Puppeteer, no LaTeX, no HTML-to-PDF conversion. Just pip install formepdf.
PDFs that carry their own data
Embed structured JSON inside any PDF. Extract it later without OCR. Invoices carry their line items, reports carry their datasets.
Forme PDF Preview for VS Code
Live PDF preview, component tree, and inspector - without leaving your editor.
OpenType shaping, BiDi text, and CSS Grid
Forme now shapes text with real OpenType tables, renders Arabic and Hebrew correctly, and supports 2D grid layouts. Here's what changed and why it matters.
How we implemented TeX's line-breaking algorithm in a PDF engine
Greedy line breaking produces ugly justified text. Knuth and Plass solved this in 1981. Here's how we brought their algorithm into a modern Rust PDF engine.
Migrating from react-pdf to Forme
A practical guide to switching from react-pdf. What changes, what stays the same, and why page breaks are the reason you're here.
Build a PDF API in 5 minutes
A complete PDF generation API with Hono. Authentication, multiple templates, custom documents. Deploy to Cloudflare Workers or any Node.js host.
PDF generation at the edge: why WASM beats headless Chrome
Headless Chrome is a browser automation tool pretending to be a PDF engine. Here's what happens when you use an actual layout engine instead.
AI agents can generate PDFs now
A Model Context Protocol server that lets Claude, Cursor, and other AI tools render real PDFs from natural language. No code, no docs, no setup.
Generate PDFs on Cloudflare Workers
PDF generation at the edge. No headless Chrome, no servers, no cold starts. Just WASM running in 200+ data centers.
Generate PDFs in Next.js App Router with one line
Add a PDF endpoint to your Next.js app in 30 seconds. Route handlers, server actions, and custom templates.
Send invoice emails with one function call
Render a PDF and email it as an attachment in a single line. No manual byte handling, no attachment wiring.
I replaced a Puppeteer service with 39 lines of code
How I deleted a headless Chrome PDF server and moved to an in-process Rust engine. 1018 lines removed, render time from seconds to 28ms.
Forme: PDF generation with JSX
An open source Rust PDF engine with a React component layer. Page breaks that actually work. 28ms renders. No headless browser.