This page compares the time and memory of oneyaml-go with those of the other Go YAML libraries. Every library runs the same tasks on the same inputs, through the benchmark of oneyaml-kit, the kit shared by the oneyaml libraries. The tables under Results are generated from the kit's result file, and none of their numbers is typed by hand. The summary at the top of the README is generated from the same file.
The figures are measured, not bounds. They describe these inputs on this machine, and your files and hardware will give other numbers.
About this run
- Library: oneyaml-go 1.0.0. The figures are for the code released as
v1.0.0, at commiteea67bb; the tag sits on a later commit that changes no library code. This page is generated again from a new run at each release. - Competitors:
go.yaml.in/yaml/v3, the maintained fork of yaml.v3 (yaml-v3in the tables),go.yaml.in/yaml/v4(yaml-v4),gopkg.in/yaml.v2(yaml-v2),sigs.k8s.io/yaml(sigs-yaml) andgithub.com/goccy/go-yaml(goccy-go-yaml). For patches, they aregithub.com/palantir/pkg/yamlpatchwith its yaml.v3 back end (palantir-yamlpatch) and with its goccy/go-yaml back end (palantir-yamlpatch-goccy), andgithub.com/evanphx/json-patch/v5on top of sigs.k8s.io/yaml (json-patch). The method line under each table gives the exact versions. - Machine and date: a full run on 2026-10-16, on a shared workstation, not a reserved machine. Other work ran on it at the same time, and the method line under each table records the host's load before the run, after it and at its highest during it. The cells run one after another, so a busy moment slows only the cells measured during it, ours or a competitor's; weigh a close result with that in mind. The method line also gives the CPU, the operating system and the Go version.
- Kit: revision
0abba1d. The kit's benchmark notes at that revision describe the method in full. This page summarises them.
What is measured
Tasks
Each task starts from a state that is built outside the clock, fresh for every iteration, with one exception. In unchanged emit, a write can take nanoseconds, so a library whose write of a used document allocates the same as a write of a fresh one shares one parsed document between iterations. oneyaml-go's write allocates nothing either way. The timed work is what a caller of the library does.
| Task | Timed work, as oneyaml-go does it | The answer is accepted when |
|---|---|---|
| typed load | Unmarshal into Go structs | the structs, written as JSON, equal the expected value |
| generic load | Unmarshal into any, or a Decoder for every document of a stream | the value, written as JSON, equals the expected value |
| dump | Marshal of the library's own value tree, which was read from the input | two independent reference parsers read the text back to the expected value |
| document parse | Parse into a Document that keeps comments, spacing and styles | the document holds the expected value and writes the input back byte for byte |
| unchanged emit | Document.Bytes on a document that was not edited | the bytes equal the input |
| edit script | a fixed list of replacements and removals with Document.Set and Document.Remove, then Document.Bytes | the bytes equal the expected bytes exactly: only the edited values change, each in its own style |
| patch (RFC 6902) | Parse, Document.Apply with a JSON Patch, then Document.Bytes | the bytes equal the expected bytes, and a second patch with a failing step leaves the text unchanged and returns an error |
The competitors do the same work through their own APIs. For the document tasks that means yaml.v3's and yaml/v4's Node and goccy/go-yaml's AST. In the Go harness, every library's patch is timed from text to text: read the file, apply the patch, and write the text back. A library that cannot do a task at all, such as a library with no lossless document, gets an "unsupported" cell, which is not a loss.
Workloads
The inputs are real files, vendored byte for byte with their source and licence: a GitHub Actions workflow, a Compose file, Helm chart values, two OpenAPI descriptions, a multi-document Kubernetes manifest and a Prometheus configuration. Generated inputs add typed records, Compose files with anchors and merge keys, Kubernetes streams, OpenAPI and Helm-style documents and a flat wide mapping at several sizes, and stress shapes: deep nesting, long scalars of every style, flow-heavy data, anchors and aliases, Unicode, and every scalar style and chomping mode. Two small reference cases edit a block scalar. The kit's notes at the run's revision list them under Workloads.
The expected values do not come from any of the libraries being measured. A generated input and its value come from the same generator. A real file's value is accepted only when two independent YAML 1.2 parsers agree on it. The expected bytes after an edit are exact text substitutions on the input.
The correctness check before timing
Each library's answer is checked before it is timed. A library gets a number only if its answer was right. A wrong answer is marked "differs" and a refused input is marked "rejects", and neither carries a time or a memory figure. The report of the run lists every such cell with the first difference the check found. See the correctness guard in the kit's notes at the run's revision.
Time and memory
The time is the ns/op that Go's testing.Benchmark reports, so it is a mean over the iterations of the benchmark. In a full run each cell runs for Go's standard benchtime of one second. The memory figures are the bytes and allocations per operation that testing.B reports with ReportAllocs. They count what was allocated during the timed work, not the peak size of the heap.
Reading the tables
Each row compares oneyaml-go with the strongest competitor in that row: the fastest for time, and the one that allocated least for memory. The ratio is our figure divided by theirs, so below 1.0× is better for oneyaml-go. A small gap counts as a tie (the kit's verdicts at the run's revision give the bands: under 5% for time and 2% for memory), and a loss is marked ▼.
A note in parentheses after a time names the answer a competitor was checked against when it is not the plain one. (merged) means it applied << merge keys while loading, a YAML 1.1 extension, and was checked against the merged value; YAML 1.2, and oneyaml-go by default, read << as an ordinary key. Such a cell did different work from ours and is still compared with. (value-only) is explained by the † below.
A † marks a cell that was not measured on exactly the task as specified, for example json-patch, which works on JSON and so cannot keep the text of the file. It is still compared with. In this Go run every patch cell carries a † for "text API", ours included: every library's patch is timed from the input text to the output text, and the palantir-yamlpatch cells passed the same byte-for-byte check as ours, so that mark does not mean less work. Only the "value-only" json-patch cells were judged more loosely. So on a patch cell in this run, a † says how the cell was measured, not that it did less work.
The README summary takes, for each task, the geometric mean over the real-world files that task has. It states the ratio the other way round, as how many times faster oneyaml-go was: the competitor's time divided by ours, so higher is better there. The tables below show every workload.
Unchanged emit
The unchanged-emit ratio is much further below 1.0× than that of any other row, and it does not measure how fast oneyaml-go renders YAML. A Document keeps the text it parsed. Bytes on a document that was not edited returns that text without copying it, so its cost does not grow with the size of the file. The competitors build their text again from a Node tree or an AST. The task measures what a caller pays to write back a file they did not change, which is a real use, but the gap comes from not rendering, not from rendering faster. For the time it takes to write YAML from values, see the dump row. For the time an edit takes, including writing the result, see the edit-script row.
Rows with no rival
A row says "no rival" when oneyaml-go gave a correct answer and no competitor did. There is no comparison in such a row, so it is not a win and it is not counted as one. In this run those rows are:
- document parse, unchanged emit and edit script on several real files and generated inputs: the competitors' documents did not write the input back byte for byte. They changed blank lines, indentation, quoting or escapes, or the layout of a flow collection. In the edit script on the
reference-bcase, goccy/go-yaml also wrote the edited block scalar as a plain scalar, so the text lost its style. - dump on the typed-records inputs: the text the competitors wrote did not read back to the expected value. For example, a float with a whole-number value came back as an integer, or a string of digits lost its quotes and came back as a number.
- patch on the GitHub Actions workflow: the competitors' output differed from the expected bytes, or the patch was refused.
The report of the run gives the first difference for each of these cells.
Reproducing the run
From a checkout of oneyaml-kit at the revision above, with KIT_ONEYAML_GO_SRC set to a checkout of this repository at v1.0.0:
bin/bench run --mode full --lang go bin/bench readme --results out --library oneyaml-go --readme <oneyaml-go>/README.md --docs <oneyaml-go>/docs --charts docs/img
The first command writes the result file, a report with every cell and charts under out/bench. The second writes the generated blocks of this page and of the README, and the README's charts. The blocks on this page were written by bin/bench readme at the run's kit revision, from that result file. A full run is a result wherever it runs, and its method line says what kind of machine it ran on and, for a local machine, the host's load. A quick run, or a run started with --smoke, is labelled a smoke result. It shows the layout and the rough picture but it is not a claim, and bin/bench readme refuses it unless you pass --allow-smoke, which labels every block.
Results
Time per operation
| Task | Workload | Input | oneyaml-go | yaml-v3 | yaml-v4 | yaml-v2 | sigs-yaml | goccy-go-yaml | palantir-yamlpatch | palantir-yamlpatch-goccy | json-patch | Ours vs strongest competitor |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| typed load | gha-workflow | 9.43 KiB | 121 µs | 301 µs | 310 µs | 234 µs | differs [13] | 935 µs | unsupported | unsupported | unsupported | 0.52× of yaml-v2 ▲ win |
| typed load | records-4k | 4.14 KiB | 104 µs | 259 µs | 251 µs | 196 µs | 376 µs | 619 µs | unsupported | unsupported | unsupported | 0.53× of yaml-v2 ▲ win |
| typed load | records-64k | 64.2 KiB | 1.44 ms | 5.11 ms | 4.89 ms | 3.31 ms | 5.95 ms | 10.3 ms | unsupported | unsupported | unsupported | 0.44× of yaml-v2 ▲ win |
| typed load | records-1m | 1 MiB | 23.7 ms | 69.5 ms | 70.2 ms | 55.9 ms | 93.7 ms | 166 ms | unsupported | unsupported | unsupported | 0.42× of yaml-v2 ▲ win |
| typed load | records-8m | 8 MiB | 155 ms | 507 ms | 487 ms | 395 ms | 666 ms | 1.4 s | unsupported | unsupported | unsupported | 0.39× of yaml-v2 ▲ win |
| generic load | compose-wordpress | 815 B | 7.06 µs | 27.3 µs | 28.1 µs | 21.3 µs | differs [16] | 40.7 µs | unsupported | unsupported | unsupported | 0.33× of yaml-v2 ▲ win |
| generic load | gha-workflow | 9.43 KiB | 105 µs | 334 µs | 371 µs | differs [18] | differs [13] | 747 µs | unsupported | unsupported | unsupported | 0.31× of yaml-v3 ▲ win |
| generic load | helm-ingress-nginx | 52.4 KiB | 168 µs | 988 µs | 942 µs | 555 µs | differs [16] | 1.54 ms | unsupported | unsupported | unsupported | 0.30× of yaml-v2 ▲ win |
| generic load | k8s-ingress-nginx-multi | 16 KiB | 263 µs | 682 µs | 636 µs | 565 µs | differs [15] | 1.13 ms | unsupported | unsupported | unsupported | 0.47× of yaml-v2 ▲ win |
| generic load | openapi-api-with-examples | 6.75 KiB | 44.5 µs | 146 µs | 150 µs | 126 µs | 182 µs | 252 µs | unsupported | unsupported | unsupported | 0.35× of yaml-v2 ▲ win |
| generic load | openapi-petstore | 5.34 KiB | 58.3 µs | 164 µs | 173 µs | 140 µs | 250 µs | 454 µs | unsupported | unsupported | unsupported | 0.42× of yaml-v2 ▲ win |
| generic load | prometheus-config | 1.1 KiB | 7.05 µs | 32.4 µs | 32.8 µs | 20.2 µs | 27.3 µs | 45 µs | unsupported | unsupported | unsupported | 0.35× of yaml-v2 ▲ win |
| generic load | reference-a | 51 B | 1.23 µs | 6.38 µs | 6.79 µs | 4.57 µs | differs [16] | 7.37 µs | unsupported | unsupported | unsupported | 0.27× of yaml-v2 ▲ win |
| generic load | reference-b | 51 B | 1.32 µs | 6.85 µs | 6.76 µs | 5.06 µs | differs [16] | 9.99 µs | unsupported | unsupported | unsupported | 0.26× of yaml-v2 ▲ win |
| generic load | records-4k | 4.14 KiB | 72.4 µs | 289 µs | 270 µs | 216 µs | differs [16] | 441 µs | unsupported | unsupported | unsupported | 0.34× of yaml-v2 ▲ win |
| generic load | records-64k | 64.2 KiB | 1.31 ms | 5.36 ms | 5.39 ms | 4.46 ms | differs [16] | 10.4 ms | unsupported | unsupported | unsupported | 0.29× of yaml-v2 ▲ win |
| generic load | records-1m | 1 MiB | 19.6 ms | 74.2 ms | 74.6 ms | 62.9 ms | differs [16] | 138 ms | unsupported | unsupported | unsupported | 0.31× of yaml-v2 ▲ win |
| generic load | records-8m | 8 MiB | 140 ms | 538 ms | 531 ms | 441 ms | differs [16] | 1.21 s | unsupported | unsupported | unsupported | 0.32× of yaml-v2 ▲ win |
| generic load | compose-merge-2k | 2.14 KiB | 57.4 µs | 178 µs (merged) | 180 µs (merged) | 140 µs (merged) | differs [16] | 280 µs (merged) | unsupported | unsupported | unsupported | 0.41× of yaml-v2 ▲ win |
| generic load | compose-merge-64k | 64.1 KiB | 1.65 ms | 5.01 ms (merged) | 5.51 ms (merged) | 4.18 ms (merged) | differs [16] | 10.4 ms (merged) | unsupported | unsupported | unsupported | 0.40× of yaml-v2 ▲ win |
| generic load | compose-merge-1m | 1 MiB | 24.4 ms | 105 ms (merged) | 112 ms (merged) | 53.6 ms (merged) | differs [16] | 166 ms (merged) | unsupported | unsupported | unsupported | 0.46× of yaml-v2 ▲ win |
| generic load | k8s-multi-16k | 16.4 KiB | 451 µs | 1.28 ms | 1.23 ms | 836 µs | differs [15] | 2.7 ms | unsupported | unsupported | unsupported | 0.54× of yaml-v2 ▲ win |
| generic load | k8s-multi-1m | 1 MiB | 22.8 ms | 57.4 ms | 62.8 ms | 47.3 ms | differs [15] | 138 ms | unsupported | unsupported | unsupported | 0.48× of yaml-v2 ▲ win |
| generic load | openapi-100k | 101 KiB | 1.79 ms | 4.92 ms | 5.99 ms | 4.26 ms | 7.2 ms | 12.7 ms | unsupported | unsupported | unsupported | 0.42× of yaml-v2 ▲ win |
| generic load | openapi-8m | 8 MiB | 113 ms | 722 ms | 733 ms | 283 ms | 457 ms | 1.12 s | unsupported | unsupported | unsupported | 0.40× of yaml-v2 ▲ win |
| generic load | helm-values-64k | 64 KiB | 775 µs | 3.35 ms | 3.07 ms | 1.75 ms | differs [16] | 6.84 ms | unsupported | unsupported | unsupported | 0.44× of yaml-v2 ▲ win |
| generic load | helm-values-1m | 1 MiB | 10.8 ms | 56.5 ms | 58.5 ms | 32.4 ms | differs [16] | 102 ms | unsupported | unsupported | unsupported | 0.33× of yaml-v2 ▲ win |
| generic load | deep-block | 5.23 KiB | 45 µs | 148 µs | 154 µs | 116 µs | differs [16] | 299 µs | unsupported | unsupported | unsupported | 0.39× of yaml-v2 ▲ win |
| generic load | deep-flow | 202 B | 16 µs | 94.5 µs | 91.8 µs | 84.4 µs | differs [16] | 113 µs | unsupported | unsupported | unsupported | 0.19× of yaml-v2 ▲ win |
| generic load | wide-map-64k | 64 KiB | 1.25 ms | 18.6 ms | 19.6 ms | 4.02 ms | differs [16] | 27.3 ms | unsupported | unsupported | unsupported | 0.31× of yaml-v2 ▲ win |
| generic load | wide-map-1m | 1 MiB | 16.6 ms | 3.63 s | 3.69 s | 51.2 ms | differs [16] | 1.98 s | unsupported | unsupported | unsupported | 0.32× of yaml-v2 ▲ win |
| generic load | long-scalars-256k | 261 KiB | 663 µs | 3.59 ms | 3.51 ms | 3.37 ms | 5.45 ms | 11.8 ms | unsupported | unsupported | unsupported | 0.20× of yaml-v2 ▲ win |
| generic load | flow-heavy-64k | 64 KiB | 2.39 ms | 8.05 ms | 8.11 ms | 6.3 ms | differs [16] | 17 ms | unsupported | unsupported | unsupported | 0.38× of yaml-v2 ▲ win |
| generic load | anchors-32k | 32 KiB | 2.92 ms | 6.08 ms | 6.37 ms | differs [19] | differs [16] | 6.62 ms | unsupported | unsupported | unsupported | 0.48× of yaml-v3 ▲ win |
| generic load | unicode-32k | 32 KiB | 272 µs | 995 µs | 950 µs | 896 µs | 1.24 ms | 2.11 ms | unsupported | unsupported | unsupported | 0.30× of yaml-v2 ▲ win |
| generic load | scalar-styles-32k | 32 KiB | 405 µs | 1.45 ms | 1.45 ms | 1.16 ms | 1.74 ms | 4.48 ms | unsupported | unsupported | unsupported | 0.35× of yaml-v2 ▲ win |
| dump | compose-wordpress | 815 B | 1.86 µs | 23.3 µs | 34.6 µs | 22.9 µs | 57.3 µs | 42 µs | unsupported | unsupported | unsupported | 0.08× of yaml-v2 ▲ win |
| dump | gha-workflow | 9.43 KiB | 29.5 µs | 332 µs | 306 µs | differs [18] | differs [13] | 680 µs | unsupported | unsupported | unsupported | 0.10× of yaml-v4 ▲ win |
| dump | helm-ingress-nginx | 52.4 KiB | 42.2 µs | 511 µs | 587 µs | 479 µs | 871 µs | 940 µs | unsupported | unsupported | unsupported | 0.09× of yaml-v2 ▲ win |
| dump | openapi-api-with-examples | 6.75 KiB | 12.7 µs | 192 µs | 202 µs | 159 µs | 323 µs | 324 µs | unsupported | unsupported | unsupported | 0.08× of yaml-v2 ▲ win |
| dump | openapi-petstore | 5.34 KiB | 19.6 µs | 193 µs | 194 µs | 188 µs | 413 µs | 391 µs | unsupported | unsupported | unsupported | 0.10× of yaml-v2 ▲ win |
| dump | prometheus-config | 1.1 KiB | 1.27 µs | 26.1 µs | 29.7 µs | 21.9 µs | 48.1 µs | 32.5 µs | unsupported | unsupported | unsupported | 0.06× of yaml-v2 ▲ win |
| dump | reference-a | 51 B | 222 ns | 3.55 µs | 4.71 µs | 2.85 µs | 9.28 µs | 7.51 µs | unsupported | unsupported | unsupported | 0.08× of yaml-v2 ▲ win |
| dump | reference-b | 51 B | 214 ns | 3.56 µs | 4.88 µs | 2.9 µs | 8.95 µs | 5.72 µs | unsupported | unsupported | unsupported | 0.07× of yaml-v2 ▲ win |
| dump | records-4k | 4.14 KiB | 19.4 µs | differs [22] | differs [24] | differs [20] | differs [17] | differs [3] | unsupported | unsupported | unsupported | no rival |
| dump | records-64k | 64.2 KiB | 319 µs | differs [22] | differs [24] | differs [20] | differs [17] | differs [3] | unsupported | unsupported | unsupported | no rival |
| dump | records-1m | 1 MiB | 6.89 ms | differs [22] | differs [24] | differs [20] | differs [17] | differs [3] | unsupported | unsupported | unsupported | no rival |
| dump | records-8m | 8 MiB | 52.9 ms | differs [22] | differs [24] | differs [20] | differs [17] | differs [3] | unsupported | unsupported | unsupported | no rival |
| dump | compose-merge-2k | 2.14 KiB | 16.9 µs | 220 µs (merged) | 250 µs (merged) | 190 µs (merged) | 395 µs (merged) | 467 µs (merged) | unsupported | unsupported | unsupported | 0.09× of yaml-v2 ▲ win |
| dump | compose-merge-64k | 64.1 KiB | 619 µs | 6.47 ms (merged) | 6.85 ms (merged) | 5.92 ms (merged) | 9.29 ms (merged) | 11.3 ms (merged) | unsupported | unsupported | unsupported | 0.10× of yaml-v2 ▲ win |
| dump | compose-merge-1m | 1 MiB | 14.2 ms | 137 ms (merged) | 132 ms (merged) | 114 ms (merged) | 175 ms (merged) | 201 ms (merged) | unsupported | unsupported | unsupported | 0.13× of yaml-v2 ▲ win |
| dump | openapi-100k | 101 KiB | 518 µs | 4.85 ms | 5.22 ms | 4.25 ms | 7.51 ms | 8.72 ms | unsupported | unsupported | unsupported | 0.12× of yaml-v2 ▲ win |
| dump | openapi-8m | 8 MiB | 57.9 ms | 655 ms | 745 ms | 556 ms | 867 ms | 888 ms | unsupported | unsupported | unsupported | 0.10× of yaml-v2 ▲ win |
| dump | helm-values-64k | 64 KiB | 192 µs | 2.11 ms | 2.33 ms | 2.04 ms | 3.58 ms | 4.17 ms | unsupported | unsupported | unsupported | 0.09× of yaml-v2 ▲ win |
| dump | helm-values-1m | 1 MiB | 3.24 ms | 40 ms | 45.4 ms | 36.5 ms | 59.4 ms | 71.6 ms | unsupported | unsupported | unsupported | 0.09× of yaml-v2 ▲ win |
| dump | deep-block | 5.23 KiB | 14.1 µs | 150 µs | 145 µs | 120 µs | 243 µs | 389 µs | unsupported | unsupported | unsupported | 0.12× of yaml-v2 ▲ win |
| dump | deep-flow | 202 B | 1.32 µs | 83 µs | 91.5 µs | 53.2 µs | 190 µs | 73.7 µs | unsupported | unsupported | unsupported | 0.02× of yaml-v2 ▲ win |
| dump | wide-map-64k | 64 KiB | 542 µs | 4.95 ms | 5.49 ms | 5 ms | 8.19 ms | 9.66 ms | unsupported | unsupported | unsupported | 0.11× of yaml-v3 ▲ win |
| dump | wide-map-1m | 1 MiB | 11.9 ms | 120 ms | 113 ms | 109 ms | 179 ms | 174 ms | unsupported | unsupported | unsupported | 0.11× of yaml-v2 ▲ win |
| dump | long-scalars-256k | 261 KiB | 704 µs | 2.94 ms | 2.93 ms | 2.88 ms | 6.19 ms | 1.09 ms | unsupported | unsupported | unsupported | 0.64× of goccy-go-yaml ▲ win |
| dump | flow-heavy-64k | 64 KiB | 347 µs | 6.04 ms | 6.9 ms | 5.24 ms | 10.8 ms | 11.3 ms | unsupported | unsupported | unsupported | 0.07× of yaml-v2 ▲ win |
| dump | anchors-32k | 32 KiB | 855 µs | 11.5 ms | 13.2 ms | differs [19] | differs [14] | 24.4 ms | unsupported | unsupported | unsupported | 0.07× of yaml-v3 ▲ win |
| dump | unicode-32k | 32 KiB | 57.3 µs | 832 µs | 934 µs | 715 µs | 1.28 ms | 1.32 ms | unsupported | unsupported | unsupported | 0.08× of yaml-v2 ▲ win |
| dump | scalar-styles-32k | 32 KiB | 108 µs | 1.39 ms | 1.6 ms | 1.31 ms | 2.12 ms | 3.45 ms | unsupported | unsupported | unsupported | 0.08× of yaml-v2 ▲ win |
| document parse | compose-wordpress | 815 B | 5.88 µs | differs [21] | differs [23] | unsupported | unsupported | differs [2] | unsupported | unsupported | unsupported | no rival |
| document parse | gha-workflow | 9.43 KiB | 63.8 µs | differs [21] | differs [23] | unsupported | unsupported | differs [2] | unsupported | unsupported | unsupported | no rival |
| document parse | helm-ingress-nginx | 52.4 KiB | 133 µs | 844 µs | differs [23] | unsupported | unsupported | 1.61 ms | unsupported | unsupported | unsupported | 0.16× of yaml-v3 ▲ win |
| document parse | k8s-ingress-nginx-multi | 16 KiB | 146 µs | differs [21] | 545 µs | unsupported | unsupported | 1.03 ms | unsupported | unsupported | unsupported | 0.27× of yaml-v4 ▲ win |
| document parse | openapi-api-with-examples | 6.75 KiB | 34 µs | differs [21] | differs [23] | unsupported | unsupported | differs [2] | unsupported | unsupported | unsupported | no rival |
| document parse | openapi-petstore | 5.34 KiB | 33.3 µs | 155 µs | differs [23] | unsupported | unsupported | 380 µs | unsupported | unsupported | unsupported | 0.21× of yaml-v3 ▲ win |
| document parse | prometheus-config | 1.1 KiB | 5.59 µs | differs [21] | differs [23] | unsupported | unsupported | differs [2] | unsupported | unsupported | unsupported | no rival |
| document parse | reference-a | 51 B | 1.48 µs | differs [21] | differs [23] | unsupported | unsupported | 8.22 µs | unsupported | unsupported | unsupported | 0.18× of goccy-go-yaml ▲ win |
| document parse | reference-b | 51 B | 1.55 µs | differs [21] | differs [23] | unsupported | unsupported | 7.99 µs | unsupported | unsupported | unsupported | 0.19× of goccy-go-yaml ▲ win |
| document parse | records-4k | 4.14 KiB | 50.9 µs | 248 µs | differs [23] | unsupported | unsupported | differs [5] | unsupported | unsupported | unsupported | 0.21× of yaml-v3 ▲ win |
| document parse | records-64k | 64.2 KiB | 719 µs | 3.74 ms | differs [23] | unsupported | unsupported | differs [5] | unsupported | unsupported | unsupported | 0.19× of yaml-v3 ▲ win |
| document parse | records-1m | 1 MiB | 10.8 ms | 52.3 ms | differs [23] | unsupported | unsupported | differs [5] | unsupported | unsupported | unsupported | 0.21× of yaml-v3 ▲ win |
| document parse | records-8m | 8 MiB | 88.3 ms | 400 ms | differs [23] | unsupported | unsupported | differs [5] | unsupported | unsupported | unsupported | 0.22× of yaml-v3 ▲ win |
| document parse | compose-merge-2k | 2.14 KiB | 25.6 µs | differs [21] | 105 µs (merged) | unsupported | unsupported | 236 µs (merged) | unsupported | unsupported | unsupported | 0.24× of yaml-v4 ▲ win |
| document parse | compose-merge-64k | 64.1 KiB | 665 µs | differs [21] | 3 ms (merged) | unsupported | unsupported | 7.58 ms (merged) | unsupported | unsupported | unsupported | 0.22× of yaml-v4 ▲ win |
| document parse | compose-merge-1m | 1 MiB | 9.28 ms | differs [21] | 38.4 ms (merged) | unsupported | unsupported | 131 ms (merged) | unsupported | unsupported | unsupported | 0.24× of yaml-v4 ▲ win |
| document parse | k8s-multi-16k | 16.4 KiB | 216 µs | differs [21] | differs [23] | unsupported | unsupported | 2.26 ms | unsupported | unsupported | unsupported | 0.10× of goccy-go-yaml ▲ win |
| document parse | k8s-multi-1m | 1 MiB | 12 ms | differs [21] | differs [23] | unsupported | unsupported | 116 ms | unsupported | unsupported | unsupported | 0.10× of goccy-go-yaml ▲ win |
| document parse | openapi-100k | 101 KiB | 970 µs | 4.26 ms | differs [23] | unsupported | unsupported | 9.24 ms | unsupported | unsupported | unsupported | 0.23× of yaml-v3 ▲ win |
| document parse | openapi-8m | 8 MiB | 72.3 ms | 262 ms | differs [23] | unsupported | unsupported | 851 ms | unsupported | unsupported | unsupported | 0.28× of yaml-v3 ▲ win |
| document parse | helm-values-64k | 64 KiB | 475 µs | differs [21] | differs [23] | unsupported | unsupported | differs [2] | unsupported | unsupported | unsupported | no rival |
| document parse | helm-values-1m | 1 MiB | 6.76 ms | differs [21] | differs [23] | unsupported | unsupported | differs [2] | unsupported | unsupported | unsupported | no rival |
| document parse | deep-block | 5.23 KiB | 29.9 µs | differs [21] | differs [23] | unsupported | unsupported | 202 µs | unsupported | unsupported | unsupported | 0.15× of goccy-go-yaml ▲ win |
| document parse | deep-flow | 202 B | 21 µs | 68.9 µs | differs [23] | unsupported | unsupported | 88.3 µs | unsupported | unsupported | unsupported | 0.30× of yaml-v3 ▲ win |
| document parse | wide-map-64k | 64 KiB | 650 µs | 3.69 ms | 3.33 ms | unsupported | unsupported | 24.1 ms | unsupported | unsupported | unsupported | 0.20× of yaml-v4 ▲ win |
| document parse | wide-map-1m | 1 MiB | 8.67 ms | 48.8 ms | 44.8 ms | unsupported | unsupported | 1.9 s | unsupported | unsupported | unsupported | 0.19× of yaml-v4 ▲ win |
| document parse | long-scalars-256k | 261 KiB | 401 µs | differs [21] | differs [23] | unsupported | unsupported | 11.4 ms | unsupported | unsupported | unsupported | 0.04× of goccy-go-yaml ▲ win |
| document parse | flow-heavy-64k | 64 KiB | 1.38 ms | 5.44 ms | 5.72 ms | unsupported | unsupported | 14.5 ms | unsupported | unsupported | unsupported | 0.25× of yaml-v3 ▲ win |
| document parse | anchors-32k | 32 KiB | 445 µs | 1.87 ms | differs [23] | unsupported | unsupported | 6.15 ms | unsupported | unsupported | unsupported | 0.24× of yaml-v3 ▲ win |
| document parse | unicode-32k | 32 KiB | 190 µs | differs [21] | differs [23] | unsupported | unsupported | differs [4] | unsupported | unsupported | unsupported | no rival |
| document parse | scalar-styles-32k | 32 KiB | 244 µs | differs [21] | differs [23] | unsupported | unsupported | 4.01 ms | unsupported | unsupported | unsupported | 0.06× of goccy-go-yaml ▲ win |
| unchanged emit | compose-wordpress | 815 B | 4.24 ns | differs [21] | differs [23] | unsupported | unsupported | differs [2] | unsupported | unsupported | unsupported | no rival |
| unchanged emit | gha-workflow | 9.43 KiB | 4.47 ns | differs [21] | differs [23] | unsupported | unsupported | differs [2] | unsupported | unsupported | unsupported | no rival |
| unchanged emit | helm-ingress-nginx | 52.4 KiB | 4.32 ns | 511 µs | differs [23] | unsupported | unsupported | 412 µs | unsupported | unsupported | unsupported | <0.01× of goccy-go-yaml ▲ win |
| unchanged emit | k8s-ingress-nginx-multi | 16 KiB | 4.3 ns | differs [21] | 617 µs | unsupported | unsupported | 263 µs | unsupported | unsupported | unsupported | <0.01× of goccy-go-yaml ▲ win |
| unchanged emit | openapi-api-with-examples | 6.75 KiB | 4.31 ns | differs [21] | differs [23] | unsupported | unsupported | differs [2] | unsupported | unsupported | unsupported | no rival |
| unchanged emit | openapi-petstore | 5.34 KiB | 4.32 ns | 151 µs | differs [23] | unsupported | unsupported | 59.4 µs | unsupported | unsupported | unsupported | <0.01× of goccy-go-yaml ▲ win |
| unchanged emit | prometheus-config | 1.1 KiB | 4.36 ns | differs [21] | differs [23] | unsupported | unsupported | differs [2] | unsupported | unsupported | unsupported | no rival |
| unchanged emit | reference-a | 51 B | 4.64 ns | differs [21] | differs [23] | unsupported | unsupported | 1.12 µs | unsupported | unsupported | unsupported | <0.01× of goccy-go-yaml ▲ win |
| unchanged emit | reference-b | 51 B | 4.34 ns | differs [21] | differs [23] | unsupported | unsupported | 1.13 µs | unsupported | unsupported | unsupported | <0.01× of goccy-go-yaml ▲ win |
| unchanged emit | records-4k | 4.14 KiB | 4.4 ns | 255 µs | differs [23] | unsupported | unsupported | differs [5] | unsupported | unsupported | unsupported | <0.01× of yaml-v3 ▲ win |
| unchanged emit | records-64k | 64.2 KiB | 4.42 ns | 4.04 ms | differs [23] | unsupported | unsupported | differs [5] | unsupported | unsupported | unsupported | <0.01× of yaml-v3 ▲ win |
| unchanged emit | records-1m | 1 MiB | 4.31 ns | 55.6 ms | differs [23] | unsupported | unsupported | differs [5] | unsupported | unsupported | unsupported | <0.01× of yaml-v3 ▲ win |
| unchanged emit | records-8m | 8 MiB | 4.31 ns | 594 ms | differs [23] | unsupported | unsupported | differs [5] | unsupported | unsupported | unsupported | <0.01× of yaml-v3 ▲ win |
| unchanged emit | compose-merge-2k | 2.14 KiB | 4.44 ns | differs [21] | 93 µs | unsupported | unsupported | 33.6 µs | unsupported | unsupported | unsupported | <0.01× of goccy-go-yaml ▲ win |
| unchanged emit | compose-merge-64k | 64.1 KiB | 4.64 ns | differs [21] | 2.77 ms | unsupported | unsupported | 785 µs | unsupported | unsupported | unsupported | <0.01× of goccy-go-yaml ▲ win |
| unchanged emit | compose-merge-1m | 1 MiB | 4.38 ns | differs [21] | 51.3 ms | unsupported | unsupported | 16.2 ms | unsupported | unsupported | unsupported | <0.01× of goccy-go-yaml ▲ win |
| unchanged emit | k8s-multi-16k | 16.4 KiB | 4.42 ns | differs [21] | differs [23] | unsupported | unsupported | 389 µs | unsupported | unsupported | unsupported | <0.01× of goccy-go-yaml ▲ win |
| unchanged emit | k8s-multi-1m | 1 MiB | 4.66 ns | differs [21] | differs [23] | unsupported | unsupported | 20.5 ms | unsupported | unsupported | unsupported | <0.01× of goccy-go-yaml ▲ win |
| unchanged emit | openapi-100k | 101 KiB | 4.54 ns | 5.04 ms | differs [23] | unsupported | unsupported | 1.68 ms | unsupported | unsupported | unsupported | <0.01× of goccy-go-yaml ▲ win |
| unchanged emit | openapi-8m | 8 MiB | 4.3 ns | 600 ms | differs [23] | unsupported | unsupported | 155 ms | unsupported | unsupported | unsupported | <0.01× of goccy-go-yaml ▲ win |
| unchanged emit | helm-values-64k | 64 KiB | 4.48 ns | differs [21] | differs [23] | unsupported | unsupported | differs [2] | unsupported | unsupported | unsupported | no rival |
| unchanged emit | helm-values-1m | 1 MiB | 4.51 ns | differs [21] | differs [23] | unsupported | unsupported | differs [2] | unsupported | unsupported | unsupported | no rival |
| unchanged emit | deep-block | 5.23 KiB | 4.51 ns | differs [21] | differs [23] | unsupported | unsupported | 139 µs | unsupported | unsupported | unsupported | <0.01× of goccy-go-yaml ▲ win |
| unchanged emit | deep-flow | 202 B | 4.65 ns | 54.5 µs | differs [23] | unsupported | unsupported | 12.1 µs | unsupported | unsupported | unsupported | <0.01× of goccy-go-yaml ▲ win |
| unchanged emit | wide-map-64k | 64 KiB | 4.63 ns | 4.35 ms | 2.81 ms | unsupported | unsupported | 766 µs | unsupported | unsupported | unsupported | <0.01× of goccy-go-yaml ▲ win |
| unchanged emit | wide-map-1m | 1 MiB | 4.44 ns | 49.9 ms | 49.2 ms | unsupported | unsupported | 10 ms | unsupported | unsupported | unsupported | <0.01× of goccy-go-yaml ▲ win |
| unchanged emit | long-scalars-256k | 261 KiB | 4.6 ns | differs [21] | differs [23] | unsupported | unsupported | 233 µs | unsupported | unsupported | unsupported | <0.01× of goccy-go-yaml ▲ win |
| unchanged emit | flow-heavy-64k | 64 KiB | 4.69 ns | 9.21 ms | 5.33 ms | unsupported | unsupported | 1.63 ms | unsupported | unsupported | unsupported | <0.01× of goccy-go-yaml ▲ win |
| unchanged emit | anchors-32k | 32 KiB | 4.69 ns | 1.68 ms | differs [23] | unsupported | unsupported | 905 µs | unsupported | unsupported | unsupported | <0.01× of goccy-go-yaml ▲ win |
| unchanged emit | unicode-32k | 32 KiB | 4.61 ns | differs [21] | differs [23] | unsupported | unsupported | differs [4] | unsupported | unsupported | unsupported | no rival |
| unchanged emit | scalar-styles-32k | 32 KiB | 4.61 ns | differs [21] | differs [23] | unsupported | unsupported | 771 µs | unsupported | unsupported | unsupported | <0.01× of goccy-go-yaml ▲ win |
| edit script | compose-wordpress | 815 B | 8.68 µs | differs [21] | differs [23] | unsupported | unsupported | differs [2] | unsupported | unsupported | unsupported | no rival |
| edit script | gha-workflow | 9.43 KiB | 10.5 µs | differs [21] | differs [23] | unsupported | unsupported | differs [2] | unsupported | unsupported | unsupported | no rival |
| edit script | helm-ingress-nginx | 52.4 KiB | 11.3 µs | 570 µs | differs [23] | unsupported | unsupported | 580 µs | unsupported | unsupported | unsupported | 0.02× of yaml-v3 ▲ win |
| edit script | openapi-api-with-examples | 6.75 KiB | 1.98 µs | differs [21] | differs [23] | unsupported | unsupported | differs [2] | unsupported | unsupported | unsupported | no rival |
| edit script | openapi-petstore | 5.34 KiB | 16.6 µs | 141 µs | differs [23] | unsupported | unsupported | differs [2] | unsupported | unsupported | unsupported | 0.12× of yaml-v3 ▲ win |
| edit script | prometheus-config | 1.1 KiB | 1.76 µs | differs [21] | differs [23] | unsupported | unsupported | differs [2] | unsupported | unsupported | unsupported | no rival |
| edit script | reference-a | 51 B | 2.7 µs | differs [21] | differs [23] | unsupported | unsupported | 7.1 µs | unsupported | unsupported | unsupported | 0.38× of goccy-go-yaml ▲ win |
| edit script | reference-b | 51 B | 2.23 µs | differs [21] | differs [23] | unsupported | unsupported | differs [1] | unsupported | unsupported | unsupported | no rival |
| edit script | records-4k | 4.14 KiB | 7.49 µs | 235 µs | differs [23] | unsupported | unsupported | differs [5] | unsupported | unsupported | unsupported | 0.03× of yaml-v3 ▲ win |
| edit script | records-64k | 64.2 KiB | 36.3 µs | 3.4 ms | differs [23] | unsupported | unsupported | differs [5] | unsupported | unsupported | unsupported | 0.01× of yaml-v3 ▲ win |
| edit script | records-1m | 1 MiB | 701 µs | 61.5 ms | differs [23] | unsupported | unsupported | differs [5] | unsupported | unsupported | unsupported | 0.01× of yaml-v3 ▲ win |
| edit script | records-8m | 8 MiB | 6.35 ms | 643 ms | differs [23] | unsupported | unsupported | differs [5] | unsupported | unsupported | unsupported | <0.01× of yaml-v3 ▲ win |
| edit script | compose-merge-2k | 2.14 KiB | 6.93 µs | differs [21] | 100 µs | unsupported | unsupported | 46.3 µs | unsupported | unsupported | unsupported | 0.15× of goccy-go-yaml ▲ win |
| edit script | compose-merge-64k | 64.1 KiB | 40.6 µs | differs [21] | 2.71 ms | unsupported | unsupported | 1.26 ms | unsupported | unsupported | unsupported | 0.03× of goccy-go-yaml ▲ win |
| edit script | compose-merge-1m | 1 MiB | 605 µs | differs [21] | 50.6 ms | unsupported | unsupported | 17.4 ms | unsupported | unsupported | unsupported | 0.03× of goccy-go-yaml ▲ win |
| edit script | openapi-100k | 101 KiB | 51.4 µs | 3.86 ms | differs [23] | unsupported | unsupported | 2.02 ms | unsupported | unsupported | unsupported | 0.03× of goccy-go-yaml ▲ win |
| edit script | openapi-8m | 8 MiB | 5 ms | 547 ms | differs [23] | unsupported | unsupported | 180 ms | unsupported | unsupported | unsupported | 0.03× of goccy-go-yaml ▲ win |
| edit script | helm-values-64k | 64 KiB | 19.9 µs | differs [21] | differs [23] | unsupported | unsupported | differs [2] | unsupported | unsupported | unsupported | no rival |
| edit script | helm-values-1m | 1 MiB | 317 µs | differs [21] | differs [23] | unsupported | unsupported | differs [2] | unsupported | unsupported | unsupported | no rival |
| edit script | wide-map-64k | 64 KiB | 57.3 µs | 2.99 ms | 2.83 ms | unsupported | unsupported | 827 µs | unsupported | unsupported | unsupported | 0.07× of goccy-go-yaml ▲ win |
| edit script | wide-map-1m | 1 MiB | 962 µs | 51.2 ms | 48.1 ms | unsupported | unsupported | 12.4 ms | unsupported | unsupported | unsupported | 0.08× of goccy-go-yaml ▲ win |
| patch (RFC 6902) | compose-wordpress | 815 B | 15.7 µs † | unsupported | unsupported | unsupported | unsupported | unsupported | differs [9] | differs [11] | 92.1 µs (value-only) † | 0.17× of json-patch † (text API, value-only) ▲ win |
| patch (RFC 6902) | gha-workflow | 9.43 KiB | 77.2 µs † | unsupported | unsupported | unsupported | unsupported | unsupported | differs [9] | differs [11] | rejects [6] | no rival |
| patch (RFC 6902) | reference-a | 51 B | 4.29 µs † | unsupported | unsupported | unsupported | unsupported | unsupported | differs [9] | 12.4 µs † | 17.8 µs (value-only) † | 0.35× of palantir-yamlpatch-goccy † (text API) ▲ win |
| patch (RFC 6902) | reference-b | 51 B | 3.45 µs † | unsupported | unsupported | unsupported | unsupported | unsupported | differs [8] | differs [10] | 16.3 µs (value-only) † | 0.21× of json-patch † (text API, value-only) ▲ win |
| patch (RFC 6902) | records-4k | 4.14 KiB | 58.9 µs † | unsupported | unsupported | unsupported | unsupported | unsupported | 582 µs † | differs [12] | differs [7] | 0.10× of palantir-yamlpatch † (text API) ▲ win |
| patch (RFC 6902) | records-64k | 64.2 KiB | 820 µs † | unsupported | unsupported | unsupported | unsupported | unsupported | 9.05 ms † | differs [12] | differs [7] | 0.09× of palantir-yamlpatch † (text API) ▲ win |
| patch (RFC 6902) | records-1m | 1 MiB | 12.7 ms † | unsupported | unsupported | unsupported | unsupported | unsupported | 131 ms † | differs [12] | differs [7] | 0.10× of palantir-yamlpatch † (text API) ▲ win |
| patch (RFC 6902) | records-8m | 8 MiB | 96 ms † | unsupported | unsupported | unsupported | unsupported | unsupported | 870 ms † | differs [12] | differs [7] | 0.11× of palantir-yamlpatch † (text API) ▲ win |
Allocated bytes per operation (B/op)
| Task | Workload | Input | oneyaml-go | yaml-v3 | yaml-v4 | yaml-v2 | sigs-yaml | goccy-go-yaml | palantir-yamlpatch | palantir-yamlpatch-goccy | json-patch | Ours vs strongest competitor |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| typed load | gha-workflow | 9.43 KiB | 81.3 KiB in 1,238 allocs | 195 KiB in 3,908 allocs | 196 KiB in 4,027 allocs | 144 KiB in 3,242 allocs | differs [13] | 796 KiB in 14,521 allocs | unsupported | unsupported | unsupported | 0.57× of yaml-v2 ▲ win |
| typed load | records-4k | 4.14 KiB | 58.8 KiB in 788 allocs | 150 KiB in 3,360 allocs | 151 KiB in 3,436 allocs | 114 KiB in 2,715 allocs | 209 KiB in 4,615 allocs | 585 KiB in 11,573 allocs | unsupported | unsupported | unsupported | 0.52× of yaml-v2 ▲ win |
| typed load | records-64k | 64.2 KiB | 842 KiB in 11,916 allocs | 2.15 MiB in 51,238 allocs | 2.17 MiB in 52,358 allocs | 1.64 MiB in 41,182 allocs | 3.02 MiB in 70,076 allocs | 9.38 MiB in 177,038 allocs | unsupported | unsupported | unsupported | 0.50× of yaml-v2 ▲ win |
| typed load | records-1m | 1 MiB | 13.8 MiB in 187,204 allocs | 33.7 MiB in 812,226 allocs | 34 MiB in 829,755 allocs | 25.6 MiB in 650,361 allocs | 48.5 MiB in 1,103,395 allocs | 147 MiB in 2,790,106 allocs | unsupported | unsupported | unsupported | 0.54× of yaml-v2 ▲ win |
| typed load | records-8m | 8 MiB | 116 MiB in 1,479,205 allocs | 267 MiB in 6,422,920 allocs | 269 MiB in 6,561,501 allocs | 203 MiB in 5,141,571 allocs | 391 MiB in 8,722,305 allocs | 1.17 GiB in 22,057,681 allocs | unsupported | unsupported | unsupported | 0.57× of yaml-v2 ▲ win |
| generic load | compose-wordpress | 815 B | 2.69 KiB in 55 allocs | 20.9 KiB in 341 allocs | 21.2 KiB in 354 allocs | 15.8 KiB in 295 allocs | differs [16] | 50.8 KiB in 931 allocs | unsupported | unsupported | unsupported | 0.17× of yaml-v2 ▲ win |
| generic load | gha-workflow | 9.43 KiB | 45 KiB in 645 allocs | 216 KiB in 4,249 allocs | 218 KiB in 4,368 allocs | differs [18] | differs [13] | 750 KiB in 12,692 allocs | unsupported | unsupported | unsupported | 0.21× of yaml-v3 ▲ win |
| generic load | helm-ingress-nginx | 52.4 KiB | 41.4 KiB in 419 allocs | 559 KiB in 6,234 allocs | 562 KiB in 6,422 allocs | 218 KiB in 4,234 allocs | differs [16] | 1.7 MiB in 24,155 allocs | unsupported | unsupported | unsupported | 0.19× of yaml-v2 ▲ win |
| generic load | k8s-ingress-nginx-multi | 16 KiB | 202 KiB in 1,380 allocs | 403 KiB in 8,670 allocs | 403 KiB in 8,791 allocs | 335 KiB in 7,603 allocs | differs [15] | 1.37 MiB in 25,154 allocs | unsupported | unsupported | unsupported | 0.60× of yaml-v2 ▲ win |
| generic load | openapi-api-with-examples | 6.75 KiB | 20.9 KiB in 259 allocs | 88 KiB in 1,475 allocs | 125 KiB in 1,540 allocs | 75.4 KiB in 1,371 allocs | 133 KiB in 2,158 allocs | 349 KiB in 5,219 allocs | unsupported | unsupported | unsupported | 0.28× of yaml-v2 ▲ win |
| generic load | openapi-petstore | 5.34 KiB | 28.7 KiB in 313 allocs | 120 KiB in 2,123 allocs | 122 KiB in 2,208 allocs | 102 KiB in 1,842 allocs | 189 KiB in 2,858 allocs | 453 KiB in 7,441 allocs | unsupported | unsupported | unsupported | 0.28× of yaml-v2 ▲ win |
| generic load | prometheus-config | 1.1 KiB | 3.06 KiB in 39 allocs | 27.6 KiB in 319 allocs | 27.8 KiB in 334 allocs | 16 KiB in 240 allocs | 24.6 KiB in 369 allocs | 51.3 KiB in 825 allocs | unsupported | unsupported | unsupported | 0.19× of yaml-v2 ▲ win |
| generic load | reference-a | 51 B | 481 B in 7 allocs | 8.75 KiB in 74 allocs | 8.85 KiB in 78 allocs | 6.2 KiB in 61 allocs | differs [16] | 9.42 KiB in 213 allocs | unsupported | unsupported | unsupported | 0.08× of yaml-v2 ▲ win |
| generic load | reference-b | 51 B | 481 B in 7 allocs | 8.75 KiB in 74 allocs | 8.85 KiB in 78 allocs | 6.2 KiB in 61 allocs | differs [16] | 9.42 KiB in 213 allocs | unsupported | unsupported | unsupported | 0.08× of yaml-v2 ▲ win |
| generic load | records-4k | 4.14 KiB | 22.8 KiB in 439 allocs | 170 KiB in 3,896 allocs | 171 KiB in 3,972 allocs | 134 KiB in 3,251 allocs | differs [16] | 558 KiB in 10,787 allocs | unsupported | unsupported | unsupported | 0.17× of yaml-v2 ▲ win |
| generic load | records-64k | 64.2 KiB | 351 KiB in 6,629 allocs | 2.46 MiB in 59,521 allocs | 2.48 MiB in 60,641 allocs | 1.95 MiB in 49,465 allocs | differs [16] | 8.96 MiB in 164,851 allocs | unsupported | unsupported | unsupported | 0.18× of yaml-v2 ▲ win |
| generic load | records-1m | 1 MiB | 5.42 MiB in 107,985 allocs | 38.6 MiB in 942,220 allocs | 38.9 MiB in 959,750 allocs | 30.6 MiB in 780,356 allocs | differs [16] | 141 MiB in 2,598,696 allocs | unsupported | unsupported | unsupported | 0.18× of yaml-v2 ▲ win |
| generic load | records-8m | 8 MiB | 42.8 MiB in 854,968 allocs | 306 MiB in 7,450,690 allocs | 308 MiB in 7,589,271 allocs | 242 MiB in 6,169,342 allocs | differs [16] | 1.12 GiB in 20,544,552 allocs | unsupported | unsupported | unsupported | 0.18× of yaml-v2 ▲ win |
| generic load | compose-merge-2k | 2.14 KiB | 28 KiB in 426 allocs | 99.6 KiB in 2,154 allocs | 100 KiB in 2,206 allocs | 76.7 KiB in 1,768 allocs | differs [16] | 303 KiB in 5,763 allocs | unsupported | unsupported | unsupported | 0.37× of yaml-v2 ▲ win |
| generic load | compose-merge-64k | 64.1 KiB | 826 KiB in 12,559 allocs | 2.67 MiB in 62,157 allocs | 2.69 MiB in 63,557 allocs | 2.04 MiB in 50,650 allocs | differs [16] | 9.32 MiB in 164,901 allocs | unsupported | unsupported | unsupported | 0.40× of yaml-v2 ▲ win |
| generic load | compose-merge-1m | 1 MiB | 12.7 MiB in 200,789 allocs | 41.5 MiB in 965,903 allocs | 41.8 MiB in 987,612 allocs | 31.7 MiB in 786,856 allocs | differs [16] | 266 MiB in 2,561,566 allocs | unsupported | unsupported | unsupported | 0.40× of yaml-v2 ▲ win |
| generic load | k8s-multi-16k | 16.4 KiB | 305 KiB in 2,281 allocs | 704 KiB in 14,216 allocs | 703 KiB in 14,634 allocs | 576 KiB in 12,387 allocs | differs [15] | 2.36 MiB in 41,912 allocs | unsupported | unsupported | unsupported | 0.53× of yaml-v2 ▲ win |
| generic load | k8s-multi-1m | 1 MiB | 10.8 MiB in 139,019 allocs | 41.6 MiB in 869,070 allocs | 41.6 MiB in 894,808 allocs | 34.2 MiB in 757,097 allocs | differs [15] | 210 MiB in 2,566,830 allocs | unsupported | unsupported | unsupported | 0.32× of yaml-v2 ▲ win |
| generic load | openapi-100k | 101 KiB | 801 KiB in 9,676 allocs | 3.03 MiB in 61,776 allocs | 3.07 MiB in 64,197 allocs | 2.47 MiB in 52,998 allocs | 4.93 MiB in 83,621 allocs | 11.5 MiB in 183,059 allocs | unsupported | unsupported | unsupported | 0.32× of yaml-v2 ▲ win |
| generic load | openapi-8m | 8 MiB | 63.1 MiB in 828,253 allocs | 243 MiB in 4,958,983 allocs | 246 MiB in 5,153,246 allocs | 198 MiB in 4,253,511 allocs | 388 MiB in 6,707,707 allocs | 1.74 GiB in 14,714,040 allocs | unsupported | unsupported | unsupported | 0.32× of yaml-v2 ▲ win |
| generic load | helm-values-64k | 64 KiB | 235 KiB in 2,658 allocs | 1.94 MiB in 29,222 allocs | 1.95 MiB in 30,172 allocs | 1.05 MiB in 22,957 allocs | differs [16] | 5.87 MiB in 96,855 allocs | unsupported | unsupported | unsupported | 0.22× of yaml-v2 ▲ win |
| generic load | helm-values-1m | 1 MiB | 3.65 MiB in 44,988 allocs | 32.6 MiB in 461,687 allocs | 32.9 MiB in 476,677 allocs | 16.6 MiB in 362,749 allocs | differs [16] | 131 MiB in 1,532,043 allocs | unsupported | unsupported | unsupported | 0.22× of yaml-v2 ▲ win |
| generic load | deep-block | 5.23 KiB | 33.3 KiB in 205 allocs | 133 KiB in 1,165 allocs | 134 KiB in 1,269 allocs | 120 KiB in 963 allocs | differs [16] | 285 KiB in 3,384 allocs | unsupported | unsupported | unsupported | 0.28× of yaml-v2 ▲ win |
| generic load | deep-flow | 202 B | 4.03 KiB in 203 allocs | 146 KiB in 862 allocs | 145 KiB in 957 allocs | 141 KiB in 862 allocs | differs [16] | 126 KiB in 2,364 allocs | unsupported | unsupported | unsupported | 0.03× of goccy-go-yaml ▲ win |
| generic load | wide-map-64k | 64 KiB | 403 KiB in 7,429 allocs | 2.73 MiB in 51,538 allocs | 2.74 MiB in 51,542 allocs | 2.25 MiB in 43,507 allocs | differs [16] | 64.4 MiB in 156,570 allocs | unsupported | unsupported | unsupported | 0.17× of yaml-v2 ▲ win |
| generic load | wide-map-1m | 1 MiB | 4.04 MiB in 108,125 allocs | 37.4 MiB in 747,437 allocs | 37.4 MiB in 747,432 allocs | 30.3 MiB in 630,438 allocs | differs [16] | 11.2 GiB in 2,269,268 allocs | unsupported | unsupported | unsupported | 0.13× of yaml-v2 ▲ win |
| generic load | long-scalars-256k | 261 KiB | 267 KiB in 15 allocs | 2.19 MiB in 26,140 allocs | 2.19 MiB in 26,144 allocs | 2.19 MiB in 26,132 allocs | 4.74 MiB in 26,212 allocs | 10.2 MiB in 127,457 allocs | unsupported | unsupported | unsupported | 0.12× of yaml-v2 ▲ win |
| generic load | flow-heavy-64k | 64 KiB | 562 KiB in 13,496 allocs | 3.84 MiB in 90,055 allocs | 3.88 MiB in 93,319 allocs | 3.06 MiB in 79,825 allocs | differs [16] | 17 MiB in 294,329 allocs | unsupported | unsupported | unsupported | 0.18× of yaml-v2 ▲ win |
| generic load | anchors-32k | 32 KiB | 1.87 MiB in 21,130 allocs | 3.54 MiB in 79,510 allocs | 3.55 MiB in 80,153 allocs | differs [19] | differs [16] | 8.41 MiB in 135,861 allocs | unsupported | unsupported | unsupported | 0.53× of yaml-v3 ▲ win |
| generic load | unicode-32k | 32 KiB | 71.9 KiB in 2,905 allocs | 491 KiB in 11,644 allocs | 491 KiB in 11,648 allocs | 450 KiB in 11,079 allocs | 685 KiB in 14,012 allocs | 1.92 MiB in 35,519 allocs | unsupported | unsupported | unsupported | 0.16× of yaml-v2 ▲ win |
| generic load | scalar-styles-32k | 32 KiB | 92.3 KiB in 2,661 allocs | 715 KiB in 15,981 allocs | 718 KiB in 16,151 allocs | 575 KiB in 14,486 allocs | 955 KiB in 21,822 allocs | 3.71 MiB in 71,476 allocs | unsupported | unsupported | unsupported | 0.16× of yaml-v2 ▲ win |
| dump | compose-wordpress | 815 B | 713 B in 1 allocs | 39.7 KiB in 135 allocs | 46.9 KiB in 197 allocs | 27.4 KiB in 135 allocs | 87.4 KiB in 449 allocs | 44.3 KiB in 1,123 allocs | unsupported | unsupported | unsupported | 0.03× of yaml-v2 ▲ win |
| dump | gha-workflow | 9.43 KiB | 9.41 KiB in 1 allocs | 635 KiB in 1,732 allocs | 701 KiB in 2,431 allocs | differs [18] | differs [13] | 648 KiB in 16,318 allocs | unsupported | unsupported | unsupported | 0.01× of yaml-v3 ▲ win |
| dump | helm-ingress-nginx | 52.4 KiB | 9.43 KiB in 1 allocs | 1.01e+03 KiB in 2,189 allocs | 1.11 MiB in 3,122 allocs | 667 KiB in 2,188 allocs | 1.01e+03 KiB in 7,136 allocs | 778 KiB in 20,821 allocs | unsupported | unsupported | unsupported | 0.01× of yaml-v2 ▲ win |
| dump | openapi-api-with-examples | 6.75 KiB | 4.83 KiB in 1 allocs | 344 KiB in 720 allocs | 379 KiB in 1,024 allocs | 221 KiB in 719 allocs | 392 KiB in 2,321 allocs | 293 KiB in 6,124 allocs | unsupported | unsupported | unsupported | 0.02× of yaml-v2 ▲ win |
| dump | openapi-petstore | 5.34 KiB | 6.11 KiB in 1 allocs | 349 KiB in 926 allocs | 391 KiB in 1,320 allocs | 233 KiB in 926 allocs | 443 KiB in 3,289 allocs | 355 KiB in 8,091 allocs | unsupported | unsupported | unsupported | 0.03× of yaml-v2 ▲ win |
| dump | prometheus-config | 1.1 KiB | 360 B in 1 allocs | 37.2 KiB in 117 allocs | 43 KiB in 173 allocs | 25.3 KiB in 117 allocs | 83.1 KiB in 390 allocs | 30.7 KiB in 854 allocs | unsupported | unsupported | unsupported | 0.01× of yaml-v2 ▲ win |
| dump | reference-a | 51 B | 49 B in 1 allocs | 6.84 KiB in 32 allocs | 7.82 KiB in 47 allocs | 4.77 KiB in 32 allocs | 15.2 KiB in 101 allocs | 5.73 KiB in 175 allocs | unsupported | unsupported | unsupported | 0.01× of yaml-v2 ▲ win |
| dump | reference-b | 51 B | 49 B in 1 allocs | 6.84 KiB in 32 allocs | 7.82 KiB in 47 allocs | 4.77 KiB in 32 allocs | 15.2 KiB in 101 allocs | 5.73 KiB in 175 allocs | unsupported | unsupported | unsupported | 0.01× of yaml-v2 ▲ win |
| dump | records-4k | 4.14 KiB | 4.84 KiB in 1 allocs | differs [22] | differs [24] | differs [20] | differs [17] | differs [3] | unsupported | unsupported | unsupported | no rival |
| dump | records-64k | 64.2 KiB | 73.1 KiB in 1 allocs | differs [22] | differs [24] | differs [20] | differs [17] | differs [3] | unsupported | unsupported | unsupported | no rival |
| dump | records-1m | 1 MiB | 6.01 MiB in 40 allocs | differs [22] | differs [24] | differs [20] | differs [17] | differs [3] | unsupported | unsupported | unsupported | no rival |
| dump | records-8m | 8 MiB | 47.8 MiB in 49 allocs | differs [22] | differs [24] | differs [20] | differs [17] | differs [3] | unsupported | unsupported | unsupported | no rival |
| dump | compose-merge-2k | 2.14 KiB | 4.84 KiB in 1 allocs | 350 KiB in 1,167 allocs | 402 KiB in 1,629 allocs | 227 KiB in 1,166 allocs | 429 KiB in 3,638 allocs | 355 KiB in 10,182 allocs | unsupported | unsupported | unsupported | 0.02× of yaml-v2 ▲ win |
| dump | compose-merge-64k | 64.1 KiB | 130 KiB in 1 allocs | 18.8 MiB in 33,881 allocs | 20.2 MiB in 47,479 allocs | 12.6 MiB in 33,879 allocs | 15.8 MiB in 106,129 allocs | 10.6 MiB in 307,551 allocs | unsupported | unsupported | unsupported | 0.01× of goccy-go-yaml ▲ win |
| dump | compose-merge-1m | 1 MiB | 12.8 MiB in 55 allocs | 328 MiB in 526,398 allocs | 347 MiB in 737,974 allocs | 221 MiB in 526,385 allocs | 272 MiB in 1,649,647 allocs | 165 MiB in 4,828,718 allocs | unsupported | unsupported | unsupported | 0.08× of goccy-go-yaml ▲ win |
| dump | openapi-100k | 101 KiB | 106 KiB in 1 allocs | 14.5 MiB in 27,536 allocs | 15.7 MiB in 39,491 allocs | 9.79 MiB in 27,535 allocs | 12.8 MiB in 89,944 allocs | 9.23 MiB in 253,914 allocs | unsupported | unsupported | unsupported | 0.01× of goccy-go-yaml ▲ win |
| dump | openapi-8m | 8 MiB | 59.5 MiB in 63 allocs | 1.54 GiB in 2,208,530 allocs | 1.63 GiB in 3,169,591 allocs | 1.04 GiB in 2,208,529 allocs | 1.27 GiB in 7,218,664 allocs | 749 MiB in 20,690,480 allocs | unsupported | unsupported | unsupported | 0.08× of goccy-go-yaml ▲ win |
| dump | helm-values-64k | 64 KiB | 40.7 KiB in 1 allocs | 6.14 MiB in 12,346 allocs | 6.79 MiB in 17,458 allocs | 4.12 MiB in 12,345 allocs | 5.45 MiB in 39,285 allocs | 3.87 MiB in 113,017 allocs | unsupported | unsupported | unsupported | 0.01× of goccy-go-yaml ▲ win |
| dump | helm-values-1m | 1 MiB | 641 KiB in 1 allocs | 130 MiB in 194,889 allocs | 139 MiB in 275,810 allocs | 87 MiB in 194,888 allocs | 108 MiB in 620,604 allocs | 62.1 MiB in 1,815,537 allocs | unsupported | unsupported | unsupported | 0.01× of goccy-go-yaml ▲ win |
| dump | deep-block | 5.23 KiB | 10.8 KiB in 1 allocs | 403 KiB in 648 allocs | 385 KiB in 953 allocs | 250 KiB in 646 allocs | 523 KiB in 1,912 allocs | 890 KiB in 4,293 allocs | unsupported | unsupported | unsupported | 0.04× of yaml-v2 ▲ win |
| dump | deep-flow | 202 B | 218 B in 1 allocs | 158 KiB in 29 allocs | 175 KiB in 237 allocs | 98.5 KiB in 29 allocs | 240 KiB in 892 allocs | 51.3 KiB in 1,115 allocs | unsupported | unsupported | unsupported | <0.01× of goccy-go-yaml ▲ win |
| dump | wide-map-64k | 64 KiB | 74.5 KiB in 1 allocs | 8.31 MiB in 20,517 allocs | 9.57 MiB in 32,273 allocs | 5.66 MiB in 20,517 allocs | 8.34 MiB in 68,379 allocs | 6.96 MiB in 261,963 allocs | unsupported | unsupported | unsupported | 0.01× of yaml-v2 ▲ win |
| dump | wide-map-1m | 1 MiB | 14.4 MiB in 61 allocs | 164 MiB in 297,118 allocs | 181 MiB in 468,111 allocs | 111 MiB in 297,118 allocs | 150 MiB in 990,610 allocs | 106 MiB in 4,251,146 allocs | unsupported | unsupported | unsupported | 0.14× of goccy-go-yaml ▲ win |
| dump | long-scalars-256k | 261 KiB | 332 KiB in 2 allocs | 1.4 MiB in 68 allocs | 1.27 MiB in 77 allocs | 1.4 MiB in 68 allocs | 4.65 MiB in 50,287 allocs | 5.49 MiB in 3,546 allocs | unsupported | unsupported | unsupported | 0.26× of yaml-v4 ▲ win |
| dump | flow-heavy-64k | 64 KiB | 89.5 KiB in 1 allocs | 23.5 MiB in 31,323 allocs | 25.6 MiB in 51,337 allocs | 15.7 MiB in 31,323 allocs | 19.4 MiB in 120,941 allocs | 9.92 MiB in 314,832 allocs | unsupported | unsupported | unsupported | <0.01× of goccy-go-yaml ▲ win |
| dump | anchors-32k | 32 KiB | 155 KiB in 1 allocs | 49.4 MiB in 66,674 allocs | 53 MiB in 100,522 allocs | differs [19] | differs [14] | 19.1 MiB in 600,171 allocs | unsupported | unsupported | unsupported | <0.01× of goccy-go-yaml ▲ win |
| dump | unicode-32k | 32 KiB | 27 KiB in 1 allocs | 1.59 MiB in 2,937 allocs | 1.74 MiB in 4,389 allocs | 1.1 MiB in 2,937 allocs | 1.62 MiB in 12,849 allocs | 1.57 MiB in 39,190 allocs | unsupported | unsupported | unsupported | 0.02× of yaml-v2 ▲ win |
| dump | scalar-styles-32k | 32 KiB | 32.5 KiB in 1 allocs | 3.26 MiB in 7,344 allocs | 3.58 MiB in 10,002 allocs | 2.22 MiB in 7,344 allocs | 3.01 MiB in 24,494 allocs | 2.89 MiB in 89,385 allocs | unsupported | unsupported | unsupported | 0.01× of yaml-v2 ▲ win |
| document parse | compose-wordpress | 815 B | 7.52 KiB in 21 allocs | differs [21] | differs [23] | unsupported | unsupported | differs [2] | unsupported | unsupported | unsupported | no rival |
| document parse | gha-workflow | 9.43 KiB | 32.5 KiB in 26 allocs | differs [21] | differs [23] | unsupported | unsupported | differs [2] | unsupported | unsupported | unsupported | no rival |
| document parse | helm-ingress-nginx | 52.4 KiB | 87.6 KiB in 26 allocs | 485 KiB in 4,453 allocs | differs [23] | unsupported | unsupported | 1.64 MiB in 25,620 allocs | unsupported | unsupported | unsupported | 0.18× of yaml-v3 ▲ win |
| document parse | k8s-ingress-nginx-multi | 16 KiB | 62.6 KiB in 30 allocs | differs [21] | 306 KiB in 5,819 allocs | unsupported | unsupported | 1.06 MiB in 20,695 allocs | unsupported | unsupported | unsupported | 0.20× of yaml-v4 ▲ win |
| document parse | openapi-api-with-examples | 6.75 KiB | 22.3 KiB in 34 allocs | differs [21] | differs [23] | unsupported | unsupported | differs [2] | unsupported | unsupported | unsupported | no rival |
| document parse | openapi-petstore | 5.34 KiB | 21 KiB in 26 allocs | 87 KiB in 1,408 allocs | differs [23] | unsupported | unsupported | 351 KiB in 6,263 allocs | unsupported | unsupported | unsupported | 0.24× of yaml-v3 ▲ win |
| document parse | prometheus-config | 1.1 KiB | 7.09 KiB in 26 allocs | differs [21] | differs [23] | unsupported | unsupported | differs [2] | unsupported | unsupported | unsupported | no rival |
| document parse | reference-a | 51 B | 1.93 KiB in 15 allocs | differs [21] | differs [23] | unsupported | unsupported | 7.77 KiB in 192 allocs | unsupported | unsupported | unsupported | 0.25× of goccy-go-yaml ▲ win |
| document parse | reference-b | 51 B | 1.93 KiB in 15 allocs | differs [21] | differs [23] | unsupported | unsupported | 7.77 KiB in 192 allocs | unsupported | unsupported | unsupported | 0.25× of goccy-go-yaml ▲ win |
| document parse | records-4k | 4.14 KiB | 27.4 KiB in 21 allocs | 130 KiB in 2,547 allocs | differs [23] | unsupported | unsupported | differs [5] | unsupported | unsupported | unsupported | 0.21× of yaml-v3 ▲ win |
| document parse | records-64k | 64.2 KiB | 325 KiB in 21 allocs | 1.85 MiB in 38,754 allocs | differs [23] | unsupported | unsupported | differs [5] | unsupported | unsupported | unsupported | 0.17× of yaml-v3 ▲ win |
| document parse | records-1m | 1 MiB | 4.77 MiB in 21 allocs | 29.1 MiB in 612,225 allocs | differs [23] | unsupported | unsupported | differs [5] | unsupported | unsupported | unsupported | 0.16× of yaml-v3 ▲ win |
| document parse | records-8m | 8 MiB | 62.6 MiB in 24 allocs | 230 MiB in 4,840,410 allocs | differs [23] | unsupported | unsupported | differs [5] | unsupported | unsupported | unsupported | 0.27× of yaml-v3 ▲ win |
| document parse | compose-merge-2k | 2.14 KiB | 16.2 KiB in 24 allocs | differs [21] | 61.6 KiB in 1,052 allocs | unsupported | unsupported | 219 KiB in 4,339 allocs | unsupported | unsupported | unsupported | 0.26× of yaml-v4 ▲ win |
| document parse | compose-merge-64k | 64.1 KiB | 333 KiB in 24 allocs | differs [21] | 1.55 MiB in 28,692 allocs | unsupported | unsupported | 6.99 MiB in 124,038 allocs | unsupported | unsupported | unsupported | 0.21× of yaml-v4 ▲ win |
| document parse | compose-merge-1m | 1 MiB | 4.87 MiB in 24 allocs | differs [21] | 24 MiB in 445,014 allocs | unsupported | unsupported | 227 MiB in 1,926,643 allocs | unsupported | unsupported | unsupported | 0.20× of yaml-v4 ▲ win |
| document parse | k8s-multi-16k | 16.4 KiB | 90.3 KiB in 33 allocs | differs [21] | differs [23] | unsupported | unsupported | 1.71 MiB in 33,922 allocs | unsupported | unsupported | unsupported | 0.05× of goccy-go-yaml ▲ win |
| document parse | k8s-multi-1m | 1 MiB | 5.11 MiB in 41 allocs | differs [21] | differs [23] | unsupported | unsupported | 169 MiB in 2,080,261 allocs | unsupported | unsupported | unsupported | 0.03× of goccy-go-yaml ▲ win |
| document parse | openapi-100k | 101 KiB | 397 KiB in 29 allocs | 2.02 MiB in 39,624 allocs | differs [23] | unsupported | unsupported | 8.48 MiB in 147,519 allocs | unsupported | unsupported | unsupported | 0.19× of yaml-v3 ▲ win |
| document parse | openapi-8m | 8 MiB | 70.2 MiB in 33 allocs | 162 MiB in 3,179,816 allocs | differs [23] | unsupported | unsupported | 1.5 GiB in 11,861,233 allocs | unsupported | unsupported | unsupported | 0.43× of yaml-v3 ▲ win |
| document parse | helm-values-64k | 64 KiB | 237 KiB in 24 allocs | differs [21] | differs [23] | unsupported | unsupported | differs [2] | unsupported | unsupported | unsupported | no rival |
| document parse | helm-values-1m | 1 MiB | 3.4 MiB in 24 allocs | differs [21] | differs [23] | unsupported | unsupported | differs [2] | unsupported | unsupported | unsupported | no rival |
| document parse | deep-block | 5.23 KiB | 20.6 KiB in 35 allocs | differs [21] | differs [23] | unsupported | unsupported | 170 KiB in 2,453 allocs | unsupported | unsupported | unsupported | 0.12× of goccy-go-yaml ▲ win |
| document parse | deep-flow | 202 B | 37.2 KiB in 51 allocs | 133 KiB in 263 allocs | differs [23] | unsupported | unsupported | 109 KiB in 1,743 allocs | unsupported | unsupported | unsupported | 0.34× of goccy-go-yaml ▲ win |
| document parse | wide-map-64k | 64 KiB | 341 KiB in 17 allocs | 1.87 MiB in 35,393 allocs | 1.87 MiB in 35,396 allocs | unsupported | unsupported | 62.9 MiB in 139,723 allocs | unsupported | unsupported | unsupported | 0.18× of yaml-v3 ▲ win |
| document parse | wide-map-1m | 1 MiB | 4.85 MiB in 17 allocs | 28.3 MiB in 513,131 allocs | 28.3 MiB in 513,133 allocs | unsupported | unsupported | 11.2 GiB in 2,025,750 allocs | unsupported | unsupported | unsupported | 0.17× of yaml-v4 ▲ win |
| document parse | long-scalars-256k | 261 KiB | 267 KiB in 16 allocs | differs [21] | differs [23] | unsupported | unsupported | 9.92 MiB in 127,403 allocs | unsupported | unsupported | unsupported | 0.03× of goccy-go-yaml ▲ win |
| document parse | flow-heavy-64k | 64 KiB | 477 KiB in 24 allocs | 2.87 MiB in 53,733 allocs | 2.92 MiB in 56,997 allocs | unsupported | unsupported | 14.1 MiB in 255,155 allocs | unsupported | unsupported | unsupported | 0.16× of yaml-v3 ▲ win |
| document parse | anchors-32k | 32 KiB | 215 KiB in 25 allocs | 1.02e+03 KiB in 17,019 allocs | differs [23] | unsupported | unsupported | 6.24 MiB in 122,349 allocs | unsupported | unsupported | unsupported | 0.21× of yaml-v3 ▲ win |
| document parse | unicode-32k | 32 KiB | 92.5 KiB in 17 allocs | differs [21] | differs [23] | unsupported | unsupported | differs [4] | unsupported | unsupported | unsupported | no rival |
| document parse | scalar-styles-32k | 32 KiB | 125 KiB in 19 allocs | differs [21] | differs [23] | unsupported | unsupported | 3.24 MiB in 63,472 allocs | unsupported | unsupported | unsupported | 0.04× of goccy-go-yaml ▲ win |
| unchanged emit | compose-wordpress | 815 B | 0 B in 0 allocs | differs [21] | differs [23] | unsupported | unsupported | differs [2] | unsupported | unsupported | unsupported | no rival |
| unchanged emit | gha-workflow | 9.43 KiB | 0 B in 0 allocs | differs [21] | differs [23] | unsupported | unsupported | differs [2] | unsupported | unsupported | unsupported | no rival |
| unchanged emit | helm-ingress-nginx | 52.4 KiB | 0 B in 0 allocs | 1.09 MiB in 1,455 allocs | differs [23] | unsupported | unsupported | 744 KiB in 5,484 allocs | unsupported | unsupported | unsupported | <0.01× of goccy-go-yaml ▲ win |
| unchanged emit | k8s-ingress-nginx-multi | 16 KiB | 0 B in 0 allocs | differs [21] | 1.47 MiB in 2,174 allocs | unsupported | unsupported | 291 KiB in 4,198 allocs | unsupported | unsupported | unsupported | <0.01× of goccy-go-yaml ▲ win |
| unchanged emit | openapi-api-with-examples | 6.75 KiB | 0 B in 0 allocs | differs [21] | differs [23] | unsupported | unsupported | differs [2] | unsupported | unsupported | unsupported | no rival |
| unchanged emit | openapi-petstore | 5.34 KiB | 0 B in 0 allocs | 331 KiB in 470 allocs | differs [23] | unsupported | unsupported | 84.3 KiB in 843 allocs | unsupported | unsupported | unsupported | <0.01× of goccy-go-yaml ▲ win |
| unchanged emit | prometheus-config | 1.1 KiB | 0 B in 0 allocs | differs [21] | differs [23] | unsupported | unsupported | differs [2] | unsupported | unsupported | unsupported | no rival |
| unchanged emit | reference-a | 51 B | 0 B in 0 allocs | differs [21] | differs [23] | unsupported | unsupported | 641 B in 28 allocs | unsupported | unsupported | unsupported | <0.01× of goccy-go-yaml ▲ win |
| unchanged emit | reference-b | 51 B | 0 B in 0 allocs | differs [21] | differs [23] | unsupported | unsupported | 641 B in 28 allocs | unsupported | unsupported | unsupported | <0.01× of goccy-go-yaml ▲ win |
| unchanged emit | records-4k | 4.14 KiB | 0 B in 0 allocs | 587 KiB in 1,079 allocs | differs [23] | unsupported | unsupported | differs [5] | unsupported | unsupported | unsupported | <0.01× of yaml-v3 ▲ win |
| unchanged emit | records-64k | 64.2 KiB | 0 B in 0 allocs | 10.7 MiB in 16,254 allocs | differs [23] | unsupported | unsupported | differs [5] | unsupported | unsupported | unsupported | <0.01× of yaml-v3 ▲ win |
| unchanged emit | records-1m | 1 MiB | 0 B in 0 allocs | 201 MiB in 258,474 allocs | differs [23] | unsupported | unsupported | differs [5] | unsupported | unsupported | unsupported | <0.01× of yaml-v3 ▲ win |
| unchanged emit | records-8m | 8 MiB | 0 B in 0 allocs | 1.5 GiB in 2,044,451 allocs | differs [23] | unsupported | unsupported | differs [5] | unsupported | unsupported | unsupported | <0.01× of yaml-v3 ▲ win |
| unchanged emit | compose-merge-2k | 2.14 KiB | 0 B in 0 allocs | differs [21] | 168 KiB in 421 allocs | unsupported | unsupported | 28.5 KiB in 615 allocs | unsupported | unsupported | unsupported | <0.01× of goccy-go-yaml ▲ win |
| unchanged emit | compose-merge-64k | 64.1 KiB | 0 B in 0 allocs | differs [21] | 10.6 MiB in 11,220 allocs | unsupported | unsupported | 880 KiB in 17,471 allocs | unsupported | unsupported | unsupported | <0.01× of goccy-go-yaml ▲ win |
| unchanged emit | compose-merge-1m | 1 MiB | 0 B in 0 allocs | differs [21] | 200 MiB in 173,701 allocs | unsupported | unsupported | 14.3 MiB in 271,334 allocs | unsupported | unsupported | unsupported | <0.01× of goccy-go-yaml ▲ win |
| unchanged emit | k8s-multi-16k | 16.4 KiB | 0 B in 0 allocs | differs [21] | differs [23] | unsupported | unsupported | 263 KiB in 5,217 allocs | unsupported | unsupported | unsupported | <0.01× of goccy-go-yaml ▲ win |
| unchanged emit | k8s-multi-1m | 1 MiB | 0 B in 0 allocs | differs [21] | differs [23] | unsupported | unsupported | 15.8 MiB in 319,197 allocs | unsupported | unsupported | unsupported | <0.01× of goccy-go-yaml ▲ win |
| unchanged emit | openapi-100k | 101 KiB | 0 B in 0 allocs | 13.8 MiB in 13,789 allocs | differs [23] | unsupported | unsupported | 1.78 MiB in 24,314 allocs | unsupported | unsupported | unsupported | <0.01× of goccy-go-yaml ▲ win |
| unchanged emit | openapi-8m | 8 MiB | 0 B in 0 allocs | 1.49 GiB in 1,104,293 allocs | differs [23] | unsupported | unsupported | 143 MiB in 1,952,872 allocs | unsupported | unsupported | unsupported | <0.01× of goccy-go-yaml ▲ win |
| unchanged emit | helm-values-64k | 64 KiB | 0 B in 0 allocs | differs [21] | differs [23] | unsupported | unsupported | differs [2] | unsupported | unsupported | unsupported | no rival |
| unchanged emit | helm-values-1m | 1 MiB | 0 B in 0 allocs | differs [21] | differs [23] | unsupported | unsupported | differs [2] | unsupported | unsupported | unsupported | no rival |
| unchanged emit | deep-block | 5.23 KiB | 0 B in 0 allocs | differs [21] | differs [23] | unsupported | unsupported | 387 KiB in 406 allocs | unsupported | unsupported | unsupported | <0.01× of goccy-go-yaml ▲ win |
| unchanged emit | deep-flow | 202 B | 0 B in 0 allocs | 159 KiB in 30 allocs | differs [23] | unsupported | unsupported | 12.7 KiB in 203 allocs | unsupported | unsupported | unsupported | <0.01× of goccy-go-yaml ▲ win |
| unchanged emit | wide-map-64k | 64 KiB | 0 B in 0 allocs | 8.16 MiB in 15,522 allocs | 8.16 MiB in 16,142 allocs | unsupported | unsupported | 645 KiB in 11,813 allocs | unsupported | unsupported | unsupported | <0.01× of goccy-go-yaml ▲ win |
| unchanged emit | wide-map-1m | 1 MiB | 0 B in 0 allocs | 161 MiB in 225,067 allocs | 161 MiB in 234,068 allocs | unsupported | unsupported | 10.1 MiB in 171,066 allocs | unsupported | unsupported | unsupported | <0.01× of goccy-go-yaml ▲ win |
| unchanged emit | long-scalars-256k | 261 KiB | 0 B in 0 allocs | differs [21] | differs [23] | unsupported | unsupported | 1.7 MiB in 41 allocs | unsupported | unsupported | unsupported | <0.01× of goccy-go-yaml ▲ win |
| unchanged emit | flow-heavy-64k | 64 KiB | 0 B in 0 allocs | 23.1 MiB in 20,056 allocs | 23.1 MiB in 20,060 allocs | unsupported | unsupported | 1.05 MiB in 31,539 allocs | unsupported | unsupported | unsupported | <0.01× of goccy-go-yaml ▲ win |
| unchanged emit | anchors-32k | 32 KiB | 0 B in 0 allocs | 5.89 MiB in 6,161 allocs | differs [23] | unsupported | unsupported | 628 KiB in 21,041 allocs | unsupported | unsupported | unsupported | <0.01× of goccy-go-yaml ▲ win |
| unchanged emit | unicode-32k | 32 KiB | 0 B in 0 allocs | differs [21] | differs [23] | unsupported | unsupported | differs [4] | unsupported | unsupported | unsupported | no rival |
| unchanged emit | scalar-styles-32k | 32 KiB | 0 B in 0 allocs | differs [21] | differs [23] | unsupported | unsupported | 584 KiB in 13,294 allocs | unsupported | unsupported | unsupported | <0.01× of goccy-go-yaml ▲ win |
| edit script | compose-wordpress | 815 B | 9.26 KiB in 92 allocs | differs [21] | differs [23] | unsupported | unsupported | differs [2] | unsupported | unsupported | unsupported | no rival |
| edit script | gha-workflow | 9.43 KiB | 8.88 KiB in 89 allocs | differs [21] | differs [23] | unsupported | unsupported | differs [2] | unsupported | unsupported | unsupported | no rival |
| edit script | helm-ingress-nginx | 52.4 KiB | 1.94 KiB in 40 allocs | 1.12 MiB in 1,564 allocs | differs [23] | unsupported | unsupported | 729 KiB in 5,698 allocs | unsupported | unsupported | unsupported | <0.01× of goccy-go-yaml ▲ win |
| edit script | openapi-api-with-examples | 6.75 KiB | 1.2 KiB in 22 allocs | differs [21] | differs [23] | unsupported | unsupported | differs [2] | unsupported | unsupported | unsupported | no rival |
| edit script | openapi-petstore | 5.34 KiB | 11.6 KiB in 104 allocs | 321 KiB in 455 allocs | differs [23] | unsupported | unsupported | differs [2] | unsupported | unsupported | unsupported | 0.04× of yaml-v3 ▲ win |
| edit script | prometheus-config | 1.1 KiB | 1.16 KiB in 20 allocs | differs [21] | differs [23] | unsupported | unsupported | differs [2] | unsupported | unsupported | unsupported | no rival |
| edit script | reference-a | 51 B | 2.35 KiB in 27 allocs | differs [21] | differs [23] | unsupported | unsupported | 4.64 KiB in 146 allocs | unsupported | unsupported | unsupported | 0.51× of goccy-go-yaml ▲ win |
| edit script | reference-b | 51 B | 2.36 KiB in 28 allocs | differs [21] | differs [23] | unsupported | unsupported | differs [1] | unsupported | unsupported | unsupported | no rival |
| edit script | records-4k | 4.14 KiB | 4.35 KiB in 69 allocs | 609 KiB in 1,140 allocs | differs [23] | unsupported | unsupported | differs [5] | unsupported | unsupported | unsupported | <0.01× of yaml-v3 ▲ win |
| edit script | records-64k | 64.2 KiB | 4.35 KiB in 69 allocs | 10.7 MiB in 16,311 allocs | differs [23] | unsupported | unsupported | differs [5] | unsupported | unsupported | unsupported | <0.01× of yaml-v3 ▲ win |
| edit script | records-1m | 1 MiB | 4.35 KiB in 69 allocs | 201 MiB in 258,530 allocs | differs [23] | unsupported | unsupported | differs [5] | unsupported | unsupported | unsupported | <0.01× of yaml-v3 ▲ win |
| edit script | records-8m | 8 MiB | 4.35 KiB in 69 allocs | 1.5 GiB in 2,044,508 allocs | differs [23] | unsupported | unsupported | differs [5] | unsupported | unsupported | unsupported | <0.01× of yaml-v3 ▲ win |
| edit script | compose-merge-2k | 2.14 KiB | 5.44 KiB in 63 allocs | differs [21] | 179 KiB in 457 allocs | unsupported | unsupported | 32.8 KiB in 729 allocs | unsupported | unsupported | unsupported | 0.17× of goccy-go-yaml ▲ win |
| edit script | compose-merge-64k | 64.1 KiB | 13.8 KiB in 65 allocs | differs [21] | 10.6 MiB in 11,256 allocs | unsupported | unsupported | 876 KiB in 17,584 allocs | unsupported | unsupported | unsupported | 0.02× of goccy-go-yaml ▲ win |
| edit script | compose-merge-1m | 1 MiB | 134 KiB in 65 allocs | differs [21] | 200 MiB in 173,737 allocs | unsupported | unsupported | 14.3 MiB in 271,445 allocs | unsupported | unsupported | unsupported | <0.01× of goccy-go-yaml ▲ win |
| edit script | openapi-100k | 101 KiB | 10.1 KiB in 83 allocs | 13.8 MiB in 13,781 allocs | differs [23] | unsupported | unsupported | 1.78 MiB in 24,434 allocs | unsupported | unsupported | unsupported | <0.01× of goccy-go-yaml ▲ win |
| edit script | openapi-8m | 8 MiB | 10.4 KiB in 84 allocs | 1.49 GiB in 1,104,287 allocs | differs [23] | unsupported | unsupported | 143 MiB in 1,953,003 allocs | unsupported | unsupported | unsupported | <0.01× of goccy-go-yaml ▲ win |
| edit script | helm-values-64k | 64 KiB | 1.61 KiB in 32 allocs | differs [21] | differs [23] | unsupported | unsupported | differs [2] | unsupported | unsupported | unsupported | no rival |
| edit script | helm-values-1m | 1 MiB | 65.9 KiB in 34 allocs | differs [21] | differs [23] | unsupported | unsupported | differs [2] | unsupported | unsupported | unsupported | no rival |
| edit script | wide-map-64k | 64 KiB | 4.7 KiB in 47 allocs | 8.03 MiB in 15,549 allocs | 8.04 MiB in 16,174 allocs | unsupported | unsupported | 622 KiB in 11,862 allocs | unsupported | unsupported | unsupported | <0.01× of goccy-go-yaml ▲ win |
| edit script | wide-map-1m | 1 MiB | 4.7 KiB in 47 allocs | 159 MiB in 225,094 allocs | 159 MiB in 234,099 allocs | unsupported | unsupported | 10.1 MiB in 171,114 allocs | unsupported | unsupported | unsupported | <0.01× of goccy-go-yaml ▲ win |
| patch (RFC 6902) | compose-wordpress | 815 B | 17.6 KiB in 121 allocs † | unsupported | unsupported | unsupported | unsupported | unsupported | differs [9] | differs [11] | 116 KiB in 1,048 allocs † | 0.15× of json-patch † (text API, value-only) ▲ win |
| patch (RFC 6902) | gha-workflow | 9.43 KiB | 54.3 KiB in 130 allocs † | unsupported | unsupported | unsupported | unsupported | unsupported | differs [9] | differs [11] | rejects [6] | no rival |
| patch (RFC 6902) | reference-a | 51 B | 4.33 KiB in 42 allocs † | unsupported | unsupported | unsupported | unsupported | unsupported | differs [9] | 10.1 KiB in 276 allocs † | 23 KiB in 204 allocs † | 0.43× of palantir-yamlpatch-goccy † (text API) ▲ win |
| patch (RFC 6902) | reference-b | 51 B | 4.34 KiB in 43 allocs † | unsupported | unsupported | unsupported | unsupported | unsupported | differs [8] | differs [10] | 22.9 KiB in 204 allocs † | 0.19× of json-patch † (text API, value-only) ▲ win |
| patch (RFC 6902) | records-4k | 4.14 KiB | 37.6 KiB in 91 allocs † | unsupported | unsupported | unsupported | unsupported | unsupported | 775 KiB in 3,830 allocs † | differs [12] | differs [7] | 0.05× of palantir-yamlpatch † (text API) ▲ win |
| patch (RFC 6902) | records-64k | 64.2 KiB | 402 KiB in 91 allocs † | unsupported | unsupported | unsupported | unsupported | unsupported | 12.6 MiB in 55,213 allocs † | differs [12] | differs [7] | 0.03× of palantir-yamlpatch † (text API) ▲ win |
| patch (RFC 6902) | records-1m | 1 MiB | 5.85 MiB in 91 allocs † | unsupported | unsupported | unsupported | unsupported | unsupported | 230 MiB in 870,901 allocs † | differs [12] | differs [7] | 0.03× of palantir-yamlpatch † (text API) ▲ win |
| patch (RFC 6902) | records-8m | 8 MiB | 71.1 MiB in 94 allocs † | unsupported | unsupported | unsupported | unsupported | unsupported | 1.73 GiB in 6,885,062 allocs † | differs [12] | differs [7] | 0.04× of palantir-yamlpatch † (text API) ▲ win |
Cells without a number, with what the correctness guard found:
goccy-go-yaml(differs; edit-script ×1): Does not keep the block literal style of the edited value: the new text is written as a plain scalar. What the guard found, in edit-script onreference-b:byte 26: got 48 bytes "#abc 123\nb: this is a test2\nc: 13\n", expected 53 bytes "#abc 123\nb: |-\n this is a test2\nc: "; line 5: got "b: this is a test2", expected "b: |-"goccy-go-yaml(differs; document-parse ×6, unchanged-emit ×6, edit-script ×7): The AST prints its own spacing for flow collections and trailing comments, and blank lines, quoting or a leading --- marker change, so the text it writes back is not the input. What the guard found, in document-parse oncompose-wordpress:does not write the input back: byte 807: got 807 bytes "\n db_data:\n", expected 815 bytes "\n db_data:\n\n \n "; the texts differ only in blank linesgoccy-go-yaml(differs; dump ×4): Writes a string that looks like a number (05509, 1.5) without quotes, so it reads back as a number. What the guard found, in dump onrecords-4k:read back: at /14/address/zip: got 5509, expected "05509"goccy-go-yaml(differs; document-parse ×1, unchanged-emit ×1): Writes the escapes of a double-quoted scalar (\u00e9) as the characters themselves. What the guard found, in document-parse onunicode-32k:does not write the input back: byte 20: got 28160 bytes " café 0\n- \"é中文 0\"\n- \"😀 grin", expected 32800 bytes " café 0\n- \"\\u00e9\\u4e2d\\u6587 0\"\n- "; line 2: got "- \"é中文 0\"", expected "- \…goccy-go-yaml(differs; document-parse ×4, unchanged-emit ×4, edit-script ×4): Writes the null spelled ~ as null. What the guard found, in document-parse onrecords-4k:does not write the input back: byte 736: got 4275 bytes ".25\n note: null\n- id: 3\n name: Eps", expected 4242 bytes ".25\n note: ~\n- id: 3\n name: Epsilo"; line 47: got " note: null", expected…json-patch(rejects; patch ×1): Reads the document through sigs.k8s.io/yaml, a YAML 1.1 reader: the key on is the boolean true, so a path under /on is not found. What the guard found, in patch ongha-workflow:add operation does not apply: doc is missing path: "/on/push/branches/-": missin…json-patch(differs; patch ×4): Writes a float with no fractional part (812.0) as 812, so a YAML 1.2 reader reads it back as an integer. What the guard found, in patch onrecords-4k:value after the patch: at /1/score: got 812, expected 812 (float)palantir-yamlpatch(differs; patch ×1): Does not keep the block literal style of the edited value: the new text is written as a plain scalar. What the guard found, in patch onreference-b:byte 13: got 47 bytes "hello\na: 10\n#abc 123\nb: this is a te", expected 53 bytes "hello\na: 10\n\n#abc 123\nb: |-\n this i"; line 3: got "#abc 123", expected ""palantir-yamlpatch(differs; patch ×3): Patches through the yaml.v3 node tree, which keeps comments but not blank lines, spacing or a leading --- marker, so the text it writes back differs from the input. What the guard found, in patch oncompose-wordpress:byte 852: got 852 bytes "\n db_data:\n", expected 860 bytes "\n db_data:\n\n \n "; the texts differ only in blank linespalantir-yamlpatch-goccy(differs; patch ×1): Does not keep the block literal style of the edited value: the new text is written as a plain scalar. What the guard found, in patch onreference-b:byte 26: got 48 bytes "#abc 123\nb: this is a test2\nc: 13\n", expected 53 bytes "#abc 123\nb: |-\n this is a test2\nc: "; line 5: got "b: this is a test2", expected "b: |-"palantir-yamlpatch-goccy(differs; patch ×2): Patches through the goccy AST, which prints its own spacing and changes blank lines, so the text it writes back differs from the input. What the guard found, in patch oncompose-wordpress:byte 852: got 852 bytes "\n db_data:\n", expected 860 bytes "\n db_data:\n\n \n "; the texts differ only in blank linespalantir-yamlpatch-goccy(differs; patch ×4): Writes the null spelled ~ as null. What the guard found, in patch onrecords-4k:byte 752: got 4244 bytes ".25\n note: null\n- id: 3\n name: Eps", expected 4211 bytes ".25\n note: ~\n- id: 3\n name: Epsilo"; line 48: got " note: null", expected " note: ~"sigs-yaml(differs; typed-load ×1, generic-load ×1, dump ×1): A YAML 1.1 reader: the key on is the boolean true, so /on is not found. What the guard found, in typed-load ongha-workflow:/on/push/branches: 0 items, expected 2sigs-yaml(differs; dump ×1): A YAML 1.1 reader: the plain scalar y is the boolean true. What the guard found, in dump onanchors-32k:read back: at /base/b/1: got true, expected "y"sigs-yaml(differs; generic-load ×3): Reads one document of a multi-document stream, so the stream does not come back whole. What the guard found, in generic-load onk8s-ingress-nginx-multi:at /: got a mapping of 3, expected a sequence of 19sigs-yaml(differs; generic-load ×19): Reads through JSON, where every number is a float, so an integer comes back as a float. What the guard found, in generic-load oncompose-wordpress:at /services/db/expose/0: got 3306 (float), expected 3306sigs-yaml(differs; dump ×4): Writes a float with no fractional part (812.0) as 812, so a YAML 1.2 reader reads it back as an integer. What the guard found, in dump onrecords-4k:read back: at /1/score: got 812, expected 812 (float)yaml-v2(differs; generic-load ×1, dump ×1): A YAML 1.1 reader: the key on is the boolean true, so /on is not found. What the guard found, in generic-load ongha-workflow:missing /onyaml-v2(differs; generic-load ×1, dump ×1): A YAML 1.1 reader: the plain scalar y is the boolean true. What the guard found, in generic-load onanchors-32k:at /base/b/1: got true, expected "y"yaml-v2(differs; dump ×4): Writes a float with no fractional part (812.0) as 812, so a YAML 1.2 reader reads it back as an integer. What the guard found, in dump onrecords-4k:read back: at /1/score: got 812, expected 812 (float)yaml-v3(differs; document-parse ×18, unchanged-emit ×18, edit-script ×11): The yaml.Node tree keeps comments but not blank lines, spacing or a leading --- marker, and it lays flow collections out its own way, so the text it writes back is not the input. What the guard found, in document-parse oncompose-wordpress:does not write the input back: byte 807: got 807 bytes "\n db_data:\n", expected 815 bytes "\n db_data:\n\n \n "; the texts differ only in blank linesyaml-v3(differs; dump ×4): Writes a float with no fractional part (812.0) as 812, so a YAML 1.2 reader reads it back as an integer. What the guard found, in dump onrecords-4k:read back: at /1/score: got 812, expected 812 (float)yaml-v4(differs; document-parse ×24, unchanged-emit ×24, edit-script ×16): The yaml.Node tree keeps comments but not blank lines, spacing or a leading --- marker, and it lays flow collections out its own way, so the text it writes back is not the input. What the guard found, in document-parse oncompose-wordpress:does not write the input back: byte 303: got 783 bytes "olumes:\n - db_data:/var/lib/mysql", expected 815 bytes "olumes:\n - db_data:/var/lib/mys"; the texts differ only in blank lines and in…yaml-v4(differs; dump ×4): Writes a float with no fractional part (812.0) as 812, so a YAML 1.2 reader reads it back as an integer. What the guard found, in dump onrecords-4k:read back: at /1/score: got 812, expected 812 (float)
Relative figures are ours ÷ the strongest competitor in that row, so below 1.0× is better for us and ▼ marks a loss. A † marks a cell measured differently from the task as specified; the note beside each mark says how. Cells without a number say why.
Method: full run of 2026-10-16T21:48:45Z. Kit revision 0abba1d8b4f2. oneyaml-go eea67bb6b962; competitors yaml-v3 v3.0.5, yaml-v4 v4.0.0-rc.6, yaml-v2 v2.4.0, sigs-yaml v1.6.0, goccy-go-yaml v1.19.2, palantir-yamlpatch v1.5.0, palantir-yamlpatch-goccy v1.5.0, json-patch v5.9.11. Runtime go1.26.0 (target linux/amd64), measured with testing.B: ns/op from testing.Benchmark at benchtime 1s. Memory: B/op and allocs/op from testing.B (ReportAllocs). AMD Ryzen 9 7950X3D 16-Core Processor (125.0 GiB), Linux 7.0.0-34-generic (x86_64), measured on a shared workstation (32 logical CPUs; load 2.67 before, 4.06 after, at most 11.23 during).