Recursive AI

Performance

All oneyaml C# docs

How oneyaml-csharp compares with the other .NET YAML libraries on speed and memory. Every task runs on the same inputs for every library, through the oneyaml benchmark kit, oneyaml-kit. The tables and charts below are generated from the kit's result file; none of the numbers is typed by hand.

The figures are measured, not bounds: they hold for the workloads, versions and host named in the method line of each block. A run that is marked as not publishable is a smoke result; it shows the layout and the rough picture, and it is not a claim.

What is compared:

  • Loading and writing, typed and untyped, against YamlDotNet, SharpYaml and VYaml. oneyaml-csharp is measured on both its reflection path and its generated-metadata path.
  • Reading a document for editing, and editing it, against the closest .NET equivalents, such as SharpYaml's syntax tree.
  • Applying a patch against Yaml2JsonNode with JsonPatch.Net, the usual .NET route for a JSON Patch on YAML. That route converts to a JSON tree and does not keep the file's formatting, so the comparison is of the work, not of equal output.

Each generated table names the competitors of every task, and a cell without a number says why.

The kit's benchmark notes define each task and how it is timed. The kit also decides when a difference in time or memory is too small to call a win or a loss; the verdict rules say where those bands lie and how a verdict is reached.

Results at a glance

One row per task: our time and the strongest competitor's, each the geometric mean over the task's workloads, with the verdict and the method of the run. The chart in the README is drawn from these rows.

Bar chart of the table below: how many times faster oneyaml-csharp is than the strongest competitor on each task, log scale, higher is better. 7 tasks: 5 better, 0 level, 1 mixed, 0 worse, 1 not comparable. Speeds are over real-world workloads. A mark counts every workload. Loses only outside the real-world workloads: unchanged emit.

Taskoneyaml-csharp time (geometric mean)Strongest competitorIts time (geometric mean)Speed against it (its time ÷ ours; higher is better)Verdict
typed load47.5 µsvyaml 1.4.160.7 µs1.28× faster▲ win
generic load22.2 µsvyaml 1.4.129.5 µs1.33× faster▲ win
dump4.77 µssharpyaml 3.16.0 (4 of 6), vyaml 1.4.1 (2 of 6)12.6 µs2.63× faster▲ win
document parse17.8 µssharpyaml-syntax 3.16.0 † (sharpyaml-syntax: bytes-only)193 µs10.8× faster▲ win
unchanged emit (write-back of an unedited document; not a rendering speed)504 nssharpyaml-syntax 3.16.01.25 µs2.48× faster◆ mixed (loses 2 of 20 generated workloads)
edit script7.48 µssharpyaml-syntax 3.16.0 † (sharpyaml-syntax: harness-rendered)554 µs74.0× faster▲ win
patch (RFC 6902)————no rival

Not in a row's mean: patch (RFC 6902): no competitor answer: compose-wordpress, gha-workflow.

Each row is the geometric mean, over the real-world workloads the task has, of our time and of the time of the strongest competitor in each workload. Speed is the competitor's time divided by ours: 2× faster means half the time, and a loss is stated as slower. Where several competitors were strongest the column names them all, with how often. A † marks a cell measured differently from the task as specified; the note beside each mark says how. A marked competitor still counts. A workload where our library has no number is listed and the row is marked as partial, never counted as a win. The verdict is never better than the per-workload verdicts allow: a row with a losing workload is marked mixed or loss, and a row with no winning workload is never marked a win. The speed is over the real-world workloads. The verdict is never better than the real-world workloads allow, nor better than all of the task's workloads allow, generated and reference ones included: a loss on any of them keeps a row from being a clean win and the row says how many it lost, and a win on them cannot lift a row the real-world workloads do not win. Memory and the count of better, level and worse workloads in each row are on the full page.

Method: full run of 2026-10-18T00:48:41Z. Kit 0.1.0 (revision 6cc83d12fbc6); text generated by kit revision c1647a46aa6d. oneyaml-csharp c23a19250217; competitors yamldotnet 18.1.0, sharpyaml 3.16.0, sharpyaml-model 3.16.0, sharpyaml-syntax 3.16.0, vyaml 1.4.1, yaml2jsonnode 3.0.1, oneyaml-csharp-gen c23a19250217. Runtime .NET 10.0.11 (target linux-x64), measured with BenchmarkDotNet 0.15.8: mean time per task from BenchmarkDotNet's ShortRun job (3 warm-up and 3 measured iterations) run in process; one invocation per iteration runs a batch of prepared tasks and the time is divided by the batch size; every cell is measured in a process of its own, because the heap that earlier cells leave behind changed the result. Each process runs with DOTNET_TC_CallCountingDelayMs=0 (call counting starts immediately instead of after the default delay), and no other DOTNET_ or COMPlus_ variable set, and every cell is first warmed up for 1000 ms of whole batches before BenchmarkDotNet's own warm-up, because a new process starts at the runtime's unoptimised tier. Memory: bytes allocated per task from BenchmarkDotNet's MemoryDiagnoser; allocation calls are not available. 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 3.72 before, 4.52 after, at most 8.48 during).

Results

Every task and workload, time and memory, from the same run.

Time per operation

TaskWorkloadInputoneyaml-csharpyamldotnetsharpyamlsharpyaml-modelsharpyaml-syntaxvyamlyaml2jsonnodeoneyaml-csharp-genOurs vs strongest competitor
typed loadgha-workflow9.43 KiB47.5 µs355 µs139 µsunsupportedunsupported60.7 µs247 µs47.3 µs0.78× of vyaml ▲ win
typed loadrecords-4k4.14 KiB33.9 µs281 µs102 µsunsupportedunsupported42.9 µs193 µs33.7 µs0.79× of vyaml ▲ win
typed loadrecords-64k64.2 KiB561 µs4.59 ms1.66 msunsupportedunsupported712 µs3.13 ms563 µs0.79× of vyaml ▲ win
typed loadrecords-1m1 MiB8.56 ms72.7 ms27.4 msunsupportedunsupported10.4 ms93.7 ms8.49 ms0.83× of vyaml ▲ win
typed loadrecords-8m8 MiB70.2 ms668 ms261 msunsupportedunsupported85.1 ms983 ms67.2 ms0.83× of vyaml ▲ win
generic loadcompose-wordpress815 B3.98 µs29.8 µs13.9 µs11.1 µsunsupported5.1 µs17.2 µs4.12 µs0.78× of vyaml ▲ win
generic loadgha-workflow9.43 KiB50.9 µs337 µs146 µs140 µsunsupported70.9 µs239 µs49.6 µs0.72× of vyaml ▲ win
generic loadhelm-ingress-nginx52.4 KiB73.3 µs692 µs334 µs325 µsunsupported103 µs545 µs73.5 µs0.71× of vyaml ▲ win
generic loadk8s-ingress-nginx-multi16 KiB103 µs776 µsunsupported292 µsunsupported131 µs459 µs101 µs0.79× of vyaml ▲ win
generic loadopenapi-api-with-examples6.75 KiB20.8 µs141 µs60.8 µs61.1 µsunsupported25.9 µs95.6 µs20.4 µs0.80× of vyaml ▲ win
generic loadopenapi-petstore5.34 KiB25.1 µs191 µs80.5 µs74.2 µsunsupported38.6 µs115 µs28.8 µs0.65× of vyaml ▲ win
generic loadprometheus-config1.1 KiB3.37 µs25.2 µs10.1 µs10.1 µsunsupported3.97 µs15.6 µs3.36 µs0.85× of vyaml ▲ win
generic loadreference-a51 B617 ns4.94 µs2.04 µs1.99 µsunsupported739 ns3.94 µs1.11 µs0.83× of vyaml ▲ win
generic loadreference-b51 B637 ns4.67 µs2 µs1.9 µsunsupported739 ns3.24 µs609 ns0.86× of vyaml ▲ win
generic loadrecords-4k4.14 KiB43.7 µs284 µs111 µs103 µsunsupported55.2 µs166 µs44.3 µs0.79× of vyaml ▲ win
generic loadrecords-64k64.2 KiB640 µs4.41 ms1.81 ms1.79 msunsupported897 µs2.93 ms640 µs0.71× of vyaml ▲ win
generic loadrecords-1m1 MiB10.7 ms84.8 ms29.5 ms32.8 msunsupported13.7 ms76.8 ms10 ms0.78× of vyaml ▲ win
generic loadrecords-8m8 MiB99.6 ms773 ms434 ms589 msunsupported134 ms910 ms110 ms0.75× of vyaml ▲ win
generic loadcompose-merge-2k2.14 KiB18.7 µs138 µs57.3 µs (merged)62.6 µsunsupported27.5 µs87.4 µs19.1 µs0.68× of vyaml ▲ win
generic loadcompose-merge-64k64.1 KiB556 µs3.79 ms1.73 ms (merged)1.81 msunsupported769 µs2.67 ms508 µs0.72× of vyaml ▲ win
generic loadcompose-merge-1m1 MiB8.14 ms78.3 ms41.3 ms (merged)56.2 msunsupported12.3 ms95.6 ms8.28 ms0.66× of vyaml ▲ win
generic loadk8s-multi-16k16.4 KiB177 µs1.16 msunsupported455 µsunsupported212 µs719 µs169 µs0.83× of vyaml ▲ win
generic loadk8s-multi-1m1 MiB10.2 ms110 msunsupported33.2 msunsupported14.5 ms89.9 ms11.1 ms0.70× of vyaml ▲ win
generic loadopenapi-100k101 KiB803 µs5.38 ms2.21 ms2.23 msunsupported1.01 ms3.64 ms881 µs0.79× of vyaml ▲ win
generic loadopenapi-8m8 MiB60.5 ms603 ms312 ms453 msunsupported105 ms701 ms60.1 ms0.58× of vyaml ▲ win
generic loadhelm-values-64k64 KiB347 µs2.54 ms1.11 ms1.06 msunsupported470 µs1.72 ms338 µs0.74× of vyaml ▲ win
generic loadhelm-values-1m1 MiB5.46 ms56.3 ms25.8 ms22 msunsupported7.23 ms55 ms6.21 ms0.76× of vyaml ▲ win
generic loaddeep-block5.23 KiB16.3 µs116 µsrejects [1]rejects [6]unsupported18.3 µs65.8 µs16.2 µs0.89× of vyaml ▲ win
generic loaddeep-flow202 B8.93 µs67.3 µsrejects [1]rejects [6]unsupported22 µs38.3 µs9.62 µs0.41× of vyaml ▲ win
generic loadwide-map-64k64 KiB644 µs4.56 ms2.01 ms2.05 msunsupported811 µs2.9 ms610 µs0.79× of vyaml ▲ win
generic loadwide-map-1m1 MiB10.9 ms79.2 ms39.7 ms40.4 msunsupported14.1 ms87.9 ms11.1 ms0.77× of vyaml ▲ win
generic loadlong-scalars-256k261 KiB322 µs2.41 ms2.1 ms2.24 msunsupported1.35 ms2.34 ms308 µs0.24× of vyaml ▲ win
generic loadflow-heavy-64k64 KiB1.12 ms7.51 ms2.95 ms2.67 msunsupported1.31 ms4.73 ms1.09 ms0.85× of vyaml ▲ win
generic loadanchors-32k32 KiB381 µs2.14 ms907 µs1.84 msunsupported572 µs2.08 ms384 µs0.67× of vyaml ▲ win
generic loadunicode-32k32 KiB156 µs811 µs391 µs372 µsunsupported246 µs554 µs177 µs0.63× of vyaml ▲ win
generic loadscalar-styles-32k32 KiB218 µs1.28 ms588 µs599 µsunsupported320 µs824 µs234 µs0.68× of vyaml ▲ win
dumpcompose-wordpress815 B1.33 µs23.6 µs4.8 µs15.5 µsunsupported5.29 µs53.9 µs1.31 µs0.28× of sharpyaml ▲ win
dumpgha-workflow9.43 KiB12.5 µs255 µs32.7 µsdiffers [5]unsupported27 µs217 µs12.7 µs0.46× of vyaml ▲ win
dumphelm-ingress-nginx52.4 KiB17.7 µs351 µs31.8 µs251 µsunsupporteddiffers [11]253 µs18.4 µs0.56× of sharpyaml ▲ win
dumpopenapi-api-with-examples6.75 KiB5.9 µs111 µs13.3 µs74.7 µsunsupported14.6 µs117 µs6.62 µs0.44× of sharpyaml ▲ win
dumpopenapi-petstore5.34 KiB8.41 µs155 µs21.8 µs139 µsunsupported20.2 µs147 µs8.8 µs0.42× of vyaml ▲ win
dumpprometheus-config1.1 KiB816 ns19.3 µs3.55 µs9.68 µsunsupported4.18 µs48.5 µs837 ns0.23× of sharpyaml ▲ win
dumpreference-a51 B239 ns4.52 µs1.46 µs1.14 µsunsupporteddiffers [9]42.5 µs242 ns0.21× of sharpyaml-model ▲ win
dumpreference-b51 B241 ns4.62 µs1.74 µs1.38 µsunsupporteddiffers [9]41.1 µs238 ns0.18× of sharpyaml-model ▲ win
dumprecords-4k4.14 KiB13.4 µsdiffers [14]differs [2]121 µsunsupporteddiffers [10]154 µs13.6 µs0.11× of sharpyaml-model ▲ win
dumprecords-64k64.2 KiB174 µsdiffers [14]differs [2]1.99 msunsupporteddiffers [10]1.89 ms168 µs0.09× of yaml2jsonnode ▲ win
dumprecords-1m1 MiB3.11 msdiffers [14]differs [2]33.4 msunsupporteddiffers [10]41.1 ms3.28 ms0.09× of sharpyaml-model ▲ win
dumprecords-8m8 MiB30.4 msdiffers [14]differs [2]285 msunsupporteddiffers [10]582 ms26.5 ms0.11× of sharpyaml-model ▲ win
dumpcompose-merge-2k2.14 KiB9.01 µs109 µs18.6 µs (merged)105 µsunsupported23.2 µs140 µs9.34 µs0.48× of sharpyaml ▲ win
dumpcompose-merge-64k64.1 KiB265 µs2.95 ms628 µs (merged)2.49 msunsupported533 µs3.07 ms270 µs0.50× of vyaml ▲ win
dumpcompose-merge-1m1 MiB4.3 ms51 ms11.4 ms (merged)52 msunsupported8.98 ms88.8 ms4.39 ms0.48× of vyaml ▲ win
dumpopenapi-100k101 KiB231 µs4.29 ms525 µs1.82 msunsupported439 µs2.45 ms234 µs0.53× of vyaml ▲ win
dumpopenapi-8m8 MiB21.9 ms384 ms55.2 ms228 msunsupported39.3 ms480 ms21.6 ms0.56× of vyaml ▲ win
dumphelm-values-64k64 KiB72.6 µs1.57 ms156 µs1.18 msunsupported180 µs1.19 ms69.9 µs0.47× of sharpyaml ▲ win
dumphelm-values-1m1 MiB1.22 ms27.8 ms2.78 ms20.2 msunsupported2.88 ms24.2 ms1.33 ms0.44× of sharpyaml ▲ win
dumpdeep-block5.23 KiB4.52 µsrejects [13]rejects [1]rejects [6]unsupported11.2 µs95.4 µs4.48 µs0.40× of vyaml ▲ win
dumpdeep-flow202 B2.18 µsrejects [13]rejects [1]rejects [6]unsupported7.17 µs56.7 µs2.23 µs0.30× of vyaml ▲ win
dumpwide-map-64k64 KiB159 µs2.29 ms290 µs2.11 msunsupported290 µs2.44 ms159 µs0.55× of vyaml ▲ win
dumpwide-map-1m1 MiB1.97 ms33.8 ms4.72 ms32.2 msunsupported3.95 ms33.7 ms1.97 ms0.50× of vyaml ▲ win
dumplong-scalars-256k261 KiB110 µs4.03 ms719 µsdiffers [4]unsupporteddiffers [8]3.66 ms122 µs0.15× of sharpyaml ▲ win
dumpflow-heavy-64k64 KiB245 µs5.89 ms617 µs1.94 msunsupported571 µs2.73 ms243 µs0.43× of vyaml ▲ win
dumpanchors-32k32 KiB418 µs1.18 ms849 µs3.22 msunsupported872 µs4.43 ms428 µs0.49× of sharpyaml ▲ win
dumpunicode-32k32 KiB47 µs584 µs112 µsdiffers [3]unsupported50.6 µs416 µs48.7 µs0.93× of vyaml ▲ win
dumpscalar-styles-32k32 KiB71.1 µs923 µs123 µs723 µsunsupporteddiffers [9]603 µs70.4 µs0.58× of sharpyaml ▲ win
document parsecompose-wordpress815 B4.6 µsunsupportedunsupportedunsupported29.9 µs (bytes-only) †unsupportedunsupported2.73 µs0.15× of sharpyaml-syntax † (bytes-only) ▲ win
document parsegha-workflow9.43 KiB36 µsunsupportedunsupportedunsupported431 µs (bytes-only) †unsupportedunsupported40.3 µs0.08× of sharpyaml-syntax † (bytes-only) ▲ win
document parsehelm-ingress-nginx52.4 KiB64.5 µsunsupportedunsupportedunsupported1.14 ms (bytes-only) †unsupportedunsupported61.8 µs0.06× of sharpyaml-syntax † (bytes-only) ▲ win
document parsek8s-ingress-nginx-multi16 KiB72.8 µsunsupportedunsupportedunsupported858 µs (bytes-only) †unsupportedunsupported78.2 µs0.08× of sharpyaml-syntax † (bytes-only) ▲ win
document parseopenapi-api-with-examples6.75 KiB16.8 µsunsupportedunsupportedunsupported151 µs (bytes-only) †unsupportedunsupported14.9 µs0.11× of sharpyaml-syntax † (bytes-only) ▲ win
document parseopenapi-petstore5.34 KiB18 µsunsupportedunsupportedunsupported193 µs (bytes-only) †unsupportedunsupported17.7 µs0.09× of sharpyaml-syntax † (bytes-only) ▲ win
document parseprometheus-config1.1 KiB2.4 µsunsupportedunsupportedunsupported26.9 µs (bytes-only) †unsupportedunsupported2.35 µs0.09× of sharpyaml-syntax † (bytes-only) ▲ win
document parsereference-a51 B619 nsunsupportedunsupportedunsupported4.5 µs (bytes-only) †unsupportedunsupported610 ns0.14× of sharpyaml-syntax † (bytes-only) ▲ win
document parsereference-b51 B594 nsunsupportedunsupportedunsupported4.3 µs (bytes-only) †unsupportedunsupported609 ns0.14× of sharpyaml-syntax † (bytes-only) ▲ win
document parserecords-4k4.14 KiB30.8 µsunsupportedunsupportedunsupported271 µs (bytes-only) †unsupportedunsupported30.8 µs0.11× of sharpyaml-syntax † (bytes-only) ▲ win
document parserecords-64k64.2 KiB472 µsunsupportedunsupportedunsupported6.38 ms (bytes-only) †unsupportedunsupported514 µs0.07× of sharpyaml-syntax † (bytes-only) ▲ win
document parserecords-1m1 MiB7.52 msunsupportedunsupportedunsupported121 ms (bytes-only) †unsupportedunsupported7.38 ms0.06× of sharpyaml-syntax † (bytes-only) ▲ win
document parserecords-8m8 MiB60.1 msunsupportedunsupportedunsupported1.13 s (bytes-only) †unsupportedunsupported59.1 ms0.05× of sharpyaml-syntax † (bytes-only) ▲ win
document parsecompose-merge-2k2.14 KiB14 µsunsupportedunsupportedunsupported128 µs (bytes-only) †unsupportedunsupported17.3 µs0.11× of sharpyaml-syntax † (bytes-only) ▲ win
document parsecompose-merge-64k64.1 KiB449 µsunsupportedunsupportedunsupported5.29 ms (bytes-only) †unsupportedunsupported406 µs0.08× of sharpyaml-syntax † (bytes-only) ▲ win
document parsecompose-merge-1m1 MiB6.32 msunsupportedunsupportedunsupported109 ms (bytes-only) †unsupportedunsupported6.08 ms0.06× of sharpyaml-syntax † (bytes-only) ▲ win
document parsek8s-multi-16k16.4 KiB124 µsunsupportedunsupportedunsupported1.33 ms (bytes-only) †unsupportedunsupported125 µs0.09× of sharpyaml-syntax † (bytes-only) ▲ win
document parsek8s-multi-1m1 MiB8.08 msunsupportedunsupportedunsupported119 ms (bytes-only) †unsupportedunsupported7.49 ms0.07× of sharpyaml-syntax † (bytes-only) ▲ win
document parseopenapi-100k101 KiB544 µsunsupportedunsupportedunsupported6.89 ms (bytes-only) †unsupportedunsupported554 µs0.08× of sharpyaml-syntax † (bytes-only) ▲ win
document parseopenapi-8m8 MiB48.5 msunsupportedunsupportedunsupported840 ms (bytes-only) †unsupportedunsupported43.1 ms0.06× of sharpyaml-syntax † (bytes-only) ▲ win
document parsehelm-values-64k64 KiB275 µsunsupportedunsupportedunsupported3.48 ms (bytes-only) †unsupportedunsupported277 µs0.08× of sharpyaml-syntax † (bytes-only) ▲ win
document parsehelm-values-1m1 MiB4.3 msunsupportedunsupportedunsupported79.9 ms (bytes-only) †unsupportedunsupported4.54 ms0.05× of sharpyaml-syntax † (bytes-only) ▲ win
document parsedeep-block5.23 KiB11.5 µsunsupportedunsupportedunsupportedrejects [7]unsupportedunsupported11.3 µsno rival
document parsedeep-flow202 B6.17 µsunsupportedunsupportedunsupportedrejects [7]unsupportedunsupported6.6 µsno rival
document parsewide-map-64k64 KiB452 µsunsupportedunsupportedunsupported4.83 ms (bytes-only) †unsupportedunsupported455 µs0.09× of sharpyaml-syntax † (bytes-only) ▲ win
document parsewide-map-1m1 MiB5.86 msunsupportedunsupportedunsupported101 ms (bytes-only) †unsupportedunsupported5.9 ms0.06× of sharpyaml-syntax † (bytes-only) ▲ win
document parselong-scalars-256k261 KiB41.8 µsunsupportedunsupportedunsupported8.75 ms (bytes-only) †unsupportedunsupported39.3 µs<0.01× of sharpyaml-syntax † (bytes-only) ▲ win
document parseflow-heavy-64k64 KiB874 µsunsupportedunsupportedunsupported10.3 ms (bytes-only) †unsupportedunsupported874 µs0.08× of sharpyaml-syntax † (bytes-only) ▲ win
document parseanchors-32k32 KiB320 µsunsupportedunsupportedunsupported4.1 ms (bytes-only) †unsupportedunsupported322 µs0.08× of sharpyaml-syntax † (bytes-only) ▲ win
document parseunicode-32k32 KiB96.3 µsunsupportedunsupportedunsupported1.65 ms (bytes-only) †unsupportedunsupported101 µs0.06× of sharpyaml-syntax † (bytes-only) ▲ win
document parsescalar-styles-32k32 KiB159 µsunsupportedunsupportedunsupported2.15 ms (bytes-only) †unsupportedunsupported209 µs0.07× of sharpyaml-syntax † (bytes-only) ▲ win
unchanged emitcompose-wordpress815 B55.7 nsunsupportedunsupportedunsupported222 nsunsupportedunsupported64.7 ns0.25× of sharpyaml-syntax ▲ win
unchanged emitgha-workflow9.43 KiB1.15 µsunsupportedunsupportedunsupported2.1 µsunsupportedunsupported868 ns0.55× of sharpyaml-syntax ▲ win
unchanged emithelm-ingress-nginx52.4 KiB2.59 µsunsupportedunsupportedunsupported7.12 µsunsupportedunsupported1.58 µs0.36× of sharpyaml-syntax ▲ win
unchanged emitk8s-ingress-nginx-multi16 KiB1.33 µsunsupportedunsupportedunsupported2.45 µsunsupportedunsupported1.24 µs0.54× of sharpyaml-syntax ▲ win
unchanged emitopenapi-api-with-examples6.75 KiB997 nsunsupportedunsupportedunsupported1.55 µsunsupportedunsupported1.06 µs0.64× of sharpyaml-syntax ▲ win
unchanged emitopenapi-petstore5.34 KiB626 nsunsupportedunsupportedunsupported1.38 µsunsupportedunsupported622 ns0.45× of sharpyaml-syntax ▲ win
unchanged emitprometheus-config1.1 KiB59.8 nsunsupportedunsupportedunsupported275 nsunsupportedunsupported85.2 ns0.22× of sharpyaml-syntax ▲ win
unchanged emitreference-a51 B11.6 nsunsupportedunsupportedunsupported17.5 nsunsupportedunsupported11.5 ns0.66× of sharpyaml-syntax ▲ win
unchanged emitreference-b51 B11.2 nsunsupportedunsupportedunsupported15 nsunsupportedunsupported16.6 ns0.75× of sharpyaml-syntax ▲ win
unchanged emitrecords-4k4.14 KiB540 nsunsupportedunsupportedunsupported2.53 µsunsupportedunsupported567 ns0.21× of sharpyaml-syntax ▲ win
unchanged emitrecords-64k64.2 KiB4.12 µsunsupportedunsupportedunsupported9.38 µsunsupportedunsupported3.73 µs0.44× of sharpyaml-syntax ▲ win
unchanged emitrecords-1m1 MiB49 µsunsupportedunsupportedunsupported206 µsunsupportedunsupported51 µs0.24× of sharpyaml-syntax ▲ win
unchanged emitrecords-8m8 MiB745 µsunsupportedunsupportedunsupported4.2 msunsupportedunsupported660 µs0.18× of sharpyaml-syntax ▲ win
unchanged emitcompose-merge-2k2.14 KiB419 nsunsupportedunsupportedunsupported869 nsunsupportedunsupported286 ns0.48× of sharpyaml-syntax ▲ win
unchanged emitcompose-merge-64k64.1 KiB4.75 µsunsupportedunsupportedunsupported8.46 µsunsupportedunsupported5.46 µs0.56× of sharpyaml-syntax ▲ win
unchanged emitcompose-merge-1m1 MiB82.2 µsunsupportedunsupportedunsupported191 µsunsupportedunsupported82.7 µs0.43× of sharpyaml-syntax ▲ win
unchanged emitk8s-multi-16k16.4 KiB1.27 µsunsupportedunsupportedunsupported2.44 µsunsupportedunsupported1.21 µs0.52× of sharpyaml-syntax ▲ win
unchanged emitk8s-multi-1m1 MiB51.8 µsunsupportedunsupportedunsupported220 µsunsupportedunsupported70 µs0.24× of sharpyaml-syntax ▲ win
unchanged emitopenapi-100k101 KiB26.3 µsunsupportedunsupportedunsupported13.3 µsunsupportedunsupported23 µs1.97× of sharpyaml-syntax ▼ loss
unchanged emitopenapi-8m8 MiB3.14 msunsupportedunsupportedunsupported4.09 msunsupportedunsupported3.17 ms0.77× of sharpyaml-syntax ▲ win
unchanged emithelm-values-64k64 KiB2.74 µsunsupportedunsupportedunsupported8.94 µsunsupportedunsupported3.81 µs0.31× of sharpyaml-syntax ▲ win
unchanged emithelm-values-1m1 MiB40.4 µsunsupportedunsupportedunsupported181 µsunsupportedunsupported39.6 µs0.22× of sharpyaml-syntax ▲ win
unchanged emitdeep-block5.23 KiB1.35 µsunsupportedunsupportedunsupportedrejects [7]unsupportedunsupported454 nsno rival
unchanged emitdeep-flow202 B31.2 nsunsupportedunsupportedunsupportedrejects [7]unsupportedunsupported28.9 nsno rival
unchanged emitwide-map-64k64 KiB3.63 µsunsupportedunsupportedunsupported8.96 µsunsupportedunsupported4.41 µs0.40× of sharpyaml-syntax ▲ win
unchanged emitwide-map-1m1 MiB45.4 µsunsupportedunsupportedunsupported201 µsunsupportedunsupported40.2 µs0.23× of sharpyaml-syntax ▲ win
unchanged emitlong-scalars-256k261 KiB36.8 µsunsupportedunsupportedunsupported32 µsunsupportedunsupported36.1 µs1.15× of sharpyaml-syntax ▼ loss
unchanged emitflow-heavy-64k64 KiB5.31 µsunsupportedunsupportedunsupported10.3 µsunsupportedunsupported5.2 µs0.52× of sharpyaml-syntax ▲ win
unchanged emitanchors-32k32 KiB5.4 µsunsupportedunsupportedunsupported5.37 µsunsupportedunsupported5.27 µs1.01× of sharpyaml-syntax ● tie
unchanged emitunicode-32k32 KiB4.2 µsunsupportedunsupportedunsupported12.1 µsunsupportedunsupported4.62 µs0.35× of sharpyaml-syntax ▲ win
unchanged emitscalar-styles-32k32 KiB1.17 µsunsupportedunsupportedunsupported4.71 µsunsupportedunsupported1.28 µs0.25× of sharpyaml-syntax ▲ win
edit scriptcompose-wordpress815 B5.15 µsunsupportedunsupportedunsupported116 µs (harness-rendered) †unsupportedunsupported5.7 µs0.04× of sharpyaml-syntax † (harness-rendered) ▲ win
edit scriptgha-workflow9.43 KiB8.42 µsunsupportedunsupportedunsupported2.76 ms (harness-rendered) †unsupportedunsupported8.6 µs<0.01× of sharpyaml-syntax † (harness-rendered) ▲ win
edit scripthelm-ingress-nginx52.4 KiB27.9 µsunsupportedunsupportedunsupported5.78 ms (harness-rendered) †unsupportedunsupported28.2 µs<0.01× of sharpyaml-syntax † (harness-rendered) ▲ win
edit scriptopenapi-api-with-examples6.75 KiB7.16 µsunsupportedunsupportedunsupported350 µs (harness-rendered) †unsupportedunsupported6.55 µs0.02× of sharpyaml-syntax † (harness-rendered) ▲ win
edit scriptopenapi-petstore5.34 KiB7.92 µsunsupportedunsupportedunsupported778 µs (harness-rendered) †unsupportedunsupported7.28 µs0.01× of sharpyaml-syntax † (harness-rendered) ▲ win
edit scriptprometheus-config1.1 KiB2.57 µsunsupportedunsupportedunsupported57.5 µs (harness-rendered) †unsupportedunsupported3.32 µs0.04× of sharpyaml-syntax † (harness-rendered) ▲ win
edit scriptreference-a51 B1.44 µsunsupportedunsupportedunsupported5.22 µs (harness-rendered) †unsupportedunsupported1.45 µs0.28× of sharpyaml-syntax † (harness-rendered) ▲ win
edit scriptreference-b51 B1.58 µsunsupportedunsupportedunsupported5.31 µs (harness-rendered) †unsupportedunsupported1.38 µs0.30× of sharpyaml-syntax † (harness-rendered) ▲ win
edit scriptrecords-4k4.14 KiB8.6 µsunsupportedunsupportedunsupported1.22 ms (harness-rendered) †unsupportedunsupported8.96 µs<0.01× of sharpyaml-syntax † (harness-rendered) ▲ win
edit scriptrecords-64k64.2 KiB45.4 µsunsupportedunsupportedunsupported33.1 ms (harness-rendered) †unsupportedunsupported42.2 µs<0.01× of sharpyaml-syntax † (harness-rendered) ▲ win
edit scriptrecords-1m1 MiB740 µsunsupportedunsupportedunsupported624 ms (harness-rendered) †unsupportedunsupported672 µs<0.01× of sharpyaml-syntax † (harness-rendered) ▲ win
edit scriptrecords-8m8 MiB11.6 msunsupportedunsupportedunsupported4.55 s (harness-rendered) †unsupportedunsupported11.7 ms<0.01× of sharpyaml-syntax † (harness-rendered) ▲ win
edit scriptcompose-merge-2k2.14 KiB8.52 µsunsupportedunsupportedunsupported389 µs (harness-rendered) †unsupportedunsupported8.54 µs0.02× of sharpyaml-syntax † (harness-rendered) ▲ win
edit scriptcompose-merge-64k64.1 KiB77 µsunsupportedunsupportedunsupported22.1 ms (harness-rendered) †unsupportedunsupported79.1 µs<0.01× of sharpyaml-syntax † (harness-rendered) ▲ win
edit scriptcompose-merge-1m1 MiB1.33 msunsupportedunsupportedunsupported412 ms (harness-rendered) †unsupportedunsupported1.23 ms<0.01× of sharpyaml-syntax † (harness-rendered) ▲ win
edit scriptopenapi-100k101 KiB44.5 µsunsupportedunsupportedunsupported31.8 ms (harness-rendered) †unsupportedunsupported50.1 µs<0.01× of sharpyaml-syntax † (harness-rendered) ▲ win
edit scriptopenapi-8m8 MiB9.51 msunsupportedunsupportedunsupported2.86 s (harness-rendered) †unsupportedunsupported9.46 ms<0.01× of sharpyaml-syntax † (harness-rendered) ▲ win
edit scripthelm-values-64k64 KiB56.8 µsunsupportedunsupportedunsupported16.6 ms (harness-rendered) †unsupportedunsupported54 µs<0.01× of sharpyaml-syntax † (harness-rendered) ▲ win
edit scripthelm-values-1m1 MiB770 µsunsupportedunsupportedunsupported303 ms (harness-rendered) †unsupportedunsupported756 µs<0.01× of sharpyaml-syntax † (harness-rendered) ▲ win
edit scriptwide-map-64k64 KiB125 µsunsupportedunsupportedunsupported16 ms (harness-rendered) †unsupportedunsupported116 µs<0.01× of sharpyaml-syntax † (harness-rendered) ▲ win
edit scriptwide-map-1m1 MiB1.86 msunsupportedunsupportedunsupported254 ms (harness-rendered) †unsupportedunsupported1.84 ms<0.01× of sharpyaml-syntax † (harness-rendered) ▲ win
patch (RFC 6902)compose-wordpress815 B4.52 µsunsupportedunsupportedunsupportedunsupportedunsupporteddiffers [12]4.73 µsno rival
patch (RFC 6902)gha-workflow9.43 KiB8.51 µsunsupportedunsupportedunsupportedunsupportedunsupporteddiffers [12]8.37 µsno rival
patch (RFC 6902)reference-a51 B1.51 µsunsupportedunsupportedunsupportedunsupportedunsupporteddiffers [12]1.58 µsno rival
patch (RFC 6902)reference-b51 B1.45 µsunsupportedunsupportedunsupportedunsupportedunsupporteddiffers [12]1.42 µsno rival
patch (RFC 6902)records-4k4.14 KiB7.5 µsunsupportedunsupportedunsupportedunsupportedunsupporteddiffers [12]7.45 µsno rival
patch (RFC 6902)records-64k64.2 KiB59.2 µsunsupportedunsupportedunsupportedunsupportedunsupporteddiffers [12]52.1 µsno rival
patch (RFC 6902)records-1m1 MiB988 µsunsupportedunsupportedunsupportedunsupportedunsupporteddiffers [12]1.02 msno rival
patch (RFC 6902)records-8m8 MiB14.8 msunsupportedunsupportedunsupportedunsupportedunsupporteddiffers [12]14.4 msno rival

Allocated bytes per task (MemoryDiagnoser)

TaskWorkloadInputoneyaml-csharpyamldotnetsharpyamlsharpyaml-modelsharpyaml-syntaxvyamlyaml2jsonnodeoneyaml-csharp-genOurs vs strongest competitor
typed loadgha-workflow9.43 KiB27.5 KiB397 KiB204 KiBunsupportedunsupported30.6 KiB395 KiB27.5 KiB0.90× of vyaml ▲ win
typed loadrecords-4k4.14 KiB11.2 KiB349 KiB156 KiBunsupportedunsupported11.2 KiB325 KiB11.2 KiB1.00× of vyaml ● tie
typed loadrecords-64k64.2 KiB153 KiB5.14 MiB2.28 MiBunsupportedunsupported171 KiB4.77 MiB153 KiB0.90× of vyaml ▲ win
typed loadrecords-1m1 MiB2.34 MiB80.7 MiB35.8 MiBunsupportedunsupported2.64 MiB74.9 MiB2.34 MiB0.89× of vyaml ▲ win
typed loadrecords-8m8 MiB18.6 MiB660 MiB283 MiBunsupportedunsupported21 MiB593 MiB18.6 MiB0.89× of vyaml ▲ win
generic loadcompose-wordpress815 B3.34 KiB42.4 KiB24 KiB20.9 KiBunsupported3.6 KiB34.3 KiB3.34 KiB0.93× of vyaml ▲ win
generic loadgha-workflow9.43 KiB39.3 KiB434 KiB237 KiB220 KiBunsupported48.2 KiB357 KiB39.3 KiB0.82× of vyaml ▲ win
generic loadhelm-ingress-nginx52.4 KiB52.9 KiB690 KiB412 KiB392 KiBunsupported67.4 KiB599 KiB52.9 KiB0.78× of vyaml ▲ win
generic loadk8s-ingress-nginx-multi16 KiB69.9 KiB937 KiBunsupported450 KiBunsupported105 KiB758 KiB69.9 KiB0.67× of vyaml ▲ win
generic loadopenapi-api-with-examples6.75 KiB20.8 KiB211 KiB112 KiB105 KiBunsupported21.6 KiB170 KiB20.8 KiB0.96× of vyaml ▲ win
generic loadopenapi-petstore5.34 KiB30.1 KiB255 KiB143 KiB132 KiBunsupported31.5 KiB216 KiB30.1 KiB0.95× of vyaml ▲ win
generic loadprometheus-config1.1 KiB3.15 KiB37.7 KiB20.7 KiB19.6 KiBunsupported3.3 KiB32.1 KiB3.15 KiB0.95× of vyaml ▲ win
generic loadreference-a51 B320 B12.5 KiB5.09 KiB4.97 KiBunsupported392 B11.1 KiB320 B0.82× of vyaml ▲ win
generic loadreference-b51 B320 B12.3 KiB5.09 KiB4.97 KiBunsupported392 B11.1 KiB320 B0.82× of vyaml ▲ win
generic loadrecords-4k4.14 KiB34.8 KiB378 KiB199 KiB182 KiBunsupported42 KiB313 KiB34.8 KiB0.83× of vyaml ▲ win
generic loadrecords-64k64.2 KiB414 KiB5.58 MiB2.93 MiB2.67 MiBunsupported648 KiB4.61 MiB414 KiB0.64× of vyaml ▲ win
generic loadrecords-1m1 MiB6.33 MiB87.6 MiB45.9 MiB42 MiBunsupported9.96 MiB72.3 MiB6.33 MiB0.64× of vyaml ▲ win
generic loadrecords-8m8 MiB50.2 MiB693 MiB364 MiB332 MiBunsupported78.9 MiB572 MiB50.2 MiB0.64× of vyaml ▲ win
generic loadcompose-merge-2k2.14 KiB16.7 KiB179 KiB95.3 KiB110 KiBunsupported26.6 KiB162 KiB16.7 KiB0.63× of vyaml ▲ win
generic loadcompose-merge-64k64.1 KiB338 KiB5.02 MiB2.52 MiB3.01 MiBunsupported762 KiB4.37 MiB338 KiB0.44× of vyaml ▲ win
generic loadcompose-merge-1m1 MiB5.28 MiB74.4 MiB39.5 MiB47 MiBunsupported11.7 MiB68.1 MiB5.28 MiB0.45× of vyaml ▲ win
generic loadk8s-multi-16k16.4 KiB138 KiB1.61 MiBunsupported804 KiBunsupported184 KiB1.33 MiB138 KiB0.75× of vyaml ▲ win
generic loadk8s-multi-1m1 MiB8.15 MiB98.4 MiBunsupported48 MiBunsupported11 MiB81 MiB8.15 MiB0.74× of vyaml ▲ win
generic loadopenapi-100k101 KiB611 KiB7.02 MiB3.72 MiB3.41 MiBunsupported829 KiB5.81 MiB611 KiB0.74× of vyaml ▲ win
generic loadopenapi-8m8 MiB48.2 MiB564 MiB299 MiB275 MiBunsupported65.4 MiB468 MiB48.2 MiB0.74× of vyaml ▲ win
generic loadhelm-values-64k64 KiB213 KiB3.27 MiB1.67 MiB1.59 MiBunsupported337 KiB2.64 MiB213 KiB0.63× of vyaml ▲ win
generic loadhelm-values-1m1 MiB3.34 MiB54.5 MiB26.6 MiB25.2 MiBunsupported5.28 MiB41.9 MiB3.34 MiB0.63× of vyaml ▲ win
generic loaddeep-block5.23 KiB21.3 KiB200 KiBrejects [1]rejects [6]unsupported23.7 KiB171 KiB21.3 KiB0.90× of vyaml ▲ win
generic loaddeep-flow202 B8.62 KiB130 KiBrejects [1]rejects [6]unsupported8.62 KiB91.5 KiB8.62 KiB1.00× of vyaml ● tie
generic loadwide-map-64k64 KiB448 KiB4.94 MiB2.31 MiB2.26 MiBunsupported462 KiB3.77 MiB448 KiB0.97× of vyaml ▲ win
generic loadwide-map-1m1 MiB7.25 MiB68.5 MiB35.7 MiB33.9 MiBunsupported7.45 MiB56.8 MiB7.25 MiB0.97× of vyaml ▲ win
generic loadlong-scalars-256k261 KiB516 KiB1.58 MiB1.88 MiB1.88 MiBunsupported515 KiB1.58 MiB516 KiB1.00× of vyaml ● tie
generic loadflow-heavy-64k64 KiB646 KiB10.6 MiB5 MiB4.72 MiBunsupported1.02e+03 KiB8.48 MiB646 KiB0.63× of vyaml ▲ win
generic loadanchors-32k32 KiB312 KiB2.89 MiB1.78 MiB4.06 MiBunsupported1.13 MiB4.32 MiB312 KiB0.27× of vyaml ▲ win
generic loadunicode-32k32 KiB103 KiB1.07 MiB522 KiB567 KiBunsupported102 KiB886 KiB103 KiB1.01× of vyaml ● tie
generic loadscalar-styles-32k32 KiB115 KiB1.63 MiB1.05 MiB1.04 MiBunsupported178 KiB1.34 MiB115 KiB0.65× of vyaml ▲ win
dumpcompose-wordpress815 B720 B37.9 KiB6.7 KiB8.54 KiBunsupported65.1 KiB117 KiB720 B0.10× of sharpyaml ▲ win
dumpgha-workflow9.43 KiB8.41 KiB256 KiB35.1 KiBdiffers [5]unsupported78.4 KiB350 KiB8.41 KiB0.24× of sharpyaml ▲ win
dumphelm-ingress-nginx52.4 KiB9.13 KiB374 KiB29.5 KiB80.3 KiBunsupporteddiffers [11]450 KiB9.13 KiB0.31× of sharpyaml ▲ win
dumpopenapi-api-with-examples6.75 KiB4.2 KiB132 KiB14.9 KiB28.6 KiBunsupported70.9 KiB217 KiB4.2 KiB0.28× of sharpyaml ▲ win
dumpopenapi-petstore5.34 KiB5.41 KiB161 KiB18.1 KiB46.1 KiBunsupported73.2 KiB251 KiB5.41 KiB0.30× of sharpyaml ▲ win
dumpprometheus-config1.1 KiB408 B34.4 KiB2.59 KiB5.48 KiBunsupported65.3 KiB115 KiB408 B0.15× of sharpyaml ▲ win
dumpreference-a51 B112 B18.5 KiB1.55 KiB1.93 KiBunsupporteddiffers [9]101 KiB112 B0.07× of sharpyaml ▲ win
dumpreference-b51 B112 B18.5 KiB1.55 KiB1.93 KiBunsupporteddiffers [9]101 KiB112 B0.07× of sharpyaml ▲ win
dumprecords-4k4.14 KiB4.23 KiBdiffers [14]differs [2]49.6 KiBunsupporteddiffers [10]298 KiB4.23 KiB0.09× of sharpyaml-model ▲ win
dumprecords-64k64.2 KiB64.8 KiBdiffers [14]differs [2]636 KiBunsupporteddiffers [10]2.98 MiB64.8 KiB0.10× of sharpyaml-model ▲ win
dumprecords-1m1 MiB1.01 MiBdiffers [14]differs [2]9.7 MiBunsupporteddiffers [10]45.4 MiB1.01 MiB0.10× of sharpyaml-model ▲ win
dumprecords-8m8 MiB8.05 MiBdiffers [14]differs [2]77.4 MiBunsupporteddiffers [10]359 MiB8.05 MiB0.10× of sharpyaml-model ▲ win
dumpcompose-merge-2k2.14 KiB4.11 KiB123 KiB13 KiB39.8 KiBunsupported75.2 KiB273 KiB4.11 KiB0.32× of sharpyaml ▲ win
dumpcompose-merge-64k64.1 KiB124 KiB2.91 MiB350 KiB904 KiBunsupported519 KiB4.94 MiB124 KiB0.35× of sharpyaml ▲ win
dumpcompose-merge-1m1 MiB1.92 MiB45.3 MiB8.9 MiB13.8 MiBunsupported8.91 MiB75.6 MiB1.92 MiB0.22× of sharpyaml ▲ win
dumpopenapi-100k101 KiB104 KiB3.88 MiB312 KiB849 KiBunsupported464 KiB4.12 MiB104 KiB0.33× of sharpyaml ▲ win
dumpopenapi-8m8 MiB8.25 MiB311 MiB41.2 MiB62.7 MiBunsupported53.2 MiB324 MiB8.25 MiB0.20× of sharpyaml ▲ win
dumphelm-values-64k64 KiB39.4 KiB1.73 MiB120 KiB365 KiBunsupported187 KiB1.83 MiB39.4 KiB0.33× of sharpyaml ▲ win
dumphelm-values-1m1 MiB631 KiB26.3 MiB1.85 MiB5.43 MiBunsupported3.84 MiB27.4 MiB631 KiB0.33× of sharpyaml ▲ win
dumpdeep-block5.23 KiB10.2 KiBrejects [13]rejects [1]rejects [6]unsupported72.9 KiB277 KiB10.2 KiB0.14× of vyaml ▲ win
dumpdeep-flow202 B280 Brejects [13]rejects [1]rejects [6]unsupported68.1 KiB145 KiB280 B<0.01× of vyaml ▲ win
dumpwide-map-64k64 KiB64.2 KiB2.37 MiB236 KiB464 KiBunsupported309 KiB2.34 MiB64.2 KiB0.27× of sharpyaml ▲ win
dumpwide-map-1m1 MiB1 MiB34.5 MiB5.64 MiB7.03 MiBunsupported5.59 MiB34.2 MiB1 MiB0.18× of vyaml ▲ win
dumplong-scalars-256k261 KiB260 KiB1.55 MiB776 KiBdiffers [4]unsupporteddiffers [8]1.38 MiB260 KiB0.33× of sharpyaml ▲ win
dumpflow-heavy-64k64 KiB84.4 KiB6.23 MiB333 KiB848 KiBunsupported472 KiB5.03 MiB84.4 KiB0.25× of sharpyaml ▲ win
dumpanchors-32k32 KiB145 KiB1.55 MiB447 KiB1.42 MiBunsupported863 KiB9.8 MiB145 KiB0.33× of sharpyaml ▲ win
dumpunicode-32k32 KiB25.9 KiB606 KiB68.3 KiBdiffers [3]unsupported64.2 KiB578 KiB25.9 KiB0.40× of vyaml ▲ win
dumpscalar-styles-32k32 KiB29.7 KiB923 KiB87.5 KiB230 KiBunsupporteddiffers [9]927 KiB29.7 KiB0.34× of sharpyaml ▲ win
document parsecompose-wordpress815 B264 Bunsupportedunsupportedunsupported52 KiB †unsupportedunsupported264 B<0.01× of sharpyaml-syntax † (bytes-only) ▲ win
document parsegha-workflow9.43 KiB264 Bunsupportedunsupportedunsupported647 KiB †unsupportedunsupported264 B<0.01× of sharpyaml-syntax † (bytes-only) ▲ win
document parsehelm-ingress-nginx52.4 KiB264 Bunsupportedunsupportedunsupported1.26 MiB †unsupportedunsupported264 B<0.01× of sharpyaml-syntax † (bytes-only) ▲ win
document parsek8s-ingress-nginx-multi16 KiB264 Bunsupportedunsupportedunsupported1.24 MiB †unsupportedunsupported264 B<0.01× of sharpyaml-syntax † (bytes-only) ▲ win
document parseopenapi-api-with-examples6.75 KiB264 Bunsupportedunsupportedunsupported231 KiB †unsupportedunsupported264 B<0.01× of sharpyaml-syntax † (bytes-only) ▲ win
document parseopenapi-petstore5.34 KiB264 Bunsupportedunsupportedunsupported349 KiB †unsupportedunsupported264 B<0.01× of sharpyaml-syntax † (bytes-only) ▲ win
document parseprometheus-config1.1 KiB264 Bunsupportedunsupportedunsupported48.4 KiB †unsupportedunsupported264 B<0.01× of sharpyaml-syntax † (bytes-only) ▲ win
document parsereference-a51 B264 Bunsupportedunsupportedunsupported9.82 KiB †unsupportedunsupported264 B0.03× of sharpyaml-syntax † (bytes-only) ▲ win
document parsereference-b51 B264 Bunsupportedunsupportedunsupported9.82 KiB †unsupportedunsupported264 B0.03× of sharpyaml-syntax † (bytes-only) ▲ win
document parserecords-4k4.14 KiB264 Bunsupportedunsupportedunsupported416 KiB †unsupportedunsupported264 B<0.01× of sharpyaml-syntax † (bytes-only) ▲ win
document parserecords-64k64.2 KiB264 Bunsupportedunsupportedunsupported6.24 MiB †unsupportedunsupported264 B<0.01× of sharpyaml-syntax † (bytes-only) ▲ win
document parserecords-1m1 MiB264 Bunsupportedunsupportedunsupported98.6 MiB †unsupportedunsupported264 B<0.01× of sharpyaml-syntax † (bytes-only) ▲ win
document parserecords-8m8 MiB264 Bunsupportedunsupportedunsupported784 MiB †unsupportedunsupported264 B<0.01× of sharpyaml-syntax † (bytes-only) ▲ win
document parsecompose-merge-2k2.14 KiB264 Bunsupportedunsupportedunsupported206 KiB †unsupportedunsupported264 B<0.01× of sharpyaml-syntax † (bytes-only) ▲ win
document parsecompose-merge-64k64.1 KiB264 Bunsupportedunsupportedunsupported5.85 MiB †unsupportedunsupported264 B<0.01× of sharpyaml-syntax † (bytes-only) ▲ win
document parsecompose-merge-1m1 MiB264 Bunsupportedunsupportedunsupported92.1 MiB †unsupportedunsupported264 B<0.01× of sharpyaml-syntax † (bytes-only) ▲ win
document parsek8s-multi-16k16.4 KiB264 Bunsupportedunsupportedunsupported1.62 MiB †unsupportedunsupported264 B<0.01× of sharpyaml-syntax † (bytes-only) ▲ win
document parsek8s-multi-1m1 MiB264 Bunsupportedunsupportedunsupported101 MiB †unsupportedunsupported264 B<0.01× of sharpyaml-syntax † (bytes-only) ▲ win
document parseopenapi-100k101 KiB264 Bunsupportedunsupportedunsupported9.47 MiB †unsupportedunsupported264 B<0.01× of sharpyaml-syntax † (bytes-only) ▲ win
document parseopenapi-8m8 MiB264 Bunsupportedunsupportedunsupported680 MiB †unsupportedunsupported264 B<0.01× of sharpyaml-syntax † (bytes-only) ▲ win
document parsehelm-values-64k64 KiB264 Bunsupportedunsupportedunsupported4.8 MiB †unsupportedunsupported264 B<0.01× of sharpyaml-syntax † (bytes-only) ▲ win
document parsehelm-values-1m1 MiB264 Bunsupportedunsupportedunsupported76.3 MiB †unsupportedunsupported264 B<0.01× of sharpyaml-syntax † (bytes-only) ▲ win
document parsedeep-block5.23 KiB264 Bunsupportedunsupportedunsupportedrejects [7]unsupportedunsupported264 Bno rival
document parsedeep-flow202 B264 Bunsupportedunsupportedunsupportedrejects [7]unsupportedunsupported264 Bno rival
document parsewide-map-64k64 KiB264 Bunsupportedunsupportedunsupported5.97 MiB †unsupportedunsupported264 B<0.01× of sharpyaml-syntax † (bytes-only) ▲ win
document parsewide-map-1m1 MiB264 Bunsupportedunsupportedunsupported90.5 MiB †unsupportedunsupported264 B<0.01× of sharpyaml-syntax † (bytes-only) ▲ win
document parselong-scalars-256k261 KiB264 Bunsupportedunsupportedunsupported9.98 MiB †unsupportedunsupported264 B<0.01× of sharpyaml-syntax † (bytes-only) ▲ win
document parseflow-heavy-64k64 KiB264 Bunsupportedunsupportedunsupported11.5 MiB †unsupportedunsupported264 B<0.01× of sharpyaml-syntax † (bytes-only) ▲ win
document parseanchors-32k32 KiB264 Bunsupportedunsupportedunsupported5.28 MiB †unsupportedunsupported264 B<0.01× of sharpyaml-syntax † (bytes-only) ▲ win
document parseunicode-32k32 KiB264 Bunsupportedunsupportedunsupported2.29 MiB †unsupportedunsupported264 B<0.01× of sharpyaml-syntax † (bytes-only) ▲ win
document parsescalar-styles-32k32 KiB264 Bunsupportedunsupportedunsupported3.04 MiB †unsupportedunsupported264 B<0.01× of sharpyaml-syntax † (bytes-only) ▲ win
unchanged emitcompose-wordpress815 B840 Bunsupportedunsupportedunsupported840 Bunsupportedunsupported840 B1.00× of sharpyaml-syntax ● tie
unchanged emitgha-workflow9.43 KiB9.45 KiBunsupportedunsupportedunsupported9.45 KiBunsupportedunsupported9.45 KiB1.00× of sharpyaml-syntax ● tie
unchanged emithelm-ingress-nginx52.4 KiB52.4 KiBunsupportedunsupportedunsupported52.4 KiBunsupportedunsupported52.4 KiB1.00× of sharpyaml-syntax ● tie
unchanged emitk8s-ingress-nginx-multi16 KiB16 KiBunsupportedunsupportedunsupported16 KiBunsupportedunsupported16 KiB1.00× of sharpyaml-syntax ● tie
unchanged emitopenapi-api-with-examples6.75 KiB6.77 KiBunsupportedunsupportedunsupported6.77 KiBunsupportedunsupported6.77 KiB1.00× of sharpyaml-syntax ● tie
unchanged emitopenapi-petstore5.34 KiB5.37 KiBunsupportedunsupportedunsupported5.37 KiBunsupportedunsupported5.37 KiB1.00× of sharpyaml-syntax ● tie
unchanged emitprometheus-config1.1 KiB1.12 KiBunsupportedunsupportedunsupported1.12 KiBunsupportedunsupported1.12 KiB1.00× of sharpyaml-syntax ● tie
unchanged emitreference-a51 B80 Bunsupportedunsupportedunsupported80 Bunsupportedunsupported80 B1.00× of sharpyaml-syntax ● tie
unchanged emitreference-b51 B80 Bunsupportedunsupportedunsupported80 Bunsupportedunsupported80 B1.00× of sharpyaml-syntax ● tie
unchanged emitrecords-4k4.14 KiB4.17 KiBunsupportedunsupportedunsupported4.17 KiBunsupportedunsupported4.17 KiB1.00× of sharpyaml-syntax ● tie
unchanged emitrecords-64k64.2 KiB64.2 KiBunsupportedunsupportedunsupported64.2 KiBunsupportedunsupported64.2 KiB1.00× of sharpyaml-syntax ● tie
unchanged emitrecords-1m1 MiB1 MiBunsupportedunsupportedunsupported1 MiBunsupportedunsupported1 MiB1.00× of sharpyaml-syntax ● tie
unchanged emitrecords-8m8 MiB8 MiBunsupportedunsupportedunsupported8 MiBunsupportedunsupported8 MiB1.00× of sharpyaml-syntax ● tie
unchanged emitcompose-merge-2k2.14 KiB2.16 KiBunsupportedunsupportedunsupported2.16 KiBunsupportedunsupported2.16 KiB1.00× of sharpyaml-syntax ● tie
unchanged emitcompose-merge-64k64.1 KiB64.1 KiBunsupportedunsupportedunsupported64.1 KiBunsupportedunsupported64.1 KiB1.00× of sharpyaml-syntax ● tie
unchanged emitcompose-merge-1m1 MiB1 MiBunsupportedunsupportedunsupported1 MiBunsupportedunsupported1 MiB1.00× of sharpyaml-syntax ● tie
unchanged emitk8s-multi-16k16.4 KiB16.4 KiBunsupportedunsupportedunsupported16.4 KiBunsupportedunsupported16.4 KiB1.00× of sharpyaml-syntax ● tie
unchanged emitk8s-multi-1m1 MiB1 MiBunsupportedunsupportedunsupported1 MiBunsupportedunsupported1 MiB1.00× of sharpyaml-syntax ● tie
unchanged emitopenapi-100k101 KiB101 KiBunsupportedunsupportedunsupported101 KiBunsupportedunsupported101 KiB1.00× of sharpyaml-syntax ● tie
unchanged emitopenapi-8m8 MiB8 MiBunsupportedunsupportedunsupported8 MiBunsupportedunsupported8 MiB1.00× of sharpyaml-syntax ● tie
unchanged emithelm-values-64k64 KiB64.1 KiBunsupportedunsupportedunsupported64.1 KiBunsupportedunsupported64.1 KiB1.00× of sharpyaml-syntax ● tie
unchanged emithelm-values-1m1 MiB1 MiBunsupportedunsupportedunsupported1 MiBunsupportedunsupported1 MiB1.00× of sharpyaml-syntax ● tie
unchanged emitdeep-block5.23 KiB5.26 KiBunsupportedunsupportedunsupportedrejects [7]unsupportedunsupported5.26 KiBno rival
unchanged emitdeep-flow202 B232 Bunsupportedunsupportedunsupportedrejects [7]unsupportedunsupported232 Bno rival
unchanged emitwide-map-64k64 KiB64 KiBunsupportedunsupportedunsupported64 KiBunsupportedunsupported64 KiB1.00× of sharpyaml-syntax ● tie
unchanged emitwide-map-1m1 MiB1 MiBunsupportedunsupportedunsupported1 MiBunsupportedunsupported1 MiB1.00× of sharpyaml-syntax ● tie
unchanged emitlong-scalars-256k261 KiB261 KiBunsupportedunsupportedunsupported261 KiBunsupportedunsupported261 KiB1.00× of sharpyaml-syntax ● tie
unchanged emitflow-heavy-64k64 KiB64 KiBunsupportedunsupportedunsupported64 KiBunsupportedunsupported64 KiB1.00× of sharpyaml-syntax ● tie
unchanged emitanchors-32k32 KiB32 KiBunsupportedunsupportedunsupported32 KiBunsupportedunsupported32 KiB1.00× of sharpyaml-syntax ● tie
unchanged emitunicode-32k32 KiB32.1 KiBunsupportedunsupportedunsupported32.1 KiBunsupportedunsupported32.1 KiB1.00× of sharpyaml-syntax ● tie
unchanged emitscalar-styles-32k32 KiB32.1 KiBunsupportedunsupportedunsupported32.1 KiBunsupportedunsupported32.1 KiB1.00× of sharpyaml-syntax ● tie
edit scriptcompose-wordpress815 B2.48 KiBunsupportedunsupportedunsupported238 KiB †unsupportedunsupported2.48 KiB0.01× of sharpyaml-syntax † (harness-rendered) ▲ win
edit scriptgha-workflow9.43 KiB11.1 KiBunsupportedunsupportedunsupported2.93 MiB †unsupportedunsupported11.1 KiB<0.01× of sharpyaml-syntax † (harness-rendered) ▲ win
edit scripthelm-ingress-nginx52.4 KiB54.4 KiBunsupportedunsupportedunsupported6.03 MiB †unsupportedunsupported54.4 KiB<0.01× of sharpyaml-syntax † (harness-rendered) ▲ win
edit scriptopenapi-api-with-examples6.75 KiB7.7 KiBunsupportedunsupportedunsupported621 KiB †unsupportedunsupported7.7 KiB0.01× of sharpyaml-syntax † (harness-rendered) ▲ win
edit scriptopenapi-petstore5.34 KiB5.5 KiBunsupportedunsupportedunsupported1.48 MiB †unsupportedunsupported5.5 KiB<0.01× of sharpyaml-syntax † (harness-rendered) ▲ win
edit scriptprometheus-config1.1 KiB2.1 KiBunsupportedunsupportedunsupported127 KiB †unsupportedunsupported2.1 KiB0.02× of sharpyaml-syntax † (harness-rendered) ▲ win
edit scriptreference-a51 B536 Bunsupportedunsupportedunsupported15.6 KiB †unsupportedunsupported536 B0.03× of sharpyaml-syntax † (harness-rendered) ▲ win
edit scriptreference-b51 B536 Bunsupportedunsupportedunsupported15.6 KiB †unsupportedunsupported536 B0.03× of sharpyaml-syntax † (harness-rendered) ▲ win
edit scriptrecords-4k4.14 KiB5.7 KiBunsupportedunsupportedunsupported1.92 MiB †unsupportedunsupported5.7 KiB<0.01× of sharpyaml-syntax † (harness-rendered) ▲ win
edit scriptrecords-64k64.2 KiB65.8 KiBunsupportedunsupportedunsupported29.6 MiB †unsupportedunsupported65.8 KiB<0.01× of sharpyaml-syntax † (harness-rendered) ▲ win
edit scriptrecords-1m1 MiB1 MiBunsupportedunsupportedunsupported469 MiB †unsupportedunsupported1 MiB<0.01× of sharpyaml-syntax † (harness-rendered) ▲ win
edit scriptrecords-8m8 MiB8 MiBunsupportedunsupportedunsupported3.63 GiB †unsupportedunsupported8 MiB<0.01× of sharpyaml-syntax † (harness-rendered) ▲ win
edit scriptcompose-merge-2k2.14 KiB3.42 KiBunsupportedunsupportedunsupported752 KiB †unsupportedunsupported3.42 KiB<0.01× of sharpyaml-syntax † (harness-rendered) ▲ win
edit scriptcompose-merge-64k64.1 KiB65.8 KiBunsupportedunsupportedunsupported21.3 MiB †unsupportedunsupported65.8 KiB<0.01× of sharpyaml-syntax † (harness-rendered) ▲ win
edit scriptcompose-merge-1m1 MiB1 MiBunsupportedunsupportedunsupported335 MiB †unsupportedunsupported1 MiB<0.01× of sharpyaml-syntax † (harness-rendered) ▲ win
edit scriptopenapi-100k101 KiB102 KiBunsupportedunsupportedunsupported34 MiB †unsupportedunsupported102 KiB<0.01× of sharpyaml-syntax † (harness-rendered) ▲ win
edit scriptopenapi-8m8 MiB8 MiBunsupportedunsupportedunsupported2.43 GiB †unsupportedunsupported8 MiB<0.01× of sharpyaml-syntax † (harness-rendered) ▲ win
edit scripthelm-values-64k64 KiB65.6 KiBunsupportedunsupportedunsupported17.2 MiB †unsupportedunsupported65.6 KiB<0.01× of sharpyaml-syntax † (harness-rendered) ▲ win
edit scripthelm-values-1m1 MiB1 MiBunsupportedunsupportedunsupported274 MiB †unsupportedunsupported1 MiB<0.01× of sharpyaml-syntax † (harness-rendered) ▲ win
edit scriptwide-map-64k64 KiB64.9 KiBunsupportedunsupportedunsupported15.7 MiB †unsupportedunsupported64.9 KiB<0.01× of sharpyaml-syntax † (harness-rendered) ▲ win
edit scriptwide-map-1m1 MiB1 MiBunsupportedunsupportedunsupported237 MiB †unsupportedunsupported1 MiB<0.01× of sharpyaml-syntax † (harness-rendered) ▲ win
patch (RFC 6902)compose-wordpress815 B2.66 KiBunsupportedunsupportedunsupportedunsupportedunsupporteddiffers [12]2.66 KiBno rival
patch (RFC 6902)gha-workflow9.43 KiB10.8 KiBunsupportedunsupportedunsupportedunsupportedunsupporteddiffers [12]10.8 KiBno rival
patch (RFC 6902)reference-a51 B432 Bunsupportedunsupportedunsupportedunsupportedunsupporteddiffers [12]432 Bno rival
patch (RFC 6902)reference-b51 B432 Bunsupportedunsupportedunsupportedunsupportedunsupporteddiffers [12]432 Bno rival
patch (RFC 6902)records-4k4.14 KiB5.4 KiBunsupportedunsupportedunsupportedunsupportedunsupporteddiffers [12]5.4 KiBno rival
patch (RFC 6902)records-64k64.2 KiB65.5 KiBunsupportedunsupportedunsupportedunsupportedunsupporteddiffers [12]65.5 KiBno rival
patch (RFC 6902)records-1m1 MiB1 MiBunsupportedunsupportedunsupportedunsupportedunsupporteddiffers [12]1 MiBno rival
patch (RFC 6902)records-8m8 MiB8 MiBunsupportedunsupportedunsupportedunsupportedunsupporteddiffers [12]8 MiBno rival

Cells without a number, with what the correctness guard found:

  1. sharpyaml (rejects; generic-load ×2, dump ×2): Stops at its default nesting limit, which the benchmark leaves as it is. What the guard found, in generic-load on deep-block: default limit, not raised: YamlException: The maximum nesting depth of 64 has be…
  2. sharpyaml (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 on records-4k: read back: at /1/score: got 812, expected 812.0
  3. sharpyaml-model (differs; dump ×1): What the guard found, in dump on unicode-32k: read back: at /2: got "Ø3DÞ00 grin 0", expected "\uD83D\uDE00 grin 0"
  4. sharpyaml-model (differs; dump ×1): What the guard found, in dump on long-scalars-256k: read back: at /folded: got "epsilon zeta psi omega delta xi epsilon mu beta theta rho alpha psi delta delta…, expected "epsilon zeta psi omega delta xi epsilon mu beta theta rho alpha psi delta delta…
  5. sharpyaml-model (differs; dump ×1): What the guard found, in dump on gha-workflow: read back: at /jobs/test-output/steps/2/run: got "echo \"Commit: ${{ steps.checkout.outputs.commit }}\"\necho \"Ref: ${{ steps.ch…, expected "echo \"Commit: ${{ steps.checkout.outputs.commit }}\"\nec…
  6. sharpyaml-model (rejects; generic-load ×2, dump ×2): Stops at its default nesting limit, which the benchmark leaves as it is. What the guard found, in generic-load on deep-block: default limit, not raised: YamlException: The maximum nesting depth of 64 has be…
  7. sharpyaml-syntax (rejects; document-parse ×2, unchanged-emit ×2): Stops at its default nesting limit, which the benchmark leaves as it is. What the guard found, in document-parse on deep-block: default limit, not raised: YamlException: The maximum nesting depth of 64 has be…
  8. vyaml (differs; dump ×1): What the guard found, in dump on long-scalars-256k: read back: at /folded: got "epsilon zeta psi omega delta xi epsilon mu beta theta rho alpha psi delta delta…, expected "epsilon zeta psi omega delta xi epsilon mu beta theta rho alpha psi delta delta…
  9. vyaml (differs; dump ×3): A string that ends with a newline reads back without that final newline. What the guard found, in dump on reference-a: read back: at /b: got "this is a test", expected "this is a test\n"
  10. vyaml (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 on records-4k: read back: at /1/score: got 812, expected 812.0
  11. vyaml (differs; dump ×1): 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 on helm-ingress-nginx: read back: at /defaultBackend/image/tag: got 1.5, expected "1.5"
  12. yaml2jsonnode (differs; patch ×8): Patches a JSON tree and writes it back as YAML, so comments, blank lines and quoting are not kept (it is not lossless). What the guard found, in patch on compose-wordpress: byte 20: got 694 bytes ":\n db:\n image: \"mariadb:11.4\"\n ", expected 860 bytes ":\n db:\n # We use a mariadb image"
  13. yamldotnet (rejects; dump ×2): Stops at its default nesting limit, which the benchmark leaves as it is. What the guard found, in dump on deep-block: default limit, not raised: MaximumRecursionLevelReachedException: Too much recur…
  14. yamldotnet (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 on records-4k: read back: at /1/score: got 812, expected 812.0

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. The verdict of a task in the chart and the first table is never better than the real-world workloads allow, nor better than all of the task's workloads in these tables allow, generated and reference ones included, while its speed figure is over the real-world workloads.

Method: full run of 2026-10-18T00:48:41Z. Kit 0.1.0 (revision 6cc83d12fbc6); text generated by kit revision c1647a46aa6d. oneyaml-csharp c23a19250217; competitors yamldotnet 18.1.0, sharpyaml 3.16.0, sharpyaml-model 3.16.0, sharpyaml-syntax 3.16.0, vyaml 1.4.1, yaml2jsonnode 3.0.1, oneyaml-csharp-gen c23a19250217. Runtime .NET 10.0.11 (target linux-x64), measured with BenchmarkDotNet 0.15.8: mean time per task from BenchmarkDotNet's ShortRun job (3 warm-up and 3 measured iterations) run in process; one invocation per iteration runs a batch of prepared tasks and the time is divided by the batch size; every cell is measured in a process of its own, because the heap that earlier cells leave behind changed the result. Each process runs with DOTNET_TC_CallCountingDelayMs=0 (call counting starts immediately instead of after the default delay), and no other DOTNET_ or COMPlus_ variable set, and every cell is first warmed up for 1000 ms of whole batches before BenchmarkDotNet's own warm-up, because a new process starts at the runtime's unoptimised tier. Memory: bytes allocated per task from BenchmarkDotNet's MemoryDiagnoser; allocation calls are not available. 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 3.72 before, 4.52 after, at most 8.48 during).

Writing a document back

The unchanged emit rows time YamlDocument.ToUtf8Bytes() on a document that was not edited, and each call returns a new array. Where another library writes a file back faster, its unchanged emit row in Results is marked ▼ loss, and the verdict in Results at a glance counts it. Most of the time in those rows is the operating system supplying fresh memory pages for the new output array right after a garbage collection, and every library in the run pays that cost the same way (the kit's .NET harness notes describe it). That is what this run measured on this host, not a bound.

If you write large documents again and again, WriteTo(IBufferWriter<byte>) and WriteTo(Stream) write into a buffer you own and reuse, so they do not allocate a new output array on every call the way ToUtf8Bytes() does (Input, output and lifetime). The benchmarks do not measure those calls, so this page has no figure for them.

Running the benchmarks yourself

The published numbers come from the kit, which runs every library on the same workloads. To measure a checkout of this repository there, set KIT_ONEYAML_CSHARP_SRC to it and follow the kit's benchmark notes.

This repository also has BenchmarkDotNet benchmarks in bench/OneYaml.Benchmarks, used while developing; their README says how to run them. Their results are not the published ones.