Latest benchmark run
Generated from the most recent benchmark run. This page is written by CI — see scripts/bench-to-json.py — and is not the curated baseline. For the reviewed figures, with their caveats and methodology, see Baseline.
⚠ This run is marked degraded — do not cite it
Host was executing roughly 8x slow: every figure comparable to the 2026-06-03 baseline came out 4.57x-20.89x slower, including third-party serde_json, and a pure single-core loop took 5.19s against ~0.4s expected. Ratios between libraries are indicative; absolute times are not usable. Replaced automatically by the first clean CI run.
| Generated | 2026-08-01T06:56:12Z |
| Commit | daf377c on main |
| Toolchain | rustc 1.97.1 (8bab26f4f 2026-07-14) |
| Platform | Darwin 24.6.0 x86_64 |
| Runner | local workstation (Intel Xeon W-2150B @ 3.00GHz, 10c/20t) |
| Measurements | 77 |
Relative performance
Each cell is the library's time divided by glaucus's on the same fixture, so above 1.00x means slower than glaucus and below means faster. Ratios lead here because they survive runner noise: every library in a group is measured on the same machine in the same run, so a host-wide slowdown largely cancels out of the ratio even when it wrecks the absolute times.
composer
| Library | small | medium | large |
|---|---|---|---|
glaucus (baseline) | 1.00x | 1.00x | 1.00x |
rust_yaml | 2.21x | 4.15x | 53.27x |
yaml_rust2 | 1.34x | 1.47x | 1.47x |
emitter
| Library | small | medium | large |
|---|---|---|---|
glaucus (baseline) | 1.00x | 1.00x | 1.00x |
rust_yaml | 10.22x | 12.32x | 15.99x |
yaml_rust2 | 2.39x | 1.94x | 2.09x |
full_pipeline_node
| Library | small | medium | large |
|---|---|---|---|
compose_all | — | — | — |
facade | — | — | — |
parser
| Library | small | medium | large |
|---|---|---|---|
glaucus (baseline) | 1.00x | 1.00x | 1.00x |
yaml_rust2 | 1.11x | 1.27x | 1.24x |
roundtrip_compare
| Library | small | medium | large |
|---|---|---|---|
glaucus (baseline) | 1.00x | 1.00x | 1.00x |
rust_yaml | 3.00x | 5.05x | 49.25x |
yaml_rust2 | 1.47x | 1.53x | 1.51x |
scanner
| Library | small | medium | large |
|---|---|---|---|
glaucus (baseline) | 1.00x | 1.00x | 1.00x |
serde_deserialize
| Library | small | medium | large |
|---|---|---|---|
glaucus (baseline) | 1.00x | 1.00x | 1.00x |
noyalib | 1.05x | 1.03x | 1.01x |
serde_json | 0.13x | 0.14x | 0.12x |
serde_saphyr | 2.30x | 2.30x | 2.31x |
serde_yaml_ng | 1.31x | 1.40x | 1.33x |
serde_serialize
| Library | small | medium | large |
|---|---|---|---|
glaucus (baseline) | 1.00x | 1.00x | 1.00x |
noyalib | 1.51x | 1.29x | 1.09x |
serde_json | 0.30x | 0.29x | 0.24x |
serde_saphyr | 2.43x | 2.05x | 1.74x |
serde_yaml_ng | 3.42x | 2.89x | 2.39x |
Absolute times
Medians. Treat these as indicative unless the run is known to come from a quiet, dedicated machine — shared CI runners routinely vary by tens of percent between runs, which is why the ratios above are the figures worth tracking.
composer
| Library | small | medium | large |
|---|---|---|---|
glaucus | 218.21 µs | 2.02 ms | 101.92 ms |
rust_yaml | 481.88 µs | 8.37 ms | 5429.20 ms |
yaml_rust2 | 292.98 µs | 2.96 ms | 149.68 ms |
emitter
| Library | small | medium | large |
|---|---|---|---|
glaucus | 20.21 µs | 249.64 µs | 11.78 ms |
rust_yaml | 206.55 µs | 3.07 ms | 188.44 ms |
yaml_rust2 | 48.32 µs | 483.79 µs | 24.65 ms |
full_pipeline_node
| Library | small | medium | large |
|---|---|---|---|
compose_all | 221.26 µs | 2.05 ms | 102.88 ms |
facade | 211.89 µs | 2.04 ms | 102.71 ms |
parser
| Library | small | medium | large |
|---|---|---|---|
glaucus | 161.60 µs | 1.47 ms | 74.32 ms |
yaml_rust2 | 178.95 µs | 1.87 ms | 92.45 ms |
roundtrip_compare
| Library | small | medium | large |
|---|---|---|---|
glaucus | 234.43 µs | 2.30 ms | 115.20 ms |
rust_yaml | 702.81 µs | 11.64 ms | 5673.80 ms |
yaml_rust2 | 345.48 µs | 3.52 ms | 174.07 ms |
scanner
| Library | small | medium | large |
|---|---|---|---|
glaucus | 70.59 µs | 706.95 µs | 35.09 ms |
serde_deserialize
| Library | small | medium | large |
|---|---|---|---|
glaucus | 234.79 µs | 2.27 ms | 114.13 ms |
noyalib | 247.05 µs | 2.33 ms | 115.35 ms |
serde_json | 29.71 µs | 314.42 µs | 14.11 ms |
serde_saphyr | 540.81 µs | 5.21 ms | 263.83 ms |
serde_yaml_ng | 306.70 µs | 3.18 ms | 151.26 ms |
serde_serialize
| Library | small | medium | large |
|---|---|---|---|
glaucus | 43.25 µs | 525.33 µs | 30.14 ms |
noyalib | 65.23 µs | 679.35 µs | 32.85 ms |
serde_json | 12.78 µs | 154.82 µs | 7.19 ms |
serde_saphyr | 105.13 µs | 1.08 ms | 52.50 ms |
serde_yaml_ng | 147.92 µs | 1.52 ms | 72.15 ms |
Single-implementation groups
Groups whose benchmark ids carry no library segment — glaucus-only paths, with no competitor to compare against.
roundtrip_node
| Case | Median | Spread |
|---|---|---|
small | 448.59 µs | ±0.9% |
medium | 4.39 ms | ±0.8% |
large | 216.68 ms | ±0.8% |
typed_struct
| Case | Median | Spread |
|---|---|---|
deserialize | 227.79 µs | ±1.2% |
roundtrip | 270.59 µs | ±1.4% |