react-pdf

vercel-labs/json-render · updated Apr 8, 2026

$npx skills add https://github.com/vercel-labs/json-render --skill react-pdf
0 commentsdiscussion
summary

React PDF renderer that generates PDF documents from JSON specs using @react-pdf/renderer.

skill.md

@json-render/react-pdf

React PDF renderer that generates PDF documents from JSON specs using @react-pdf/renderer.

Installation

npm install @json-render/core @json-render/react-pdf

Quick Start

import { renderToBuffer } from "@json-render/react-pdf";
import type { Spec } from "@json-render/core";

const spec: Spec = {
  root: "doc",
  elements: {
    doc: { type: "Document", props: { title: "Invoice" }, children: ["page"] },
    page: {
      type: "Page",
      props: { size: "A4" },
      children: ["heading", "table"],
    },
    heading: {
      type: "Heading",
      props: { text: "Invoice #1234", level: "h1" },
      children: [],
    },
    table: {
      type: "Table",
      props: {
        columns: [
          { header: "Item", width: "60%" },
          { header: "Price", width: "40%", align: "right" },
        ],
        rows: [
          ["Widget A", "$10.00"],
          ["Widget B", "$25.00"],
        ],
      },
      children: [],
    },
  },
};

const buffer = await renderToBuffer(spec);

Render APIs

import { renderToBuffer, renderToStream, renderToFile } from "@json-render/react-pdf";

// In-memory buffer
const buffer = await renderToBuffer(spec);

// Readable stream (pipe to HTTP response)
const stream = await renderToStream(spec);
stream.pipe(res);

// Direct to file
await renderToFile(spec, "./output.pdf");

All render functions accept an optional second argument: { registry?, state?, handlers? }.

Standard Components

Component Description
Document Top-level PDF wrapper (must be root)
Page Page with size (A4, LETTER), orientation, margins
View Generic container (padding, margin, background, border)
Row, Column Flex layout with gap, align, justify
Heading h1-h4 heading text
Text Body text (fontSize, color, weight, alignment)
Image Image from URL or base64
Link Hyperlink with text and href
Table Data table with typed columns and rows
List Ordered or unordered list
Divider Horizontal line separator
Spacer Empty vertical space
PageNumber Current page number and total pages

Custom Catalog

import { defineCatalog } from "@json-render/core";
import { schema, defineRegistry, renderToBuffer } from "@json-render/react-pdf";
import { standardComponentDefinitions } from "@json-render/react-pdf/catalog";
import { z } from "zod";

const catalog = defineCatalog(schema, {
  components: {
    ...standardComponentDefinitions,
    Badge: {
      props: z.object({ label: z.string(), color: z.string().nullable() }),
      slots: [],
      description: "A colored badge label",
    },
  },
  actions: {},
});

const { registry } = defineRegistry(catalog, {
  components: {
    Badge: ({ props }) => (
      <View style={{ backgroundColor: props.color ?? "#e5e7eb", padding: 4 }}>
        <Text>{props.label}</Text>
      </View>
    ),
  },
});

const buffer = await renderToBuffer(spec, { registry });

External Store (Controlled Mode)

Pass a StateStore for full control over state:

import { createStateStore } from "@json-render/react-pdf";

const store = createStateStore({ invoice: { total: 100 } });
store.set("/invoice/total", 200);

Server-Safe Import

Import schema and catalog without pulling in React:

import { schema, standardComponentDefinitions } from "@json-render/react-pdf/server";

Discussion

Product Hunt–style comments (not star reviews)
  • No comments yet — start the thread.
general reviews

Ratings

4.643 reviews
  • Chaitanya Patil· Dec 16, 2024

    Useful defaults in react-pdf — fewer surprises than typical one-off scripts, and it plays nicely with `npx skills` flows.

  • Neel Patel· Dec 16, 2024

    We added react-pdf from the explainx registry; install was straightforward and the SKILL.md answered most questions upfront.

  • Piyush G· Nov 7, 2024

    react-pdf has been reliable in day-to-day use. Documentation quality is above average for community skills.

  • Alexander Thomas· Nov 7, 2024

    Keeps context tight: react-pdf is the kind of skill you can hand to a new teammate without a long onboarding doc.

  • Shikha Mishra· Oct 26, 2024

    Solid pick for teams standardizing on skills: react-pdf is focused, and the summary matches what you get after install.

  • Alexander Li· Oct 26, 2024

    react-pdf is among the better-maintained entries we tried; worth keeping pinned for repeat workflows.

  • Sakura Ramirez· Sep 21, 2024

    I recommend react-pdf for anyone iterating fast on agent tooling; clear intent and a small, reviewable surface area.

  • Yash Thakker· Sep 17, 2024

    We added react-pdf from the explainx registry; install was straightforward and the SKILL.md answered most questions upfront.

  • Jin Okafor· Sep 17, 2024

    react-pdf reduced setup friction for our internal harness; good balance of opinion and flexibility.

  • Alexander Wang· Sep 1, 2024

    Keeps context tight: react-pdf is the kind of skill you can hand to a new teammate without a long onboarding doc.

showing 1-10 of 43

1 / 5