Turn the React components you already have into a PDF API.
Push a component once. Generate invoices, reports, and contracts from any backend with a single HTTP call — no templating language, no proprietary editor, no copy of your logic to keep in sync.
No credit card required on the free plan.
$ cat Invoice.tsx
function Invoice({ payload }: { payload: InvoiceProps }) {
return (
<div className="invoice">
<h1>Invoice #{payload.invoiceNumber}</h1>
<LineItems rows={payload.items} />
<Total amount={payload.total} />
</div>
)
}$ renduo push Invoice.tsx
✓ Bundled locally with esbuild (11.8kb)
✓ Registered as tpl_8f3a2c1d
Version 1 → active$ curl -X POST /v1/generate
curl -X POST https://api.renduo.dev/v1/generate \
-H "Authorization: Bearer $RENDUO_API_KEY" \
-d '{
"templateId": "tpl_8f3a2c1d",
"payload": { "invoiceNumber": "1042", "items": [...] }
}'→ response
→ 200 OK · application/pdf · 278ms→ saved as invoice-1042.pdf
invoice-1042.pdf
Real numbers, measured from production topology. We're pre-launch — no customer logos yet.
The component is the template.
Most PDF APIs make you rebuild the document you already have in a templating language or a drag-and-drop editor — and keep that copy in sync by hand, forever. Renduo skips the second version entirely.
The usual way
- Rebuild your invoice in Liquid, Jinja, or a proprietary drag-and-drop editor.
- Every layout change happens twice — once in your app, once in the template.
- The two copies drift. Someone finds out in production.
Renduo
- Push the real React component your team already maintains.
- No second language, no parallel editor format, nothing to keep in sync.
- Versions are immutable — regenerate any document exactly as it was, byte-for-byte.
Three ways in, one API underneath.
However your team writes the first version, every generated document goes through the
same POST /v1/generate.
CLI
$ renduo push Invoice.tsx
Compile locally with esbuild and register a version — scriptable, CI-friendly.
In-app editor
/dashboard/templates/invoice/edit
Write and preview a component directly in the dashboard. No local toolchain.
Playground
/dashboard/playground
Generate against a template your team already registered — test payloads fast.
Built like infrastructure, not a form builder.
Sync & async, on purpose
Sync is ephemeral by design — the PDF and the payload are never stored, only operation metadata. It's a compliance guarantee, not a gap. Async queues the job, stores the PDF for your plan's retention window, and notifies you by signed webhook.
Isolated Chrome sandbox
Your component never runs in Renduo's Node process. It executes inside an isolated Chrome context with the network blocked — the same posture the industry uses for HTML-to-PDF at scale.
Immutable versions
Push the same slug again and you get a new version — the previous one keeps serving until you replace it. Regenerate any document exactly as it rendered, byte-for-byte.
Signed webhooks
HMAC-signed delivery with retries and exponential backoff, so you know a PDF finished without polling a status endpoint.
Custom fonts & assets
Bake your own fonts and images into the shell once. Every generation after that renders with your brand, not a fallback serif.
Real team roles
Admin, Developer, and Viewer — invite your team without sharing one API key between five people.
Turn your first component into a PDF API today.
Free plan available, no credit card required. Push a component, generate your first PDF in minutes.