Skip to content

Markdown to PDF Comparison 2026 10 20

Milosz edited this page Oct 20, 2026 · 1 revision

Markdown-to-PDF Comparison 2026-10-20

RayoMD 5.2.5 against the tools of Markdown-to-PDF Comparison 2026-10-13, measured again in one session: the same container image, tool versions, documents and harness. Each tool converts the repository's tester.md as a fresh process, start to exit. The tools render different Markdown subsets and look different, so this compares time to a finished PDF, not identical output; the 2026-10-13 report has the page renders of each tool.

Setup

  • AMD Ryzen 5 PRO 4650GE (6 cores, 12 threads), Linux 7.0, the Arch Linux Docker image of 2026-10-13 (qtbench) with --network none, files on tmpfs, nothing else running.
  • Four pinned cores (--cpuset-cpus=3,5,9,11) for the headline, one (--cpuset-cpus=3) beside it.
  • Median of 20 runs after one uncounted warm-up, every output checked to be a complete PDF.
  • tools/benchmark.py competitors (scripts/compare_markdown_pdf_tools.py) for RayoMD, glu, Pandoc + Typst, Pandoc + XeLaTeX and md-to-pdf; Qt 6 and Pandoc + WeasyPrint through the same measure().
  • RayoMD: the release rayomd-5.2.5-linux-x64, rayomd --export IN OUT native modern normal --no-image-cache. The other tools' versions and commands are those of the 2026-10-13 report.
  • Documents: tester-local.md (4,880 bytes, keeps the 1024×1024 RGBA mascot PNG) and tester-noimg.md (4,750 bytes, without images), tester.md without its fallback tests.

Four cores

Tool Without images × RayoMD With the PNG × RayoMD
RayoMD 5.2.5 1.34 ms 1× 7.58 ms 1×
glu 0.0.46 55.44 ms 41× 86.03 ms 11×
Qt 6.12.0 70.61 ms 53× 113.24 ms 15×
Pandoc + Typst 356.88 ms 266× 396.61 ms 52×
Pandoc + WeasyPrint 987.30 ms 737× 1,257.89 ms 166×
md-to-pdf 1,820.85 ms 1,359× 1,917.58 ms 253×
Pandoc + XeLaTeX 2,146.99 ms 1,602× 3,396.82 ms 448×

One core

Tool Without images × RayoMD With the PNG × RayoMD
RayoMD 5.2.5 1.39 ms 1× 11.06 ms 1×
glu 64.54 ms 46× 100.02 ms 9.0×
Qt 6 70.61 ms 51× 114.07 ms 10×
Pandoc + Typst 355.54 ms 256× 395.82 ms 36×
Pandoc + WeasyPrint 996.08 ms 717× 1,267.10 ms 115×
Pandoc + XeLaTeX 2,186.42 ms 1,573× 3,462.29 ms 313×
md-to-pdf 2,283.72 ms 1,643× 2,382.65 ms 215×

The other tools' times are within 5 % of 2026-10-13's (the same versions).

RayoMD 4.6.0 and 5.2.5

The README's RayoMD row, both releases in one run (the comparison's measure(), median of 20).

4.6.0 5.2.5
tester-noimg.md, four cores / one core 1.41 / 1.43 ms 1.35 / 1.40 ms
tester-local.md, four cores / one core 7.81 / 11.33 ms 7.64 / 11.10 ms
tester-noimg.md in a running process (--bench, 1000 exports, median of 11) 0.228 ms 0.162 ms
tester-local.md with the PNG from the image cache 2.64 ms 2.26 ms
Peak RSS, tester-noimg.md, dynamic / static edition 3.43 / 2.34 MiB 3.38 / 2.46 MiB

A fresh export is mostly the process's start, so the release's faster export shows in a running process (-29 %) more than in a fresh one (-2 to -4 %). The static edition starts 0.21 ms (a short note) to 0.23 ms (tester-noimg.md) sooner than the dynamic one.

Release by release

One-shot exports onto an existing PDF, one pinned core, median of 40, every release in one session (the README's table): 3.2.0, 4.0.0, 4.4.0, 4.6.0 and 5.2.5.

Document 3.2.0 4.0.0 4.4.0 4.6.0 5.2.5
Short note, ASCII 1.78 ms 0.93 ms 0.75 ms 0.77 ms 0.76 ms
Short note, Polish 2.85 ms 1.27 ms 0.85 ms 0.90 ms 0.89 ms
Essay, 10,000 words 2.49 ms 1.63 ms 1.29 ms 1.32 ms 1.18 ms
tester.md, no images 3.32 ms 1.74 ms 1.27 ms 1.36 ms 1.31 ms
README of 4.3.1 without its images 3.98 ms 2.38 ms 1.71 ms 1.84 ms 1.88 ms
One 1024×1024 RGBA PNG 90.57 ms 29.18 ms 10.67 ms 10.77 ms 10.55 ms

Peak RSS of 5.2.5 on these documents: 2.8 to 3.5 MiB, 8.7 MiB with the PNG. The README of 4.3.1 with its two images: 15.39 ms converted, 2.85 ms from the image cache.

Clone this wiki locally