v0.9.0
Forme 0.9.0
Released April 4, 2026
The biggest release since launch. 0.9.0 adds PDF operations
(redact, merge, certify, rasterize), a Documents archive,
audit trail, certificate storage, and text-search redaction
— transforming Forme from a PDF generation library into a
full PDF operations platform.
⚠️ Breaking Changes
sign → certify rename
All signing API surfaces renamed to better reflect the
cryptographic nature of the operation:
| Old | New |
|---|---|
signPdf() |
certifyPdf() |
SignatureConfig |
CertificationConfig |
signature prop |
certification prop |
POST /v1/sign |
POST /v1/certify |
certificatePem field |
certificate field |
privateKeyPem field |
privateKey field |
Sign() (Go) |
Certify() (Go) |
sign_pdf() (Python) |
certify_pdf() (Python) |
Old names continue to work via deprecation shims and serde
aliases. /v1/sign is removed from the self-hosted server.
See the migration guide.
New Features
True PDF Redaction
Content-stream text removal — not just a visual overlay.
Text operators are removed from the PDF byte stream,
metadata is scrubbed automatically on every redaction
(author, creator, edit history), and a black rectangle
is drawn over the redacted area.
65% of "redacted" PDFs produced by other tools still
expose the underlying text. Forme removes it entirely.
Available via POST /v1/redact or engine functions
redact_pdf(), redact_text(), find_text_regions().
curl -X POST https://api.formepdf.com/v1/redact \
-H "Authorization: Bearer $FORME_API_KEY" \
-d '{ "pdf": "...", "presets": ["ssn", "email"] }'Text-Search Redaction
Redact by literal string, regex pattern, or built-in preset
— no coordinate boxes required. Patterns can be scoped to
specific pages.
Built-in presets: ssn, email, phone, date-of-birth,
credit-card
{
"pdf": "...",
"patterns": [
{ "pattern": "John Smith", "pattern_type": "Literal" },
{ "pattern": "\\d{3}-\\d{2}-\\d{4}", "pattern_type": "Regex" }
],
"presets": ["email"]
}Redaction Templates
Save named pattern sets on the hosted API and reference
them by slug:
POST /v1/redact
{ "pdf": "...", "template": "hipaa-patient-record" }Create and manage templates in the dashboard under Redaction.
Docs →
PDF Merging
Combine up to 20 PDFs into one via POST /v1/merge or
the merge_pdfs() engine function. PDFs merged in array order.
curl -X POST https://api.formepdf.com/v1/merge \
-H "Authorization: Bearer $FORME_API_KEY" \
-d '{ "pdfs": ["", ""] }'PDF Rasterization
Convert PDF pages to high-quality PNG images. Powered by
PDFium — the same engine Chrome uses. Configurable DPI (72–300).
curl -X POST https://api.formepdf.com/v1/rasterize \
-H "Authorization: Bearer $FORME_API_KEY" \
-d '{ "pdf": "...", "dpi": 150 }'Returns { "pages": ["<base64 PNG>", ...] } — one per page.
Docs →
Documents Archive
Every hosted API render is saved automatically to your
Documents archive. Upload existing PDFs, redact them,
merge them, certify them — all from the dashboard or API.
- Source tracking:
generated,uploaded,redacted,
merged,certified - Retention: Free 30d · Pro 90d · Team 1yr · Business unlimited
- Storage: Cloudflare R2
- Opt out with
save: falseon any render
Tag documents with developer metadata for filtering:
{ "metadata": { "customerId": "cust_123", "department": "legal" } }GET /v1/documents?metadata.customerId=cust_123
Certificate Storage
Save X.509 certificates in the dashboard, reference by ID
at certify time. Private keys encrypted at rest (AES-256-GCM).
The plaintext key is never returned after saving.
POST /v1/certify
{ "pdf": "...", "certificateId": "cert_abc123" }Plan limits: Free 1 · Pro 5 · Team/Business unlimited
Docs →
Audit Trail
Full operation history on every document — who did what
and when, whether via dashboard or API key. Events logged:
uploaded, generated, redacted, merged, certified,
downloaded, deleted. Events survive document deletion.
Visible in the History panel in DocumentEditor and
queryable via API.
Docs →
Resource Listing Endpoints
List and retrieve your resources programmatically via API key:
GET /v1/templates
GET /v1/templates/:slug
GET /v1/documents
GET /v1/documents/:id
GET /v1/redaction-templates
GET /v1/redaction-templates/:slug
GET /v1/certificates
Async AI Template Generation
AI template generation no longer blocks the UI. The modal
closes immediately, the template appears in the list with
a shimmer while generating, and the thumbnail populates
automatically when complete. Powered by BullMQ + Redis.
Dashboard — DocumentEditor Redesign
Tools moved from a crowded top bar to a left sidebar panel:
- Redact — Draw mode (click and drag) + Search mode
(text patterns, presets, load template) - Merge — add PDFs, merge in order
- Certify — select saved certificate or paste PEM
- Organize — coming soon
History panel slides out from the right — full audit
trail per document without leaving the editor.
Self-Hosted Server Parity
The formepdf/forme Docker image is updated to 0.9.0
with improved parity on all operation endpoints:
POST /v1/certify(renamed from/v1/sign)POST /v1/redact— coordinate regions + text patterns + presetsPOST /v1/mergePOST /v1/rasterize— PDFium sidecar includedflattenForms=truequery parameter on render endpointsContent-Dispositionheader on slug renders- Consistent
{ "error": "...", "code": "NOT_IMPLEMENTED" }
shape on hosted-only feature stubs - Preset name validation, max 20 presets, regex compilation
validation on/v1/redact
Self-hosted intentionally excludes: Documents archive,
certificateId, redaction template slugs, save/saveName.
Pass credentials and patterns directly.
docker pull formepdf/forme:0.9.0Python SDK (0.9.1)
- New API client methods:
certify(),redact(),
merge(),rasterize() - Local WASM rendering via wasmtime with full component DSL
sign()removed,certify_pdf()replacessign_pdf()- Full docs at docs.formepdf.com/python-sdk
Go SDK (0.9.1)
- New API methods:
Redact(),Rasterize() Sign()deprecated shim removed — useCertify()- Full docs at docs.formepdf.com/go-sdk
Docs Restructure
- Per-endpoint API reference pages (render, certify,
redact, merge, rasterize) - New concepts section (documents, credentials, redaction,
redaction templates, digital certification, audit trail) - Migration guide for 0.8 → 0.9
- Bring Your Own UI guide
Bug Fixes
- WASM time panic —
certifyandredactpreviously
panicked in browser WASM with "time not implemented on
this platform". Fixed with#[cfg]conditional using
js_sys::Date::now()for WASM targets,
SystemTime::now()for WASI targets (Python/Go SDKs) - PKCS#1 auto-conversion —
certify_pdf()now accepts
both PKCS#8 (BEGIN PRIVATE KEY) and PKCS#1
(BEGIN RSA PRIVATE KEY) formats automatically __formeTypeversion guard — prevents misleading
"Top-level element must be<Document>" errors when
@formepdf/coreand@formepdf/reactare on different versions- SVG children — JSX children inside
<Svg>now
correctly serialized - SVG opacity —
opacity,fill-opacity,
stroke-opacitynow work correctly via ExtGState - Page style inheritance —
<Page style={{ fontFamily }}>
now correctly resolves to child nodes
Packages
| Package | Version |
|---|---|
@formepdf/core |
0.9.0 |
@formepdf/react |
0.9.0 |
@formepdf/cli |
0.9.0 |
@formepdf/renderer |
0.9.0 |
@formepdf/hono |
0.9.0 |
@formepdf/next |
0.9.0 |
@formepdf/resend |
0.9.0 |
@formepdf/mcp |
0.9.0 |
@formepdf/sdk |
0.9.0 |
@formepdf/tailwind |
0.9.0 |
@formepdf/templates |
0.9.0 |
forme-pdf (VS Code) |
0.9.0 |
formepdf (PyPI) |
0.9.1 |
forme-go (Go SDK) |
v0.9.1 |
forme-pdf (crates.io) |
0.9.0 |
formepdf/forme (Docker) |
0.9.0 |
formepdf/rasterizer (Docker) |
0.9.0 |