Skip to content

@react-pdf/renderer crashes when used via external package in Next.js App Router (monorepo) #3285

@alekseykurylev

Description

@alekseykurylev

When using @react-pdf/renderer in a Next.js App Router project via an external package (e.g. from a monorepo), PDF generation fails at runtime.

However, the same code works correctly if @react-pdf/renderer is installed directly in the Next.js application.

TypeError: Cannot read properties of undefined (reading 'S')

Thrown during renderToStream.

Environment
• Next.js: 15 (App Router)
• React: 19
• Node.js: 22
• Monorepo: Turborepo
• Package manager: pnpm
• @react-pdf/renderer: 4.3.2

Project structure

apps/
  web/               ← Next.js App Router app
packages/
  pdf/               ← custom package wrapping @react-pdf/renderer

packages/pdf exports React components based on @react-pdf/renderer:

// packages/pdf/components.ts
export { Document, Page, Text } from "@react-pdf/renderer";

❌ Failing case (renderer used via external package)

// apps/web/app/api/pdf/route.tsx
import { Document, Page, Text } from "@repo/pdf/components";
import { renderToStream } from "@repo/pdf/server";

export async function GET() {
  const stream = await renderToStream(
    <Document>
      <Page>
        <Text>Hello</Text>
      </Page>
    </Document>
  );

  return new Response(stream);
}

Result:

TypeError: Cannot read properties of undefined (reading 'S')

✅ Working case (renderer installed in app)

// apps/web/app/api/pdf/route.tsx
import { Document, Page, Text, renderToStream } from "@react-pdf/renderer";

export async function GET() {
  const stream = await renderToStream(
    <Document>
      <Page>
        <Text>Hello</Text>
      </Page>
    </Document>
  );

  return new Response(stream);
}

✅ Works without errors.

Key observation
• JSX, runtime, and code are identical
• Only difference:
• ❌ @react-pdf/renderer resolved from external package
• ✅ @react-pdf/renderer resolved from Next.js app itself

This indicates a possible issue with:
• multiple React renderers / reconciler instances
• module resolution in monorepos
• assumptions inside @react-pdf/renderer about React element identity
• interaction with Next.js App Router (RSC)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions