r renduo
Component-first PDF generation

Turn your React components 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 · ~950ms

→ saved as invoice-1042.pdf

invoice-1042.pdf

~950ms 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. '0 template copies' is a consequence of the architecture, not a benchmark.

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 (or the typed @renduo/sdk).

CLI

$ renduo push Invoice.tsx

Compile with esbuild on your machine and register a version from your own pipeline — scriptable, CI-friendly, git-tracked.

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.

Typed payloads & SDK

Your payload is the component's props — autocomplete and type errors in your IDE, not string-filled templates. The typed @renduo/sdk mirrors the OpenAPI contract: generate() and waitForGeneration() are compile-time checked.

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 renders in an isolated Chrome context with the network blocked. That's the standard HTML-to-PDF posture, applied to a full React component.

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 baked shell — the HTML container your component renders in — once. Every generation after that renders with your brand, not a fallback serif.

Role-scoped access

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.