Rust serialization benchmark

The goal of these benchmarks is to provide thorough and complete benchmarks for various rust serialization frameworks.

Maintainers

These benchmarks are maintained by a small group of volunteers. Special thanks to:

These benchmarks are a work in progress

These benchmarks are still being developed and pull requests to improve benchmarks are welcome.

Interactive site

Calculate the number of messages per second that can be sent/received with various rust serialization frameworks and compression libraries. Documentation

Format

All tests benchmark the following properties (time or size):

Zero-copy deserialization libraries have an additional set of benchmarks:

Some benchmark results may be italicized and followed by an asterisk. Mouse over these for more details on what situation was benchmarked. Some common terms for those variants:

Other footnotes are located at the bottom of the page.

Last updated: 2026-07-07 02:16:53

Runtime info

rustc version

rustc 1.99.0-nightly (c4af71034 2026-07-06)
binary: rustc
commit-hash: c4af71034e89a431eeee91125a31ad001379faac
commit-date: 2026-07-06
host: x86_64-unknown-linux-gnu
release: 1.99.0-nightly
LLVM version: 22.1.8

CPU info

Architecture:                            x86_64
CPU op-mode(s):                          32-bit, 64-bit
Address sizes:                           48 bits physical, 48 bits virtual
Byte Order:                              Little Endian
CPU(s):                                  4
On-line CPU(s) list:                     0-3
Vendor ID:                               AuthenticAMD
Model name:                              AMD EPYC 7763 64-Core Processor
CPU family:                              25
Model:                                   1
Thread(s) per core:                      2
Core(s) per socket:                      2
Socket(s):                               1
Stepping:                                1
BogoMIPS:                                4890.86
Flags:                                   fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt pdpe1gb rdtscp lm constant_tsc rep_good nopl tsc_reliable nonstop_tsc cpuid extd_apicid aperfmperf tsc_known_freq pni pclmulqdq ssse3 fma cx16 pcid sse4_1 sse4_2 movbe popcnt aes xsave avx f16c rdrand hypervisor lahf_lm cmp_legacy svm cr8_legacy abm sse4a misalignsse 3dnowprefetch osvw topoext vmmcall fsgsbase bmi1 avx2 smep bmi2 erms invpcid rdseed adx smap clflushopt clwb sha_ni xsaveopt xsavec xgetbv1 xsaves user_shstk clzero xsaveerptr rdpru arat npt nrip_save tsc_scale vmcb_clean flushbyasid decodeassists pausefilter pfthreshold v_vmsave_vmload umip vaes vpclmulqdq rdpid fsrm
Virtualization:                          AMD-V
Hypervisor vendor:                       Microsoft
Virtualization type:                     full
L1d cache:                               64 KiB (2 instances)
L1i cache:                               64 KiB (2 instances)
L2 cache:                                1 MiB (2 instances)
L3 cache:                                32 MiB (1 instance)
NUMA node(s):                            1
NUMA node0 CPU(s):                       0-3
Vulnerability Gather data sampling:      Not affected
Vulnerability Ghostwrite:                Not affected
Vulnerability Indirect target selection: Not affected
Vulnerability Itlb multihit:             Not affected
Vulnerability L1tf:                      Not affected
Vulnerability Mds:                       Not affected
Vulnerability Meltdown:                  Not affected
Vulnerability Mmio stale data:           Not affected
Vulnerability Old microcode:             Not affected
Vulnerability Reg file data sampling:    Not affected
Vulnerability Retbleed:                  Not affected
Vulnerability Spec rstack overflow:      Vulnerable: Safe RET, no microcode
Vulnerability Spec store bypass:         Vulnerable
Vulnerability Spectre v1:                Mitigation; usercopy/swapgs barriers and __user pointer sanitization
Vulnerability Spectre v2:                Mitigation; Retpolines; STIBP disabled; RSB filling; PBRSB-eIBRS Not affected; BHI Not affected
Vulnerability Srbds:                     Not affected
Vulnerability Tsa:                       Vulnerable: No microcode
Vulnerability Tsx async abort:           Not affected
Vulnerability Vmscape:                   Not affected

log

This data set is composed of HTTP request logs that are small and contain many strings.

Raw data

For operations, time per iteration; for size, bytes. Lower is better.

Serialize / deserialize speed and size

Crate Serialize Deserialize Borrow Size Zlib Zstd Zstd Time
bilrost 0.1015.0 460.98 µs* 415.89 µs* 2.5718 ms 865.08 µs 804955 328941 284849 4.2775 ms
bin-proto 0.12.8 4.3301 ms 4.6983 ms 1045784 373127 311553 4.7386 ms
bincode 2.0.1 368.56 µs 2.1557 ms 697.96 µs 741295 303944 256422 3.7634 ms
bincode 1.3.3 525.29 µs 2.0681 ms 609.77 µs 1045784 373127 311553 4.6012 ms
bitcode 0.6.9 138.30 µs 1.4597 ms 60.708 µs 703710 288826 227322 2.7045 ms
borsh 1.7.0 540.95 µs 2.1698 ms 885780 362204 286248 4.2796 ms
capnp:
capnp 0.26.0
599.36 µs 1.5060 ms* 1443216 1046865* 513986 481681* 426532 458024* 6.2564 ms 5.4839 ms*
cbor:
cbor4ii 1.2.2
617.86 µs 4.9260 ms 3.4380 ms 1407835 403440 323561 5.2402 ms
cbor:
ciborium 0.2.2
3.0980 ms 11.188 ms 1407835 403440 323561 4.9004 ms
cbor:
serde_cbor 0.11.2
1.8847 ms 4.9660 ms 3.3782 ms 1407835 403440 323561 4.8588 ms
columnar 0.13.1 248.64 µs 2.1201 ms 737.31 µs* 1045928 370212 293907 4.2904 ms
compactly 0.1.7 25.158 ms 16.659 ms 239520 239720 239532 236.70 µs
databuf 0.5.0 262.24 µs 2.0174 ms 659.65 µs 765778 311715 263914 3.5959 ms
dlhn 0.1.7 665.54 µs 2.5829 ms 724953 301446 253056 3.3588 ms
flatbuffers 25.12.19 1.0470 ms 1276368 468539 388381 4.8933 ms
flexbuffers 25.12.19 6.7401 ms 7.3357 ms 5.6151 ms 1829756 714318 691541 8.5372 ms
json:
flexon 0.4.6
2.7138 ms 3.8044 ms 1827461 470560 360727 5.6830 ms
json:
serde_json 1.0.150
3.9866 ms 6.0108 ms 1827461 470560 360727 5.6216 ms
json:
simd-json 0.17.0
2.1667 ms 4.7125 ms 1827461 470560 360727 5.6041 ms
messagepack:
msgpacker 0.7.1
348.37 µs 2.5768 ms 927.60 µs 764996 315291 264212 3.5920 ms
messagepack:
rmp-serde 1.3.1
1.5477 ms 3.2096 ms 1.4297 ms 784997 325384 277608 3.9357 ms
messagepack:
zerompk 0.6.0
358.77 µs 2.2502 ms 779.38 µs 784997 325384 277608 3.9107 ms
minicbor 2.2.2 466.11 µs 2.9828 ms 1.3897 ms 817830 332671 284034 4.0665 ms
nachricht-serde 0.4.0 5.3443 ms 4.0759 ms 2.4948 ms 818669 332556 284797 4.2151 ms
nanoserde 0.2.1 254.99 µs 2.0856 ms 1045784 373127 311553 4.3017 ms
nibblecode 0.1.0 194.00 µs 1011487 473998 404669 5.4412 ms
postcard 1.1.3 423.90 µs 2.3253 ms 604.84 µs 724953 302399 252968 3.3306 ms
pot 3.0.1 2.2729 ms 5.7016 ms 4.3395 ms 971922 372513 303636 4.4787 ms
protobuf:
buffa 0.8.0
765.62 µs* 2.5369 ms* 3.3194 ms* 3.3989 ms* 2.0401 ms 884628 363130 314959 4.4280 ms
protobuf:
prost 0.14.4
944.74 µs* 2.4872 ms* 3.3456 ms* 3.3980 ms* 884628 363130 314959 4.5305 ms
protobuf:
protobuf 3.7.2
982.31 µs* 2.8122 ms* 3.9619 ms* 4.0935 ms* 884628 363130 314959 4.4255 ms
protobuf:
protobuf 4.35.1-release
1.6766 ms* 7.6261 ms* 7.4229 ms* 2.9629 ms* 884628 363130 314959 4.5007 ms
rkyv 0.8.16 259.39 µs 1.5546 ms* 1.9186 ms* 1011488 393526 325965 4.7205 ms
ron 0.12.2 12.515 ms 26.467 ms 25.250 ms 1607459 449158 349324 5.7506 ms
savefile 0.20.4 207.90 µs 2.0559 ms 1045800 373139 311562 4.2595 ms
scale:
parity-scale-codec 3.7.5
671.28 µs 2.3266 ms 765778 311743 263822 3.5478 ms
serde-brief 0.2.0 1.3855 ms 4.5659 ms 2.8477 ms 1584946 413733 339964 5.0117 ms
serde_bare 0.5.0 682.89 µs 2.0865 ms 765778 311715 263914 3.8018 ms
speedy 0.8.7 198.07 µs 1.7574 ms 378.75 µs 885780 362204 286248 3.9703 ms
wincode 0.5.5 174.13 µs 1.7554 ms 371.56 µs 1045784 373127 311553 4.4427 ms
wiring 0.2.4 192.32 µs 2.0652 ms 1045784 337930 275808 3.8237 ms

Zero-copy deserialization speed

Crate Access Read Update
capnp:
capnp 0.26.0
62.816 ns* 1.0116 ms* 144.77 µs*
columnar 0.13.1 20.270 ns
flatbuffers 25.12.19 2.4904 ns* 2.0806 ms* 51.230 µs* 2.1568 ms*
nibblecode 0.1.0 1.2452 ns* 239.98 µs* 10.371 µs* 250.37 µs* 7.7532 µs*
rkyv 0.8.16 1.2450 ns* 360.97 µs* 10.464 µs* 368.58 µs* 7.4547 µs*

Comparison

Relative to best. Higher is better.

Serialize / deserialize speed and size

Crate Serialize Deserialize Borrow Size Zlib Zstd Zstd Time
bilrost 0.1015.0 30.00%* 33.25%* 28.67% 7.02% 29.76% 72.88% 79.80% 5.53%
bin-proto 0.12.8 3.19% 15.69% 22.90% 64.25% 72.96% 5.00%
bincode 2.0.1 37.52% 34.20% 8.70% 32.31% 78.87% 88.65% 6.29%
bincode 1.3.3 26.33% 35.65% 9.96% 22.90% 64.25% 72.96% 5.14%
bitcode 0.6.9 100.00% 50.51% 100.00% 34.04% 83.00% 100.00% 8.75%
borsh 1.7.0 25.57% 33.98% 27.04% 66.18% 79.41% 5.53%
capnp:
capnp 0.26.0
23.07% 9.18%* 16.60% 22.88%* 46.64% 49.77%* 53.30% 49.63%* 3.78% 4.32%*
cbor:
cbor4ii 1.2.2
22.38% 14.97% 1.77% 17.01% 59.42% 70.26% 4.52%
cbor:
ciborium 0.2.2
4.46% 6.59% 17.01% 59.42% 70.26% 4.83%
cbor:
serde_cbor 0.11.2
7.34% 14.85% 1.80% 17.01% 59.42% 70.26% 4.87%
columnar 0.13.1 55.62% 34.78% 100.00%* 22.90% 64.75% 77.34% 5.52%
compactly 0.1.7 0.55% 4.43% 100.00% 100.00% 94.90% 100.00%
databuf 0.5.0 52.74% 36.55% 9.20% 31.28% 76.90% 86.13% 6.58%
dlhn 0.1.7 20.78% 28.55% 33.04% 79.52% 89.83% 7.05%
flatbuffers 25.12.19 13.21% 18.77% 51.16% 58.53% 4.84%
flexbuffers 25.12.19 2.05% 10.05% 1.08% 13.09% 33.56% 32.87% 2.77%
json:
flexon 0.4.6
5.10% 19.38% 13.11% 50.94% 63.02% 4.17%
json:
serde_json 1.0.150
3.47% 12.27% 13.11% 50.94% 63.02% 4.21%
json:
simd-json 0.17.0
6.38% 15.65% 13.11% 50.94% 63.02% 4.22%
messagepack:
msgpacker 0.7.1
39.70% 28.61% 6.54% 31.31% 76.03% 86.04% 6.59%
messagepack:
rmp-serde 1.3.1
8.94% 22.97% 4.25% 30.51% 73.67% 81.89% 6.01%
messagepack:
zerompk 0.6.0
38.55% 32.77% 7.79% 30.51% 73.67% 81.89% 6.05%
minicbor 2.2.2 29.67% 24.72% 4.37% 29.29% 72.06% 80.03% 5.82%
nachricht-serde 0.4.0 2.59% 18.09% 2.43% 29.26% 72.08% 79.82% 5.62%
nanoserde 0.2.1 54.24% 35.35% 22.90% 64.25% 72.96% 5.50%
nibblecode 0.1.0 71.29% 23.68% 50.57% 56.17% 4.35%
postcard 1.1.3 32.63% 31.71% 10.04% 33.04% 79.27% 89.86% 7.11%
pot 3.0.1 6.08% 12.93% 1.40% 24.64% 64.35% 74.87% 5.29%
protobuf:
buffa 0.8.0
18.06%* 5.45%* 22.21%* 21.69%* 2.98% 27.08% 66.01% 72.18% 5.35%
protobuf:
prost 0.14.4
14.64%* 5.56%* 22.04%* 21.70%* 27.08% 66.01% 72.18% 5.22%
protobuf:
protobuf 3.7.2
14.08%* 4.92%* 18.61%* 18.01%* 27.08% 66.01% 72.18% 5.35%
protobuf:
protobuf 4.35.1-release
8.25%* 1.81%* 9.93%* 24.88%* 27.08% 66.01% 72.18% 5.26%
rkyv 0.8.16 53.32% 47.43%* 38.43%* 23.68% 60.92% 69.74% 5.01%
ron 0.12.2 1.11% 2.79% 0.24% 14.90% 53.37% 65.07% 4.12%
savefile 0.20.4 66.52% 35.86% 22.90% 64.24% 72.96% 5.56%
scale:
parity-scale-codec 3.7.5
20.60% 31.69% 31.28% 76.90% 86.16% 6.67%
serde-brief 0.2.0 9.98% 16.15% 2.13% 15.11% 57.94% 66.87% 4.72%
serde_bare 0.5.0 20.25% 35.34% 31.28% 76.90% 86.13% 6.23%
speedy 0.8.7 69.82% 41.95% 16.03% 27.04% 66.18% 79.41% 5.96%
wincode 0.5.5 79.42% 42.00% 16.34% 22.90% 64.25% 72.96% 5.33%
wiring 0.2.4 71.91% 35.70% 22.90% 70.94% 82.42% 6.19%

Zero-copy deserialization speed

Crate Access Read Update
capnp:
capnp 0.26.0
1.98%* 1.03%* 7.16%*
columnar 0.13.1 6.14%
flatbuffers 25.12.19 49.99%* 0.00%* 20.24%* 0.48%*
nibblecode 0.1.0 99.98%* 0.00%* 100.00%* 4.14%* 96.15%*
rkyv 0.8.16 100.00%* 0.00%* 99.11%* 2.81%* 100.00%*

mesh

This data set is a single mesh. The mesh contains an array of triangles, each of which has three vertices and a normal vector.

Raw data

For operations, time per iteration; for size, bytes. Lower is better.

Serialize / deserialize speed and size

Crate Serialize Deserialize Size Zlib Zstd Zstd Time
bilrost 0.1015.0 7.2466 ms* 8.7399 ms* 7.7927 ms 8625005 6443961 6231572 74.608 ms
bin-proto 0.12.8 8.3563 ms 11.120 ms 6000008 5378500 5346908 9.4197 ms
bincode 2.0.1 2.4175 ms 789.95 µs 6000005 5378497 5346882 9.2164 ms
bincode 1.3.3 5.6429 ms 5.0262 ms 6000008 5378500 5346908 9.2952 ms
bitcode 0.6.9 1.3758 ms 810.29 µs 6000006 5182295 4921841 13.977 ms
borsh 1.7.0 6.3050 ms 4.4647 ms 6000004 5378496 5346866 9.4882 ms
capnp:
capnp 0.26.0
9.5969 ms 19.508 ms* 14000088 10401737* 7130367 7308001* 6046182 7922110* 83.079 ms 68.986 ms*
cbor:
cbor4ii 1.2.2
8.7492 ms 44.619 ms 13125016 7524114 6757437 92.948 ms
cbor:
ciborium 0.2.2
63.931 ms 112.28 ms 13122324 7524660 6759128 92.521 ms
cbor:
serde_cbor 0.11.2
33.956 ms 41.333 ms 13122324 7524660 6759128 94.556 ms
columnar 0.13.1 1.9378 ms 1.4448 ms 669.42 µs* 6000120 5378435 5347039 9.0186 ms
compactly 0.1.7 359.36 ms 162.94 ms 4846788 4850067 4846905 2.1319 ms
databuf 0.5.0 2.4158 ms 5.4131 ms 6000003 5378495 5346897 9.3367 ms
dlhn 0.1.7 6.0317 ms 7.0876 ms 6000003 5378495 5346897 9.1760 ms
flatbuffers 25.12.19 502.92 µs 6000024 5378434 5346878 9.3601 ms
flexbuffers 25.12.19 103.85 ms 85.811 ms 26609424 11901040 12486322 159.08 ms
json:
flexon 0.4.6
77.097 ms 55.621 ms 26192883 9566084 8584671 157.99 ms
json:
serde_json 1.0.150
91.763 ms 99.621 ms 26192883 9566084 8584671 158.02 ms
json:
simd-json 0.17.0
53.566 ms 69.139 ms 26192883 9566084 8584671 161.35 ms
messagepack:
msgpacker 0.7.1
668.92 µs 5.3006 ms 7500005 6058442 6014500 10.989 ms
messagepack:
rmp-serde 1.3.1
21.045 ms 16.937 ms 8125006 6494876 6391037 72.038 ms
messagepack:
zerompk 0.6.0
752.98 µs 5.2112 ms 8125006 6494876 6391037 72.676 ms
minicbor 2.2.2 5.1987 ms 11.787 ms 8125006 6494907 6390894 71.565 ms
nachricht-serde 0.4.0 117.77 ms 25.917 ms 8125037 6493484 6386940 72.841 ms
nanoserde 0.2.1 1.9352 ms 835.57 µs 6000008 5378500 5346908 8.9922 ms
nibblecode 0.1.0 148.52 µs 6000008 5378500 5346908 8.7394 ms
postcard 1.1.3 480.31 µs 1.1268 ms 6000003 5378495 5346897 9.3771 ms
pot 3.0.1 38.172 ms 60.152 ms 10122342 6814618 6852252 84.133 ms
protobuf:
buffa 0.8.0
8.6908 ms* 26.608 ms* 26.768 ms* 26.330 ms* 8750000 6665735 6421877 73.800 ms
protobuf:
prost 0.14.4
7.8208 ms* 8.9393 ms* 12.161 ms* 12.531 ms* 8750000 6665735 6421877 74.555 ms
protobuf:
protobuf 3.7.2
15.584 ms* 32.821 ms* 31.172 ms* 31.160 ms* 8750000 6665735 6421877 81.283 ms
protobuf:
protobuf 4.35.1-release
43.126 ms* 120.19 ms* 68.192 ms* 35.763 ms* 8750000 6665735 6421877 80.109 ms
rkyv 0.8.16 155.01 µs 155.82 µs* 157.33 µs* 6000008 5378500 5346872 9.0538 ms
ron 0.12.2 180.46 ms 584.03 ms 22192885 8970395 8137334 154.84 ms
savefile 0.20.4 151.17 µs 150.85 µs 6000024 5378519 5346896 9.4405 ms
scale:
parity-scale-codec 3.7.5
5.1423 ms 4.7527 ms 6000004 5378496 5346866 10.759 ms
serde-brief 0.2.0 18.015 ms 36.170 ms 15750015 8024540 6813667 95.426 ms
serde_bare 0.5.0 5.5614 ms 4.9713 ms 6000003 5378495 5346897 8.9934 ms
speedy 0.8.7 151.27 µs 151.70 µs 6000004 5378496 5346866 9.0094 ms
wincode 0.5.5 153.56 µs 152.51 µs 6000008 5378500 5346908 9.5447 ms
wiring 0.2.4 152.53 µs 345.67 µs 6000008 5378952 5346905 9.0240 ms

Zero-copy deserialization speed

Crate Access Read Update
capnp:
capnp 0.26.0
92.948 ns* 13.327 ms* 2.1236 ms*
columnar 0.13.1 20.588 ns
flatbuffers 25.12.19 2.4912 ns* 45.072 ns* 78.730 µs* 77.979 µs*
nibblecode 0.1.0 1.2447 ns* 1.5591 ns* 38.960 µs* 38.945 µs* 78.608 µs*
rkyv 0.8.16 1.2452 ns* 5.6106 ns* 38.949 µs* 38.952 µs* 75.563 µs*

Comparison

Relative to best. Higher is better.

Serialize / deserialize speed and size

Crate Serialize Deserialize Size Zlib Zstd Zstd Time
bilrost 0.1015.0 2.05%* 1.70%* 1.94% 56.19% 75.27% 77.78% 2.86%
bin-proto 0.12.8 1.78% 1.36% 80.78% 90.18% 90.65% 22.63%
bincode 2.0.1 6.14% 19.10% 80.78% 90.18% 90.65% 23.13%
bincode 1.3.3 2.63% 3.00% 80.78% 90.18% 90.65% 22.94%
bitcode 0.6.9 10.80% 18.62% 80.78% 93.59% 98.48% 15.25%
borsh 1.7.0 2.36% 3.38% 80.78% 90.18% 90.65% 22.47%
capnp:
capnp 0.26.0
1.55% 0.76%* 34.62% 46.60%* 68.02% 66.37%* 80.16% 61.18%* 2.57% 3.09%*
cbor:
cbor4ii 1.2.2
1.70% 0.34% 36.93% 64.46% 71.73% 2.29%
cbor:
ciborium 0.2.2
0.23% 0.13% 36.94% 64.46% 71.71% 2.30%
cbor:
serde_cbor 0.11.2
0.44% 0.36% 36.94% 64.46% 71.71% 2.25%
columnar 0.13.1 7.66% 10.44% 22.53%* 80.78% 90.18% 90.65% 23.64%
compactly 0.1.7 0.04% 0.09% 100.00% 100.00% 100.00% 100.00%
databuf 0.5.0 6.15% 2.79% 80.78% 90.18% 90.65% 22.83%
dlhn 0.1.7 2.46% 2.13% 80.78% 90.18% 90.65% 23.23%
flatbuffers 25.12.19 29.53% 80.78% 90.18% 90.65% 22.78%
flexbuffers 25.12.19 0.14% 0.18% 18.21% 40.75% 38.82% 1.34%
json:
flexon 0.4.6
0.19% 0.27% 18.50% 50.70% 56.46% 1.35%
json:
serde_json 1.0.150
0.16% 0.15% 18.50% 50.70% 56.46% 1.35%
json:
simd-json 0.17.0
0.28% 0.22% 18.50% 50.70% 56.46% 1.32%
messagepack:
msgpacker 0.7.1
22.20% 2.85% 64.62% 80.05% 80.59% 19.40%
messagepack:
rmp-serde 1.3.1
0.71% 0.89% 59.65% 74.68% 75.84% 2.96%
messagepack:
zerompk 0.6.0
19.72% 2.89% 59.65% 74.68% 75.84% 2.93%
minicbor 2.2.2 2.86% 1.28% 59.65% 74.67% 75.84% 2.98%
nachricht-serde 0.4.0 0.13% 0.58% 59.65% 74.69% 75.89% 2.93%
nanoserde 0.2.1 7.67% 18.05% 80.78% 90.18% 90.65% 23.71%
nibblecode 0.1.0 100.00% 80.78% 90.18% 90.65% 24.39%
postcard 1.1.3 30.92% 13.39% 80.78% 90.18% 90.65% 22.74%
pot 3.0.1 0.39% 0.25% 47.88% 71.17% 70.73% 2.53%
protobuf:
buffa 0.8.0
1.71%* 0.56%* 0.56%* 0.57%* 55.39% 72.76% 75.47% 2.89%
protobuf:
prost 0.14.4
1.90%* 1.66%* 1.24%* 1.20%* 55.39% 72.76% 75.47% 2.86%
protobuf:
protobuf 3.7.2
0.95%* 0.45%* 0.48%* 0.48%* 55.39% 72.76% 75.47% 2.62%
protobuf:
protobuf 4.35.1-release
0.34%* 0.12%* 0.22%* 0.42%* 55.39% 72.76% 75.47% 2.66%
rkyv 0.8.16 95.81% 96.81%* 95.88%* 80.78% 90.18% 90.65% 23.55%
ron 0.12.2 0.08% 0.03% 21.84% 54.07% 59.56% 1.38%
savefile 0.20.4 98.25% 100.00% 80.78% 90.17% 90.65% 22.58%
scale:
parity-scale-codec 3.7.5
2.89% 3.17% 80.78% 90.18% 90.65% 19.82%
serde-brief 0.2.0 0.82% 0.42% 30.77% 60.44% 71.14% 2.23%
serde_bare 0.5.0 2.67% 3.03% 80.78% 90.18% 90.65% 23.71%
speedy 0.8.7 98.18% 99.44% 80.78% 90.18% 90.65% 23.66%
wincode 0.5.5 96.72% 98.91% 80.78% 90.18% 90.65% 22.34%
wiring 0.2.4 97.37% 43.64% 80.78% 90.17% 90.65% 23.62%

Zero-copy deserialization speed

Crate Access Read Update
capnp:
capnp 0.26.0
1.34%* 0.29%* 1.83%*
columnar 0.13.1 6.05%
flatbuffers 25.12.19 49.96%* 2.76%* 49.47%* 49.94%*
nibblecode 0.1.0 100.00%* 79.83%* 99.96%* 100.00%* 96.13%*
rkyv 0.8.16 99.96%* 22.18%* 99.99%* 99.98%* 100.00%*

minecraft_savedata

This data set is composed of Minecraft player saves that contain highly structured data.

Raw data

For operations, time per iteration; for size, bytes. Lower is better.

Serialize / deserialize speed and size

Crate Serialize Deserialize Borrow Size Zlib Zstd Zstd Time
bilrost 0.1015.0 875.32 µs* 799.67 µs* 3.1126 ms 1.7342 ms 489348 281173 249360 2.6743 ms
bin-proto 0.12.8 1.9095 ms 2.8950 ms 566975 239350 231475 2.5990 ms
bincode 2.0.1 338.21 µs 1.8270 ms 782.86 µs 367413 221291 206242 2.1296 ms
bincode 1.3.3 590.51 µs 1.8475 ms 883.01 µs 569975 240525 231884 2.6301 ms
bitcode 0.6.9 132.70 µs 1.2688 ms 170.84 µs 327688 200947 182040 846.20 µs
borsh 1.7.0 559.24 µs 1.7910 ms 446595 234236 209834 2.2840 ms
capnp:
capnp 0.26.0
478.31 µs 1.0444 ms* 803896 489017* 335606 293127* 280744 271528* 3.6600 ms 2.7039 ms*
cbor:
cbor4ii 1.2.2
712.07 µs 4.3662 ms 3.2519 ms 1109831 344745 274333 3.6311 ms
cbor:
ciborium 0.2.2
3.7777 ms 9.9773 ms 1109821 344751 274345 3.5332 ms
cbor:
serde_cbor 0.11.2
1.8692 ms 4.6801 ms 3.3214 ms 1109821 344751 274345 3.6750 ms
columnar 0.13.1 255.25 µs 1.8879 ms 713.35 µs* 563392 249619 217632 1.6329 ms
compactly 0.1.7 9.4512 ms 6.5794 ms 148461 148599 148473 156.44 µs
databuf 0.5.0 290.16 µs 1.7499 ms 810.97 µs 356311 213062 198403 2.0729 ms
dlhn 0.1.7 686.78 µs 2.6205 ms 366496 220600 205586 2.2028 ms
flatbuffers 25.12.19 3.3053 ms 849472 347816 294871 3.7436 ms
flexbuffers 25.12.19 7.8185 ms 7.3438 ms 5.9145 ms 1187688 557642 553730 6.6404 ms
json:
flexon 0.4.6
2.7482 ms 4.5871 ms 1623191 466527 359157 5.8733 ms
json:
serde_json 1.0.150
3.7299 ms 6.8515 ms 1623191 466527 359157 5.9280 ms
json:
simd-json 0.17.0
2.2560 ms 4.6873 ms 1623191 466527 359157 5.8760 ms
messagepack:
msgpacker 0.7.1
329.77 µs 2.8090 ms 1.3029 ms 391251 236877 220395 2.3099 ms
messagepack:
rmp-serde 1.3.1
1.5707 ms 2.9853 ms 1.7083 ms 424533 245214 226077 2.3816 ms
messagepack:
zerompk 0.6.0
352.19 µs 2.0840 ms 875.04 µs 416025 243812 224965 2.3881 ms
minicbor 2.2.2 561.65 µs 3.4058 ms 1.8733 ms 428773 249857 228630 2.4384 ms
nachricht-serde 0.4.0 4.9461 ms 3.7970 ms 2.6582 ms 449745 252432 230965 2.4269 ms
nanoserde 0.2.1 343.20 µs 1.8969 ms 567975 239930 231872 2.6454 ms
nibblecode 0.1.0 176.81 µs 603928 432096 409665 3.7713 ms
postcard 1.1.3 446.94 µs 2.1642 ms 831.08 µs 367489 221913 207244 2.1388 ms
pot 3.0.1 2.3978 ms 5.3772 ms 4.1913 ms 599125 299158 247675 2.7615 ms
protobuf:
buffa 0.8.0
985.48 µs* 3.0724 ms* 3.4350 ms* 3.6190 ms* 2.8047 ms 596811 305319 268737 3.1535 ms
protobuf:
prost 0.14.4
1.3023 ms* 3.0681 ms* 3.4978 ms* 3.6085 ms* 596811 305319 268737 3.0832 ms
protobuf:
protobuf 3.7.2
1.0697 ms* 3.0627 ms* 3.9062 ms* 4.1167 ms* 596811 305319 268737 3.0987 ms
protobuf:
protobuf 4.35.1-release
1.9943 ms* 9.2439 ms* 6.8336 ms* 3.0375 ms* 596811 305319 268737 3.3156 ms
rkyv 0.8.16 332.03 µs 1.5245 ms* 1.8621 ms* 603776 254776 219421 2.4617 ms
ron 0.12.2 8.3788 ms 27.538 ms 25.945 ms 1465223 434935 342907 5.8679 ms
savefile 0.20.4 214.67 µs 1.8383 ms 566991 239362 231478 2.5495 ms
scale:
parity-scale-codec 3.7.5
655.28 µs 2.1023 ms 356311 212976 198423 2.0452 ms
serde-brief 0.2.0 1.1734 ms 5.1169 ms 3.4714 ms 1276014 373898 293384 3.7975 ms
serde_bare 0.5.0 720.04 µs 2.3468 ms 356311 213062 198403 2.0638 ms
speedy 0.8.7 271.08 µs 1.6727 ms 556.78 µs 449595 234970 210192 2.1547 ms
wincode 0.5.5 207.90 µs 1.6420 ms 553.64 µs 566975 239350 231475 2.6293 ms
wiring 0.2.4 208.10 µs 1.8902 ms 566975 247810 225086 2.6262 ms

Zero-copy deserialization speed

Crate Access Read Update
capnp:
capnp 0.26.0
63.558 ns* 567.45 µs* 402.65 ns*
columnar 0.13.1 706.37 ns
flatbuffers 25.12.19 2.4903 ns* 2.1545 ms* 1.4231 µs* 2.1568 ms*
nibblecode 0.1.0 1.2448 ns* 259.48 µs* 156.23 ns* 260.04 µs* 726.48 ns*
rkyv 0.8.16 1.2445 ns* 339.10 µs* 156.20 ns* 338.80 µs* 726.51 ns*

Comparison

Relative to best. Higher is better.

Serialize / deserialize speed and size

Crate Serialize Deserialize Borrow Size Zlib Zstd Zstd Time
bilrost 0.1015.0 15.16%* 16.59%* 22.92% 9.85% 30.34% 52.85% 59.54% 5.85%
bin-proto 0.12.8 6.95% 24.64% 26.18% 62.08% 64.14% 6.02%
bincode 2.0.1 39.24% 39.04% 21.82% 40.41% 67.15% 71.99% 7.35%
bincode 1.3.3 22.47% 38.61% 19.35% 26.05% 61.78% 64.03% 5.95%
bitcode 0.6.9 100.00% 56.22% 100.00% 45.31% 73.95% 81.56% 18.49%
borsh 1.7.0 23.73% 39.83% 33.24% 63.44% 70.76% 6.85%
capnp:
capnp 0.26.0
27.74% 12.71%* 18.47% 30.36%* 44.28% 50.69%* 52.89% 54.68%* 4.27% 5.79%*
cbor:
cbor4ii 1.2.2
18.64% 16.34% 5.25% 13.38% 43.10% 54.12% 4.31%
cbor:
ciborium 0.2.2
3.51% 7.15% 13.38% 43.10% 54.12% 4.43%
cbor:
serde_cbor 0.11.2
7.10% 15.24% 5.14% 13.38% 43.10% 54.12% 4.26%
columnar 0.13.1 51.99% 37.79% 100.00%* 26.35% 59.53% 68.22% 9.58%
compactly 0.1.7 1.40% 10.84% 100.00% 100.00% 100.00% 100.00%
databuf 0.5.0 45.73% 40.77% 21.07% 41.67% 69.74% 74.83% 7.55%
dlhn 0.1.7 19.32% 27.22% 40.51% 67.36% 72.22% 7.10%
flatbuffers 25.12.19 4.01% 17.48% 42.72% 50.35% 4.18%
flexbuffers 25.12.19 1.70% 9.71% 2.89% 12.50% 26.65% 26.81% 2.36%
json:
flexon 0.4.6
4.83% 15.55% 9.15% 31.85% 41.34% 2.66%
json:
serde_json 1.0.150
3.56% 10.41% 9.15% 31.85% 41.34% 2.64%
json:
simd-json 0.17.0
5.88% 15.22% 9.15% 31.85% 41.34% 2.66%
messagepack:
msgpacker 0.7.1
40.24% 25.40% 13.11% 37.95% 62.73% 67.37% 6.77%
messagepack:
rmp-serde 1.3.1
8.45% 23.90% 10.00% 34.97% 60.60% 65.67% 6.57%
messagepack:
zerompk 0.6.0
37.68% 34.23% 19.52% 35.69% 60.95% 66.00% 6.55%
minicbor 2.2.2 23.63% 20.95% 9.12% 34.62% 59.47% 64.94% 6.42%
nachricht-serde 0.4.0 2.68% 18.79% 6.43% 33.01% 58.87% 64.28% 6.45%
nanoserde 0.2.1 38.67% 37.61% 26.14% 61.93% 64.03% 5.91%
nibblecode 0.1.0 75.05% 24.58% 34.39% 36.24% 4.15%
postcard 1.1.3 29.69% 32.96% 20.56% 40.40% 66.96% 71.64% 7.31%
pot 3.0.1 5.53% 13.27% 4.08% 24.78% 49.67% 59.95% 5.67%
protobuf:
buffa 0.8.0
13.47%* 4.32%* 20.77%* 19.71%* 6.09% 24.88% 48.67% 55.25% 4.96%
protobuf:
prost 0.14.4
10.19%* 4.33%* 20.39%* 19.77%* 24.88% 48.67% 55.25% 5.07%
protobuf:
protobuf 3.7.2
12.41%* 4.33%* 18.26%* 17.33%* 24.88% 48.67% 55.25% 5.05%
protobuf:
protobuf 4.35.1-release
6.65%* 1.44%* 10.44%* 23.48%* 24.88% 48.67% 55.25% 4.72%
rkyv 0.8.16 39.97% 46.79%* 38.31%* 24.59% 58.33% 67.67% 6.36%
ron 0.12.2 1.58% 2.59% 0.66% 10.13% 34.17% 43.30% 2.67%
savefile 0.20.4 61.82% 38.80% 26.18% 62.08% 64.14% 6.14%
scale:
parity-scale-codec 3.7.5
20.25% 33.93% 41.67% 69.77% 74.83% 7.65%
serde-brief 0.2.0 11.31% 13.94% 4.92% 11.63% 39.74% 50.61% 4.12%
serde_bare 0.5.0 18.43% 30.40% 41.67% 69.74% 74.83% 7.58%
speedy 0.8.7 48.95% 42.65% 30.68% 33.02% 63.24% 70.64% 7.26%
wincode 0.5.5 63.83% 43.44% 30.86% 26.18% 62.08% 64.14% 5.95%
wiring 0.2.4 63.77% 37.74% 26.18% 59.96% 65.96% 5.96%

Zero-copy deserialization speed

Crate Access Read Update
capnp:
capnp 0.26.0
1.96%* 0.03%* 38.79%*
columnar 0.13.1 0.18%
flatbuffers 25.12.19 49.97%* 0.00%* 10.98%* 0.01%*
nibblecode 0.1.0 99.98%* 0.00%* 99.98%* 0.06%* 100.00%*
rkyv 0.8.16 100.00%* 0.00%* 100.00%* 0.05%* 100.00%*

mk48

This data set is composed of mk48.io game updates that contain data with many exploitable patterns and invariants.

Raw data

For operations, time per iteration; for size, bytes. Lower is better.

Serialize / deserialize speed and size

Crate Serialize Deserialize Size Zlib Zstd Zstd Time
bilrost 0.1015.0 4.6025 ms* 2.5483 ms* 8.6840 ms 1704643 1294259 1245668 12.574 ms
bin-proto 0.12.8 5.4955 ms 7.0022 ms 1791489 1127998 1051146 10.770 ms
bincode 2.0.1 1.3219 ms 3.9841 ms 1406257 1117802 1062438 9.8102 ms
bincode 1.3.3 3.8805 ms 4.2731 ms 1854234 1141994 1048745 10.692 ms
bitcode 0.6.9 691.13 µs 2.3714 ms 971318 878034 850340 3.1162 ms
borsh 1.7.0 2.9574 ms 2.8304 ms 1521989 1108471 1038528 10.444 ms
capnp:
capnp 0.26.0
2.6572 ms 4.5483 ms* 2724288 1616255* 1546992 1278764* 1239111 1125654* 15.471 ms 8.9509 ms*
cbor:
cbor4ii 1.2.2
2.9380 ms 16.982 ms 6012539 1695215 1464951 21.706 ms
cbor:
ciborium 0.2.2
22.951 ms 53.038 ms 6012373 1695146 1465025 21.866 ms
cbor:
serde_cbor 0.11.2
10.263 ms 20.453 ms 6012373 1695146 1465025 22.240 ms
columnar 0.13.1 866.97 µs 3.8027 ms 1.2449 ms* 1544720 996718 896213 4.9845 ms
compactly 0.1.7 54.348 ms 33.663 ms 800772 801349 800799 369.61 µs
databuf 0.5.0 1.3276 ms 3.8444 ms 1319999 1062631 1008334 9.3086 ms
dlhn 0.1.7 4.3873 ms 6.7038 ms 1311281 1077520 1046095 8.9632 ms
flatbuffers 25.12.19 5.0008 ms 2325620 1439185 1268060 13.968 ms
flexbuffers 25.12.19 39.716 ms 35.626 ms 5352680 2658295 2777967 35.530 ms
json:
flexon 0.4.6
15.437 ms 24.719 ms 9390461 2391679 1842767 35.548 ms
json:
serde_json 1.0.150
21.197 ms 32.106 ms 9390461 2391679 1842767 36.098 ms
json:
simd-json 0.17.0
12.187 ms 26.231 ms 9390461 2391679 1842767 35.591 ms
messagepack:
msgpacker 0.7.1
939.23 µs 5.5193 ms 1458773 1156055 1137788 10.115 ms
messagepack:
rmp-serde 1.3.1
10.762 ms 11.284 ms 1745322 1261627 1228923 12.070 ms
messagepack:
zerompk 0.6.0
1.1275 ms 4.1995 ms 1717696 1234725 1195988 11.762 ms
minicbor 2.2.2 2.3698 ms 11.596 ms 1777386 1276218 1252558 12.898 ms
nachricht-serde 0.4.0 29.591 ms 16.165 ms 1770060 1277755 1263362 12.528 ms
nanoserde 0.2.1 1.2951 ms 2.7601 ms 1812404 1134820 1053109 10.828 ms
nibblecode 0.1.0 509.65 µs 2075936 1503435 1396519 14.307 ms
postcard 1.1.3 1.8150 ms 4.2379 ms 1311281 1083900 1041434 9.1563 ms
pot 3.0.1 14.310 ms 26.212 ms 2604812 1482233 1298928 16.335 ms
protobuf:
buffa 0.8.0
3.7834 ms* 12.525 ms* 16.438 ms* 17.431 ms* 1859886 1338076 1295351 12.731 ms
protobuf:
prost 0.14.4
5.5492 ms* 9.7214 ms* 9.2120 ms* 10.238 ms* 1859886 1338076 1295351 12.591 ms
protobuf:
protobuf 3.7.2
6.1948 ms* 14.349 ms* 13.542 ms* 14.988 ms* 1859886 1338076 1295351 12.825 ms
protobuf:
protobuf 4.35.1-release
14.820 ms* 34.805 ms* 25.345 ms* 10.769 ms* 1859886 1338076 1295351 12.800 ms
rkyv 0.8.16 983.00 µs 2.2427 ms* 2.7665 ms* 2075936 1383779 1210377 13.679 ms
ron 0.12.2 42.057 ms 171.91 ms 8677703 2233642 1826180 35.479 ms
savefile 0.20.4 876.98 µs 2.8378 ms 1791505 1128012 1051153 10.749 ms
scale:
parity-scale-codec 3.7.5
3.2097 ms 3.5676 ms 1319999 1064380 1010708 9.2290 ms
serde-brief 0.2.0 5.4284 ms 20.873 ms 6951772 1796265 1567819 24.013 ms
serde_bare 0.5.0 4.0463 ms 5.0736 ms 1319999 1062645 1008349 9.2874 ms
speedy 0.8.7 770.15 µs 2.4673 ms 1584734 1119837 1037992 10.605 ms
wincode 0.5.5 570.84 µs 2.3287 ms 1791489 1127998 1051146 10.646 ms
wiring 0.2.4 650.72 µs 2.7582 ms 1791489 1156963 1082815 11.024 ms

Zero-copy deserialization speed

Crate Access Read Update
capnp:
capnp 0.26.0
65.807 ns* 1.9203 ms* 712.54 ns*
columnar 0.13.1 52.235 ns
flatbuffers 25.12.19 2.4897 ns* 5.5392 ms* 2.7817 µs* 5.5506 ms*
nibblecode 0.1.0 1.2450 ns* 350.05 µs* 385.04 ns* 349.88 µs* 240.34 ns*
rkyv 0.8.16 1.2450 ns* 464.22 µs* 385.29 ns* 465.52 µs* 237.95 ns*

Comparison

Relative to best. Higher is better.

Serialize / deserialize speed and size

Crate Serialize Deserialize Size Zlib Zstd Zstd Time
bilrost 0.1015.0 11.07%* 20.00%* 14.34% 46.98% 61.92% 64.29% 2.94%
bin-proto 0.12.8 9.27% 17.78% 44.70% 71.04% 76.18% 3.43%
bincode 2.0.1 38.55% 31.25% 56.94% 71.69% 75.37% 3.77%
bincode 1.3.3 13.13% 29.13% 43.19% 70.17% 76.36% 3.46%
bitcode 0.6.9 73.74% 52.50% 82.44% 91.27% 94.17% 11.86%
borsh 1.7.0 17.23% 43.98% 52.61% 72.29% 77.11% 3.54%
capnp:
capnp 0.26.0
19.18% 11.21%* 29.39% 49.54%* 51.80% 62.67%* 64.63% 71.14%* 2.39% 4.13%*
cbor:
cbor4ii 1.2.2
17.35% 7.33% 13.32% 47.27% 54.66% 1.70%
cbor:
ciborium 0.2.2
2.22% 2.35% 13.32% 47.27% 54.66% 1.69%
cbor:
serde_cbor 0.11.2
4.97% 6.09% 13.32% 47.27% 54.66% 1.66%
columnar 0.13.1 58.79% 32.74% 100.00%* 51.84% 80.40% 89.35% 7.42%
compactly 0.1.7 0.94% 3.70% 100.00% 100.00% 100.00% 100.00%
databuf 0.5.0 38.39% 32.38% 60.66% 75.41% 79.42% 3.97%
dlhn 0.1.7 11.62% 18.57% 61.07% 74.37% 76.55% 4.12%
flatbuffers 25.12.19 10.19% 34.43% 55.68% 63.15% 2.65%
flexbuffers 25.12.19 1.28% 3.49% 14.96% 30.15% 28.83% 1.04%
json:
flexon 0.4.6
3.30% 5.04% 8.53% 33.51% 43.46% 1.04%
json:
serde_json 1.0.150
2.40% 3.88% 8.53% 33.51% 43.46% 1.02%
json:
simd-json 0.17.0
4.18% 4.75% 8.53% 33.51% 43.46% 1.04%
messagepack:
msgpacker 0.7.1
54.26% 22.56% 54.89% 69.32% 70.38% 3.65%
messagepack:
rmp-serde 1.3.1
4.74% 11.03% 45.88% 63.52% 65.16% 3.06%
messagepack:
zerompk 0.6.0
45.20% 29.64% 46.62% 64.90% 66.96% 3.14%
minicbor 2.2.2 21.51% 10.74% 45.05% 62.79% 63.93% 2.87%
nachricht-serde 0.4.0 1.72% 7.70% 45.24% 62.72% 63.39% 2.95%
nanoserde 0.2.1 39.35% 45.10% 44.18% 70.61% 76.04% 3.41%
nibblecode 0.1.0 100.00% 38.57% 53.30% 57.34% 2.58%
postcard 1.1.3 28.08% 29.38% 61.07% 73.93% 76.89% 4.04%
pot 3.0.1 3.56% 4.75% 30.74% 54.06% 61.65% 2.26%
protobuf:
buffa 0.8.0
13.47%* 4.07%* 7.57%* 7.14%* 43.05% 59.89% 61.82% 2.90%
protobuf:
prost 0.14.4
9.18%* 5.24%* 13.51%* 12.16%* 43.05% 59.89% 61.82% 2.94%
protobuf:
protobuf 3.7.2
8.23%* 3.55%* 9.19%* 8.31%* 43.05% 59.89% 61.82% 2.88%
protobuf:
protobuf 4.35.1-release
3.44%* 1.46%* 4.91%* 11.56%* 43.05% 59.89% 61.82% 2.89%
rkyv 0.8.16 51.85% 55.51%* 45.00%* 38.57% 57.91% 66.16% 2.70%
ron 0.12.2 1.21% 0.72% 9.23% 35.88% 43.85% 1.04%
savefile 0.20.4 58.11% 43.87% 44.70% 71.04% 76.18% 3.44%
scale:
parity-scale-codec 3.7.5
15.88% 34.89% 60.66% 75.29% 79.23% 4.00%
serde-brief 0.2.0 9.39% 5.96% 11.52% 44.61% 51.08% 1.54%
serde_bare 0.5.0 12.60% 24.54% 60.66% 75.41% 79.42% 3.98%
speedy 0.8.7 66.18% 50.46% 50.53% 71.56% 77.15% 3.49%
wincode 0.5.5 89.28% 53.46% 44.70% 71.04% 76.18% 3.47%
wiring 0.2.4 78.32% 45.13% 44.70% 69.26% 73.96% 3.35%

Zero-copy deserialization speed

Crate Access Read Update
capnp:
capnp 0.26.0
1.89%* 0.02%* 54.04%*
columnar 0.13.1 2.38%
flatbuffers 25.12.19 50.01%* 0.00%* 13.84%* 0.01%*
nibblecode 0.1.0 100.00%* 0.00%* 100.00%* 0.11%* 99.01%*
rkyv 0.8.16 100.00%* 0.00%* 99.94%* 0.08%* 100.00%*

Footnotes:

* mouse over for situational details

this deserialization capability is not supported

buffer mutation is not supported (capnp and flatbuffers may but not for rust)