Skip to content

Benchmarks

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:

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.0
Parse 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-records1.0×1.9×7.6×117×medium-records1.0×1.9×8.6×106×large-records1.0×2.0×9.2×99×xlarge-records1.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.0
Parse 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-records1.0×2.9×9.6×89×medium-records1.0×2.9×10×92×large-records1.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.0
Parse 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-records1.0×2.1×9.3×90×medium-records1.0×2.2×9.3×107×large-records1.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.0
Parse time vs fastest over time — large-recordsParse 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-132026-07-202026-07-222026-08-102026-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.12026-07-20 · 1.9× · v0.1.12026-07-21 · 1.7× · v0.1.12026-07-21 · 1.9× · v0.1.12026-07-21 · 1.9× · v0.1.12026-07-21 · 1.7× · v0.1.12026-07-21 · 1.7× · v0.1.12026-07-21 · 1.9× · v0.1.12026-07-22 · 1.7× · v0.1.12026-07-22 · 1.7× · v0.1.12026-07-22 · 1.9× · v0.1.12026-07-22 · 1.9× · v0.1.12026-07-22 · 1.9× · v0.1.12026-07-22 · 1.9× · v0.1.12026-07-22 · 1.6× · v0.1.12026-07-22 · 2.0× · v0.1.12026-07-22 · 1.7× · v0.1.12026-07-23 · 2.0× · v0.1.12026-07-23 · 1.6× · v0.1.12026-07-23 · 1.6× · v0.1.12026-07-23 · 1.9× · v0.1.12026-07-23 · 1.9× · v0.1.12026-07-23 · 1.9× · v0.1.12026-07-24 · 1.9× · v0.1.12026-07-24 · 1.7× · v0.1.12026-07-25 · 1.9× · v0.1.12026-07-25 · 1.8× · v0.1.12026-07-28 · 1.9× · v0.1.12026-08-01 · 1.7× · v0.1.12026-08-10 · 1.9× · v0.1.12026-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.12026-07-20 · 21× · v5.2.12026-07-21 · 19× · v5.2.12026-07-21 · 21× · v5.2.12026-07-21 · 20× · v5.2.12026-07-21 · 19× · v5.2.12026-07-21 · 19× · v5.2.12026-07-21 · 20× · v5.2.12026-07-22 · 19× · v5.2.12026-07-22 · 20× · v5.2.12026-07-22 · 8.8× · v5.2.12026-07-22 · 8.7× · v5.2.12026-07-22 · 8.8× · v5.2.12026-07-22 · 9.0× · v5.2.12026-07-22 · 8.0× · v5.2.12026-07-22 · 9.0× · v5.2.12026-07-22 · 8.0× · v5.2.12026-07-23 · 8.9× · v5.2.12026-07-23 · 7.9× · v5.2.12026-07-23 · 8.5× · v5.2.12026-07-23 · 9.4× · v5.2.12026-07-23 · 9.1× · v5.2.12026-07-23 · 9.4× · v5.2.12026-07-24 · 9.0× · v5.2.12026-07-24 · 8.1× · v5.2.12026-07-25 · 8.7× · v5.2.12026-07-25 · 8.8× · v5.2.12026-07-28 · 9.1× · v5.2.12026-08-01 · 8.3× · v5.2.12026-08-10 · 8.6× · v5.2.12026-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.02026-07-20 · 92× · v2.9.02026-07-21 · 85× · v2.9.02026-07-21 · 91× · v2.9.02026-07-21 · 92× · v2.9.02026-07-21 · 92× · v2.9.02026-07-21 · 86× · v2.9.02026-07-21 · 92× · v2.9.02026-07-22 · 90× · v2.9.02026-07-22 · 85× · v2.9.02026-07-22 · 106× · v2.9.02026-07-22 · 107× · v2.9.02026-07-22 · 107× · v2.9.02026-07-22 · 105× · v2.9.02026-07-22 · 103× · v2.9.02026-07-22 · 110× · v2.9.02026-07-22 · 105× · v2.9.02026-07-23 · 108× · v2.9.02026-07-23 · 101× · v2.9.02026-07-23 · 112× · v2.9.02026-07-23 · 105× · v2.9.02026-07-23 · 104× · v2.9.02026-07-23 · 96× · v2.9.02026-07-24 · 104× · v2.9.02026-07-24 · 103× · v2.9.02026-07-25 · 105× · v2.9.02026-07-25 · 103× · v2.9.02026-07-28 · 109× · v2.9.02026-08-01 · 105× · v2.9.02026-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.0
Parse time vs fastest over time — large-recordsParse 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-232026-07-232026-07-252026-08-102026-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.12026-07-23 · 2.6× · v0.1.12026-07-23 · 2.8× · v0.1.12026-07-23 · 2.9× · v0.1.12026-07-23 · 2.9× · v0.1.12026-07-23 · 2.6× · v0.1.12026-07-24 · 2.8× · v0.1.12026-07-24 · 2.8× · v0.1.12026-07-25 · 2.8× · v0.1.12026-07-25 · 3.0× · v0.1.12026-07-28 · 2.9× · v0.1.12026-08-01 · 2.7× · v0.1.12026-08-10 · 2.9× · v0.1.12026-07-23 · 10× · v5.2.12026-07-23 · 11× · v5.2.12026-07-23 · 10× · v5.2.12026-07-23 · 11× · v5.2.12026-07-23 · 10.0× · v5.2.12026-07-23 · 10× · v5.2.12026-07-24 · 9.5× · v5.2.12026-07-24 · 10× · v5.2.12026-07-25 · 11× · v5.2.12026-07-25 · 11× · v5.2.12026-07-28 · 11× · v5.2.12026-08-01 · 11× · v5.2.12026-08-10 · 10× · v5.2.12026-07-23 · 93× · v2.9.02026-07-23 · 94× · v2.9.02026-07-23 · 98× · v2.9.02026-07-23 · 88× · v2.9.02026-07-23 · 88× · v2.9.02026-07-23 · 69× · v2.9.02026-07-24 · 91× · v2.9.02026-07-24 · 93× · v2.9.02026-07-25 · 91× · v2.9.02026-07-25 · 93× · v2.9.02026-07-28 · 94× · v2.9.02026-08-01 · 99× · v2.9.02026-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.0
Parse time vs fastest over time — large-recordsParse 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-232026-07-232026-07-252026-08-102026-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.12026-07-23 · 2.0× · v0.1.12026-07-23 · 2.2× · v0.1.12026-07-23 · 2.0× · v0.1.12026-07-23 · 2.2× · v0.1.12026-07-23 · 2.1× · v0.1.12026-07-24 · 2.2× · v0.1.12026-07-24 · 2.0× · v0.1.12026-07-25 · 2.2× · v0.1.12026-07-25 · 1.9× · v0.1.12026-07-28 · 2.2× · v0.1.12026-08-01 · 2.1× · v0.1.12026-08-10 · 2.2× · v0.1.12026-07-23 · 9.9× · v5.2.12026-07-23 · 9.7× · v5.2.12026-07-23 · 10.0× · v5.2.12026-07-23 · 9.0× · v5.2.12026-07-23 · 9.3× · v5.2.12026-07-23 · 8.9× · v5.2.12026-07-24 · 10× · v5.2.12026-07-24 · 9.7× · v5.2.12026-07-25 · 9.8× · v5.2.12026-07-25 · 8.9× · v5.2.12026-07-28 · 9.7× · v5.2.12026-08-01 · 9.8× · v5.2.12026-08-10 · 9.3× · v5.2.12026-07-23 · 119× · v2.9.02026-07-23 · 120× · v2.9.02026-07-23 · 140× · v2.9.02026-07-23 · 106× · v2.9.02026-07-23 · 108× · v2.9.02026-07-23 · 107× · v2.9.02026-07-24 · 113× · v2.9.02026-07-24 · 123× · v2.9.02026-07-25 · 116× · v2.9.02026-07-25 · 107× · v2.9.02026-07-28 · 115× · v2.9.02026-08-01 · 130× · v2.9.02026-08-10 · 107× · v2.9.0

Full breakdown — every workload, avg ns per parse() call ( where a library can’t read that workload):

WorkloadJSONLightning YAML 0.1.1js-yaml 5.2.1yaml (eemeli) 2.9.0
JSON-shaped (records & nested)
small-records4.76 µs10.7 µs44.6 µs572 µs
medium-records534 µs1.00 ms4.07 ms62.3 ms
large-records6.15 ms11.5 ms53.1 ms654 ms
xlarge-records60.5 ms119 ms559 ms5.97 s
medium-nested1.06 ms1.79 ms7.54 ms93.9 ms
large-nested7.72 ms13.0 ms60.3 ms639 ms
Plain block YAML
yaml-plain-small-records14.5 µs56.4 µs694 µs
yaml-plain-medium-records1.65 ms5.83 ms82.7 ms
yaml-plain-large-records16.4 ms66.1 ms755 ms
yaml-plain-medium-nested852 µs2.81 ms30.6 ms
Rich YAML (anchors + !!binary)
yaml-rich-small22.8 µs78.2 µs922 µs
yaml-rich-medium1.59 ms5.18 ms65.4 ms
yaml-rich-large15.2 ms53.1 ms772 ms
WorkloadJSONLightning YAML 0.1.1js-yaml 5.2.1yaml (eemeli) 2.9.0
JSON-shaped (records & nested)
small-records3.62 µs12.1 µs46.7 µs372 µs
medium-records394 µs1.15 ms3.78 ms35.1 ms
large-records4.60 ms13.3 ms46.8 ms421 ms
medium-nested748 µs2.03 ms6.70 ms58.3 ms
large-nested5.46 ms14.7 ms51.0 ms414 ms
Plain block YAML
yaml-plain-small-records16.9 µs45.6 µs398 µs
yaml-plain-medium-records1.96 ms5.27 ms46.3 ms
yaml-plain-large-records19.6 ms60.5 ms474 ms
yaml-plain-medium-nested1.01 ms2.51 ms18.2 ms
Rich YAML (anchors + !!binary)
yaml-rich-small26.5 µs68.6 µs597 µs
yaml-rich-medium1.93 ms4.73 ms38.3 ms
yaml-rich-large18.4 ms49.2 ms548 ms
WorkloadJSONLightning YAML 0.1.1js-yaml 5.2.1yaml (eemeli) 2.9.0
JSON-shaped (records & nested)
small-records3.25 µs9.15 µs36.9 µs389 µs
medium-records386 µs812 µs3.59 ms34.7 ms
large-records4.33 ms9.42 ms40.3 ms465 ms
medium-nested520 µs1.48 ms6.32 ms63.3 ms
large-nested3.81 ms10.8 ms46.0 ms493 ms
Plain block YAML
yaml-plain-small-records11.8 µs44.0 µs410 µs
yaml-plain-medium-records1.37 ms5.48 ms46.9 ms
yaml-plain-large-records13.7 ms146 ms591 ms
yaml-plain-medium-nested725 µs2.42 ms18.8 ms
Rich YAML (anchors + !!binary)
yaml-rich-small20.3 µs69.4 µs643 µs
yaml-rich-medium1.38 ms5.07 ms40.6 ms
yaml-rich-large13.0 ms49.7 ms454 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.0
Peak 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 MB77.9 MB78.1 MB80.6 MBsmall-records78.4 MB82.3 MB97.1 MB296 MBmedium-records97.9 MB150 MB377 MB634 MBlarge-records389 MB535 MB1106 MB2676 MBxlarge-records83.6 MB91.0 MB231 MByaml-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.0
Peak memory over time — xlarge-recordsPeak 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 MB1250 MB2500 MB3750 MB5000 MB2026-07-132026-07-202026-07-222026-08-102026-07-13 · 284 MB2026-07-15 · 272 MB2026-07-15 · 279 MB2026-07-16 · 270 MB2026-07-16 · 268 MB2026-07-16 · 271 MB2026-07-16 · 277 MB2026-07-18 · 272 MB2026-07-18 · 274 MB2026-07-18 · 271 MB2026-07-19 · 275 MB2026-07-19 · 271 MB2026-07-20 · 267 MB2026-07-20 · 270 MB2026-07-20 · 272 MB2026-07-20 · 275 MB2026-07-20 · 270 MB2026-07-20 · 271 MB2026-07-20 · 275 MB2026-07-20 · 273 MB2026-07-20 · 271 MB2026-07-20 · 269 MB2026-07-21 · 265 MB2026-07-21 · 274 MB2026-07-21 · 270 MB2026-07-21 · 270 MB2026-07-21 · 270 MB2026-07-21 · 271 MB2026-07-22 · 268 MB2026-07-22 · 273 MB2026-07-22 · 388 MB2026-07-22 · 389 MB2026-07-22 · 388 MB2026-07-22 · 390 MB2026-07-22 · 389 MB2026-07-22 · 388 MB2026-07-22 · 388 MB2026-07-23 · 389 MB2026-07-23 · 390 MB2026-07-23 · 388 MB2026-07-23 · 389 MB2026-07-23 · 389 MB2026-07-23 · 389 MB2026-07-24 · 390 MB2026-07-24 · 389 MB2026-07-25 · 389 MB2026-07-25 · 389 MB2026-07-28 · 390 MB2026-08-01 · 389 MB2026-08-10 · 389 MB2026-07-13 · 369 MB2026-07-15 · 389 MB2026-07-15 · 394 MB2026-07-16 · 389 MB2026-07-16 · 388 MB2026-07-16 · 415 MB2026-07-16 · 385 MB2026-07-18 · 387 MB2026-07-18 · 386 MB2026-07-18 · 383 MB2026-07-19 · 387 MB2026-07-19 · 412 MB2026-07-20 · 419 MB2026-07-20 · 418 MB2026-07-20 · 384 MB2026-07-20 · 387 MB2026-07-20 · 351 MB2026-07-20 · 412 MB2026-07-20 · 385 MB2026-07-20 · 389 MB2026-07-20 · 381 MB · v0.1.12026-07-20 · 384 MB · v0.1.12026-07-21 · 384 MB · v0.1.12026-07-21 · 386 MB · v0.1.12026-07-21 · 389 MB · v0.1.12026-07-21 · 383 MB · v0.1.12026-07-21 · 383 MB · v0.1.12026-07-21 · 386 MB · v0.1.12026-07-22 · 388 MB · v0.1.12026-07-22 · 387 MB · v0.1.12026-07-22 · 535 MB · v0.1.12026-07-22 · 535 MB · v0.1.12026-07-22 · 531 MB · v0.1.12026-07-22 · 531 MB · v0.1.12026-07-22 · 534 MB · v0.1.12026-07-22 · 532 MB · v0.1.12026-07-22 · 537 MB · v0.1.12026-07-23 · 536 MB · v0.1.12026-07-23 · 566 MB · v0.1.12026-07-23 · 529 MB · v0.1.12026-07-23 · 535 MB · v0.1.12026-07-23 · 536 MB · v0.1.12026-07-23 · 536 MB · v0.1.12026-07-24 · 535 MB · v0.1.12026-07-24 · 531 MB · v0.1.12026-07-25 · 568 MB · v0.1.12026-07-25 · 532 MB · v0.1.12026-07-28 · 533 MB · v0.1.12026-08-01 · 531 MB · v0.1.12026-08-10 · 535 MB · v0.1.12026-07-13 · 975 MB2026-07-15 · 970 MB2026-07-15 · 974 MB2026-07-16 · 976 MB2026-07-16 · 973 MB2026-07-16 · 934 MB2026-07-16 · 964 MB2026-07-18 · 835 MB2026-07-18 · 976 MB2026-07-18 · 977 MB2026-07-19 · 958 MB2026-07-19 · 1030 MB2026-07-20 · 977 MB2026-07-20 · 838 MB2026-07-20 · 990 MB2026-07-20 · 1036 MB2026-07-20 · 1019 MB2026-07-20 · 1008 MB2026-07-20 · 881 MB2026-07-20 · 976 MB2026-07-20 · 960 MB · v5.2.12026-07-20 · 971 MB · v5.2.12026-07-21 · 1036 MB · v5.2.12026-07-21 · 970 MB · v5.2.12026-07-21 · 938 MB · v5.2.12026-07-21 · 1017 MB · v5.2.12026-07-21 · 1017 MB · v5.2.12026-07-21 · 988 MB · v5.2.12026-07-22 · 1032 MB · v5.2.12026-07-22 · 1043 MB · v5.2.12026-07-22 · 949 MB · v5.2.12026-07-22 · 1106 MB · v5.2.12026-07-22 · 1168 MB · v5.2.12026-07-22 · 1161 MB · v5.2.12026-07-22 · 1120 MB · v5.2.12026-07-22 · 1167 MB · v5.2.12026-07-22 · 1150 MB · v5.2.12026-07-23 · 1138 MB · v5.2.12026-07-23 · 1125 MB · v5.2.12026-07-23 · 1165 MB · v5.2.12026-07-23 · 1124 MB · v5.2.12026-07-23 · 1119 MB · v5.2.12026-07-23 · 1136 MB · v5.2.12026-07-24 · 1115 MB · v5.2.12026-07-24 · 1121 MB · v5.2.12026-07-25 · 1084 MB · v5.2.12026-07-25 · 1137 MB · v5.2.12026-07-28 · 1131 MB · v5.2.12026-08-01 · 1095 MB · v5.2.12026-08-10 · 1106 MB · v5.2.12026-07-13 · 2744 MB2026-07-15 · 1410 MB2026-07-15 · 1415 MB2026-07-16 · 1415 MB2026-07-16 · 1411 MB2026-07-16 · 1406 MB2026-07-16 · 1409 MB2026-07-18 · 1414 MB2026-07-18 · 1411 MB2026-07-18 · 1410 MB2026-07-19 · 1411 MB2026-07-19 · 1407 MB2026-07-20 · 1411 MB2026-07-20 · 1412 MB2026-07-20 · 1414 MB2026-07-20 · 1410 MB2026-07-20 · 1409 MB2026-07-20 · 1409 MB2026-07-20 · 2603 MB2026-07-20 · 2596 MB2026-07-20 · 2601 MB · v2.9.02026-07-20 · 2600 MB · v2.9.02026-07-21 · 2602 MB · v2.9.02026-07-21 · 2604 MB · v2.9.02026-07-21 · 2548 MB · v2.9.02026-07-21 · 2591 MB · v2.9.02026-07-21 · 2549 MB · v2.9.02026-07-21 · 2603 MB · v2.9.02026-07-22 · 2572 MB · v2.9.02026-07-22 · 2547 MB · v2.9.02026-07-22 · 2703 MB · v2.9.02026-07-22 · 2644 MB · v2.9.02026-07-22 · 2646 MB · v2.9.02026-07-22 · 2703 MB · v2.9.02026-07-22 · 2647 MB · v2.9.02026-07-22 · 2665 MB · v2.9.02026-07-22 · 2700 MB · v2.9.02026-07-23 · 2640 MB · v2.9.02026-07-23 · 2658 MB · v2.9.02026-07-23 · 2675 MB · v2.9.02026-07-23 · 2699 MB · v2.9.02026-07-23 · 2645 MB · v2.9.02026-07-23 · 2697 MB · v2.9.02026-07-24 · 2647 MB · v2.9.02026-07-24 · 2703 MB · v2.9.02026-07-25 · 2708 MB · v2.9.02026-07-25 · 2707 MB · v2.9.02026-07-28 · 2703 MB · v2.9.02026-08-01 · 2704 MB · v2.9.02026-08-10 · 2676 MB · v2.9.0

Full breakdown — every workload, peak RSS (MB):

WorkloadJSONLightning YAML 0.1.1js-yaml 5.2.1yaml (eemeli) 2.9.0
JSON-shaped (records & nested)
small-records95.6 MB77.9 MB78.1 MB80.6 MB
medium-records78.4 MB82.3 MB97.1 MB296 MB
large-records97.9 MB150 MB377 MB634 MB
xlarge-records389 MB535 MB1106 MB2676 MB
medium-nested78.1 MB80.4 MB134 MB318 MB
large-nested99.6 MB119 MB359 MB607 MB
Plain block YAML
yaml-plain-small-records75.7 MB77.2 MB79.0 MB
yaml-plain-medium-records81.8 MB105 MB290 MB
yaml-plain-large-records122 MB336 MB569 MB
yaml-plain-medium-nested81.0 MB89.7 MB153 MB
Rich YAML (anchors + !!binary)
yaml-rich-small76.1 MB79.3 MB79.7 MB
yaml-rich-medium83.6 MB91.0 MB231 MB
yaml-rich-large111 MB310 MB482 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

WorkloadLightning YAML 0.1.1js-yaml 5.2.1yaml (eemeli) 2.9.0
Plain block YAML
yaml-plain-small-records1.0×1.0×1.7×
yaml-plain-medium-records1.0×1.0×1.0×
yaml-plain-large-records1.0×1.0×1.0×
Rich YAML (anchors + !!binary)
yaml-rich-small1.0×0.9×1.2×
yaml-rich-medium1.0×1.0×1.0×
yaml-rich-large1.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

WorkloadLightning YAML 0.1.1js-yaml 5.2.1yaml (eemeli) 2.9.0
Plain block YAML
yaml-plain-small-records1.0×1.1×7.4×
yaml-plain-medium-records1.0×2.2×3.0×
yaml-plain-large-records1.0×2.8×4.2×
Rich YAML (anchors + !!binary)
yaml-rich-small1.0×0.9×3.2×
yaml-rich-medium1.0×1.4×2.6×
yaml-rich-large1.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.0
Stringify 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-records1.0×2.7×25×17×70×medium-records1.0×3.4×29×20×65×large-records1.0×5.4×32×23×69×xlarge-records1.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.0
Stringify 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-records1.0×5.2×47×31×119×medium-records1.0×4.5×33×24×83×large-records1.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.0
Stringify 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-records1.0×6.4×61×38×157×medium-records1.0×9.6×70×47×166×large-records1.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.0
Stringify time vs fastest over time — large-recordsStringify 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-132026-07-202026-07-222026-08-102026-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.12026-07-20 · 3.1× · v0.1.12026-07-21 · 3.2× · v0.1.12026-07-21 · 3.1× · v0.1.12026-07-21 · 3.2× · v0.1.12026-07-21 · 3.1× · v0.1.12026-07-21 · 3.1× · v0.1.12026-07-21 · 3.3× · v0.1.12026-07-22 · 3.2× · v0.1.12026-07-22 · 3.0× · v0.1.12026-07-22 · 3.3× · v0.1.12026-07-22 · 3.3× · v0.1.12026-07-22 · 3.3× · v0.1.12026-07-22 · 3.9× · v0.1.12026-07-22 · 3.8× · v0.1.12026-07-22 · 3.6× · v0.1.12026-07-22 · 3.7× · v0.1.12026-07-23 · 3.1× · v0.1.12026-07-23 · 3.7× · v0.1.12026-07-23 · 4.0× · v0.1.12026-07-23 · 4.0× · v0.1.12026-07-23 · 3.3× · v0.1.12026-07-23 · 4.2× · v0.1.12026-07-24 · 3.4× · v0.1.12026-07-24 · 3.8× · v0.1.12026-07-25 · 3.4× · v0.1.12026-07-25 · 4.3× · v0.1.12026-07-28 · 3.4× · v0.1.12026-08-01 · 3.7× · v0.1.12026-08-10 · 3.4× · v0.1.12026-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.12026-07-20 · 28× · v5.2.12026-07-21 · 27× · v5.2.12026-07-21 · 27× · v5.2.12026-07-21 · 29× · v5.2.12026-07-21 · 26× · v5.2.12026-07-21 · 26× · v5.2.12026-07-21 · 28× · v5.2.12026-07-22 · 27× · v5.2.12026-07-22 · 26× · v5.2.12026-07-22 · 28× · v5.2.12026-07-22 · 28× · v5.2.12026-07-22 · 27× · v5.2.12026-07-22 · 26× · v5.2.12026-07-22 · 29× · v5.2.12026-07-22 · 28× · v5.2.12026-07-22 · 30× · v5.2.12026-07-23 · 25× · v5.2.12026-07-23 · 30× · v5.2.12026-07-23 · 30× · v5.2.12026-07-23 · 26× · v5.2.12026-07-23 · 27× · v5.2.12026-07-23 · 22× · v5.2.12026-07-24 · 28× · v5.2.12026-07-24 · 30× · v5.2.12026-07-25 · 28× · v5.2.12026-07-25 · 28× · v5.2.12026-07-28 · 28× · v5.2.12026-08-01 · 31× · v5.2.12026-08-10 · 29× · v5.2.12026-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.12026-07-20 · 22× · v5.2.12026-07-21 · 20× · v5.2.12026-07-21 · 20× · v5.2.12026-07-21 · 23× · v5.2.12026-07-21 · 20× · v5.2.12026-07-21 · 20× · v5.2.12026-07-21 · 22× · v5.2.12026-07-22 · 20× · v5.2.12026-07-22 · 19× · v5.2.12026-07-22 · 20× · v5.2.12026-07-22 · 19× · v5.2.12026-07-22 · 19× · v5.2.12026-07-22 · 19× · v5.2.12026-07-22 · 22× · v5.2.12026-07-22 · 20× · v5.2.12026-07-22 · 21× · v5.2.12026-07-23 · 19× · v5.2.12026-07-23 · 22× · v5.2.12026-07-23 · 22× · v5.2.12026-07-23 · 19× · v5.2.12026-07-23 · 20× · v5.2.12026-07-23 · 17× · v5.2.12026-07-24 · 21× · v5.2.12026-07-24 · 22× · v5.2.12026-07-25 · 20× · v5.2.12026-07-25 · 21× · v5.2.12026-07-28 · 20× · v5.2.12026-08-01 · 23× · v5.2.12026-08-10 · 20× · v5.2.12026-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.02026-07-20 · 59× · v2.9.02026-07-21 · 59× · v2.9.02026-07-21 · 59× · v2.9.02026-07-21 · 61× · v2.9.02026-07-21 · 59× · v2.9.02026-07-21 · 57× · v2.9.02026-07-21 · 59× · v2.9.02026-07-22 · 61× · v2.9.02026-07-22 · 57× · v2.9.02026-07-22 · 64× · v2.9.02026-07-22 · 63× · v2.9.02026-07-22 · 62× · v2.9.02026-07-22 · 56× · v2.9.02026-07-22 · 68× · v2.9.02026-07-22 · 64× · v2.9.02026-07-22 · 66× · v2.9.02026-07-23 · 58× · v2.9.02026-07-23 · 69× · v2.9.02026-07-23 · 69× · v2.9.02026-07-23 · 58× · v2.9.02026-07-23 · 64× · v2.9.02026-07-23 · 56× · v2.9.02026-07-24 · 65× · v2.9.02026-07-24 · 68× · v2.9.02026-07-25 · 63× · v2.9.02026-07-25 · 65× · v2.9.02026-07-28 · 65× · v2.9.02026-08-01 · 69× · v2.9.02026-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.0
Stringify time vs fastest over time — large-recordsStringify 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-232026-07-232026-07-252026-08-102026-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.12026-07-23 · 4.4× · v0.1.12026-07-23 · 4.5× · v0.1.12026-07-23 · 5.0× · v0.1.12026-07-23 · 4.2× · v0.1.12026-07-23 · 5.1× · v0.1.12026-07-24 · 4.5× · v0.1.12026-07-24 · 4.4× · v0.1.12026-07-25 · 4.4× · v0.1.12026-07-25 · 5.2× · v0.1.12026-07-28 · 4.6× · v0.1.12026-08-01 · 4.5× · v0.1.12026-08-10 · 4.5× · v0.1.12026-07-23 · 35× · v5.2.12026-07-23 · 33× · v5.2.12026-07-23 · 31× · v5.2.12026-07-23 · 32× · v5.2.12026-07-23 · 33× · v5.2.12026-07-23 · 32× · v5.2.12026-07-24 · 32× · v5.2.12026-07-24 · 31× · v5.2.12026-07-25 · 35× · v5.2.12026-07-25 · 35× · v5.2.12026-07-28 · 35× · v5.2.12026-08-01 · 31× · v5.2.12026-08-10 · 33× · v5.2.12026-07-23 · 26× · v5.2.12026-07-23 · 24× · v5.2.12026-07-23 · 22× · v5.2.12026-07-23 · 23× · v5.2.12026-07-23 · 23× · v5.2.12026-07-23 · 23× · v5.2.12026-07-24 · 24× · v5.2.12026-07-24 · 22× · v5.2.12026-07-25 · 26× · v5.2.12026-07-25 · 25× · v5.2.12026-07-28 · 26× · v5.2.12026-08-01 · 22× · v5.2.12026-08-10 · 24× · v5.2.12026-07-23 · 83× · v2.9.02026-07-23 · 80× · v2.9.02026-07-23 · 81× · v2.9.02026-07-23 · 78× · v2.9.02026-07-23 · 82× · v2.9.02026-07-23 · 78× · v2.9.02026-07-24 · 81× · v2.9.02026-07-24 · 79× · v2.9.02026-07-25 · 84× · v2.9.02026-07-25 · 79× · v2.9.02026-07-28 · 85× · v2.9.02026-08-01 · 81× · v2.9.02026-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.0
Stringify time vs fastest over time — large-recordsStringify 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-232026-07-232026-07-252026-08-102026-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.12026-07-23 · 10× · v0.1.12026-07-23 · 9.7× · v0.1.12026-07-23 · 8.2× · v0.1.12026-07-23 · 9.8× · v0.1.12026-07-23 · 7.7× · v0.1.12026-07-24 · 8.8× · v0.1.12026-07-24 · 8.9× · v0.1.12026-07-25 · 9.2× · v0.1.12026-07-25 · 8.4× · v0.1.12026-07-28 · 9.7× · v0.1.12026-08-01 · 9.6× · v0.1.12026-08-10 · 9.6× · v0.1.12026-07-23 · 76× · v5.2.12026-07-23 · 72× · v5.2.12026-07-23 · 77× · v5.2.12026-07-23 · 62× · v5.2.12026-07-23 · 71× · v5.2.12026-07-23 · 59× · v5.2.12026-07-24 · 72× · v5.2.12026-07-24 · 70× · v5.2.12026-07-25 · 73× · v5.2.12026-07-25 · 66× · v5.2.12026-07-28 · 72× · v5.2.12026-08-01 · 74× · v5.2.12026-08-10 · 70× · v5.2.12026-07-23 · 53× · v5.2.12026-07-23 · 48× · v5.2.12026-07-23 · 55× · v5.2.12026-07-23 · 46× · v5.2.12026-07-23 · 49× · v5.2.12026-07-23 · 43× · v5.2.12026-07-24 · 50× · v5.2.12026-07-24 · 50× · v5.2.12026-07-25 · 52× · v5.2.12026-07-25 · 48× · v5.2.12026-07-28 · 49× · v5.2.12026-08-01 · 53× · v5.2.12026-08-10 · 47× · v5.2.12026-07-23 · 178× · v2.9.02026-07-23 · 167× · v2.9.02026-07-23 · 173× · v2.9.02026-07-23 · 156× · v2.9.02026-07-23 · 198× · v2.9.02026-07-23 · 142× · v2.9.02026-07-24 · 171× · v2.9.02026-07-24 · 168× · v2.9.02026-07-25 · 170× · v2.9.02026-07-25 · 159× · v2.9.02026-07-28 · 170× · v2.9.02026-08-01 · 172× · v2.9.02026-08-10 · 166× · v2.9.0

Full breakdown — every workload, avg ns per stringify() call ( marks a workload a library can’t represent):

WorkloadJSONLightning YAML 0.1.1js-yaml 5.2.1js-yaml (tuned) 5.2.1yaml (eemeli) 2.9.0
JSON-shaped (records & nested)
small-records3.42 µs10.0 µs93.7 µs59.6 µs269 µs
medium-records388 µs1.04 ms9.87 ms6.44 ms27.3 ms
large-records4.99 ms17.0 ms143 ms102 ms323 ms
xlarge-records41.6 ms224 ms1.31 s953 ms2.86 s
medium-nested845 µs1.89 ms14.8 ms11.1 ms43.6 ms
large-nested5.66 ms17.2 ms135 ms103 ms326 ms
Plain block YAML
yaml-plain-small-records2.71 µs8.60 µs75.3 µs47.5 µs215 µs
yaml-plain-medium-records358 µs1.05 ms9.01 ms6.03 ms25.2 ms
yaml-plain-large-records4.50 ms13.5 ms114 ms80.1 ms261 ms
yaml-plain-medium-nested163 µs435 µs3.68 ms2.73 ms10.9 ms
Rich YAML (anchors + !!binary)
yaml-rich-small14.8 µs91.6 µs380 µs
yaml-rich-medium1.19 ms6.48 ms30.1 ms
yaml-rich-large13.6 ms77.6 ms296 ms
WorkloadJSONLightning YAML 0.1.1js-yaml 5.2.1js-yaml (tuned) 5.2.1yaml (eemeli) 2.9.0
JSON-shaped (records & nested)
small-records1.76 µs10.1 µs90.4 µs61.3 µs248 µs
medium-records199 µs1.03 ms9.26 ms6.22 ms23.6 ms
large-records3.31 ms14.8 ms110 ms78.4 ms276 ms
medium-nested458 µs1.83 ms13.8 ms10.2 ms36.9 ms
large-nested3.77 ms15.3 ms106 ms82.5 ms279 ms
Plain block YAML
yaml-plain-small-records2.31 µs8.56 µs76.7 µs49.6 µs180 µs
yaml-plain-medium-records301 µs999 µs8.51 ms5.84 ms22.2 ms
yaml-plain-large-records3.73 ms11.7 ms89.1 ms63.5 ms225 ms
yaml-plain-medium-nested124 µs405 µs3.59 ms2.54 ms9.28 ms
Rich YAML (anchors + !!binary)
yaml-rich-small14.8 µs86.5 µs325 µs
yaml-rich-medium1.13 ms6.11 ms25.4 ms
yaml-rich-large12.2 ms64.1 ms256 ms
WorkloadJSONLightning YAML 0.1.1js-yaml 5.2.1js-yaml (tuned) 5.2.1yaml (eemeli) 2.9.0
JSON-shaped (records & nested)
small-records1.39 µs10.1 µs107 µs67.7 µs300 µs
medium-records184 µs1.18 ms11.3 ms7.06 ms28.8 ms
large-records2.11 ms20.2 ms147 ms99.1 ms349 ms
medium-nested335 µs2.39 ms19.6 ms13.3 ms75.0 ms
large-nested2.40 ms24.2 ms147 ms111 ms547 ms
Plain block YAML
yaml-plain-small-records1.13 µs8.84 µs82.8 µs54.1 µs231 µs
yaml-plain-medium-records200 µs1.22 ms11.0 ms7.17 ms28.1 ms
yaml-plain-large-records2.11 ms20.0 ms123 ms84.6 ms291 ms
yaml-plain-medium-nested85.3 µs591 µs4.26 ms3.04 ms18.7 ms
Rich YAML (anchors + !!binary)
yaml-rich-small15.1 µs106 µs457 µs
yaml-rich-medium1.18 ms7.79 ms34.9 ms
yaml-rich-large13.0 ms82.1 ms342 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.0
Peak 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 MB78.2 MB77.9 MB77.2 MBsmall-records78.9 MB86.9 MB107 MB145 MBmedium-records92.1 MB227 MB377 MB403 MBlarge-records249 MB750 MB1224 MB933 MBxlarge-records109 MB108 MB247 MByaml-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.0
Peak memory over time — xlarge-recordsPeak 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 MB500 MB1000 MB1500 MB2000 MB2026-07-132026-07-202026-07-222026-08-102026-07-13 · 301 MB2026-07-15 · 282 MB2026-07-15 · 289 MB2026-07-16 · 287 MB2026-07-16 · 287 MB2026-07-16 · 282 MB2026-07-16 · 285 MB2026-07-18 · 287 MB2026-07-18 · 289 MB2026-07-18 · 288 MB2026-07-19 · 281 MB2026-07-19 · 289 MB2026-07-20 · 292 MB2026-07-20 · 281 MB2026-07-20 · 289 MB2026-07-20 · 284 MB2026-07-20 · 284 MB2026-07-20 · 295 MB2026-07-20 · 279 MB2026-07-20 · 281 MB2026-07-20 · 278 MB2026-07-20 · 282 MB2026-07-21 · 282 MB2026-07-21 · 284 MB2026-07-21 · 286 MB2026-07-21 · 284 MB2026-07-21 · 280 MB2026-07-21 · 285 MB2026-07-22 · 284 MB2026-07-22 · 286 MB2026-07-22 · 249 MB2026-07-22 · 249 MB2026-07-22 · 249 MB2026-07-22 · 249 MB2026-07-22 · 249 MB2026-07-22 · 250 MB2026-07-22 · 249 MB2026-07-23 · 249 MB2026-07-23 · 250 MB2026-07-23 · 251 MB2026-07-23 · 250 MB2026-07-23 · 251 MB2026-07-23 · 251 MB2026-07-24 · 250 MB2026-07-24 · 251 MB2026-07-25 · 250 MB2026-07-25 · 251 MB2026-07-28 · 250 MB2026-08-01 · 250 MB2026-08-10 · 249 MB2026-07-13 · 567 MB2026-07-15 · 530 MB2026-07-15 · 550 MB2026-07-16 · 559 MB2026-07-16 · 558 MB2026-07-16 · 563 MB2026-07-16 · 548 MB2026-07-18 · 556 MB2026-07-18 · 566 MB2026-07-18 · 580 MB2026-07-19 · 611 MB2026-07-19 · 540 MB2026-07-20 · 563 MB2026-07-20 · 581 MB2026-07-20 · 572 MB2026-07-20 · 615 MB2026-07-20 · 617 MB2026-07-20 · 533 MB2026-07-20 · 566 MB2026-07-20 · 582 MB2026-07-20 · 546 MB · v0.1.12026-07-20 · 573 MB · v0.1.12026-07-21 · 612 MB · v0.1.12026-07-21 · 611 MB · v0.1.12026-07-21 · 573 MB · v0.1.12026-07-21 · 579 MB · v0.1.12026-07-21 · 564 MB · v0.1.12026-07-21 · 609 MB · v0.1.12026-07-22 · 572 MB · v0.1.12026-07-22 · 577 MB · v0.1.12026-07-22 · 738 MB · v0.1.12026-07-22 · 774 MB · v0.1.12026-07-22 · 756 MB · v0.1.12026-07-22 · 776 MB · v0.1.12026-07-22 · 776 MB · v0.1.12026-07-22 · 763 MB · v0.1.12026-07-22 · 769 MB · v0.1.12026-07-23 · 747 MB · v0.1.12026-07-23 · 769 MB · v0.1.12026-07-23 · 770 MB · v0.1.12026-07-23 · 775 MB · v0.1.12026-07-23 · 748 MB · v0.1.12026-07-23 · 776 MB · v0.1.12026-07-24 · 769 MB · v0.1.12026-07-24 · 770 MB · v0.1.12026-07-25 · 769 MB · v0.1.12026-07-25 · 777 MB · v0.1.12026-07-28 · 769 MB · v0.1.12026-08-01 · 770 MB · v0.1.12026-08-10 · 750 MB · v0.1.12026-07-13 · 1167 MB2026-07-15 · 1158 MB2026-07-15 · 1073 MB2026-07-16 · 1145 MB2026-07-16 · 1147 MB2026-07-16 · 1208 MB2026-07-16 · 1156 MB2026-07-18 · 1174 MB2026-07-18 · 1136 MB2026-07-18 · 1158 MB2026-07-19 · 1134 MB2026-07-19 · 1177 MB2026-07-20 · 1070 MB2026-07-20 · 1217 MB2026-07-20 · 1166 MB2026-07-20 · 1204 MB2026-07-20 · 1154 MB2026-07-20 · 1183 MB2026-07-20 · 1126 MB2026-07-20 · 998 MB2026-07-20 · 1147 MB · v5.2.12026-07-20 · 1139 MB · v5.2.12026-07-21 · 1161 MB · v5.2.12026-07-21 · 1145 MB · v5.2.12026-07-21 · 1160 MB · v5.2.12026-07-21 · 1141 MB · v5.2.12026-07-21 · 1146 MB · v5.2.12026-07-21 · 1141 MB · v5.2.12026-07-22 · 1127 MB · v5.2.12026-07-22 · 1158 MB · v5.2.12026-07-22 · 1311 MB · v5.2.12026-07-22 · 1310 MB · v5.2.12026-07-22 · 1313 MB · v5.2.12026-07-22 · 1334 MB · v5.2.12026-07-22 · 1353 MB · v5.2.12026-07-22 · 1285 MB · v5.2.12026-07-22 · 1314 MB · v5.2.12026-07-23 · 1285 MB · v5.2.12026-07-23 · 1302 MB · v5.2.12026-07-23 · 1302 MB · v5.2.12026-07-23 · 1302 MB · v5.2.12026-07-23 · 1311 MB · v5.2.12026-07-23 · 1315 MB · v5.2.12026-07-24 · 1317 MB · v5.2.12026-07-24 · 1285 MB · v5.2.12026-07-25 · 1308 MB · v5.2.12026-07-25 · 1310 MB · v5.2.12026-07-28 · 1316 MB · v5.2.12026-08-01 · 1312 MB · v5.2.12026-08-10 · 1224 MB · v5.2.12026-07-13 · 985 MB2026-07-15 · 945 MB2026-07-15 · 943 MB2026-07-16 · 971 MB2026-07-16 · 944 MB2026-07-16 · 968 MB2026-07-16 · 940 MB2026-07-18 · 967 MB2026-07-18 · 978 MB2026-07-18 · 941 MB2026-07-19 · 954 MB2026-07-19 · 972 MB2026-07-20 · 967 MB2026-07-20 · 940 MB2026-07-20 · 942 MB2026-07-20 · 986 MB2026-07-20 · 936 MB2026-07-20 · 986 MB2026-07-20 · 705 MB2026-07-20 · 626 MB2026-07-20 · 679 MB · v2.9.02026-07-20 · 699 MB · v2.9.02026-07-21 · 703 MB · v2.9.02026-07-21 · 696 MB · v2.9.02026-07-21 · 717 MB · v2.9.02026-07-21 · 694 MB · v2.9.02026-07-21 · 693 MB · v2.9.02026-07-21 · 709 MB · v2.9.02026-07-22 · 714 MB · v2.9.02026-07-22 · 694 MB · v2.9.02026-07-22 · 985 MB · v2.9.02026-07-22 · 856 MB · v2.9.02026-07-22 · 858 MB · v2.9.02026-07-22 · 1180 MB · v2.9.02026-07-22 · 933 MB · v2.9.02026-07-22 · 937 MB · v2.9.02026-07-22 · 863 MB · v2.9.02026-07-23 · 843 MB · v2.9.02026-07-23 · 891 MB · v2.9.02026-07-23 · 865 MB · v2.9.02026-07-23 · 1139 MB · v2.9.02026-07-23 · 865 MB · v2.9.02026-07-23 · 1179 MB · v2.9.02026-07-24 · 863 MB · v2.9.02026-07-24 · 943 MB · v2.9.02026-07-25 · 938 MB · v2.9.02026-07-25 · 1141 MB · v2.9.02026-07-28 · 902 MB · v2.9.02026-08-01 · 964 MB · v2.9.02026-08-10 · 933 MB · v2.9.0

Full breakdown — every workload, peak RSS (MB):

WorkloadJSONLightning YAML 0.1.1js-yaml 5.2.1yaml (eemeli) 2.9.0
JSON-shaped (records & nested)
small-records77.6 MB78.2 MB77.9 MB77.2 MB
medium-records78.9 MB86.9 MB107 MB145 MB
large-records92.1 MB227 MB377 MB403 MB
xlarge-records249 MB750 MB1224 MB933 MB
medium-nested82.2 MB91.3 MB193 MB211 MB
large-nested90.7 MB214 MB421 MB377 MB
Plain block YAML
yaml-plain-small-records76.6 MB77.6 MB79.4 MB77.5 MB
yaml-plain-medium-records99.0 MB106 MB111 MB188 MB
yaml-plain-large-records291 MB280 MB395 MB403 MB
yaml-plain-medium-nested89.2 MB90.6 MB91.3 MB107 MB
Rich YAML (anchors + !!binary)
yaml-rich-small77.5 MB79.4 MB79.4 MB
yaml-rich-medium109 MB108 MB247 MB
yaml-rich-large255 MB292 MB423 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 YAML97.6% (364/373)yaml (eemeli) 2.9.097.1% (362/373)js-yaml 5.2.194.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.0
Conformance pass rate over timeConformance 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-132026-07-202026-07-222026-08-102026-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.12026-07-15 · 94.9% · v5.2.12026-07-15 · 94.9% · v5.2.12026-07-16 · 94.9% · v5.2.12026-07-16 · 94.9% · v5.2.12026-07-16 · 94.9% · v5.2.12026-07-16 · 94.9% · v5.2.12026-07-18 · 94.9% · v5.2.12026-07-18 · 94.9% · v5.2.12026-07-18 · 94.9% · v5.2.12026-07-19 · 94.9% · v5.2.12026-07-19 · 94.9% · v5.2.12026-07-20 · 94.9% · v5.2.12026-07-20 · 94.9% · v5.2.12026-07-20 · 94.9% · v5.2.12026-07-20 · 94.9% · v5.2.12026-07-20 · 94.9% · v5.2.12026-07-20 · 94.9% · v5.2.12026-07-20 · 94.9% · v5.2.12026-07-20 · 94.9% · v5.2.12026-07-20 · 94.9% · v5.2.12026-07-20 · 94.9% · v5.2.12026-07-21 · 94.9% · v5.2.12026-07-21 · 94.9% · v5.2.12026-07-21 · 94.9% · v5.2.12026-07-21 · 94.9% · v5.2.12026-07-21 · 94.9% · v5.2.12026-07-21 · 94.9% · v5.2.12026-07-22 · 94.9% · v5.2.12026-07-22 · 94.9% · v5.2.12026-07-22 · 94.9% · v5.2.12026-07-22 · 94.9% · v5.2.12026-07-22 · 94.9% · v5.2.12026-07-22 · 94.9% · v5.2.12026-07-22 · 94.9% · v5.2.12026-07-22 · 94.9% · v5.2.12026-07-22 · 94.9% · v5.2.12026-07-23 · 94.9% · v5.2.12026-07-23 · 94.9% · v5.2.12026-07-23 · 94.9% · v5.2.12026-07-23 · 94.9% · v5.2.12026-07-23 · 94.9% · v5.2.12026-07-23 · 94.9% · v5.2.12026-07-24 · 94.9% · v5.2.12026-07-24 · 94.9% · v5.2.12026-07-25 · 94.9% · v5.2.12026-07-25 · 94.9% · v5.2.12026-07-28 · 94.9% · v5.2.12026-08-01 · 94.9% · v5.2.12026-08-10 · 94.9% · v5.2.12026-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.02026-07-20 · 97.1% · v2.9.02026-07-21 · 97.1% · v2.9.02026-07-21 · 97.1% · v2.9.02026-07-21 · 97.1% · v2.9.02026-07-21 · 97.1% · v2.9.02026-07-21 · 97.1% · v2.9.02026-07-21 · 97.1% · v2.9.02026-07-22 · 97.1% · v2.9.02026-07-22 · 97.1% · v2.9.02026-07-22 · 97.1% · v2.9.02026-07-22 · 97.1% · v2.9.02026-07-22 · 97.1% · v2.9.02026-07-22 · 97.1% · v2.9.02026-07-22 · 97.1% · v2.9.02026-07-22 · 97.1% · v2.9.02026-07-22 · 97.1% · v2.9.02026-07-23 · 97.1% · v2.9.02026-07-23 · 97.1% · v2.9.02026-07-23 · 97.1% · v2.9.02026-07-23 · 97.1% · v2.9.02026-07-23 · 97.1% · v2.9.02026-07-23 · 97.1% · v2.9.02026-07-24 · 97.1% · v2.9.02026-07-24 · 97.1% · v2.9.02026-07-25 · 97.1% · v2.9.02026-07-25 · 97.1% · v2.9.02026-07-28 · 97.1% · v2.9.02026-08-01 · 97.1% · v2.9.02026-08-10 · 97.1% · v2.9.0

Full breakdown — 373 cases, per library:

LibraryPassedTotalScore
Lightning YAML36437397.6%
yaml (eemeli) 2.9.036237397.1%
js-yaml 5.2.135437394.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 KB7.5 KB15.0 KB22.5 KB30.0 KBLightning YAML 0.1.112.0 KBjs-yaml 5.2.115.5 KByaml (eemeli) 2.9.029.1 KB

Full breakdown — every bundler, gzip with the raw minified size alongside:

BundlerLightning YAML 0.1.1js-yaml 5.2.1yaml (eemeli) 2.9.0
vite12.5 KB (41.4 KB min)15.5 KB (52.1 KB min)29.4 KB (96.5 KB min)
webpack12.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.0
Bundle 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 KB7.5 KB15.0 KB22.5 KB30.0 KB2026-07-152026-07-202026-07-222026-08-102026-07-15 · 11.5 KB · v0.1.02026-07-15 · 11.5 KB · v0.1.02026-07-16 · 11.5 KB · v0.1.02026-07-16 · 11.5 KB · v0.1.02026-07-16 · 11.7 KB · v0.1.02026-07-16 · 11.7 KB · v0.1.02026-07-18 · 11.7 KB · v0.1.02026-07-18 · 11.7 KB · v0.1.02026-07-18 · 11.7 KB · v0.1.02026-07-19 · 11.7 KB · v0.1.02026-07-19 · 11.7 KB · v0.1.02026-07-20 · 11.7 KB · v0.1.02026-07-20 · 11.7 KB · v0.1.02026-07-20 · 11.7 KB · v0.1.02026-07-20 · 11.7 KB · v0.1.02026-07-20 · 11.7 KB · v0.1.02026-07-20 · 11.7 KB · 0.1.0 → 0.1.12026-07-20 · 11.7 KB · v0.1.12026-07-20 · 11.7 KB · v0.1.12026-07-20 · 11.7 KB · v0.1.12026-07-20 · 11.7 KB · v0.1.12026-07-21 · 11.7 KB · v0.1.12026-07-21 · 11.7 KB · v0.1.12026-07-21 · 11.7 KB · v0.1.12026-07-21 · 11.7 KB · v0.1.12026-07-21 · 11.7 KB · v0.1.12026-07-21 · 11.7 KB · v0.1.12026-07-22 · 11.7 KB · v0.1.12026-07-22 · 11.7 KB · v0.1.12026-07-22 · 11.7 KB · v0.1.12026-07-22 · 11.7 KB · v0.1.12026-07-22 · 11.7 KB · v0.1.12026-07-22 · 11.9 KB · v0.1.12026-07-22 · 11.9 KB · v0.1.12026-07-22 · 11.9 KB · v0.1.12026-07-22 · 11.9 KB · v0.1.12026-07-23 · 11.9 KB · v0.1.12026-07-23 · 11.9 KB · v0.1.12026-07-23 · 11.9 KB · v0.1.12026-07-23 · 11.9 KB · v0.1.12026-07-23 · 11.9 KB · v0.1.12026-07-23 · 11.9 KB · v0.1.12026-07-24 · 11.9 KB · v0.1.12026-07-24 · 12.0 KB · v0.1.12026-07-25 · 12.0 KB · v0.1.12026-07-25 · 12.0 KB · v0.1.12026-07-28 · 12.0 KB · v0.1.12026-08-01 · 12.0 KB · v0.1.12026-08-10 · 12.0 KB · v0.1.12026-07-15 · 15.5 KB · v5.2.12026-07-15 · 15.5 KB · v5.2.12026-07-16 · 15.5 KB · v5.2.12026-07-16 · 15.5 KB · v5.2.12026-07-16 · 15.5 KB · v5.2.12026-07-16 · 15.5 KB · v5.2.12026-07-18 · 15.5 KB · v5.2.12026-07-18 · 15.5 KB · v5.2.12026-07-18 · 15.5 KB · v5.2.12026-07-19 · 15.5 KB · v5.2.12026-07-19 · 15.5 KB · v5.2.12026-07-20 · 15.5 KB · v5.2.12026-07-20 · 15.5 KB · v5.2.12026-07-20 · 15.5 KB · v5.2.12026-07-20 · 15.5 KB · v5.2.12026-07-20 · 15.5 KB · v5.2.12026-07-20 · 15.5 KB · v5.2.12026-07-20 · 15.5 KB · v5.2.12026-07-20 · 15.5 KB · v5.2.12026-07-20 · 15.5 KB · v5.2.12026-07-20 · 15.5 KB · v5.2.12026-07-21 · 15.5 KB · v5.2.12026-07-21 · 15.5 KB · v5.2.12026-07-21 · 15.5 KB · v5.2.12026-07-21 · 15.5 KB · v5.2.12026-07-21 · 15.5 KB · v5.2.12026-07-21 · 15.5 KB · v5.2.12026-07-22 · 15.5 KB · v5.2.12026-07-22 · 15.5 KB · v5.2.12026-07-22 · 15.5 KB · v5.2.12026-07-22 · 15.5 KB · v5.2.12026-07-22 · 15.5 KB · v5.2.12026-07-22 · 15.5 KB · v5.2.12026-07-22 · 15.5 KB · v5.2.12026-07-22 · 15.5 KB · v5.2.12026-07-22 · 15.5 KB · v5.2.12026-07-23 · 15.5 KB · v5.2.12026-07-23 · 15.5 KB · v5.2.12026-07-23 · 15.5 KB · v5.2.12026-07-23 · 15.5 KB · v5.2.12026-07-23 · 15.5 KB · v5.2.12026-07-23 · 15.5 KB · v5.2.12026-07-24 · 15.5 KB · v5.2.12026-07-24 · 15.5 KB · v5.2.12026-07-25 · 15.5 KB · v5.2.12026-07-25 · 15.5 KB · v5.2.12026-07-28 · 15.5 KB · v5.2.12026-08-01 · 15.5 KB · v5.2.12026-08-10 · 15.5 KB · v5.2.12026-07-15 · 29.1 KB · v2.9.02026-07-15 · 29.1 KB · v2.9.02026-07-16 · 29.1 KB · v2.9.02026-07-16 · 29.1 KB · v2.9.02026-07-16 · 29.1 KB · v2.9.02026-07-16 · 29.1 KB · v2.9.02026-07-18 · 29.1 KB · v2.9.02026-07-18 · 29.1 KB · v2.9.02026-07-18 · 29.1 KB · v2.9.02026-07-19 · 29.1 KB · v2.9.02026-07-19 · 29.1 KB · v2.9.02026-07-20 · 29.1 KB · v2.9.02026-07-20 · 29.1 KB · v2.9.02026-07-20 · 29.1 KB · v2.9.02026-07-20 · 29.1 KB · v2.9.02026-07-20 · 29.1 KB · v2.9.02026-07-20 · 29.1 KB · v2.9.02026-07-20 · 29.1 KB · v2.9.02026-07-20 · 29.1 KB · v2.9.02026-07-20 · 29.1 KB · v2.9.02026-07-20 · 29.1 KB · v2.9.02026-07-21 · 29.1 KB · v2.9.02026-07-21 · 29.1 KB · v2.9.02026-07-21 · 29.1 KB · v2.9.02026-07-21 · 29.1 KB · v2.9.02026-07-21 · 29.1 KB · v2.9.02026-07-21 · 29.1 KB · v2.9.02026-07-22 · 29.1 KB · v2.9.02026-07-22 · 29.1 KB · v2.9.02026-07-22 · 29.1 KB · v2.9.02026-07-22 · 29.1 KB · v2.9.02026-07-22 · 29.1 KB · v2.9.02026-07-22 · 29.1 KB · v2.9.02026-07-22 · 29.1 KB · v2.9.02026-07-22 · 29.1 KB · v2.9.02026-07-22 · 29.1 KB · v2.9.02026-07-23 · 29.1 KB · v2.9.02026-07-23 · 29.1 KB · v2.9.02026-07-23 · 29.1 KB · v2.9.02026-07-23 · 29.1 KB · v2.9.02026-07-23 · 29.1 KB · v2.9.02026-07-23 · 29.1 KB · v2.9.02026-07-24 · 29.1 KB · v2.9.02026-07-24 · 29.1 KB · v2.9.02026-07-25 · 29.1 KB · v2.9.02026-07-25 · 29.1 KB · v2.9.02026-07-28 · 29.1 KB · v2.9.02026-08-01 · 29.1 KB · v2.9.02026-08-10 · 29.1 KB · v2.9.0