Speed, memory, spec-conformance, and bundle size for Lightning YAML against the other
parsers this repo benchmarks itself against: js-yaml, yaml (eemeli), and the JSON
baseline where a workload is JSON-shaped enough for it to compete. Use the “On this page”
panel to jump between sections; each metric shows the latest run , the trend over
time , and a full breakdown by workload. Every section below states its own
measurement’s date, source commit, and (where the suite records one) environment — sections
come from different published runs, so this page never shows one line for all of them.
Every figure on this page — and everywhere else on this site (the homepage, any “N× faster”
figure) — is a single real measurement in the environment it’s labelled with. Nothing here
is ever averaged or blended across environments: a browser’s engine and Node are different
machines with different results, and combining them into one number would hide that. Where more
than one environment has published results, use the picker below to see each engine’s own
numbers; a ratio’s popover elsewhere on the site lists each engine’s own measured value the
same way.
Right now, results come from node 24.18.0 (x64-linux), chromium 141.0.7390.37 (x64-linux), webkit 26.0 (x64-linux) . As a new
environment — a browser engine, a different Node version — starts publishing benchmark runs, it
adds its own rows and its own picker option; it never changes the numbers already shown for an
environment that was already publishing.
A few notes on the charts themselves:
Bar charts (latest run) scale each workload row to its own slowest parser, so compare
bars within a row, not across rows. Speed bars are labelled with time relative to the
fastest parser in that row (×); memory bars are labelled with the absolute peak RSS.
Trend charts (over time) render one document per published run, oldest to newest.
Absolute nanoseconds drift with CI-runner noise, so the speed trends plot a
machine-invariant ratio-to-fastest on a log axis ; memory, conformance, and bundle size
are stable, so they trend as absolute values. Hover any point for its date, value, and —
where the run recorded one — the library version; a ringed point marks a version change.
Every chart is a static image — inline SVG rendered at build time, no client JavaScript.
These numbers track real runs, not a hand-captured snapshot: CI publishes each run to the
orphan benchmark-data
branch, and the deploy workflow overlays that history at build time — the bar charts render
the newest published document per suite, the trend charts the full history. To reproduce them
yourself, see running the benchmarks & tests .
The speed charts below (Parse speed, Stringify speed) were measured in more than one runtime — pick one; it applies to both sections:
node 24.18.0 (x64-linux) chromium 141.0.7390.37 (x64-linux) webkit 26.0 (x64-linux)
Turning YAML text into JavaScript values — the hot path for most consumers.
Measured on AMD EPYC 7763 64-Core Processor (~3.09 GHz) · node 24.18.0 (x64-linux) · generated 2026-08-10 · source eaf00b1ed7702e4cfa9fff566fbc7f88e989a423
Measured in chromium 141.0.7390.37 (x64-linux) · generated 2026-08-10 · source eaf00b1ed7702e4cfa9fff566fbc7f88e989a423
Measured in webkit 26.0 (x64-linux) · generated 2026-08-10 · source eaf00b1ed7702e4cfa9fff566fbc7f88e989a423
Parse time by workload Lower is better. Each workload is scaled to its own slowest parser; labels show time relative to the fastest parser in that row (×). Exact avg ns per parse() call is in the breakdown below.
JSON Lightning YAML 0.1.1 js-yaml 5.2.1 yaml (eemeli) 2.9.0Parse time by workload (relative to fastest, per row) Parse time by workload (relative to fastest, per row) — lower is better. Each workload is scaled to its own slowest parser, so bar length is proportional to time within a row; rows are not comparable to each other, and every bar is labelled with its time relative to the fastest parser in that row (×). Series: JSON, Lightning YAML 0.1.1, js-yaml 5.2.1, yaml (eemeli) 2.9.0. 5 workloads: small-records, medium-records, large-records, xlarge-records, yaml-rich-medium. 1.0× 2.3× 9.4× 120× small-records 1.0× 1.9× 7.6× 117× medium-records 1.0× 1.9× 8.6× 106× large-records 1.0× 2.0× 9.2× 99× xlarge-records 1.0× 3.3× 41× yaml-rich-medium Parse time by workload Lower is better. Each workload is scaled to its own slowest parser; labels show time relative to the fastest parser in that row (×). Exact avg ns per parse() call is in the breakdown below.
JSON Lightning YAML 0.1.1 js-yaml 5.2.1 yaml (eemeli) 2.9.0Parse time by workload (relative to fastest, per row) Parse time by workload (relative to fastest, per row) — lower is better. Each workload is scaled to its own slowest parser, so bar length is proportional to time within a row; rows are not comparable to each other, and every bar is labelled with its time relative to the fastest parser in that row (×). Series: JSON, Lightning YAML 0.1.1, js-yaml 5.2.1, yaml (eemeli) 2.9.0. 4 workloads: small-records, medium-records, large-records, yaml-rich-medium. 1.0× 3.3× 13× 103× small-records 1.0× 2.9× 9.6× 89× medium-records 1.0× 2.9× 10× 92× large-records 1.0× 2.5× 20× yaml-rich-medium Parse time by workload Lower is better. Each workload is scaled to its own slowest parser; labels show time relative to the fastest parser in that row (×). Exact avg ns per parse() call is in the breakdown below.
JSON Lightning YAML 0.1.1 js-yaml 5.2.1 yaml (eemeli) 2.9.0Parse time by workload (relative to fastest, per row) Parse time by workload (relative to fastest, per row) — lower is better. Each workload is scaled to its own slowest parser, so bar length is proportional to time within a row; rows are not comparable to each other, and every bar is labelled with its time relative to the fastest parser in that row (×). Series: JSON, Lightning YAML 0.1.1, js-yaml 5.2.1, yaml (eemeli) 2.9.0. 4 workloads: small-records, medium-records, large-records, yaml-rich-medium. 1.0× 2.8× 11× 120× small-records 1.0× 2.1× 9.3× 90× medium-records 1.0× 2.2× 9.3× 107× large-records 1.0× 3.7× 29× yaml-rich-medium Parse time vs fastest, run over run — large-records Lower is better, log scale. Each parser's time as a multiple of the fastest in the same run (×) — machine-invariant. The fastest sits at 1× by construction; a rising Lightning YAML line would mean a regression.
JSON Lightning YAML 0.1.1 js-yaml 5.2.1 yaml (eemeli) 2.9.0Parse time vs fastest over time — large-records Parse time vs fastest over time — large-records — lower is better. Trend across 50 benchmark runs, oldest to newest; latest values: JSON 1.0×, Lightning YAML 0.1.1 1.9×, js-yaml 5.2.1 8.6×, yaml (eemeli) 2.9.0 106×. 1.0× 3.0× 10× 30× 100× 2026-07-13 2026-07-20 2026-07-22 2026-08-10 2026-07-13 · 1.0× 2026-07-15 · 1.0× 2026-07-15 · 1.0× 2026-07-16 · 1.0× 2026-07-16 · 1.0× 2026-07-16 · 1.0× 2026-07-16 · 1.0× 2026-07-18 · 1.0× 2026-07-18 · 1.0× 2026-07-18 · 1.0× 2026-07-19 · 1.0× 2026-07-19 · 1.0× 2026-07-20 · 1.0× 2026-07-20 · 1.0× 2026-07-20 · 1.0× 2026-07-20 · 1.0× 2026-07-20 · 1.0× 2026-07-20 · 1.0× 2026-07-20 · 1.0× 2026-07-20 · 1.0× 2026-07-20 · 1.0× 2026-07-20 · 1.0× 2026-07-21 · 1.0× 2026-07-21 · 1.0× 2026-07-21 · 1.0× 2026-07-21 · 1.0× 2026-07-21 · 1.0× 2026-07-21 · 1.0× 2026-07-22 · 1.0× 2026-07-22 · 1.0× 2026-07-22 · 1.0× 2026-07-22 · 1.0× 2026-07-22 · 1.0× 2026-07-22 · 1.0× 2026-07-22 · 1.0× 2026-07-22 · 1.0× 2026-07-22 · 1.0× 2026-07-23 · 1.0× 2026-07-23 · 1.0× 2026-07-23 · 1.0× 2026-07-23 · 1.0× 2026-07-23 · 1.0× 2026-07-23 · 1.0× 2026-07-24 · 1.0× 2026-07-24 · 1.0× 2026-07-25 · 1.0× 2026-07-25 · 1.0× 2026-07-28 · 1.0× 2026-08-01 · 1.0× 2026-08-10 · 1.0× 2026-07-13 · 2.2× 2026-07-15 · 2.0× 2026-07-15 · 1.9× 2026-07-16 · 2.0× 2026-07-16 · 1.8× 2026-07-16 · 2.0× 2026-07-16 · 1.7× 2026-07-18 · 1.8× 2026-07-18 · 2.0× 2026-07-18 · 1.8× 2026-07-19 · 1.8× 2026-07-19 · 2.0× 2026-07-20 · 2.1× 2026-07-20 · 1.8× 2026-07-20 · 2.1× 2026-07-20 · 1.8× 2026-07-20 · 2.1× 2026-07-20 · 1.9× 2026-07-20 · 1.8× 2026-07-20 · 1.9× 2026-07-20 · 1.8× · v0.1.1 2026-07-20 · 1.9× · v0.1.1 2026-07-21 · 1.7× · v0.1.1 2026-07-21 · 1.9× · v0.1.1 2026-07-21 · 1.9× · v0.1.1 2026-07-21 · 1.7× · v0.1.1 2026-07-21 · 1.7× · v0.1.1 2026-07-21 · 1.9× · v0.1.1 2026-07-22 · 1.7× · v0.1.1 2026-07-22 · 1.7× · v0.1.1 2026-07-22 · 1.9× · v0.1.1 2026-07-22 · 1.9× · v0.1.1 2026-07-22 · 1.9× · v0.1.1 2026-07-22 · 1.9× · v0.1.1 2026-07-22 · 1.6× · v0.1.1 2026-07-22 · 2.0× · v0.1.1 2026-07-22 · 1.7× · v0.1.1 2026-07-23 · 2.0× · v0.1.1 2026-07-23 · 1.6× · v0.1.1 2026-07-23 · 1.6× · v0.1.1 2026-07-23 · 1.9× · v0.1.1 2026-07-23 · 1.9× · v0.1.1 2026-07-23 · 1.9× · v0.1.1 2026-07-24 · 1.9× · v0.1.1 2026-07-24 · 1.7× · v0.1.1 2026-07-25 · 1.9× · v0.1.1 2026-07-25 · 1.8× · v0.1.1 2026-07-28 · 1.9× · v0.1.1 2026-08-01 · 1.7× · v0.1.1 2026-08-10 · 1.9× · v0.1.1 2026-07-13 · 12× 2026-07-15 · 20× 2026-07-15 · 20× 2026-07-16 · 21× 2026-07-16 · 19× 2026-07-16 · 26× 2026-07-16 · 19× 2026-07-18 · 20× 2026-07-18 · 21× 2026-07-18 · 20× 2026-07-19 · 21× 2026-07-19 · 21× 2026-07-20 · 20× 2026-07-20 · 21× 2026-07-20 · 21× 2026-07-20 · 20× 2026-07-20 · 22× 2026-07-20 · 23× 2026-07-20 · 19× 2026-07-20 · 20× 2026-07-20 · 21× · v5.2.1 2026-07-20 · 21× · v5.2.1 2026-07-21 · 19× · v5.2.1 2026-07-21 · 21× · v5.2.1 2026-07-21 · 20× · v5.2.1 2026-07-21 · 19× · v5.2.1 2026-07-21 · 19× · v5.2.1 2026-07-21 · 20× · v5.2.1 2026-07-22 · 19× · v5.2.1 2026-07-22 · 20× · v5.2.1 2026-07-22 · 8.8× · v5.2.1 2026-07-22 · 8.7× · v5.2.1 2026-07-22 · 8.8× · v5.2.1 2026-07-22 · 9.0× · v5.2.1 2026-07-22 · 8.0× · v5.2.1 2026-07-22 · 9.0× · v5.2.1 2026-07-22 · 8.0× · v5.2.1 2026-07-23 · 8.9× · v5.2.1 2026-07-23 · 7.9× · v5.2.1 2026-07-23 · 8.5× · v5.2.1 2026-07-23 · 9.4× · v5.2.1 2026-07-23 · 9.1× · v5.2.1 2026-07-23 · 9.4× · v5.2.1 2026-07-24 · 9.0× · v5.2.1 2026-07-24 · 8.1× · v5.2.1 2026-07-25 · 8.7× · v5.2.1 2026-07-25 · 8.8× · v5.2.1 2026-07-28 · 9.1× · v5.2.1 2026-08-01 · 8.3× · v5.2.1 2026-08-10 · 8.6× · v5.2.1 2026-07-13 · 113× 2026-07-15 · 98× 2026-07-15 · 100× 2026-07-16 · 105× 2026-07-16 · 100× 2026-07-16 · 97× 2026-07-16 · 91× 2026-07-18 · 107× 2026-07-18 · 107× 2026-07-18 · 104× 2026-07-19 · 96× 2026-07-19 · 101× 2026-07-20 · 107× 2026-07-20 · 107× 2026-07-20 · 106× 2026-07-20 · 100× 2026-07-20 · 106× 2026-07-20 · 93× 2026-07-20 · 94× 2026-07-20 · 91× 2026-07-20 · 92× · v2.9.0 2026-07-20 · 92× · v2.9.0 2026-07-21 · 85× · v2.9.0 2026-07-21 · 91× · v2.9.0 2026-07-21 · 92× · v2.9.0 2026-07-21 · 92× · v2.9.0 2026-07-21 · 86× · v2.9.0 2026-07-21 · 92× · v2.9.0 2026-07-22 · 90× · v2.9.0 2026-07-22 · 85× · v2.9.0 2026-07-22 · 106× · v2.9.0 2026-07-22 · 107× · v2.9.0 2026-07-22 · 107× · v2.9.0 2026-07-22 · 105× · v2.9.0 2026-07-22 · 103× · v2.9.0 2026-07-22 · 110× · v2.9.0 2026-07-22 · 105× · v2.9.0 2026-07-23 · 108× · v2.9.0 2026-07-23 · 101× · v2.9.0 2026-07-23 · 112× · v2.9.0 2026-07-23 · 105× · v2.9.0 2026-07-23 · 104× · v2.9.0 2026-07-23 · 96× · v2.9.0 2026-07-24 · 104× · v2.9.0 2026-07-24 · 103× · v2.9.0 2026-07-25 · 105× · v2.9.0 2026-07-25 · 103× · v2.9.0 2026-07-28 · 109× · v2.9.0 2026-08-01 · 105× · v2.9.0 2026-08-10 · 106× · v2.9.0 Parse time vs fastest, run over run — large-records Lower is better, log scale. Each parser's time as a multiple of the fastest in the same run (×) — machine-invariant. The fastest sits at 1× by construction; a rising Lightning YAML line would mean a regression.
JSON Lightning YAML 0.1.1 js-yaml 5.2.1 yaml (eemeli) 2.9.0Parse time vs fastest over time — large-records Parse time vs fastest over time — large-records — lower is better. Trend across 13 benchmark runs, oldest to newest; latest values: JSON 1.0×, Lightning YAML 0.1.1 2.9×, js-yaml 5.2.1 10×, yaml (eemeli) 2.9.0 92×. 1.0× 3.0× 10× 30× 100× 2026-07-23 2026-07-23 2026-07-25 2026-08-10 2026-07-23 · 1.0× 2026-07-23 · 1.0× 2026-07-23 · 1.0× 2026-07-23 · 1.0× 2026-07-23 · 1.0× 2026-07-23 · 1.0× 2026-07-24 · 1.0× 2026-07-24 · 1.0× 2026-07-25 · 1.0× 2026-07-25 · 1.0× 2026-07-28 · 1.0× 2026-08-01 · 1.0× 2026-08-10 · 1.0× 2026-07-23 · 2.9× · v0.1.1 2026-07-23 · 2.6× · v0.1.1 2026-07-23 · 2.8× · v0.1.1 2026-07-23 · 2.9× · v0.1.1 2026-07-23 · 2.9× · v0.1.1 2026-07-23 · 2.6× · v0.1.1 2026-07-24 · 2.8× · v0.1.1 2026-07-24 · 2.8× · v0.1.1 2026-07-25 · 2.8× · v0.1.1 2026-07-25 · 3.0× · v0.1.1 2026-07-28 · 2.9× · v0.1.1 2026-08-01 · 2.7× · v0.1.1 2026-08-10 · 2.9× · v0.1.1 2026-07-23 · 10× · v5.2.1 2026-07-23 · 11× · v5.2.1 2026-07-23 · 10× · v5.2.1 2026-07-23 · 11× · v5.2.1 2026-07-23 · 10.0× · v5.2.1 2026-07-23 · 10× · v5.2.1 2026-07-24 · 9.5× · v5.2.1 2026-07-24 · 10× · v5.2.1 2026-07-25 · 11× · v5.2.1 2026-07-25 · 11× · v5.2.1 2026-07-28 · 11× · v5.2.1 2026-08-01 · 11× · v5.2.1 2026-08-10 · 10× · v5.2.1 2026-07-23 · 93× · v2.9.0 2026-07-23 · 94× · v2.9.0 2026-07-23 · 98× · v2.9.0 2026-07-23 · 88× · v2.9.0 2026-07-23 · 88× · v2.9.0 2026-07-23 · 69× · v2.9.0 2026-07-24 · 91× · v2.9.0 2026-07-24 · 93× · v2.9.0 2026-07-25 · 91× · v2.9.0 2026-07-25 · 93× · v2.9.0 2026-07-28 · 94× · v2.9.0 2026-08-01 · 99× · v2.9.0 2026-08-10 · 92× · v2.9.0 Parse time vs fastest, run over run — large-records Lower is better, log scale. Each parser's time as a multiple of the fastest in the same run (×) — machine-invariant. The fastest sits at 1× by construction; a rising Lightning YAML line would mean a regression.
JSON Lightning YAML 0.1.1 js-yaml 5.2.1 yaml (eemeli) 2.9.0Parse time vs fastest over time — large-records Parse time vs fastest over time — large-records — lower is better. Trend across 13 benchmark runs, oldest to newest; latest values: JSON 1.0×, Lightning YAML 0.1.1 2.2×, js-yaml 5.2.1 9.3×, yaml (eemeli) 2.9.0 107×. 1.0× 3.0× 10× 30× 100× 2026-07-23 2026-07-23 2026-07-25 2026-08-10 2026-07-23 · 1.0× 2026-07-23 · 1.0× 2026-07-23 · 1.0× 2026-07-23 · 1.0× 2026-07-23 · 1.0× 2026-07-23 · 1.0× 2026-07-24 · 1.0× 2026-07-24 · 1.0× 2026-07-25 · 1.0× 2026-07-25 · 1.0× 2026-07-28 · 1.0× 2026-08-01 · 1.0× 2026-08-10 · 1.0× 2026-07-23 · 2.2× · v0.1.1 2026-07-23 · 2.0× · v0.1.1 2026-07-23 · 2.2× · v0.1.1 2026-07-23 · 2.0× · v0.1.1 2026-07-23 · 2.2× · v0.1.1 2026-07-23 · 2.1× · v0.1.1 2026-07-24 · 2.2× · v0.1.1 2026-07-24 · 2.0× · v0.1.1 2026-07-25 · 2.2× · v0.1.1 2026-07-25 · 1.9× · v0.1.1 2026-07-28 · 2.2× · v0.1.1 2026-08-01 · 2.1× · v0.1.1 2026-08-10 · 2.2× · v0.1.1 2026-07-23 · 9.9× · v5.2.1 2026-07-23 · 9.7× · v5.2.1 2026-07-23 · 10.0× · v5.2.1 2026-07-23 · 9.0× · v5.2.1 2026-07-23 · 9.3× · v5.2.1 2026-07-23 · 8.9× · v5.2.1 2026-07-24 · 10× · v5.2.1 2026-07-24 · 9.7× · v5.2.1 2026-07-25 · 9.8× · v5.2.1 2026-07-25 · 8.9× · v5.2.1 2026-07-28 · 9.7× · v5.2.1 2026-08-01 · 9.8× · v5.2.1 2026-08-10 · 9.3× · v5.2.1 2026-07-23 · 119× · v2.9.0 2026-07-23 · 120× · v2.9.0 2026-07-23 · 140× · v2.9.0 2026-07-23 · 106× · v2.9.0 2026-07-23 · 108× · v2.9.0 2026-07-23 · 107× · v2.9.0 2026-07-24 · 113× · v2.9.0 2026-07-24 · 123× · v2.9.0 2026-07-25 · 116× · v2.9.0 2026-07-25 · 107× · v2.9.0 2026-07-28 · 115× · v2.9.0 2026-08-01 · 130× · v2.9.0 2026-08-10 · 107× · v2.9.0
Full breakdown — every workload, avg ns per parse() call (— where a library can’t read that workload):
Workload JSON Lightning YAML 0.1.1 js-yaml 5.2.1 yaml (eemeli) 2.9.0 JSON-shaped (records & nested) small-records 4.76 µs 10.7 µs 44.6 µs 572 µs medium-records 534 µs 1.00 ms 4.07 ms 62.3 ms large-records 6.15 ms 11.5 ms 53.1 ms 654 ms xlarge-records 60.5 ms 119 ms 559 ms 5.97 s medium-nested 1.06 ms 1.79 ms 7.54 ms 93.9 ms large-nested 7.72 ms 13.0 ms 60.3 ms 639 ms Plain block YAML yaml-plain-small-records — 14.5 µs 56.4 µs 694 µs yaml-plain-medium-records — 1.65 ms 5.83 ms 82.7 ms yaml-plain-large-records — 16.4 ms 66.1 ms 755 ms yaml-plain-medium-nested — 852 µs 2.81 ms 30.6 ms Rich YAML (anchors + !!binary) yaml-rich-small — 22.8 µs 78.2 µs 922 µs yaml-rich-medium — 1.59 ms 5.18 ms 65.4 ms yaml-rich-large — 15.2 ms 53.1 ms 772 ms
Workload JSON Lightning YAML 0.1.1 js-yaml 5.2.1 yaml (eemeli) 2.9.0 JSON-shaped (records & nested) small-records 3.62 µs 12.1 µs 46.7 µs 372 µs medium-records 394 µs 1.15 ms 3.78 ms 35.1 ms large-records 4.60 ms 13.3 ms 46.8 ms 421 ms medium-nested 748 µs 2.03 ms 6.70 ms 58.3 ms large-nested 5.46 ms 14.7 ms 51.0 ms 414 ms Plain block YAML yaml-plain-small-records — 16.9 µs 45.6 µs 398 µs yaml-plain-medium-records — 1.96 ms 5.27 ms 46.3 ms yaml-plain-large-records — 19.6 ms 60.5 ms 474 ms yaml-plain-medium-nested — 1.01 ms 2.51 ms 18.2 ms Rich YAML (anchors + !!binary) yaml-rich-small — 26.5 µs 68.6 µs 597 µs yaml-rich-medium — 1.93 ms 4.73 ms 38.3 ms yaml-rich-large — 18.4 ms 49.2 ms 548 ms
Workload JSON Lightning YAML 0.1.1 js-yaml 5.2.1 yaml (eemeli) 2.9.0 JSON-shaped (records & nested) small-records 3.25 µs 9.15 µs 36.9 µs 389 µs medium-records 386 µs 812 µs 3.59 ms 34.7 ms large-records 4.33 ms 9.42 ms 40.3 ms 465 ms medium-nested 520 µs 1.48 ms 6.32 ms 63.3 ms large-nested 3.81 ms 10.8 ms 46.0 ms 493 ms Plain block YAML yaml-plain-small-records — 11.8 µs 44.0 µs 410 µs yaml-plain-medium-records — 1.37 ms 5.48 ms 46.9 ms yaml-plain-large-records — 13.7 ms 146 ms 591 ms yaml-plain-medium-nested — 725 µs 2.42 ms 18.8 ms Rich YAML (anchors + !!binary) yaml-rich-small — 20.3 µs 69.4 µs 643 µs yaml-rich-medium — 1.38 ms 5.07 ms 40.6 ms yaml-rich-large — 13.0 ms 49.7 ms 454 ms
Measured on AMD EPYC 7763 64-Core Processor (unknown) · node 24.18.0 (x64-linux) · generated 2026-08-10 · source eaf00b1ed7702e4cfa9fff566fbc7f88e989a423
Peak memory by workload (parse) Lower is better. Whole-process peak resident set (process.resourceUsage().maxRSS) in isolated child processes, fixed at 25 iterations. Each workload is scaled to its own heaviest parser.
JSON Lightning YAML 0.1.1 js-yaml 5.2.1 yaml (eemeli) 2.9.0Peak memory by workload (parse, resident set size) Peak memory by workload (parse, resident set size) — lower is better. Each workload is scaled to its own slowest parser, so bar length is proportional to memory within a row; rows are not comparable to each other, and every bar is labelled with its exact value. Series: JSON, Lightning YAML 0.1.1, js-yaml 5.2.1, yaml (eemeli) 2.9.0. 5 workloads: small-records, medium-records, large-records, xlarge-records, yaml-rich-medium. 95.6 MB 77.9 MB 78.1 MB 80.6 MB small-records 78.4 MB 82.3 MB 97.1 MB 296 MB medium-records 97.9 MB 150 MB 377 MB 634 MB large-records 389 MB 535 MB 1106 MB 2676 MB xlarge-records 83.6 MB 91.0 MB 231 MB yaml-rich-medium Peak memory, run over run — xlarge-records Lower is better. Absolute peak resident set size (MB) — peak RSS is the stable memory figure, so unlike speed it is shown absolute. One document per published run, oldest to newest.
JSON Lightning YAML 0.1.1 js-yaml 5.2.1 yaml (eemeli) 2.9.0Peak memory over time — xlarge-records Peak memory over time — xlarge-records — lower is better. Trend across 50 benchmark runs, oldest to newest; latest values: JSON 389 MB, Lightning YAML 0.1.1 535 MB, js-yaml 5.2.1 1106 MB, yaml (eemeli) 2.9.0 2676 MB. 0.00 MB 1250 MB 2500 MB 3750 MB 5000 MB 2026-07-13 2026-07-20 2026-07-22 2026-08-10 2026-07-13 · 284 MB 2026-07-15 · 272 MB 2026-07-15 · 279 MB 2026-07-16 · 270 MB 2026-07-16 · 268 MB 2026-07-16 · 271 MB 2026-07-16 · 277 MB 2026-07-18 · 272 MB 2026-07-18 · 274 MB 2026-07-18 · 271 MB 2026-07-19 · 275 MB 2026-07-19 · 271 MB 2026-07-20 · 267 MB 2026-07-20 · 270 MB 2026-07-20 · 272 MB 2026-07-20 · 275 MB 2026-07-20 · 270 MB 2026-07-20 · 271 MB 2026-07-20 · 275 MB 2026-07-20 · 273 MB 2026-07-20 · 271 MB 2026-07-20 · 269 MB 2026-07-21 · 265 MB 2026-07-21 · 274 MB 2026-07-21 · 270 MB 2026-07-21 · 270 MB 2026-07-21 · 270 MB 2026-07-21 · 271 MB 2026-07-22 · 268 MB 2026-07-22 · 273 MB 2026-07-22 · 388 MB 2026-07-22 · 389 MB 2026-07-22 · 388 MB 2026-07-22 · 390 MB 2026-07-22 · 389 MB 2026-07-22 · 388 MB 2026-07-22 · 388 MB 2026-07-23 · 389 MB 2026-07-23 · 390 MB 2026-07-23 · 388 MB 2026-07-23 · 389 MB 2026-07-23 · 389 MB 2026-07-23 · 389 MB 2026-07-24 · 390 MB 2026-07-24 · 389 MB 2026-07-25 · 389 MB 2026-07-25 · 389 MB 2026-07-28 · 390 MB 2026-08-01 · 389 MB 2026-08-10 · 389 MB 2026-07-13 · 369 MB 2026-07-15 · 389 MB 2026-07-15 · 394 MB 2026-07-16 · 389 MB 2026-07-16 · 388 MB 2026-07-16 · 415 MB 2026-07-16 · 385 MB 2026-07-18 · 387 MB 2026-07-18 · 386 MB 2026-07-18 · 383 MB 2026-07-19 · 387 MB 2026-07-19 · 412 MB 2026-07-20 · 419 MB 2026-07-20 · 418 MB 2026-07-20 · 384 MB 2026-07-20 · 387 MB 2026-07-20 · 351 MB 2026-07-20 · 412 MB 2026-07-20 · 385 MB 2026-07-20 · 389 MB 2026-07-20 · 381 MB · v0.1.1 2026-07-20 · 384 MB · v0.1.1 2026-07-21 · 384 MB · v0.1.1 2026-07-21 · 386 MB · v0.1.1 2026-07-21 · 389 MB · v0.1.1 2026-07-21 · 383 MB · v0.1.1 2026-07-21 · 383 MB · v0.1.1 2026-07-21 · 386 MB · v0.1.1 2026-07-22 · 388 MB · v0.1.1 2026-07-22 · 387 MB · v0.1.1 2026-07-22 · 535 MB · v0.1.1 2026-07-22 · 535 MB · v0.1.1 2026-07-22 · 531 MB · v0.1.1 2026-07-22 · 531 MB · v0.1.1 2026-07-22 · 534 MB · v0.1.1 2026-07-22 · 532 MB · v0.1.1 2026-07-22 · 537 MB · v0.1.1 2026-07-23 · 536 MB · v0.1.1 2026-07-23 · 566 MB · v0.1.1 2026-07-23 · 529 MB · v0.1.1 2026-07-23 · 535 MB · v0.1.1 2026-07-23 · 536 MB · v0.1.1 2026-07-23 · 536 MB · v0.1.1 2026-07-24 · 535 MB · v0.1.1 2026-07-24 · 531 MB · v0.1.1 2026-07-25 · 568 MB · v0.1.1 2026-07-25 · 532 MB · v0.1.1 2026-07-28 · 533 MB · v0.1.1 2026-08-01 · 531 MB · v0.1.1 2026-08-10 · 535 MB · v0.1.1 2026-07-13 · 975 MB 2026-07-15 · 970 MB 2026-07-15 · 974 MB 2026-07-16 · 976 MB 2026-07-16 · 973 MB 2026-07-16 · 934 MB 2026-07-16 · 964 MB 2026-07-18 · 835 MB 2026-07-18 · 976 MB 2026-07-18 · 977 MB 2026-07-19 · 958 MB 2026-07-19 · 1030 MB 2026-07-20 · 977 MB 2026-07-20 · 838 MB 2026-07-20 · 990 MB 2026-07-20 · 1036 MB 2026-07-20 · 1019 MB 2026-07-20 · 1008 MB 2026-07-20 · 881 MB 2026-07-20 · 976 MB 2026-07-20 · 960 MB · v5.2.1 2026-07-20 · 971 MB · v5.2.1 2026-07-21 · 1036 MB · v5.2.1 2026-07-21 · 970 MB · v5.2.1 2026-07-21 · 938 MB · v5.2.1 2026-07-21 · 1017 MB · v5.2.1 2026-07-21 · 1017 MB · v5.2.1 2026-07-21 · 988 MB · v5.2.1 2026-07-22 · 1032 MB · v5.2.1 2026-07-22 · 1043 MB · v5.2.1 2026-07-22 · 949 MB · v5.2.1 2026-07-22 · 1106 MB · v5.2.1 2026-07-22 · 1168 MB · v5.2.1 2026-07-22 · 1161 MB · v5.2.1 2026-07-22 · 1120 MB · v5.2.1 2026-07-22 · 1167 MB · v5.2.1 2026-07-22 · 1150 MB · v5.2.1 2026-07-23 · 1138 MB · v5.2.1 2026-07-23 · 1125 MB · v5.2.1 2026-07-23 · 1165 MB · v5.2.1 2026-07-23 · 1124 MB · v5.2.1 2026-07-23 · 1119 MB · v5.2.1 2026-07-23 · 1136 MB · v5.2.1 2026-07-24 · 1115 MB · v5.2.1 2026-07-24 · 1121 MB · v5.2.1 2026-07-25 · 1084 MB · v5.2.1 2026-07-25 · 1137 MB · v5.2.1 2026-07-28 · 1131 MB · v5.2.1 2026-08-01 · 1095 MB · v5.2.1 2026-08-10 · 1106 MB · v5.2.1 2026-07-13 · 2744 MB 2026-07-15 · 1410 MB 2026-07-15 · 1415 MB 2026-07-16 · 1415 MB 2026-07-16 · 1411 MB 2026-07-16 · 1406 MB 2026-07-16 · 1409 MB 2026-07-18 · 1414 MB 2026-07-18 · 1411 MB 2026-07-18 · 1410 MB 2026-07-19 · 1411 MB 2026-07-19 · 1407 MB 2026-07-20 · 1411 MB 2026-07-20 · 1412 MB 2026-07-20 · 1414 MB 2026-07-20 · 1410 MB 2026-07-20 · 1409 MB 2026-07-20 · 1409 MB 2026-07-20 · 2603 MB 2026-07-20 · 2596 MB 2026-07-20 · 2601 MB · v2.9.0 2026-07-20 · 2600 MB · v2.9.0 2026-07-21 · 2602 MB · v2.9.0 2026-07-21 · 2604 MB · v2.9.0 2026-07-21 · 2548 MB · v2.9.0 2026-07-21 · 2591 MB · v2.9.0 2026-07-21 · 2549 MB · v2.9.0 2026-07-21 · 2603 MB · v2.9.0 2026-07-22 · 2572 MB · v2.9.0 2026-07-22 · 2547 MB · v2.9.0 2026-07-22 · 2703 MB · v2.9.0 2026-07-22 · 2644 MB · v2.9.0 2026-07-22 · 2646 MB · v2.9.0 2026-07-22 · 2703 MB · v2.9.0 2026-07-22 · 2647 MB · v2.9.0 2026-07-22 · 2665 MB · v2.9.0 2026-07-22 · 2700 MB · v2.9.0 2026-07-23 · 2640 MB · v2.9.0 2026-07-23 · 2658 MB · v2.9.0 2026-07-23 · 2675 MB · v2.9.0 2026-07-23 · 2699 MB · v2.9.0 2026-07-23 · 2645 MB · v2.9.0 2026-07-23 · 2697 MB · v2.9.0 2026-07-24 · 2647 MB · v2.9.0 2026-07-24 · 2703 MB · v2.9.0 2026-07-25 · 2708 MB · v2.9.0 2026-07-25 · 2707 MB · v2.9.0 2026-07-28 · 2703 MB · v2.9.0 2026-08-01 · 2704 MB · v2.9.0 2026-08-10 · 2676 MB · v2.9.0
Full breakdown — every workload, peak RSS (MB):
Workload JSON Lightning YAML 0.1.1 js-yaml 5.2.1 yaml (eemeli) 2.9.0 JSON-shaped (records & nested) small-records 95.6 MB 77.9 MB 78.1 MB 80.6 MB medium-records 78.4 MB 82.3 MB 97.1 MB 296 MB large-records 97.9 MB 150 MB 377 MB 634 MB xlarge-records 389 MB 535 MB 1106 MB 2676 MB medium-nested 78.1 MB 80.4 MB 134 MB 318 MB large-nested 99.6 MB 119 MB 359 MB 607 MB Plain block YAML yaml-plain-small-records — 75.7 MB 77.2 MB 79.0 MB yaml-plain-medium-records — 81.8 MB 105 MB 290 MB yaml-plain-large-records — 122 MB 336 MB 569 MB yaml-plain-medium-nested — 81.0 MB 89.7 MB 153 MB Rich YAML (anchors + !!binary) yaml-rich-small — 76.1 MB 79.3 MB 79.7 MB yaml-rich-medium — 83.6 MB 91.0 MB 231 MB yaml-rich-large — 111 MB 310 MB 482 MB
The chart above measures Node; a browser page can’t read its own process’s memory the same
way, so this is a separate, ratio-only measurement taken inside real browser engines — always
relative to Lightning YAML (1.0×), never absolute megabytes. Two methods that ask different
questions, so they are not comparable to each other or to the Node figures above:
Chrome’s engine (Chromium) — how much of the page’s own JS heap the parsed results still
hold, measured in-page and garbage-collected before each reading. This is the narrower
question: it counts what the result retains, and is blind to memory the parse allocated and
handed straight back.
Safari’s engine (WebKit) — the operating system’s peak memory reading for the browser’s
page process across the same parse-and-keep step. Broader , and noisier: it does catch
memory spent during the parse, but also engine overhead that has nothing to do with the parser.
Read the Chromium table below expecting a tie on the bigger files, because that is what the
narrower question is bound to answer: past a certain size the bytes still held are the parsed
values themselves, and all three parsers build the same values from the same document. Where
these libraries genuinely differ is the memory spent during the parse — the Node chart above.
Chrome's engine · memory retained by the parsed result
Measured in chromium 141.0.7390.37 (x64-linux) · generated 2026-08-10 · source eaf00b1ed7702e4cfa9fff566fbc7f88e989a423
Workload Lightning YAML 0.1.1 js-yaml 5.2.1 yaml (eemeli) 2.9.0 Plain block YAML yaml-plain-small-records 1.0× 1.0× 1.7× yaml-plain-medium-records 1.0× 1.0× 1.0× yaml-plain-large-records 1.0× 1.0× 1.0× Rich YAML (anchors + !!binary) yaml-rich-small 1.0× 0.9× 1.2× yaml-rich-medium 1.0× 1.0× 1.0× yaml-rich-large 1.0× 1.0× 1.0×
Safari's engine (WebKit) · peak memory of the page process
Measured in webkit 26.0 (x64-linux) · generated 2026-08-10 · source eaf00b1ed7702e4cfa9fff566fbc7f88e989a423
Workload Lightning YAML 0.1.1 js-yaml 5.2.1 yaml (eemeli) 2.9.0 Plain block YAML yaml-plain-small-records 1.0× 1.1× 7.4× yaml-plain-medium-records 1.0× 2.2× 3.0× yaml-plain-large-records 1.0× 2.8× 4.2× Rich YAML (anchors + !!binary) yaml-rich-small 1.0× 0.9× 3.2× yaml-rich-medium 1.0× 1.4× 2.6× yaml-rich-large 1.0× 1.9× 3.2×
Serializing JavaScript values back to YAML text.
Measured on AMD EPYC 7763 64-Core Processor (~3.09 GHz) · node 24.18.0 (x64-linux) · generated 2026-08-10 · source eaf00b1ed7702e4cfa9fff566fbc7f88e989a423
Measured in chromium 141.0.7390.37 (x64-linux) · generated 2026-08-10 · source eaf00b1ed7702e4cfa9fff566fbc7f88e989a423
Measured in webkit 26.0 (x64-linux) · generated 2026-08-10 · source eaf00b1ed7702e4cfa9fff566fbc7f88e989a423
Stringify time by workload Lower is better. Each workload is scaled to its own slowest dumper; labels show time relative to the fastest in that row (×). Exact avg ns per stringify() call is in the breakdown below.
JSON Lightning YAML 0.1.1 js-yaml 5.2.1 js-yaml (tuned) 5.2.1 yaml (eemeli) 2.9.0Stringify time by workload (relative to fastest, per row) Stringify time by workload (relative to fastest, per row) — lower is better. Each workload is scaled to its own slowest parser, so bar length is proportional to time within a row; rows are not comparable to each other, and every bar is labelled with its time relative to the fastest parser in that row (×). Series: JSON, Lightning YAML 0.1.1, js-yaml 5.2.1, js-yaml (tuned) 5.2.1, yaml (eemeli) 2.9.0. 5 workloads: small-records, medium-records, large-records, xlarge-records, yaml-rich-medium. 1.0× 2.9× 27× 17× 79× small-records 1.0× 2.7× 25× 17× 70× medium-records 1.0× 3.4× 29× 20× 65× large-records 1.0× 5.4× 32× 23× 69× xlarge-records 1.0× 5.5× 25× yaml-rich-medium Stringify time by workload Lower is better. Each workload is scaled to its own slowest dumper; labels show time relative to the fastest in that row (×). Exact avg ns per stringify() call is in the breakdown below.
JSON Lightning YAML 0.1.1 js-yaml 5.2.1 js-yaml (tuned) 5.2.1 yaml (eemeli) 2.9.0Stringify time by workload (relative to fastest, per row) Stringify time by workload (relative to fastest, per row) — lower is better. Each workload is scaled to its own slowest parser, so bar length is proportional to time within a row; rows are not comparable to each other, and every bar is labelled with its time relative to the fastest parser in that row (×). Series: JSON, Lightning YAML 0.1.1, js-yaml 5.2.1, js-yaml (tuned) 5.2.1, yaml (eemeli) 2.9.0. 4 workloads: small-records, medium-records, large-records, yaml-rich-medium. 1.0× 5.7× 51× 35× 141× small-records 1.0× 5.2× 47× 31× 119× medium-records 1.0× 4.5× 33× 24× 83× large-records 1.0× 5.4× 22× yaml-rich-medium Stringify time by workload Lower is better. Each workload is scaled to its own slowest dumper; labels show time relative to the fastest in that row (×). Exact avg ns per stringify() call is in the breakdown below.
JSON Lightning YAML 0.1.1 js-yaml 5.2.1 js-yaml (tuned) 5.2.1 yaml (eemeli) 2.9.0Stringify time by workload (relative to fastest, per row) Stringify time by workload (relative to fastest, per row) — lower is better. Each workload is scaled to its own slowest parser, so bar length is proportional to time within a row; rows are not comparable to each other, and every bar is labelled with its time relative to the fastest parser in that row (×). Series: JSON, Lightning YAML 0.1.1, js-yaml 5.2.1, js-yaml (tuned) 5.2.1, yaml (eemeli) 2.9.0. 4 workloads: small-records, medium-records, large-records, yaml-rich-medium. 1.0× 7.3× 77× 49× 215× small-records 1.0× 6.4× 61× 38× 157× medium-records 1.0× 9.6× 70× 47× 166× large-records 1.0× 6.6× 30× yaml-rich-medium
The js-yaml (tuned) series is the same library dumping with the lean CORE schema
instead of its heavyweight default (YAML 1.1 plus timestamp/binary/omap/set). On
JSON-shaped data that runs faster and round-trips identically — so it, not the default, is
the fair yardstick for how fast js-yaml can stringify this data. It appears only where the
data is JSON-shaped; the rich workloads genuinely need the full schema, where the “tuned”
config would be identical to the default.
Stringify time vs fastest, run over run — large-records Lower is better, log scale. Each dumper's time as a multiple of the fastest in the same run (×) — machine-invariant. The fastest sits at 1× by construction; a rising Lightning YAML line would mean a regression.
JSON Lightning YAML 0.1.1 js-yaml 5.2.1 js-yaml (tuned) 5.2.1 yaml (eemeli) 2.9.0Stringify time vs fastest over time — large-records Stringify time vs fastest over time — large-records — lower is better. Trend across 50 benchmark runs, oldest to newest; latest values: JSON 1.0×, Lightning YAML 0.1.1 3.4×, js-yaml 5.2.1 29×, js-yaml (tuned) 5.2.1 20×, yaml (eemeli) 2.9.0 65×. 1.0× 3.0× 10× 30× 2026-07-13 2026-07-20 2026-07-22 2026-08-10 2026-07-13 · 1.0× 2026-07-15 · 1.0× 2026-07-15 · 1.0× 2026-07-16 · 1.0× 2026-07-16 · 1.0× 2026-07-16 · 1.0× 2026-07-16 · 1.0× 2026-07-18 · 1.0× 2026-07-18 · 1.0× 2026-07-18 · 1.0× 2026-07-19 · 1.0× 2026-07-19 · 1.0× 2026-07-20 · 1.0× 2026-07-20 · 1.0× 2026-07-20 · 1.0× 2026-07-20 · 1.0× 2026-07-20 · 1.0× 2026-07-20 · 1.0× 2026-07-20 · 1.0× 2026-07-20 · 1.0× 2026-07-20 · 1.0× 2026-07-20 · 1.0× 2026-07-21 · 1.0× 2026-07-21 · 1.0× 2026-07-21 · 1.0× 2026-07-21 · 1.0× 2026-07-21 · 1.0× 2026-07-21 · 1.0× 2026-07-22 · 1.0× 2026-07-22 · 1.0× 2026-07-22 · 1.0× 2026-07-22 · 1.0× 2026-07-22 · 1.0× 2026-07-22 · 1.0× 2026-07-22 · 1.0× 2026-07-22 · 1.0× 2026-07-22 · 1.0× 2026-07-23 · 1.0× 2026-07-23 · 1.0× 2026-07-23 · 1.0× 2026-07-23 · 1.0× 2026-07-23 · 1.0× 2026-07-23 · 1.0× 2026-07-24 · 1.0× 2026-07-24 · 1.0× 2026-07-25 · 1.0× 2026-07-25 · 1.0× 2026-07-28 · 1.0× 2026-08-01 · 1.0× 2026-08-10 · 1.0× 2026-07-13 · 4.8× 2026-07-15 · 3.5× 2026-07-15 · 3.3× 2026-07-16 · 3.8× 2026-07-16 · 3.2× 2026-07-16 · 3.5× 2026-07-16 · 3.1× 2026-07-18 · 3.3× 2026-07-18 · 3.4× 2026-07-18 · 3.2× 2026-07-19 · 3.2× 2026-07-19 · 3.1× 2026-07-20 · 3.6× 2026-07-20 · 3.5× 2026-07-20 · 3.3× 2026-07-20 · 3.2× 2026-07-20 · 3.3× 2026-07-20 · 3.5× 2026-07-20 · 3.5× 2026-07-20 · 3.1× 2026-07-20 · 3.3× · v0.1.1 2026-07-20 · 3.1× · v0.1.1 2026-07-21 · 3.2× · v0.1.1 2026-07-21 · 3.1× · v0.1.1 2026-07-21 · 3.2× · v0.1.1 2026-07-21 · 3.1× · v0.1.1 2026-07-21 · 3.1× · v0.1.1 2026-07-21 · 3.3× · v0.1.1 2026-07-22 · 3.2× · v0.1.1 2026-07-22 · 3.0× · v0.1.1 2026-07-22 · 3.3× · v0.1.1 2026-07-22 · 3.3× · v0.1.1 2026-07-22 · 3.3× · v0.1.1 2026-07-22 · 3.9× · v0.1.1 2026-07-22 · 3.8× · v0.1.1 2026-07-22 · 3.6× · v0.1.1 2026-07-22 · 3.7× · v0.1.1 2026-07-23 · 3.1× · v0.1.1 2026-07-23 · 3.7× · v0.1.1 2026-07-23 · 4.0× · v0.1.1 2026-07-23 · 4.0× · v0.1.1 2026-07-23 · 3.3× · v0.1.1 2026-07-23 · 4.2× · v0.1.1 2026-07-24 · 3.4× · v0.1.1 2026-07-24 · 3.8× · v0.1.1 2026-07-25 · 3.4× · v0.1.1 2026-07-25 · 4.3× · v0.1.1 2026-07-28 · 3.4× · v0.1.1 2026-08-01 · 3.7× · v0.1.1 2026-08-10 · 3.4× · v0.1.1 2026-07-13 · 27× 2026-07-15 · 28× 2026-07-15 · 28× 2026-07-16 · 29× 2026-07-16 · 27× 2026-07-16 · 32× 2026-07-16 · 27× 2026-07-18 · 32× 2026-07-18 · 29× 2026-07-18 · 28× 2026-07-19 · 27× 2026-07-19 · 31× 2026-07-20 · 30× 2026-07-20 · 34× 2026-07-20 · 33× 2026-07-20 · 28× 2026-07-20 · 27× 2026-07-20 · 27× 2026-07-20 · 26× 2026-07-20 · 26× 2026-07-20 · 29× · v5.2.1 2026-07-20 · 28× · v5.2.1 2026-07-21 · 27× · v5.2.1 2026-07-21 · 27× · v5.2.1 2026-07-21 · 29× · v5.2.1 2026-07-21 · 26× · v5.2.1 2026-07-21 · 26× · v5.2.1 2026-07-21 · 28× · v5.2.1 2026-07-22 · 27× · v5.2.1 2026-07-22 · 26× · v5.2.1 2026-07-22 · 28× · v5.2.1 2026-07-22 · 28× · v5.2.1 2026-07-22 · 27× · v5.2.1 2026-07-22 · 26× · v5.2.1 2026-07-22 · 29× · v5.2.1 2026-07-22 · 28× · v5.2.1 2026-07-22 · 30× · v5.2.1 2026-07-23 · 25× · v5.2.1 2026-07-23 · 30× · v5.2.1 2026-07-23 · 30× · v5.2.1 2026-07-23 · 26× · v5.2.1 2026-07-23 · 27× · v5.2.1 2026-07-23 · 22× · v5.2.1 2026-07-24 · 28× · v5.2.1 2026-07-24 · 30× · v5.2.1 2026-07-25 · 28× · v5.2.1 2026-07-25 · 28× · v5.2.1 2026-07-28 · 28× · v5.2.1 2026-08-01 · 31× · v5.2.1 2026-08-10 · 29× · v5.2.1 2026-07-16 · 22× 2026-07-16 · 20× 2026-07-16 · 25× 2026-07-16 · 20× 2026-07-18 · 26× 2026-07-18 · 22× 2026-07-18 · 22× 2026-07-19 · 21× 2026-07-19 · 25× 2026-07-20 · 23× 2026-07-20 · 27× 2026-07-20 · 26× 2026-07-20 · 21× 2026-07-20 · 21× 2026-07-20 · 22× 2026-07-20 · 20× 2026-07-20 · 20× 2026-07-20 · 22× · v5.2.1 2026-07-20 · 22× · v5.2.1 2026-07-21 · 20× · v5.2.1 2026-07-21 · 20× · v5.2.1 2026-07-21 · 23× · v5.2.1 2026-07-21 · 20× · v5.2.1 2026-07-21 · 20× · v5.2.1 2026-07-21 · 22× · v5.2.1 2026-07-22 · 20× · v5.2.1 2026-07-22 · 19× · v5.2.1 2026-07-22 · 20× · v5.2.1 2026-07-22 · 19× · v5.2.1 2026-07-22 · 19× · v5.2.1 2026-07-22 · 19× · v5.2.1 2026-07-22 · 22× · v5.2.1 2026-07-22 · 20× · v5.2.1 2026-07-22 · 21× · v5.2.1 2026-07-23 · 19× · v5.2.1 2026-07-23 · 22× · v5.2.1 2026-07-23 · 22× · v5.2.1 2026-07-23 · 19× · v5.2.1 2026-07-23 · 20× · v5.2.1 2026-07-23 · 17× · v5.2.1 2026-07-24 · 21× · v5.2.1 2026-07-24 · 22× · v5.2.1 2026-07-25 · 20× · v5.2.1 2026-07-25 · 21× · v5.2.1 2026-07-28 · 20× · v5.2.1 2026-08-01 · 23× · v5.2.1 2026-08-10 · 20× · v5.2.1 2026-07-13 · 60× 2026-07-15 · 66× 2026-07-15 · 64× 2026-07-16 · 66× 2026-07-16 · 60× 2026-07-16 · 62× 2026-07-16 · 61× 2026-07-18 · 65× 2026-07-18 · 66× 2026-07-18 · 65× 2026-07-19 · 63× 2026-07-19 · 64× 2026-07-20 · 67× 2026-07-20 · 65× 2026-07-20 · 64× 2026-07-20 · 64× 2026-07-20 · 64× 2026-07-20 · 59× 2026-07-20 · 59× 2026-07-20 · 58× 2026-07-20 · 61× · v2.9.0 2026-07-20 · 59× · v2.9.0 2026-07-21 · 59× · v2.9.0 2026-07-21 · 59× · v2.9.0 2026-07-21 · 61× · v2.9.0 2026-07-21 · 59× · v2.9.0 2026-07-21 · 57× · v2.9.0 2026-07-21 · 59× · v2.9.0 2026-07-22 · 61× · v2.9.0 2026-07-22 · 57× · v2.9.0 2026-07-22 · 64× · v2.9.0 2026-07-22 · 63× · v2.9.0 2026-07-22 · 62× · v2.9.0 2026-07-22 · 56× · v2.9.0 2026-07-22 · 68× · v2.9.0 2026-07-22 · 64× · v2.9.0 2026-07-22 · 66× · v2.9.0 2026-07-23 · 58× · v2.9.0 2026-07-23 · 69× · v2.9.0 2026-07-23 · 69× · v2.9.0 2026-07-23 · 58× · v2.9.0 2026-07-23 · 64× · v2.9.0 2026-07-23 · 56× · v2.9.0 2026-07-24 · 65× · v2.9.0 2026-07-24 · 68× · v2.9.0 2026-07-25 · 63× · v2.9.0 2026-07-25 · 65× · v2.9.0 2026-07-28 · 65× · v2.9.0 2026-08-01 · 69× · v2.9.0 2026-08-10 · 65× · v2.9.0 Stringify time vs fastest, run over run — large-records Lower is better, log scale. Each dumper's time as a multiple of the fastest in the same run (×) — machine-invariant. The fastest sits at 1× by construction; a rising Lightning YAML line would mean a regression.
JSON Lightning YAML 0.1.1 js-yaml 5.2.1 js-yaml (tuned) 5.2.1 yaml (eemeli) 2.9.0Stringify time vs fastest over time — large-records Stringify time vs fastest over time — large-records — lower is better. Trend across 13 benchmark runs, oldest to newest; latest values: JSON 1.0×, Lightning YAML 0.1.1 4.5×, js-yaml 5.2.1 33×, js-yaml (tuned) 5.2.1 24×, yaml (eemeli) 2.9.0 83×. 1.0× 3.0× 10× 30× 2026-07-23 2026-07-23 2026-07-25 2026-08-10 2026-07-23 · 1.0× 2026-07-23 · 1.0× 2026-07-23 · 1.0× 2026-07-23 · 1.0× 2026-07-23 · 1.0× 2026-07-23 · 1.0× 2026-07-24 · 1.0× 2026-07-24 · 1.0× 2026-07-25 · 1.0× 2026-07-25 · 1.0× 2026-07-28 · 1.0× 2026-08-01 · 1.0× 2026-08-10 · 1.0× 2026-07-23 · 4.5× · v0.1.1 2026-07-23 · 4.4× · v0.1.1 2026-07-23 · 4.5× · v0.1.1 2026-07-23 · 5.0× · v0.1.1 2026-07-23 · 4.2× · v0.1.1 2026-07-23 · 5.1× · v0.1.1 2026-07-24 · 4.5× · v0.1.1 2026-07-24 · 4.4× · v0.1.1 2026-07-25 · 4.4× · v0.1.1 2026-07-25 · 5.2× · v0.1.1 2026-07-28 · 4.6× · v0.1.1 2026-08-01 · 4.5× · v0.1.1 2026-08-10 · 4.5× · v0.1.1 2026-07-23 · 35× · v5.2.1 2026-07-23 · 33× · v5.2.1 2026-07-23 · 31× · v5.2.1 2026-07-23 · 32× · v5.2.1 2026-07-23 · 33× · v5.2.1 2026-07-23 · 32× · v5.2.1 2026-07-24 · 32× · v5.2.1 2026-07-24 · 31× · v5.2.1 2026-07-25 · 35× · v5.2.1 2026-07-25 · 35× · v5.2.1 2026-07-28 · 35× · v5.2.1 2026-08-01 · 31× · v5.2.1 2026-08-10 · 33× · v5.2.1 2026-07-23 · 26× · v5.2.1 2026-07-23 · 24× · v5.2.1 2026-07-23 · 22× · v5.2.1 2026-07-23 · 23× · v5.2.1 2026-07-23 · 23× · v5.2.1 2026-07-23 · 23× · v5.2.1 2026-07-24 · 24× · v5.2.1 2026-07-24 · 22× · v5.2.1 2026-07-25 · 26× · v5.2.1 2026-07-25 · 25× · v5.2.1 2026-07-28 · 26× · v5.2.1 2026-08-01 · 22× · v5.2.1 2026-08-10 · 24× · v5.2.1 2026-07-23 · 83× · v2.9.0 2026-07-23 · 80× · v2.9.0 2026-07-23 · 81× · v2.9.0 2026-07-23 · 78× · v2.9.0 2026-07-23 · 82× · v2.9.0 2026-07-23 · 78× · v2.9.0 2026-07-24 · 81× · v2.9.0 2026-07-24 · 79× · v2.9.0 2026-07-25 · 84× · v2.9.0 2026-07-25 · 79× · v2.9.0 2026-07-28 · 85× · v2.9.0 2026-08-01 · 81× · v2.9.0 2026-08-10 · 83× · v2.9.0 Stringify time vs fastest, run over run — large-records Lower is better, log scale. Each dumper's time as a multiple of the fastest in the same run (×) — machine-invariant. The fastest sits at 1× by construction; a rising Lightning YAML line would mean a regression.
JSON Lightning YAML 0.1.1 js-yaml 5.2.1 js-yaml (tuned) 5.2.1 yaml (eemeli) 2.9.0Stringify time vs fastest over time — large-records Stringify time vs fastest over time — large-records — lower is better. Trend across 13 benchmark runs, oldest to newest; latest values: JSON 1.0×, Lightning YAML 0.1.1 9.6×, js-yaml 5.2.1 70×, js-yaml (tuned) 5.2.1 47×, yaml (eemeli) 2.9.0 166×. 1.0× 3.0× 10× 30× 100× 2026-07-23 2026-07-23 2026-07-25 2026-08-10 2026-07-23 · 1.0× 2026-07-23 · 1.0× 2026-07-23 · 1.0× 2026-07-23 · 1.0× 2026-07-23 · 1.0× 2026-07-23 · 1.0× 2026-07-24 · 1.0× 2026-07-24 · 1.0× 2026-07-25 · 1.0× 2026-07-25 · 1.0× 2026-07-28 · 1.0× 2026-08-01 · 1.0× 2026-08-10 · 1.0× 2026-07-23 · 9.6× · v0.1.1 2026-07-23 · 10× · v0.1.1 2026-07-23 · 9.7× · v0.1.1 2026-07-23 · 8.2× · v0.1.1 2026-07-23 · 9.8× · v0.1.1 2026-07-23 · 7.7× · v0.1.1 2026-07-24 · 8.8× · v0.1.1 2026-07-24 · 8.9× · v0.1.1 2026-07-25 · 9.2× · v0.1.1 2026-07-25 · 8.4× · v0.1.1 2026-07-28 · 9.7× · v0.1.1 2026-08-01 · 9.6× · v0.1.1 2026-08-10 · 9.6× · v0.1.1 2026-07-23 · 76× · v5.2.1 2026-07-23 · 72× · v5.2.1 2026-07-23 · 77× · v5.2.1 2026-07-23 · 62× · v5.2.1 2026-07-23 · 71× · v5.2.1 2026-07-23 · 59× · v5.2.1 2026-07-24 · 72× · v5.2.1 2026-07-24 · 70× · v5.2.1 2026-07-25 · 73× · v5.2.1 2026-07-25 · 66× · v5.2.1 2026-07-28 · 72× · v5.2.1 2026-08-01 · 74× · v5.2.1 2026-08-10 · 70× · v5.2.1 2026-07-23 · 53× · v5.2.1 2026-07-23 · 48× · v5.2.1 2026-07-23 · 55× · v5.2.1 2026-07-23 · 46× · v5.2.1 2026-07-23 · 49× · v5.2.1 2026-07-23 · 43× · v5.2.1 2026-07-24 · 50× · v5.2.1 2026-07-24 · 50× · v5.2.1 2026-07-25 · 52× · v5.2.1 2026-07-25 · 48× · v5.2.1 2026-07-28 · 49× · v5.2.1 2026-08-01 · 53× · v5.2.1 2026-08-10 · 47× · v5.2.1 2026-07-23 · 178× · v2.9.0 2026-07-23 · 167× · v2.9.0 2026-07-23 · 173× · v2.9.0 2026-07-23 · 156× · v2.9.0 2026-07-23 · 198× · v2.9.0 2026-07-23 · 142× · v2.9.0 2026-07-24 · 171× · v2.9.0 2026-07-24 · 168× · v2.9.0 2026-07-25 · 170× · v2.9.0 2026-07-25 · 159× · v2.9.0 2026-07-28 · 170× · v2.9.0 2026-08-01 · 172× · v2.9.0 2026-08-10 · 166× · v2.9.0
Full breakdown — every workload, avg ns per stringify() call (— marks a workload a library can’t represent):
Workload JSON Lightning YAML 0.1.1 js-yaml 5.2.1 js-yaml (tuned) 5.2.1 yaml (eemeli) 2.9.0 JSON-shaped (records & nested) small-records 3.42 µs 10.0 µs 93.7 µs 59.6 µs 269 µs medium-records 388 µs 1.04 ms 9.87 ms 6.44 ms 27.3 ms large-records 4.99 ms 17.0 ms 143 ms 102 ms 323 ms xlarge-records 41.6 ms 224 ms 1.31 s 953 ms 2.86 s medium-nested 845 µs 1.89 ms 14.8 ms 11.1 ms 43.6 ms large-nested 5.66 ms 17.2 ms 135 ms 103 ms 326 ms Plain block YAML yaml-plain-small-records 2.71 µs 8.60 µs 75.3 µs 47.5 µs 215 µs yaml-plain-medium-records 358 µs 1.05 ms 9.01 ms 6.03 ms 25.2 ms yaml-plain-large-records 4.50 ms 13.5 ms 114 ms 80.1 ms 261 ms yaml-plain-medium-nested 163 µs 435 µs 3.68 ms 2.73 ms 10.9 ms Rich YAML (anchors + !!binary) yaml-rich-small — 14.8 µs 91.6 µs — 380 µs yaml-rich-medium — 1.19 ms 6.48 ms — 30.1 ms yaml-rich-large — 13.6 ms 77.6 ms — 296 ms
Workload JSON Lightning YAML 0.1.1 js-yaml 5.2.1 js-yaml (tuned) 5.2.1 yaml (eemeli) 2.9.0 JSON-shaped (records & nested) small-records 1.76 µs 10.1 µs 90.4 µs 61.3 µs 248 µs medium-records 199 µs 1.03 ms 9.26 ms 6.22 ms 23.6 ms large-records 3.31 ms 14.8 ms 110 ms 78.4 ms 276 ms medium-nested 458 µs 1.83 ms 13.8 ms 10.2 ms 36.9 ms large-nested 3.77 ms 15.3 ms 106 ms 82.5 ms 279 ms Plain block YAML yaml-plain-small-records 2.31 µs 8.56 µs 76.7 µs 49.6 µs 180 µs yaml-plain-medium-records 301 µs 999 µs 8.51 ms 5.84 ms 22.2 ms yaml-plain-large-records 3.73 ms 11.7 ms 89.1 ms 63.5 ms 225 ms yaml-plain-medium-nested 124 µs 405 µs 3.59 ms 2.54 ms 9.28 ms Rich YAML (anchors + !!binary) yaml-rich-small — 14.8 µs 86.5 µs — 325 µs yaml-rich-medium — 1.13 ms 6.11 ms — 25.4 ms yaml-rich-large — 12.2 ms 64.1 ms — 256 ms
Workload JSON Lightning YAML 0.1.1 js-yaml 5.2.1 js-yaml (tuned) 5.2.1 yaml (eemeli) 2.9.0 JSON-shaped (records & nested) small-records 1.39 µs 10.1 µs 107 µs 67.7 µs 300 µs medium-records 184 µs 1.18 ms 11.3 ms 7.06 ms 28.8 ms large-records 2.11 ms 20.2 ms 147 ms 99.1 ms 349 ms medium-nested 335 µs 2.39 ms 19.6 ms 13.3 ms 75.0 ms large-nested 2.40 ms 24.2 ms 147 ms 111 ms 547 ms Plain block YAML yaml-plain-small-records 1.13 µs 8.84 µs 82.8 µs 54.1 µs 231 µs yaml-plain-medium-records 200 µs 1.22 ms 11.0 ms 7.17 ms 28.1 ms yaml-plain-large-records 2.11 ms 20.0 ms 123 ms 84.6 ms 291 ms yaml-plain-medium-nested 85.3 µs 591 µs 4.26 ms 3.04 ms 18.7 ms Rich YAML (anchors + !!binary) yaml-rich-small — 15.1 µs 106 µs — 457 µs yaml-rich-medium — 1.18 ms 7.79 ms — 34.9 ms yaml-rich-large — 13.0 ms 82.1 ms — 342 ms
Measured on AMD EPYC 7763 64-Core Processor (unknown) · node 24.18.0 (x64-linux) · generated 2026-08-10 · source eaf00b1ed7702e4cfa9fff566fbc7f88e989a423
Peak memory by workload (stringify) Lower is better. Whole-process peak resident set while dumping, in isolated child processes, fixed at 25 iterations. Each workload is scaled to its own heaviest dumper.
JSON Lightning YAML 0.1.1 js-yaml 5.2.1 yaml (eemeli) 2.9.0Peak memory by workload (stringify, resident set size) Peak memory by workload (stringify, resident set size) — lower is better. Each workload is scaled to its own slowest parser, so bar length is proportional to memory within a row; rows are not comparable to each other, and every bar is labelled with its exact value. Series: JSON, Lightning YAML 0.1.1, js-yaml 5.2.1, yaml (eemeli) 2.9.0. 5 workloads: small-records, medium-records, large-records, xlarge-records, yaml-rich-medium. 77.6 MB 78.2 MB 77.9 MB 77.2 MB small-records 78.9 MB 86.9 MB 107 MB 145 MB medium-records 92.1 MB 227 MB 377 MB 403 MB large-records 249 MB 750 MB 1224 MB 933 MB xlarge-records 109 MB 108 MB 247 MB yaml-rich-medium Peak memory, run over run — xlarge-records Lower is better. Absolute peak resident set size (MB), one document per published run, oldest to newest.
JSON Lightning YAML 0.1.1 js-yaml 5.2.1 yaml (eemeli) 2.9.0Peak memory over time — xlarge-records Peak memory over time — xlarge-records — lower is better. Trend across 50 benchmark runs, oldest to newest; latest values: JSON 249 MB, Lightning YAML 0.1.1 750 MB, js-yaml 5.2.1 1224 MB, yaml (eemeli) 2.9.0 933 MB. 0.00 MB 500 MB 1000 MB 1500 MB 2000 MB 2026-07-13 2026-07-20 2026-07-22 2026-08-10 2026-07-13 · 301 MB 2026-07-15 · 282 MB 2026-07-15 · 289 MB 2026-07-16 · 287 MB 2026-07-16 · 287 MB 2026-07-16 · 282 MB 2026-07-16 · 285 MB 2026-07-18 · 287 MB 2026-07-18 · 289 MB 2026-07-18 · 288 MB 2026-07-19 · 281 MB 2026-07-19 · 289 MB 2026-07-20 · 292 MB 2026-07-20 · 281 MB 2026-07-20 · 289 MB 2026-07-20 · 284 MB 2026-07-20 · 284 MB 2026-07-20 · 295 MB 2026-07-20 · 279 MB 2026-07-20 · 281 MB 2026-07-20 · 278 MB 2026-07-20 · 282 MB 2026-07-21 · 282 MB 2026-07-21 · 284 MB 2026-07-21 · 286 MB 2026-07-21 · 284 MB 2026-07-21 · 280 MB 2026-07-21 · 285 MB 2026-07-22 · 284 MB 2026-07-22 · 286 MB 2026-07-22 · 249 MB 2026-07-22 · 249 MB 2026-07-22 · 249 MB 2026-07-22 · 249 MB 2026-07-22 · 249 MB 2026-07-22 · 250 MB 2026-07-22 · 249 MB 2026-07-23 · 249 MB 2026-07-23 · 250 MB 2026-07-23 · 251 MB 2026-07-23 · 250 MB 2026-07-23 · 251 MB 2026-07-23 · 251 MB 2026-07-24 · 250 MB 2026-07-24 · 251 MB 2026-07-25 · 250 MB 2026-07-25 · 251 MB 2026-07-28 · 250 MB 2026-08-01 · 250 MB 2026-08-10 · 249 MB 2026-07-13 · 567 MB 2026-07-15 · 530 MB 2026-07-15 · 550 MB 2026-07-16 · 559 MB 2026-07-16 · 558 MB 2026-07-16 · 563 MB 2026-07-16 · 548 MB 2026-07-18 · 556 MB 2026-07-18 · 566 MB 2026-07-18 · 580 MB 2026-07-19 · 611 MB 2026-07-19 · 540 MB 2026-07-20 · 563 MB 2026-07-20 · 581 MB 2026-07-20 · 572 MB 2026-07-20 · 615 MB 2026-07-20 · 617 MB 2026-07-20 · 533 MB 2026-07-20 · 566 MB 2026-07-20 · 582 MB 2026-07-20 · 546 MB · v0.1.1 2026-07-20 · 573 MB · v0.1.1 2026-07-21 · 612 MB · v0.1.1 2026-07-21 · 611 MB · v0.1.1 2026-07-21 · 573 MB · v0.1.1 2026-07-21 · 579 MB · v0.1.1 2026-07-21 · 564 MB · v0.1.1 2026-07-21 · 609 MB · v0.1.1 2026-07-22 · 572 MB · v0.1.1 2026-07-22 · 577 MB · v0.1.1 2026-07-22 · 738 MB · v0.1.1 2026-07-22 · 774 MB · v0.1.1 2026-07-22 · 756 MB · v0.1.1 2026-07-22 · 776 MB · v0.1.1 2026-07-22 · 776 MB · v0.1.1 2026-07-22 · 763 MB · v0.1.1 2026-07-22 · 769 MB · v0.1.1 2026-07-23 · 747 MB · v0.1.1 2026-07-23 · 769 MB · v0.1.1 2026-07-23 · 770 MB · v0.1.1 2026-07-23 · 775 MB · v0.1.1 2026-07-23 · 748 MB · v0.1.1 2026-07-23 · 776 MB · v0.1.1 2026-07-24 · 769 MB · v0.1.1 2026-07-24 · 770 MB · v0.1.1 2026-07-25 · 769 MB · v0.1.1 2026-07-25 · 777 MB · v0.1.1 2026-07-28 · 769 MB · v0.1.1 2026-08-01 · 770 MB · v0.1.1 2026-08-10 · 750 MB · v0.1.1 2026-07-13 · 1167 MB 2026-07-15 · 1158 MB 2026-07-15 · 1073 MB 2026-07-16 · 1145 MB 2026-07-16 · 1147 MB 2026-07-16 · 1208 MB 2026-07-16 · 1156 MB 2026-07-18 · 1174 MB 2026-07-18 · 1136 MB 2026-07-18 · 1158 MB 2026-07-19 · 1134 MB 2026-07-19 · 1177 MB 2026-07-20 · 1070 MB 2026-07-20 · 1217 MB 2026-07-20 · 1166 MB 2026-07-20 · 1204 MB 2026-07-20 · 1154 MB 2026-07-20 · 1183 MB 2026-07-20 · 1126 MB 2026-07-20 · 998 MB 2026-07-20 · 1147 MB · v5.2.1 2026-07-20 · 1139 MB · v5.2.1 2026-07-21 · 1161 MB · v5.2.1 2026-07-21 · 1145 MB · v5.2.1 2026-07-21 · 1160 MB · v5.2.1 2026-07-21 · 1141 MB · v5.2.1 2026-07-21 · 1146 MB · v5.2.1 2026-07-21 · 1141 MB · v5.2.1 2026-07-22 · 1127 MB · v5.2.1 2026-07-22 · 1158 MB · v5.2.1 2026-07-22 · 1311 MB · v5.2.1 2026-07-22 · 1310 MB · v5.2.1 2026-07-22 · 1313 MB · v5.2.1 2026-07-22 · 1334 MB · v5.2.1 2026-07-22 · 1353 MB · v5.2.1 2026-07-22 · 1285 MB · v5.2.1 2026-07-22 · 1314 MB · v5.2.1 2026-07-23 · 1285 MB · v5.2.1 2026-07-23 · 1302 MB · v5.2.1 2026-07-23 · 1302 MB · v5.2.1 2026-07-23 · 1302 MB · v5.2.1 2026-07-23 · 1311 MB · v5.2.1 2026-07-23 · 1315 MB · v5.2.1 2026-07-24 · 1317 MB · v5.2.1 2026-07-24 · 1285 MB · v5.2.1 2026-07-25 · 1308 MB · v5.2.1 2026-07-25 · 1310 MB · v5.2.1 2026-07-28 · 1316 MB · v5.2.1 2026-08-01 · 1312 MB · v5.2.1 2026-08-10 · 1224 MB · v5.2.1 2026-07-13 · 985 MB 2026-07-15 · 945 MB 2026-07-15 · 943 MB 2026-07-16 · 971 MB 2026-07-16 · 944 MB 2026-07-16 · 968 MB 2026-07-16 · 940 MB 2026-07-18 · 967 MB 2026-07-18 · 978 MB 2026-07-18 · 941 MB 2026-07-19 · 954 MB 2026-07-19 · 972 MB 2026-07-20 · 967 MB 2026-07-20 · 940 MB 2026-07-20 · 942 MB 2026-07-20 · 986 MB 2026-07-20 · 936 MB 2026-07-20 · 986 MB 2026-07-20 · 705 MB 2026-07-20 · 626 MB 2026-07-20 · 679 MB · v2.9.0 2026-07-20 · 699 MB · v2.9.0 2026-07-21 · 703 MB · v2.9.0 2026-07-21 · 696 MB · v2.9.0 2026-07-21 · 717 MB · v2.9.0 2026-07-21 · 694 MB · v2.9.0 2026-07-21 · 693 MB · v2.9.0 2026-07-21 · 709 MB · v2.9.0 2026-07-22 · 714 MB · v2.9.0 2026-07-22 · 694 MB · v2.9.0 2026-07-22 · 985 MB · v2.9.0 2026-07-22 · 856 MB · v2.9.0 2026-07-22 · 858 MB · v2.9.0 2026-07-22 · 1180 MB · v2.9.0 2026-07-22 · 933 MB · v2.9.0 2026-07-22 · 937 MB · v2.9.0 2026-07-22 · 863 MB · v2.9.0 2026-07-23 · 843 MB · v2.9.0 2026-07-23 · 891 MB · v2.9.0 2026-07-23 · 865 MB · v2.9.0 2026-07-23 · 1139 MB · v2.9.0 2026-07-23 · 865 MB · v2.9.0 2026-07-23 · 1179 MB · v2.9.0 2026-07-24 · 863 MB · v2.9.0 2026-07-24 · 943 MB · v2.9.0 2026-07-25 · 938 MB · v2.9.0 2026-07-25 · 1141 MB · v2.9.0 2026-07-28 · 902 MB · v2.9.0 2026-08-01 · 964 MB · v2.9.0 2026-08-10 · 933 MB · v2.9.0
Full breakdown — every workload, peak RSS (MB):
Workload JSON Lightning YAML 0.1.1 js-yaml 5.2.1 yaml (eemeli) 2.9.0 JSON-shaped (records & nested) small-records 77.6 MB 78.2 MB 77.9 MB 77.2 MB medium-records 78.9 MB 86.9 MB 107 MB 145 MB large-records 92.1 MB 227 MB 377 MB 403 MB xlarge-records 249 MB 750 MB 1224 MB 933 MB medium-nested 82.2 MB 91.3 MB 193 MB 211 MB large-nested 90.7 MB 214 MB 421 MB 377 MB Plain block YAML yaml-plain-small-records 76.6 MB 77.6 MB 79.4 MB 77.5 MB yaml-plain-medium-records 99.0 MB 106 MB 111 MB 188 MB yaml-plain-large-records 291 MB 280 MB 395 MB 403 MB yaml-plain-medium-nested 89.2 MB 90.6 MB 91.3 MB 107 MB Rich YAML (anchors + !!binary) yaml-rich-small — 77.5 MB 79.4 MB 79.4 MB yaml-rich-medium — 109 MB 108 MB 247 MB yaml-rich-large — 255 MB 292 MB 423 MB
Pass rate across the official yaml-test-suite — the
YAML 1.2 spec operationalized as executable cases — a property of the parser, not a per-workload
measurement. Higher is better.
Generated 2026-08-10 · source eaf00b1ed7702e4cfa9fff566fbc7f88e989a423
YAML test-suite conformance Higher is better. Pass rate across 373 cases from the official yaml-test-suite.
YAML test-suite conformance (pass rate) YAML test-suite conformance (pass rate) — higher is better. Lightning YAML 97.6%, yaml (eemeli) 2.9.0 97.1%, js-yaml 5.2.1 94.9%. 0% 25% 50% 75% 100% Lightning YAML 97.6% (364/373) yaml (eemeli) 2.9.0 97.1% (362/373) js-yaml 5.2.1 94.9% (354/373) Lightning YAML passes 97.6% of the suite — including all 91 negative (should-fail) cases; the per-library standing is in
the chart above and the table below. Merge keys (<<), absent from the test corpus, are the only
unimplemented construct.
Conformance pass rate, run over run Higher is better. Pass rate (%) per library, one document per published run, oldest to newest. The y-axis is zoomed to the labelled range where the parsers sit so run-to-run movement is visible.
Lightning YAML js-yaml 5.2.1 yaml (eemeli) 2.9.0Conformance pass rate over time Conformance pass rate over time — higher is better. Trend across 50 benchmark runs, oldest to newest; latest values: Lightning YAML 97.6%, js-yaml 5.2.1 94.9%, yaml (eemeli) 2.9.0 97.1%. 90.0% 92.5% 95.0% 97.5% 100.0% 2026-07-13 2026-07-20 2026-07-22 2026-08-10 2026-07-13 · 97.6% 2026-07-15 · 97.6% 2026-07-15 · 97.6% 2026-07-16 · 97.6% 2026-07-16 · 97.6% 2026-07-16 · 97.6% 2026-07-16 · 97.6% 2026-07-18 · 97.6% 2026-07-18 · 97.6% 2026-07-18 · 97.6% 2026-07-19 · 97.6% 2026-07-19 · 97.6% 2026-07-20 · 97.6% 2026-07-20 · 97.6% 2026-07-20 · 97.6% 2026-07-20 · 97.6% 2026-07-20 · 97.6% 2026-07-20 · 97.6% 2026-07-20 · 97.6% 2026-07-20 · 97.6% 2026-07-20 · 97.6% 2026-07-20 · 97.6% 2026-07-21 · 97.6% 2026-07-21 · 97.6% 2026-07-21 · 97.6% 2026-07-21 · 97.6% 2026-07-21 · 97.6% 2026-07-21 · 97.6% 2026-07-22 · 97.6% 2026-07-22 · 97.6% 2026-07-22 · 97.6% 2026-07-22 · 97.6% 2026-07-22 · 97.6% 2026-07-22 · 97.6% 2026-07-22 · 97.6% 2026-07-22 · 97.6% 2026-07-22 · 97.6% 2026-07-23 · 97.6% 2026-07-23 · 97.6% 2026-07-23 · 97.6% 2026-07-23 · 97.6% 2026-07-23 · 97.6% 2026-07-23 · 97.6% 2026-07-24 · 97.6% 2026-07-24 · 97.6% 2026-07-25 · 97.6% 2026-07-25 · 97.6% 2026-07-28 · 97.6% 2026-08-01 · 97.6% 2026-08-10 · 97.6% 2026-07-13 · 94.9% · v5.2.1 2026-07-15 · 94.9% · v5.2.1 2026-07-15 · 94.9% · v5.2.1 2026-07-16 · 94.9% · v5.2.1 2026-07-16 · 94.9% · v5.2.1 2026-07-16 · 94.9% · v5.2.1 2026-07-16 · 94.9% · v5.2.1 2026-07-18 · 94.9% · v5.2.1 2026-07-18 · 94.9% · v5.2.1 2026-07-18 · 94.9% · v5.2.1 2026-07-19 · 94.9% · v5.2.1 2026-07-19 · 94.9% · v5.2.1 2026-07-20 · 94.9% · v5.2.1 2026-07-20 · 94.9% · v5.2.1 2026-07-20 · 94.9% · v5.2.1 2026-07-20 · 94.9% · v5.2.1 2026-07-20 · 94.9% · v5.2.1 2026-07-20 · 94.9% · v5.2.1 2026-07-20 · 94.9% · v5.2.1 2026-07-20 · 94.9% · v5.2.1 2026-07-20 · 94.9% · v5.2.1 2026-07-20 · 94.9% · v5.2.1 2026-07-21 · 94.9% · v5.2.1 2026-07-21 · 94.9% · v5.2.1 2026-07-21 · 94.9% · v5.2.1 2026-07-21 · 94.9% · v5.2.1 2026-07-21 · 94.9% · v5.2.1 2026-07-21 · 94.9% · v5.2.1 2026-07-22 · 94.9% · v5.2.1 2026-07-22 · 94.9% · v5.2.1 2026-07-22 · 94.9% · v5.2.1 2026-07-22 · 94.9% · v5.2.1 2026-07-22 · 94.9% · v5.2.1 2026-07-22 · 94.9% · v5.2.1 2026-07-22 · 94.9% · v5.2.1 2026-07-22 · 94.9% · v5.2.1 2026-07-22 · 94.9% · v5.2.1 2026-07-23 · 94.9% · v5.2.1 2026-07-23 · 94.9% · v5.2.1 2026-07-23 · 94.9% · v5.2.1 2026-07-23 · 94.9% · v5.2.1 2026-07-23 · 94.9% · v5.2.1 2026-07-23 · 94.9% · v5.2.1 2026-07-24 · 94.9% · v5.2.1 2026-07-24 · 94.9% · v5.2.1 2026-07-25 · 94.9% · v5.2.1 2026-07-25 · 94.9% · v5.2.1 2026-07-28 · 94.9% · v5.2.1 2026-08-01 · 94.9% · v5.2.1 2026-08-10 · 94.9% · v5.2.1 2026-07-13 · 97.1% 2026-07-15 · 97.1% 2026-07-15 · 97.1% 2026-07-16 · 97.1% 2026-07-16 · 97.1% 2026-07-16 · 97.1% 2026-07-16 · 97.1% 2026-07-18 · 97.1% 2026-07-18 · 97.1% 2026-07-18 · 97.1% 2026-07-19 · 97.1% 2026-07-19 · 97.1% 2026-07-20 · 97.1% 2026-07-20 · 97.1% 2026-07-20 · 97.1% 2026-07-20 · 97.1% 2026-07-20 · 97.1% 2026-07-20 · 97.1% 2026-07-20 · 97.1% 2026-07-20 · 97.1% 2026-07-20 · 97.1% · v2.9.0 2026-07-20 · 97.1% · v2.9.0 2026-07-21 · 97.1% · v2.9.0 2026-07-21 · 97.1% · v2.9.0 2026-07-21 · 97.1% · v2.9.0 2026-07-21 · 97.1% · v2.9.0 2026-07-21 · 97.1% · v2.9.0 2026-07-21 · 97.1% · v2.9.0 2026-07-22 · 97.1% · v2.9.0 2026-07-22 · 97.1% · v2.9.0 2026-07-22 · 97.1% · v2.9.0 2026-07-22 · 97.1% · v2.9.0 2026-07-22 · 97.1% · v2.9.0 2026-07-22 · 97.1% · v2.9.0 2026-07-22 · 97.1% · v2.9.0 2026-07-22 · 97.1% · v2.9.0 2026-07-22 · 97.1% · v2.9.0 2026-07-23 · 97.1% · v2.9.0 2026-07-23 · 97.1% · v2.9.0 2026-07-23 · 97.1% · v2.9.0 2026-07-23 · 97.1% · v2.9.0 2026-07-23 · 97.1% · v2.9.0 2026-07-23 · 97.1% · v2.9.0 2026-07-24 · 97.1% · v2.9.0 2026-07-24 · 97.1% · v2.9.0 2026-07-25 · 97.1% · v2.9.0 2026-07-25 · 97.1% · v2.9.0 2026-07-28 · 97.1% · v2.9.0 2026-08-01 · 97.1% · v2.9.0 2026-08-10 · 97.1% · v2.9.0 Full breakdown — 373 cases, per library:
Library Passed Total Score Lightning YAML 364 373 97.6% yaml (eemeli) 2.9.0 362 373 97.1% js-yaml 5.2.1 354 373 94.9%
How many kilobytes each library adds to a browser bundle when an app imports only parse +
stringify and ships it minified — a whole-library figure, not split by operation. Measured
with js-yaml, yaml (eemeli), and lightning-yaml, tree-shaken and gzipped the same way a
real app would ship them. Sizes are deterministic (not machine-dependent). Lower is better.
Generated 2026-08-10 · source eaf00b1ed7702e4cfa9fff566fbc7f88e989a423
Bundle size (browser) Lower is better. Minified + gzipped, the smallest result across 3 bundlers (vite, webpack, rolldown) for each library — parse + stringify only, tree-shaken.
Bundle size (browser, minified + gzip, smallest across bundlers) Bundle size (browser, minified + gzip, smallest across bundlers) — lower is better. Lightning YAML 0.1.1 12.0 KB, js-yaml 5.2.1 15.5 KB, yaml (eemeli) 2.9.0 29.1 KB. 0.0 KB 7.5 KB 15.0 KB 22.5 KB 30.0 KB Lightning YAML 0.1.1 12.0 KB js-yaml 5.2.1 15.5 KB yaml (eemeli) 2.9.0 29.1 KB
Full breakdown — every bundler, gzip with the raw minified size alongside:
Bundler Lightning YAML 0.1.1 js-yaml 5.2.1 yaml (eemeli) 2.9.0 vite 12.5 KB (41.4 KB min) 15.5 KB (52.1 KB min) 29.4 KB (96.5 KB min) webpack 12.4 KB (41.0 KB min) 15.5 KB (51.8 KB min) 29.3 KB (96.3 KB min) rolldown (rust) 12.0 KB (40.8 KB min) 15.6 KB (51.2 KB min) 29.1 KB (95.1 KB min)
Bundle size, run over run Lower is better. Smallest gzip across bundlers (KB) per library, one document per published run, oldest to newest.
Lightning YAML 0.1.1 js-yaml 5.2.1 yaml (eemeli) 2.9.0Bundle size over time (smallest gzip across bundlers) Bundle size over time (smallest gzip across bundlers) — lower is better. Trend across 49 benchmark runs, oldest to newest; latest values: Lightning YAML 0.1.1 12.0 KB, js-yaml 5.2.1 15.5 KB, yaml (eemeli) 2.9.0 29.1 KB. 0.0 KB 7.5 KB 15.0 KB 22.5 KB 30.0 KB 2026-07-15 2026-07-20 2026-07-22 2026-08-10 2026-07-15 · 11.5 KB · v0.1.0 2026-07-15 · 11.5 KB · v0.1.0 2026-07-16 · 11.5 KB · v0.1.0 2026-07-16 · 11.5 KB · v0.1.0 2026-07-16 · 11.7 KB · v0.1.0 2026-07-16 · 11.7 KB · v0.1.0 2026-07-18 · 11.7 KB · v0.1.0 2026-07-18 · 11.7 KB · v0.1.0 2026-07-18 · 11.7 KB · v0.1.0 2026-07-19 · 11.7 KB · v0.1.0 2026-07-19 · 11.7 KB · v0.1.0 2026-07-20 · 11.7 KB · v0.1.0 2026-07-20 · 11.7 KB · v0.1.0 2026-07-20 · 11.7 KB · v0.1.0 2026-07-20 · 11.7 KB · v0.1.0 2026-07-20 · 11.7 KB · v0.1.0 2026-07-20 · 11.7 KB · 0.1.0 → 0.1.1 2026-07-20 · 11.7 KB · v0.1.1 2026-07-20 · 11.7 KB · v0.1.1 2026-07-20 · 11.7 KB · v0.1.1 2026-07-20 · 11.7 KB · v0.1.1 2026-07-21 · 11.7 KB · v0.1.1 2026-07-21 · 11.7 KB · v0.1.1 2026-07-21 · 11.7 KB · v0.1.1 2026-07-21 · 11.7 KB · v0.1.1 2026-07-21 · 11.7 KB · v0.1.1 2026-07-21 · 11.7 KB · v0.1.1 2026-07-22 · 11.7 KB · v0.1.1 2026-07-22 · 11.7 KB · v0.1.1 2026-07-22 · 11.7 KB · v0.1.1 2026-07-22 · 11.7 KB · v0.1.1 2026-07-22 · 11.7 KB · v0.1.1 2026-07-22 · 11.9 KB · v0.1.1 2026-07-22 · 11.9 KB · v0.1.1 2026-07-22 · 11.9 KB · v0.1.1 2026-07-22 · 11.9 KB · v0.1.1 2026-07-23 · 11.9 KB · v0.1.1 2026-07-23 · 11.9 KB · v0.1.1 2026-07-23 · 11.9 KB · v0.1.1 2026-07-23 · 11.9 KB · v0.1.1 2026-07-23 · 11.9 KB · v0.1.1 2026-07-23 · 11.9 KB · v0.1.1 2026-07-24 · 11.9 KB · v0.1.1 2026-07-24 · 12.0 KB · v0.1.1 2026-07-25 · 12.0 KB · v0.1.1 2026-07-25 · 12.0 KB · v0.1.1 2026-07-28 · 12.0 KB · v0.1.1 2026-08-01 · 12.0 KB · v0.1.1 2026-08-10 · 12.0 KB · v0.1.1 2026-07-15 · 15.5 KB · v5.2.1 2026-07-15 · 15.5 KB · v5.2.1 2026-07-16 · 15.5 KB · v5.2.1 2026-07-16 · 15.5 KB · v5.2.1 2026-07-16 · 15.5 KB · v5.2.1 2026-07-16 · 15.5 KB · v5.2.1 2026-07-18 · 15.5 KB · v5.2.1 2026-07-18 · 15.5 KB · v5.2.1 2026-07-18 · 15.5 KB · v5.2.1 2026-07-19 · 15.5 KB · v5.2.1 2026-07-19 · 15.5 KB · v5.2.1 2026-07-20 · 15.5 KB · v5.2.1 2026-07-20 · 15.5 KB · v5.2.1 2026-07-20 · 15.5 KB · v5.2.1 2026-07-20 · 15.5 KB · v5.2.1 2026-07-20 · 15.5 KB · v5.2.1 2026-07-20 · 15.5 KB · v5.2.1 2026-07-20 · 15.5 KB · v5.2.1 2026-07-20 · 15.5 KB · v5.2.1 2026-07-20 · 15.5 KB · v5.2.1 2026-07-20 · 15.5 KB · v5.2.1 2026-07-21 · 15.5 KB · v5.2.1 2026-07-21 · 15.5 KB · v5.2.1 2026-07-21 · 15.5 KB · v5.2.1 2026-07-21 · 15.5 KB · v5.2.1 2026-07-21 · 15.5 KB · v5.2.1 2026-07-21 · 15.5 KB · v5.2.1 2026-07-22 · 15.5 KB · v5.2.1 2026-07-22 · 15.5 KB · v5.2.1 2026-07-22 · 15.5 KB · v5.2.1 2026-07-22 · 15.5 KB · v5.2.1 2026-07-22 · 15.5 KB · v5.2.1 2026-07-22 · 15.5 KB · v5.2.1 2026-07-22 · 15.5 KB · v5.2.1 2026-07-22 · 15.5 KB · v5.2.1 2026-07-22 · 15.5 KB · v5.2.1 2026-07-23 · 15.5 KB · v5.2.1 2026-07-23 · 15.5 KB · v5.2.1 2026-07-23 · 15.5 KB · v5.2.1 2026-07-23 · 15.5 KB · v5.2.1 2026-07-23 · 15.5 KB · v5.2.1 2026-07-23 · 15.5 KB · v5.2.1 2026-07-24 · 15.5 KB · v5.2.1 2026-07-24 · 15.5 KB · v5.2.1 2026-07-25 · 15.5 KB · v5.2.1 2026-07-25 · 15.5 KB · v5.2.1 2026-07-28 · 15.5 KB · v5.2.1 2026-08-01 · 15.5 KB · v5.2.1 2026-08-10 · 15.5 KB · v5.2.1 2026-07-15 · 29.1 KB · v2.9.0 2026-07-15 · 29.1 KB · v2.9.0 2026-07-16 · 29.1 KB · v2.9.0 2026-07-16 · 29.1 KB · v2.9.0 2026-07-16 · 29.1 KB · v2.9.0 2026-07-16 · 29.1 KB · v2.9.0 2026-07-18 · 29.1 KB · v2.9.0 2026-07-18 · 29.1 KB · v2.9.0 2026-07-18 · 29.1 KB · v2.9.0 2026-07-19 · 29.1 KB · v2.9.0 2026-07-19 · 29.1 KB · v2.9.0 2026-07-20 · 29.1 KB · v2.9.0 2026-07-20 · 29.1 KB · v2.9.0 2026-07-20 · 29.1 KB · v2.9.0 2026-07-20 · 29.1 KB · v2.9.0 2026-07-20 · 29.1 KB · v2.9.0 2026-07-20 · 29.1 KB · v2.9.0 2026-07-20 · 29.1 KB · v2.9.0 2026-07-20 · 29.1 KB · v2.9.0 2026-07-20 · 29.1 KB · v2.9.0 2026-07-20 · 29.1 KB · v2.9.0 2026-07-21 · 29.1 KB · v2.9.0 2026-07-21 · 29.1 KB · v2.9.0 2026-07-21 · 29.1 KB · v2.9.0 2026-07-21 · 29.1 KB · v2.9.0 2026-07-21 · 29.1 KB · v2.9.0 2026-07-21 · 29.1 KB · v2.9.0 2026-07-22 · 29.1 KB · v2.9.0 2026-07-22 · 29.1 KB · v2.9.0 2026-07-22 · 29.1 KB · v2.9.0 2026-07-22 · 29.1 KB · v2.9.0 2026-07-22 · 29.1 KB · v2.9.0 2026-07-22 · 29.1 KB · v2.9.0 2026-07-22 · 29.1 KB · v2.9.0 2026-07-22 · 29.1 KB · v2.9.0 2026-07-22 · 29.1 KB · v2.9.0 2026-07-23 · 29.1 KB · v2.9.0 2026-07-23 · 29.1 KB · v2.9.0 2026-07-23 · 29.1 KB · v2.9.0 2026-07-23 · 29.1 KB · v2.9.0 2026-07-23 · 29.1 KB · v2.9.0 2026-07-23 · 29.1 KB · v2.9.0 2026-07-24 · 29.1 KB · v2.9.0 2026-07-24 · 29.1 KB · v2.9.0 2026-07-25 · 29.1 KB · v2.9.0 2026-07-25 · 29.1 KB · v2.9.0 2026-07-28 · 29.1 KB · v2.9.0 2026-08-01 · 29.1 KB · v2.9.0 2026-08-10 · 29.1 KB · v2.9.0