Skip to content

Releases: jlmiles4/react-pdf-gen

v1.3.4

Choose a tag to compare

@github-actions github-actions released this 27 Jul 03:41
Immutable release. Only release title and notes can be modified.
v1.3.4

What's Changed

  • Harden release automation and correct guide claims by @jlmiles4 in #1

New Contributors

Full Changelog: v1.3.3...v1.3.4

v1.3.3

Choose a tag to compare

@github-actions github-actions released this 27 Jul 02:32

Repository hardening and publishing cleanup.

  • Added CI and automated PDF release workflows.
  • Enabled security reporting, branch protection, and Dependabot security updates.
  • Corrected repository licensing metadata, author aliases, setup guidance, and stale AI examples.
  • Added working external links throughout the 78-page PDF.

Full Changelog: v1.3.2...v1.3.3

v1.3.2 — Atomic PDF promotion

Choose a tag to compare

@jlmiles4 jlmiles4 released this 25 Jul 19:01

Patch release hardening the build against leaving a bad deliverable behind.

The problem. Both render passes wrote straight onto output/react-pdf-ai-builders-guide.pdf, the tracked, shipped book. Every validation runs after that write — the TOC ambiguity and missing-chapter checks, the pass-1/pass-2 convergence check, and the uniform-LETTER page-size check. So any failing guard exited 1 having already replaced the shipped book with the build it had just rejected. An interrupt mid-render left a truncated file. Recovery meant a manual git restore, and the documented habit of diffing extracted text before committing would show a real diff in that case — reading as a legitimate content change rather than a rejected build.

The fix. Both passes now render to output/.build.tmp.pdf and every guard inspects that file. Only a fully validated PDF is renamed into place; the rename happens within the same directory, so it is atomic. The deliverable is either the previous good build or the new validated one, never an intermediate. A process-exit handler removes the temp file, covering both the guards that call process.exit directly and interrupts.

Verified by rendering a deliberately non-LETTER page: the size guard fails, the build exits 1, and the tracked PDF is byte-identical to the previous good build with a clean working tree.

No content changes — the book itself is unchanged from v1.3.0.

v1.3.1 — Revert to a single MIT license

Choose a tag to compare

@jlmiles4 jlmiles4 released this 25 Jul 18:56

Patch release correcting the licensing change shipped in v1.3.0.

The entire repository is MIT again — including the book PDF, the prose in src/pages/ and content/, and the starter pack in templates/. The book and pack are intended to be freely redistributable, so the code/content split introduced in v1.3.0 has been reverted and LICENSE-CONTENT removed. LICENSE, README.md, and NOTICE return to their pre-v1.3.0 wording.

Bundled third-party assets (Inter, react-icons, Lucide, upstream-derived react-pdf notes) keep their own licenses — see NOTICE.

No code, content, or build changes. Everything else in v1.3.0 — the PDF outline, the markdown parser fixes, and the build-integrity guards — is unaffected and still applies.

v1.3.0 — PDF outline, parser fixes, build guards, dual license

Choose a tag to compare

@jlmiles4 jlmiles4 released this 25 Jul 18:54

Important

The licensing section below is superseded. The dual-license split described here was reverted in v1.3.1 — the entire repository, including the book and the starter pack, is MIT. Everything else in this release still applies.

Reader-facing

  • The PDF now has a navigable outline. Each chapter divider emits a bookmark, so readers get a working sidebar in every PDF viewer. The document also declares language="en-US" (/Lang).
  • Starter pack fixes. The gradient recipe rendered a flat fill — it passed pixel coordinates while the renderer defaults gradientUnits to objectBoundingBox, where those values are fractions of the shape's box. The flow-diagram arrow fell back to built-in Helvetica, whose encoding has no . The pull quote asked for italic at weight 600 when only 400-italic is registered.
  • Starter pack now stands alone. Every page snippet imported named styles from src/styles/shared.ts, which no template defined — that step now exists, covering all 18 keys. Added the missing tsconfig.json and a typecheck script.

Correctness

  • parseMarkdown could hang forever. A marker followed by a tab (-\titem, #\tTitle) reached a branch that consumed nothing and never advanced the loop index — the build spun with no error and no output. Fixed, with regression coverage.
  • Silent markdown data loss. Text on a callout marker line (> [!TIP] Run this.) was discarded, rendering an empty box. An unpaired ** closed on a ** inside a later code span, swallowing it and leaking literal backticks into the PDF. CRLF input leaked \r into code blocks. Frontmatter stripping ended early on a --- inside a quoted YAML value.
  • Stale-registry builds. tsx src/build.tsx rendered whatever registry was on disk, silently dropping newly added pages while every guard still passed. buildPdf() now syncs before importing the registry.
  • Duplicate page prefixes. Two files sharing an NN- prefix in one chapter fell through to an alphabetical tie-break, so the number no longer decided book order. sync now rejects this; two colliding folders were renumbered (book order unchanged).

Licensing — please read

The repository is now dual-licensed. Previously an unqualified MIT license covered everything, including the finished book and the starter pack, which granted anyone the right to resell them.

  • LICENSE — MIT, for the build system, component library, design tokens, scripts/, and docs/. Unchanged terms, explicit scope.
  • LICENSE-CONTENT — all rights reserved, for the book PDF, the prose in src/pages/, content/, and templates/. Readers keep the right to use the prompts and code patterns in their own commercial projects without attribution; redistributing or reselling the book or pack itself is not permitted.

This applies going forward and does not retract the MIT grant for versions already published under it.

Also

Documentation accuracy pass (stale API snippet, two chapter-attribution errors, NOTICE over-claiming four unused icons, docs/README.md deduplicated against the root README), and a .mailmap unifying three historical author identities.

Full changelog: v1.2.0...v1.3.0

v1.2.0 — Seven new content pages (78 total), accuracy fixes

Choose a tag to compare

@jlmiles4 jlmiles4 released this 25 Jul 18:53

Backfilled release for the existing v1.2.0 tag, which was pushed without a
corresponding GitHub release.

  • Seven new content pages, bringing the book to 78 pages.
  • Content-gap and accuracy fixes across existing chapters.
  • Sequential page renumbering.
  • Parser warning cleanup and removal of a phantom Helvetica reference.

See the commit range for detail: v1.1.0...v1.2.0.

v1.1.0 — Hardened build, deduplicated design system

Choose a tag to compare

@jlmiles4 jlmiles4 released this 16 Jul 21:45

Maintenance release from a full repo audit. No rendered page changed — all 71 pages verified byte-identical to v1.0.0 output; this release hardens the pipeline and cleans up internals and docs.

Build & tooling

  • The two-pass TOC build now verifies its core invariant: chapter positions are re-extracted from the pass-2 PDF and the build fails if any shifted. Ambiguous chapter markers (a standalone "CHAPTER NN" line on more than one page) fail the build; stray markers warn; toc-positions.json is written only after validation.
  • Sync fails loudly on empty chrome folders and on two manifest chapters sharing a directory; malformed toc-positions.json warns instead of being silently ignored.
  • Fonts register via Document.tsx, so any entry point that renders the book gets them; export-pages.sh works from any directory.

Design system

  • TipBox/WarningBox/InfoBox collapsed to one base + style factory; semantic colors are palette references (no re-typed hexes); new fontScale.chromeLabel token ends chrome borrowing code typography.
  • Consistent wrap API across Table/BulletList/CodeBlock; IconList gains a feature variant (now used on the Ch10 adapter page); markdown parser and icon adapter warn on unsupported input instead of failing silently.

Docs & starter templates

  • Fixed stale claims (output/ gitignore status, sync description, troubleshooting example), documented all new build guards and component APIs, and resolved the starter-pack fontWeight contradictions.

Full details in the commit history: 5f63b5edce045b.

v1.0.0 — React-PDF + AI: The Builder's Guide to Premium PDF Generation

Choose a tag to compare

@jlmiles4 jlmiles4 released this 23 Jun 03:07

The 1.0 launch of React-PDF + AI: The Builder's Guide to Premium PDF Generation — a ~71-page premium ebook on producing high-quality PDFs with @react-pdf/renderer and AI coding agents.

📕 Download

The finished book is attached below as ebook.pdf.

Build it yourself

pnpm install
pnpm build      # renders output/ebook.pdf
pnpm pipeline   # also exports per-page PNGs for visual review

What's inside

12 chapters across Foundations, Design System, Craft, and Shipping: react-pdf fundamentals, AI-friendly project architecture, specifying a design language, tokenization and context windows, avoiding AI slop, design challenges and solutions, icons over emojis, AI visual analysis, premium deliverables and recipes, troubleshooting, and Markdown automation.

The repo is also a working reference implementation — every pattern in the book is demonstrated in src/ (design tokens, shared components, directory-based page layout, manifest-driven assembly).

Source is MIT-licensed; bundled third-party assets (the Inter font, react-icons, Lucide) retain their own licenses — see NOTICE.