The measured build includes the auto-width and nested table header fixes. Identical document definitions and Inter font files, including receipts, large tables, positioned invoice overlays, and ERP registration forms. Choose a metric to inspect the recorded results.
MinkPDF JavaScriptpdfmake 0.3.13Lower render time is better
Warmed median
Median render time after three warmups. Lower is better.
The report measures the historical root engine against pdfmake 0.3.13. MinkPDF includes its historical tables, images, and TrueType capabilities; other optional factories are excluded. MinkPDF bundles a default-API wrapper around src/index.js with Bun and smoke-tests the resulting bundle; pdfmake uses its distributed minified browser build. Both engine sizes exclude font assets. The separate consumer measurement below includes only the features selected by each import.
Minified engines
JavaScript default API bundle · Bun 1.4.2 · fonts excluded
The separate Bun 1.4.2 measurement bundles a browser consumer of each public entry point, minified, with content: 'Hello'. The root selects historical tables, images, and TrueType; the core omits those implementations. Enhanced factories select the report backend and can be larger than the root. Additional optional capabilities are not represented by this six-consumer measurement. Font assets are excluded.
Minified consumer bundles
Optional-feature measurement · Bun 1.4.2 · fonts excluded
Render comparison: Bun 1.4.2, Apple M4 Pro, darwin 27.2.0, arm64; 3 warmups and 30 measured renders per scenario.
The displayed JavaScript and pdfmake results come from one sequential two-engine run, with MinkPDF first in each scenario.
Font I/O, module import, and definition cloning are outside render timings. First-render timings include font parsing. MinkPDF reuses parsed fonts across warmed renders; pdfmake creates a new font cache for each PDF.
Identical definitions and font files go to both engines. Poppler checks representative output text and page counts; this does not establish visual equivalence.
Import time measures local Bun module loading, not browser network delivery.
Optional-feature bundle results use Bun 1.4.2, browser target, and minification. Engine and consumer bundles use different entry points; compare each measurement within its own group.
Clone the repository and install Bun and Poppler. Registry access is required: the render benchmark installs pdfmake 0.3.13 in a temporary directory and removes it afterward.
Terminal
bun run benchmark --runs=30 --output=/tmp/minkpdf-benchmark
# Current optional-feature bundle sizes (Bun 1.4.2)
bun run build
bun benchmarks/tree-shaking.js --output=/tmp/minkpdf-bundles.json
--output on the render benchmark saves measured PDFs and results.json. Use --font-dir=/path/to/fonts to supply other font fixtures. Inspect the benchmark source and document definitions.