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 · 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

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.1bitcode@ 0.6.9bson@ 2.15.0ciborium@ 0.2.2flexbuffers@ 2.0.0minicbor@ 0.25.1nanoserde@ 0.1.37postcard@ 1.1.3prost@ 0.13.5rkyv@ 0.8.17rmp-serde@ 1.3.1serde_json@ 1.0.150simd-json@ 0.14.3sonic-rs@ 0.3.17speedy@ 0.8.7