Tab Computing

Oyl

Faster YAML, less memory

Oyl is a YAML 1.2 library in C from Tab Computing. It's correct on the whole YAML Test Suite, 4 to 12 times faster than libyaml, and hardened against hostile input. We help teams put it to work wherever YAML costs them time and memory.

Tell us about your YAML Oyl on GitHub

Case study: Helm repository indexes

Helm reads a chart repository's whole index.yaml when it adds the repository and when it pulls a chart. Big indexes make that expensive. A 65 MB index ran Helm out of memory at 2 GB (helm#9931). One Argo CD operator measured about 900 MB per chart pull from a 40 MB index, with up to 30 running at a time (argo-cd#23402). Flux's source controller has been killed for running out of memory at 1 GiB (flux2#4635). And when Argo CD fetches a chart with helm pull --repo, Helm parses the index twice: once to check it, then again from a temporary copy.

We rebuilt Helm with Oyl reading the index. The output is the same; the cost is a fraction:

A 64.5 MB index: 935 charts, 57,307 versions
CommandHelm 4.3.1With Oyl
helm repo add2.81 s · 1,368 MiB0.82 s · 556 MiB
helm pull2.76 s · 1,043 MiB0.75 s · 369 MiB
helm pull --repo, as Argo CD runs it5.73 s · 1,446 MiB1.54 s · 592 MiB
Bitnami's index: 27.6 MB, 19,133 versions
CommandHelm 4.3.1With Oyl
helm repo add1.13 s · 635 MiB0.36 s · 272 MiB
helm pull1.14 s · 554 MiB0.33 s · 194 MiB
helm pull --repo, as Argo CD runs it2.26 s · 625 MiB0.66 s · 328 MiB

Helm 4.3.1 built from source twice, the second time with the YAML step of its index loader replaced by Oyl's YAMLToJSONStrict, followed by the same strict JSON decode. Indexes served from a local web server; time and peak memory per process, median of three runs. Both builds print identical helm search repo -l -o json output, and Helm's repository tests pass with Oyl. The 64.5 MB index was merged with Helm's own code from 19 public indexes, to match the size in helm#9931.

What Oyl is

How we can help

Speed up your YAML path

We put Oyl behind the YAML step that's costing you, in Go, Rust, Crystal or C, and check its output byte for byte against what you use today.

Helm and Argo CD with big indexes

A Helm build with Oyl's index loader, a drop-in for Argo CD repo servers and CI runners that read large chart repositories.

A YAML performance review

We find where parsing and converting YAML cost you time and memory, down to the CPU's counters, and fix what we find, sometimes without Oyl at all.

Support and custom work

Priority fixes and upgrades for Oyl in production, and new bindings, dialects or schemas when you need them.

Who's behind it

Oyl is built by Thomas Sawyer at Tab Computing. Thomas has worked with YAML since 2002, when he joined the yaml-core mailing list while the spec was still a draft, and he took part in the design discussions for YAML 1.1 and 1.2. He has maintained Ruby Facets since 2004. He built Oyl with AI as a coding partner, and wrote about it in A Quarter Inch.

Tell us what you're parsing

What reads your YAML, how big does it get, and what does it cost you now? Thomas reads every message and replies by email, usually within two business days. Or write to contact@tabcomputing.com.