Measurement console · run 2026-08-28
How fast can Ruby read and write your data?
Every XML, JSON, YAML and TOML serializer in the ecosystem, measured on the same workloads across20platform and Ruby combinations. Pick a format, pin a reference, and read the field.
Field ranking — iterations per second, higher is better
macOS 14 · arm64 · Ruby 3.2 · Parse · large input
Consistency across input sizes — log scale
A library that wins at every size is a safe default; one that wins only at large fits that workload.
Memory — large input, lower is better
Solid: allocated during operation · outline: retained afterwards
- ox249709.60 GB
- nokogiri566073.33 GB
- rexml1898582.15 GB
- oga3260168.26 GB
“nokogiri parses large XML 1.0× faster than ox on macOS 14 · arm64 · Ruby 3.2 — serialbench, 2026-08-28”
Will it run on my stack — coverage across measured environments
Derived from the runs themselves: a dot means the library loaded and completed the benchmark on that platform.
| Library | macOS 14arm64 · 3.2 | macOS 14arm64 · 3.3 | macOS 14arm64 · 3.4 | macOS 14arm64 · 4.0 | macOS 15 Intelx64 · 3.2 | macOS 15 Intelx64 · 3.3 | macOS 15 Intelx64 · 3.4 | macOS 15 Intelx64 · 4.0 | macOS 15arm64 · 3.2 | macOS 15arm64 · 3.3 | macOS 15arm64 · 3.4 | macOS 15arm64 · 4.0 | macOS 26 Intelx64 · 3.2 | macOS 26 Intelx64 · 3.3 | macOS 26 Intelx64 · 3.4 | macOS 26 Intelx64 · 4.0 | macOS 26arm64 · 3.2 | macOS 26arm64 · 3.3 | macOS 26arm64 · 3.4 | macOS 26arm64 · 4.0 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| json | ||||||||||||||||||||
| nokogiri | ||||||||||||||||||||
| oga | ||||||||||||||||||||
| oj | ||||||||||||||||||||
| ox | ||||||||||||||||||||
| psych | ||||||||||||||||||||
| rapidjson | ||||||||||||||||||||
| rexml | ||||||||||||||||||||
| toml-rb | ||||||||||||||||||||
| tomlib | ||||||||||||||||||||
| tomlrb | ||||||||||||||||||||
| yajl |
Feature comparison — what each API offers, beyond speed
Capabilities declared by the adapters · all libraries benchmark DOM-style parsing; a StAX column appears when a binding exposes a pull API.
Raw data
Full results per environment and the complete resultset are exported as YAML alongside this site —data/<environment>.yamlanddata/resultset.yaml. Re-run any leg withserialbench environment executeusing the configs in the repository.