Skip to content

Rust — Benchmark Results

Generated: 2026-07-11T10:57:31.969979

Published local snapshot (not regenerated by GitHub Actions). Numbers may differ if you re-run benchmarks on another machine.

Serializer inventory and caveats: Rust overview. Methods: Analysis Methodology. Metric definitions & importance tiers: Metrics catalog.

Pivot tables

Multi-way leaderboards emphasize high-importance metrics (configurable via metrics.multi_way in master config). Harness modes (CSV StringOrStream): bytes mode = in-memory buffer API; stream mode = write/read through a stream-like path. These names are not payload sizes. In each table, rows are sorted by serializer name; bold marks the semantic best value in that column (lowest time; highest ops/s). Ties are all bolded. Latency tables are in microseconds (µs). Batch fixtures show as Type · N instances (from DataTypeInstanceCount; e.g. Message · 100 instances).

Summary

Default multi-serializer view shows high-importance metrics only (METRICS.md). Rows are sorted by serializer name. Bold marks the semantic best value in each column (lowest latency / size; highest ops/s). Pairwise / version A/B reports use the full metric set. Latency cells are µs (analysis storage remains ns).

serializer Median total (µs) Median ser (µs) Median deser (µs) Ops/s (from mean) Median size (B) Samples Fidelity
bincode:2.0.1 25.8 6.98 18.8 1.63M 9.86K 1736 1.00
bitcode:0.6.9 67.8 37.7 30 0.535M 9.77K 1769 1.00
bson:2.15.0 108 30.3 77.2 0.552M 23.7K 1799 1.00
ciborium:0.2.2 79.9 15.1 64.8 0.681M 17.2K 1721 1.00
flexbuffers:2.0.0 127 65.6 61.2 0.354M 22.9K 1772 1.00
minicbor:0.25.1 43.8 17.9 25.8 1.55M 10.5K 1715 1.00
nanoserde:0.1.37 30.1 11.9 18.1 1.89M 14.3K 1726 1.00
postcard:1.1.3 27 7.72 19.2 2.44M 9.85K 1748 1.00
prost:0.13.5 31.5 8.81 22.6 1.61M 10.2K 1773 1.00
rkyv:0.8.17 23.3 9.1 14.1 2.43M 10.3K 1572 1.00
rmp-serde:1.3.1 36.4 7.88 28.5 1.32M 17.7K 1770 1.00
serde_json:1.0.150 79.1 25.7 53.3 0.84M 22.9K 1784 1.00
simd-json:0.14.3 80.1 27 53.1 0.623M 22.9K 1762 1.00
sonic-rs:0.3.17 61.1 23.9 37.1 1.02M 22.9K 1788 1.00
speedy:0.8.7 19 4.44 14.5 4.27M 11.8K 1753 1.00

Total Time

serializer bytes mode/mean bytes mode/median stream mode/mean stream mode/median
bincode:2.0.1 0.184 0.183 0.207 0.205
bitcode:0.6.9 0.584 0.583 0.598 0.599
bson:2.15.0 0.418 0.415 0.437 0.434
ciborium:0.2.2 0.363 0.361 0.38 0.379
flexbuffers:2.0.0 0.768 0.768 0.779 0.778
minicbor:0.25.1 0.15 0.149 0.164 0.163
nanoserde:0.1.37 0.132 0.131 0.145 0.145
postcard:1.1.3 0.109 0.109 0.124 0.125
prost:0.13.5 0.15 0.149 0.167 0.168
rkyv:0.8.17 0.125 0.125 0.141 0.141
rmp-serde:1.3.1 0.194 0.194 0.217 0.216
serde_json:1.0.150 0.272 0.272 0.299 0.3
simd-json:0.14.3 0.377 0.375 0.391 0.391
sonic-rs:0.3.17 0.234 0.235 0.248 0.249
speedy:0.8.7 0.0621 0.062 0.076 0.076

Ops/Sec

serializer Document · 1 instance Document · 100 instances Event · 1 instance Event · 100 instances Message · 1 instance Message · 100 instances Strings · 1 instance Strings · 100 instances Telemetry · 1 instance Telemetry · 100 instances
bincode:2.0.1 1.4M 13K 5.7M 84K 5.4M 96K 0.9M 8.1K 3.2M 38K
bitcode:0.6.9 0.43M 3.7K 1.5M 15K 1.7M 15K 0.92M 7K 0.77M 7.4K
bson:2.15.0 0.28M 2.7K 2.1M 21K 2.4M 21K 0.39M 2.9K 0.38M 3.8K
ciborium:0.2.2 0.34M 3.3K 2.6M 24K 2.8M 25K 0.42M 3.6K 0.79M 7.8K
flexbuffers:2.0.0 0.19M 1.8K 1.2M 13K 1.3M 13K 0.4M 3.4K 0.44M 4.4K
minicbor:0.25.1 0.99M 8.2K 6.1M 62K 6.7M 66K 0.86M 4.7K 1.3M 13K
nanoserde:0.1.37 1.5M 11K 7M 66K 7.6M 78K 0.79M 7.1K 2.7M 26K
postcard:1.1.3 1.6M 14K 9.1M 92K 9.2M 110K 1.1M 7.5K 4.6M 24K
prost:0.13.5 0.95M 9.5K 5.6M 64K 6.7M 78K 0.67M 6.8K 2.6M 28K
rkyv:0.8.17 1.8M - 6.5M 71K 8M 85K 1.1M 6.2K 5.3M 46K
rmp-serde:1.3.1 0.7M 6.4K 4.9M 53K 5.2M 58K 0.96M 7.9K 1.9M 20K
serde_json:1.0.150 0.39M 3.4K 3.3M 32K 3.7M 33K 0.66M 4.3K 0.52M 5.2K
simd-json:0.14.3 0.39M 3.6K 2M 22K 2.7M 23K 0.62M 4.5K 0.47M 4.6K
sonic-rs:0.3.17 0.46M 4.5K 4.2M 41K 4.3M 44K 0.9M 6.9K 0.59M 5.1K
speedy:0.8.7 2.9M 17K 15M 130K 16M 150K 1.8M 9.7K 10M 74K

Within-category ranking

Compare serializers within the same paradigm (not across JSON vs zero-copy). Values are mean Ser+Deser ops/s over fixtures, using the harness bytes mode only (buffer API: encode to a byte buffer / decode from a slice — not “number of bytes”). Higher is better. Stream mode is excluded here. Rows are sorted by serializer name. Each numeric column uses one unit (K or M) for the whole column, with 2 significant digits (display only; CSV unchanged). Bold = best in column (ops/s: highest).

JSON

serializer mean ops/s (bytes mode) (M)
serde_json:1.0.150 0.86M
simd-json:0.14.3 0.62M
sonic-rs:0.3.17 1.1M

Rust-centric binary

serializer mean ops/s (bytes mode) (M)
bincode:2.0.1 1.7M
bitcode:0.6.9 0.54M
nanoserde:0.1.37 2M
postcard:1.1.3 2.6M
speedy:0.8.7 4.7M

Schema / zero-copy family

serializer mean ops/s (bytes mode) (M)
flexbuffers:2.0.0 0.36M
prost:0.13.5 1.7M
rkyv:0.8.17 2.5M

Schemaless binary (interop)

serializer mean ops/s (bytes mode) (M)
bson:2.15.0 0.56M
ciborium:0.2.2 0.69M
minicbor:0.25.1 1.6M
rmp-serde:1.3.1 1.4M

Fidelity notes (Rust)

  • prost maps ISO timestamps through millisecond integers; harness fidelity allows date-string drift on types that carry timestamps (e.g. message/event/document/telemetry).
  • rkyv timed deserialize materializes owned values for comparison; pure access (zero-copy) would be faster and is documented on the overview.
  • simd-json serialize uses serde_json (crate optimizes parse).

Latency distributions

Each figure pairs mean bars (left: ser / deser mean µs, linear from 0) with split violins (right: full sample density, linear from 0). Top 5 serializers by mean total time per fixture (display only; tables list all). Provenance (fixture, CSV path, modes, n) is printed on each image.

Document · 1 instance

Document · 1 instance

Document · 100 instances

Document · 100 instances

Event · 1 instance

Event · 1 instance

Event · 100 instances

Event · 100 instances

Message · 1 instance

Message · 1 instance

Message · 100 instances

Message · 100 instances

Strings · 1 instance

Strings · 1 instance

Strings · 100 instances

Strings · 100 instances

Telemetry · 1 instance

Telemetry · 1 instance

Telemetry · 100 instances

Telemetry · 100 instances

Regenerate

Published snapshots are produced locally (not by GitHub Actions). After running benchmarks (each run creates a timestamped YYYY-MM-DD-HHMMSS.csv):

analyze-benchmarks              # all languages
analyze-benchmarks -l rust   # this language only

That refreshes this language's results tables and latency distributions under docs/analysis/plots/violin/. The hub Benchmark Results is a static index and is not rewritten. Commit the updated results.md / plot paths as needed.

Run configuration (important)

Show host, seed, serializers, and source CSV

Key fields from the run sidecar (*.configs.json, or legacy *.environment.json). Full metric definitions: Metrics catalog. Optional blocks (dataset, serializers) appear only when captured.

  • Source CSV: /home/leo/PycharmProjects/GLD/seriailizer-benchmark/logs/rust/2026-07-10-162643.csv
  • run=2026-07-10-162643
  • language=rust
  • os=Linux 6.8.0-124-generic
  • cpu=12th Gen Intel(R) Core(TM) i7-12800H (20 threads)
  • ram=31.0 GiB
  • runtimes: rustc=rustc 1.96.0 (ac68faa20 2026-05-25), python=3.14.0, node=24.15.0
  • git=995336e dirty
  • seed=42
  • warmup_reps=1
  • serializers=15
  • metrics_profile=multi_way
  • Fixtures (config): message, document, telemetry, strings, event
  • Serializers (from CSV):
  • bincode @ 2.0.1
  • bitcode @ 0.6.9
  • bson @ 2.15.0
  • ciborium @ 0.2.2
  • flexbuffers @ 2.0.0
  • minicbor @ 0.25.1
  • nanoserde @ 0.1.37
  • postcard @ 1.1.3
  • prost @ 0.13.5
  • rkyv @ 0.8.17
  • rmp-serde @ 1.3.1
  • serde_json @ 1.0.150
  • simd-json @ 0.14.3
  • sonic-rs @ 0.3.17
  • speedy @ 0.8.7