r renduo
Component-first PDF generation

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

278ms p95 render, single-page
≤100 pages per document, every plan
bit-identical regeneration of any version
0 template copies to keep in sync

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.