Rust serialization benchmark

August 7, 2026 · View on GitHub

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):

  • Serialize: serialize data into a buffer
  • Deserialize: deserializes a buffer into a normal rust object
  • Borrow: deserializes a buffer into a rust object that borrows string data from the input, with lifetime
  • Size: the size of the buffer when serialized
  • Zlib: the size of the buffer after zlib compression
  • Zstd: the size of the buffer after zstd compression
  • Zstd Time: the time taken to compress the serialized buffer with zstd

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

  • Access: accesses a buffer as structured data
  • Read: runs through a buffer and reads fields out of it
  • Update: updates a buffer as structured data

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:

  • (populate): copying or converting from the "regular" input type to the type generated by the library
  • (convert): copying or converting back from the library's generated type to the "regular" input type after deserializing

Other footnotes are located at the bottom of the page.

Last updated: 2026-08-07 04:09:55

Runtime info

rustc version

rustc 1.99.0-nightly (84b36a78a 2026-08-06)
binary: rustc
commit-hash: 84b36a78a28a63f134171c670be1932ffa2485f8
commit-date: 2026-08-06
host: x86_64-unknown-linux-gnu
release: 1.99.0-nightly
LLVM version: 23.1.0

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 9V74 80-Core Processor
CPU family:                              25
Model:                                   17
Thread(s) per core:                      2
Core(s) per socket:                      2
Socket(s):                               1
Stepping:                                1
BogoMIPS:                                5192.24
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 xtopology 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 avx512f avx512dq rdseed adx smap avx512ifma clflushopt clwb avx512cd sha_ni avx512bw avx512vl xsaveopt xsavec xgetbv1 xsaves user_shstk avx512_bf16 clzero xsaveerptr rdpru arat npt nrip_save tsc_scale vmcb_clean flushbyasid decodeassists pausefilter pfthreshold v_vmsave_vmload avx512vbmi umip avx512_vbmi2 gfni vaes vpclmulqdq avx512_vnni avx512_bitalg avx512_vpopcntdq 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:                                2 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

CrateSerializeDeserializeBorrowSizeZlibZstdZstd Time
bilrost 0.1015.0332.38 µs* 276.04 µs*2.0963 ms740.93 µs8049553289412848493.1077 ms
bin-proto 0.12.83.4356 ms3.6508 ms10457843731273115533.4072 ms
bincode 2.0.1293.11 µs1.7504 ms569.45 µs7412953039442564222.8281 ms
bincode 1.3.3464.75 µs1.6158 ms495.21 µs10457843731273115533.6551 ms
bitcode 0.6.995.792 µs1.1430 ms48.788 µs7037102888262273221.9864 ms
borsh 1.8.0481.77 µs1.6997 ms8857803622042862483.1120 ms
capnp:
capnp 0.27.0
480.71 µs 1.2260 ms*1443216 1046865*513986 481681*426532 458024*4.5376 ms 4.2114 ms*
cbor:
cbor4ii 1.2.2
434.41 µs4.2607 ms3.0099 ms14078354034403235613.5488 ms
cbor:
ciborium 0.2.2
2.4626 ms10.694 ms14078354034403235613.5892 ms
cbor:
serde_cbor 0.11.2
1.5733 ms3.6718 ms2.4975 ms14078354034403235613.5631 ms
columnar 0.13.1184.99 µs1.7061 ms 630.09 µs*10459283702122939073.0797 ms
compactly 0.1.720.356 ms13.831 ms239520239720239532119.02 µs
databuf 0.5.0203.89 µs1.6205 ms574.48 µs7657783117152639142.5096 ms
dlhn 0.1.7584.33 µs2.0570 ms7249533014462530562.3005 ms
flatbuffers 25.12.19757.19 µs12763684685393883813.6139 ms
flexbuffers 25.12.195.2451 ms6.0013 ms4.9118 ms18297567143186915416.2047 ms
json:
flexon 0.4.8
1.8931 ms2.9340 ms18274614705603607274.1817 ms
json:
serde_json 1.0.151
3.2065 ms4.9455 ms18274614705603607274.2973 ms
json:
simd-json 0.17.3
1.9662 ms3.7286 ms18274614705603607274.1703 ms
messagepack:
msgpacker 0.7.1
261.19 µs2.0569 ms773.14 µs7649963152912642122.5870 ms
messagepack:
rmp-serde 1.3.1
1.2639 ms2.4896 ms1.0900 ms7849973253842776082.7339 ms
messagepack:
zerompk 0.7.1
288.48 µs1.7481 ms572.64 µs7849973253842776082.7242 ms
minicbor 2.3.0397.34 µs2.3760 ms1.0544 ms8178303326712840342.9421 ms
nachricht-serde 0.4.04.3798 ms3.2788 ms2.0819 ms8186693325562847972.9332 ms
nanoserde 0.2.1186.65 µs1.7605 ms10457843731273115533.1287 ms
nibblecode 0.1.0137.19 µs10114874921184261483.9627 ms
postcard 1.1.3365.36 µs1.8405 ms612.43 µs7249533023992529682.3287 ms
pot 3.0.11.9031 ms4.7888 ms3.7534 ms9719223725133036363.2803 ms
protobuf:
buffa 0.9.1
703.06 µs* 1.8673 ms*2.7970 ms* 2.8747 ms*1.5411 ms8846283631303149593.1603 ms
protobuf:
prost 0.14.4
700.48 µs* 1.8931 ms*2.7285 ms* 2.7499 ms*8846283631303149593.2108 ms
protobuf:
protobuf 3.7.2
839.06 µs* 2.2992 ms*3.1676 ms* 3.2012 ms*8846283631303149593.1756 ms
protobuf:
protobuf 4.35.1-release
1.3708 ms* 5.5955 ms*5.9706 ms* 2.4620 ms*8846283631303149593.2565 ms
rkyv 0.8.18179.32 µs1.2328 ms* 1.5322 ms*10114883935263259653.3651 ms
ron 0.12.29.0529 ms23.703 ms21.214 ms16074594491583493244.2910 ms
savefile 0.20.5155.45 µs1.6762 ms10458003731393115623.1057 ms
scale:
parity-scale-codec 3.7.5
556.29 µs1.9617 ms7657783117432638222.6219 ms
serde-brief 0.2.01.2159 ms3.9039 ms2.3407 ms15849464137333399643.7912 ms
serde-zap 0.1.0141.96 µs1.7669 ms436.42 µs7412953039442564222.4197 ms
serde_bare 0.5.0569.74 µs1.6500 ms7657783117152639142.5447 ms
speedy 0.8.7153.12 µs1.3994 ms300.55 µs8857803622042862482.8370 ms
wincode 0.6.0140.61 µs1.4340 ms302.08 µs10457843731273115533.0649 ms
wiring 0.2.4141.66 µs1.6786 ms10457843379302758082.7161 ms

Zero-copy deserialization speed

CrateAccessReadUpdate
capnp:
capnp 0.27.0
63.567 ns*845.44 µs* 117.86 µs*
columnar 0.13.18.4204 ns
flatbuffers 25.12.192.1816 ns* 1.9122 ms*42.081 µs* 2.0007 ms*
nibblecode 0.1.01.0911 ns* 74.981 µs*8.3467 µs* 83.206 µs*4.8732 µs*
rkyv 0.8.181.0914 ns* 292.13 µs*8.3417 µs* 300.46 µs*4.8604 µs*

Comparison

Relative to best. Higher is better.

Serialize / deserialize speed and size

CrateSerializeDeserializeBorrowSizeZlibZstdZstd Time
bilrost 0.1015.028.82%* 34.70%*30.06%6.58%29.76%72.88%79.80%3.83%
bin-proto 0.12.82.79%17.26%22.90%64.25%72.96%3.49%
bincode 2.0.132.68%36.00%8.57%32.31%78.87%88.65%4.21%
bincode 1.3.320.61%39.00%9.85%22.90%64.25%72.96%3.26%
bitcode 0.6.9100.00%55.13%100.00%34.04%83.00%100.00%5.99%
borsh 1.8.019.88%37.07%27.04%66.18%79.41%3.82%
capnp:
capnp 0.27.0
19.93% 7.81%*16.60% 22.88%*46.64% 49.77%*53.30% 49.63%*2.62% 2.83%*
cbor:
cbor4ii 1.2.2
22.05%14.79%1.62%17.01%59.42%70.26%3.35%
cbor:
ciborium 0.2.2
3.89%5.89%17.01%59.42%70.26%3.32%
cbor:
serde_cbor 0.11.2
6.09%17.16%1.95%17.01%59.42%70.26%3.34%
columnar 0.13.151.78%36.93% 100.00%*22.90%64.75%77.34%3.86%
compactly 0.1.70.47%4.56%100.00%100.00%94.90%100.00%
databuf 0.5.046.98%38.88%8.49%31.28%76.90%86.13%4.74%
dlhn 0.1.716.39%30.63%33.04%79.52%89.83%5.17%
flatbuffers 25.12.1912.65%18.77%51.16%58.53%3.29%
flexbuffers 25.12.191.83%10.50%0.99%13.09%33.56%32.87%1.92%
json:
flexon 0.4.8
5.06%21.48%13.11%50.94%63.02%2.85%
json:
serde_json 1.0.151
2.99%12.74%13.11%50.94%63.02%2.77%
json:
simd-json 0.17.3
4.87%16.90%13.11%50.94%63.02%2.85%
messagepack:
msgpacker 0.7.1
36.68%30.63%6.31%31.31%76.03%86.04%4.60%
messagepack:
rmp-serde 1.3.1
7.58%25.31%4.48%30.51%73.67%81.89%4.35%
messagepack:
zerompk 0.7.1
33.21%36.04%8.52%30.51%73.67%81.89%4.37%
minicbor 2.3.024.11%26.52%4.63%29.29%72.06%80.03%4.05%
nachricht-serde 0.4.02.19%19.22%2.34%29.26%72.08%79.82%4.06%
nanoserde 0.2.151.32%35.79%22.90%64.25%72.96%3.80%
nibblecode 0.1.069.82%23.68%48.71%53.34%3.00%
postcard 1.1.326.22%34.23%7.97%33.04%79.27%89.86%5.11%
pot 3.0.15.03%13.16%1.30%24.64%64.35%74.87%3.63%
protobuf:
buffa 0.9.1
13.63%* 5.13%*22.53%* 21.92%*3.17%27.08%66.01%72.18%3.77%
protobuf:
prost 0.14.4
13.68%* 5.06%*23.09%* 22.91%*27.08%66.01%72.18%3.71%
protobuf:
protobuf 3.7.2
11.42%* 4.17%*19.89%* 19.68%*27.08%66.01%72.18%3.75%
protobuf:
protobuf 4.35.1-release
6.99%* 1.71%*10.55%* 25.59%*27.08%66.01%72.18%3.65%
rkyv 0.8.1853.42%51.11%* 41.12%*23.68%60.92%69.74%3.54%
ron 0.12.21.06%2.66%0.23%14.90%53.37%65.07%2.77%
savefile 0.20.561.62%37.59%22.90%64.24%72.96%3.83%
scale:
parity-scale-codec 3.7.5
17.22%32.12%31.28%76.90%86.16%4.54%
serde-brief 0.2.07.88%16.14%2.08%15.11%57.94%66.87%3.14%
serde-zap 0.1.067.48%35.66%11.18%32.31%78.87%88.65%4.92%
serde_bare 0.5.016.81%38.19%31.28%76.90%86.13%4.68%
speedy 0.8.762.56%45.03%16.23%27.04%66.18%79.41%4.20%
wincode 0.6.068.13%43.94%16.15%22.90%64.25%72.96%3.88%
wiring 0.2.467.62%37.54%22.90%70.94%82.42%4.38%

Zero-copy deserialization speed

CrateAccessReadUpdate
capnp:
capnp 0.27.0
1.72%*0.99%* 7.08%*
columnar 0.13.112.96%
flatbuffers 25.12.1950.01%* 0.00%*19.82%* 0.42%*
nibblecode 0.1.0100.00%* 0.00%*99.94%* 10.03%*99.74%*
rkyv 0.8.1899.97%* 0.00%*100.00%* 2.78%*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

CrateSerializeDeserializeSizeZlibZstdZstd Time
bilrost 0.1015.04.6159 ms* 4.1995 ms*5.8136 ms86250056443961623157249.670 ms
bin-proto 0.12.86.9785 ms9.2981 ms6000008537850053469087.2997 ms
bincode 2.0.1897.61 µs859.41 µs6000005537849753468827.3744 ms
bincode 1.3.34.8569 ms3.6395 ms6000008537850053469087.2277 ms
bitcode 0.6.91.2197 ms1.2589 ms60000065182295492184111.159 ms
borsh 1.8.05.3728 ms3.7284 ms6000004537849653468667.2775 ms
capnp:
capnp 0.27.0
7.2563 ms 15.988 ms*14000088 10401737*7130367 7308001*6046182 7922110*57.990 ms 48.345 ms*
cbor:
cbor4ii 1.2.2
4.8428 ms39.311 ms131250167524114675743765.198 ms
cbor:
ciborium 0.2.2
54.741 ms98.993 ms131223247524660675912865.417 ms
cbor:
serde_cbor 0.11.2
29.251 ms28.911 ms131223247524660675912865.268 ms
columnar 0.13.11.0981 ms1.3100 ms 645.51 µs*6000120537843553470397.3915 ms
compactly 0.1.7296.11 ms145.84 ms4846788485006748469051.3268 ms
databuf 0.5.0895.60 µs4.8664 ms6000003537849553468977.3547 ms
dlhn 0.1.75.6320 ms6.3985 ms6000003537849553468977.4020 ms
flatbuffers 25.12.19369.91 µs6000024537843453468787.2382 ms
flexbuffers 25.12.1982.931 ms74.378 ms266094241190104012486322108.83 ms
json:
flexon 0.4.8
59.971 ms42.856 ms2619288395660848584671117.95 ms
json:
serde_json 1.0.151
70.152 ms83.491 ms2619288395660848584671118.16 ms
json:
simd-json 0.17.3
45.963 ms52.567 ms2619288395660848584671117.62 ms
messagepack:
msgpacker 0.7.1
531.50 µs3.3448 ms7500005605844260145008.8996 ms
messagepack:
rmp-serde 1.3.1
16.572 ms9.2099 ms81250066494876639103748.156 ms
messagepack:
zerompk 0.7.1
657.03 µs1.2620 ms81250066494876639103748.036 ms
minicbor 2.3.02.3377 ms9.4651 ms81250066494907639089447.852 ms
nachricht-serde 0.4.097.009 ms19.842 ms81250376493484638694048.901 ms
nanoserde 0.2.11.3556 ms826.91 µs6000008537850053469087.2282 ms
nibblecode 0.1.0141.61 µs6000008537850053469087.3492 ms
postcard 1.1.3413.15 µs5.2258 ms6000003537849553468977.4373 ms
pot 3.0.133.192 ms47.475 ms101223426814618685225257.664 ms
protobuf:
buffa 0.9.1
5.0767 ms* 6.9736 ms*9.4115 ms* 9.2431 ms*87500006665735642187750.060 ms
protobuf:
prost 0.14.4
5.8614 ms* 6.2948 ms*9.6383 ms* 9.9551 ms*87500006665735642187750.563 ms
protobuf:
protobuf 3.7.2
11.999 ms* 25.721 ms*24.086 ms* 24.134 ms*87500006665735642187750.722 ms
protobuf:
protobuf 4.35.1-release
43.796 ms* 99.341 ms*55.798 ms* 26.677 ms*87500006665735642187754.564 ms
rkyv 0.8.18140.04 µs144.93 µs* 145.02 µs*6000008537850053468727.3544 ms
ron 0.12.2149.87 ms474.03 ms2219288589703958137334112.29 ms
savefile 0.20.5141.81 µs141.59 µs6000024537851953468967.3250 ms
scale:
parity-scale-codec 3.7.5
4.8933 ms3.5113 ms6000004537849653468667.4004 ms
serde-brief 0.2.012.580 ms29.478 ms157500158024540681366767.673 ms
serde-zap 0.1.0413.02 µs1.0983 ms6000005537849753468827.4679 ms
serde_bare 0.5.05.3686 ms3.7266 ms6000003537849553468977.2547 ms
speedy 0.8.7141.52 µs141.74 µs6000004537849653468667.3912 ms
wincode 0.6.0148.62 µs140.71 µs6000008537850053469087.2479 ms
wiring 0.2.4144.64 µs274.24 µs6000008537895253469057.2793 ms

Zero-copy deserialization speed

CrateAccessReadUpdate
capnp:
capnp 0.27.0
91.622 ns*11.431 ms* 1.7358 ms*
columnar 0.13.17.1938 ns
flatbuffers 25.12.192.1822 ns* 41.461 ns*36.638 µs* 44.461 µs*
nibblecode 0.1.01.0909 ns* 1.2282 ns*34.098 µs* 34.094 µs*150.46 µs*
rkyv 0.8.181.0937 ns* 4.1032 ns*34.098 µs* 34.096 µs*156.67 µs*

Comparison

Relative to best. Higher is better.

Serialize / deserialize speed and size

CrateSerializeDeserializeSizeZlibZstdZstd Time
bilrost 0.1015.03.03%* 3.33%*2.42%56.19%75.27%77.78%2.67%
bin-proto 0.12.82.01%1.51%80.78%90.18%90.65%18.18%
bincode 2.0.115.60%16.37%80.78%90.18%90.65%17.99%
bincode 1.3.32.88%3.87%80.78%90.18%90.65%18.36%
bitcode 0.6.911.48%11.18%80.78%93.59%98.48%11.89%
borsh 1.8.02.61%3.77%80.78%90.18%90.65%18.23%
capnp:
capnp 0.27.0
1.93% 0.88%*34.62% 46.60%*68.02% 66.37%*80.16% 61.18%*2.29% 2.74%*
cbor:
cbor4ii 1.2.2
2.89%0.36%36.93%64.46%71.73%2.04%
cbor:
ciborium 0.2.2
0.26%0.14%36.94%64.46%71.71%2.03%
cbor:
serde_cbor 0.11.2
0.48%0.49%36.94%64.46%71.71%2.03%
columnar 0.13.112.75%10.74% 21.80%*80.78%90.18%90.65%17.95%
compactly 0.1.70.05%0.10%100.00%100.00%100.00%100.00%
databuf 0.5.015.64%2.89%80.78%90.18%90.65%18.04%
dlhn 0.1.72.49%2.20%80.78%90.18%90.65%17.92%
flatbuffers 25.12.1937.86%80.78%90.18%90.65%18.33%
flexbuffers 25.12.190.17%0.19%18.21%40.75%38.82%1.22%
json:
flexon 0.4.8
0.23%0.33%18.50%50.70%56.46%1.12%
json:
serde_json 1.0.151
0.20%0.17%18.50%50.70%56.46%1.12%
json:
simd-json 0.17.3
0.30%0.27%18.50%50.70%56.46%1.13%
messagepack:
msgpacker 0.7.1
26.35%4.21%64.62%80.05%80.59%14.91%
messagepack:
rmp-serde 1.3.1
0.85%1.53%59.65%74.68%75.84%2.76%
messagepack:
zerompk 0.7.1
21.31%11.15%59.65%74.68%75.84%2.76%
minicbor 2.3.05.99%1.49%59.65%74.67%75.84%2.77%
nachricht-serde 0.4.00.14%0.71%59.65%74.69%75.89%2.71%
nanoserde 0.2.110.33%17.02%80.78%90.18%90.65%18.36%
nibblecode 0.1.098.89%80.78%90.18%90.65%18.05%
postcard 1.1.333.90%2.69%80.78%90.18%90.65%17.84%
pot 3.0.10.42%0.30%47.88%71.17%70.73%2.30%
protobuf:
buffa 0.9.1
2.76%* 2.01%*1.50%* 1.52%*55.39%72.76%75.47%2.65%
protobuf:
prost 0.14.4
2.39%* 2.22%*1.46%* 1.41%*55.39%72.76%75.47%2.62%
protobuf:
protobuf 3.7.2
1.17%* 0.54%*0.58%* 0.58%*55.39%72.76%75.47%2.62%
protobuf:
protobuf 4.35.1-release
0.32%* 0.14%*0.25%* 0.53%*55.39%72.76%75.47%2.43%
rkyv 0.8.18100.00%97.09%* 97.03%*80.78%90.18%90.65%18.04%
ron 0.12.20.09%0.03%21.84%54.07%59.56%1.18%
savefile 0.20.598.75%99.38%80.78%90.17%90.65%18.11%
scale:
parity-scale-codec 3.7.5
2.86%4.01%80.78%90.18%90.65%17.93%
serde-brief 0.2.01.11%0.48%30.77%60.44%71.14%1.96%
serde-zap 0.1.033.91%12.81%80.78%90.18%90.65%17.77%
serde_bare 0.5.02.61%3.78%80.78%90.18%90.65%18.29%
speedy 0.8.798.95%99.27%80.78%90.18%90.65%17.95%
wincode 0.6.094.23%100.00%80.78%90.18%90.65%18.31%
wiring 0.2.496.82%51.31%80.78%90.17%90.65%18.23%

Zero-copy deserialization speed

CrateAccessReadUpdate
capnp:
capnp 0.27.0
1.19%*0.30%* 1.96%*
columnar 0.13.115.16%
flatbuffers 25.12.1949.99%* 2.63%*93.06%* 76.68%*
nibblecode 0.1.0100.00%* 88.82%*99.99%* 100.00%*100.00%*
rkyv 0.8.1899.74%* 26.59%*99.99%* 99.99%*96.04%*

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

CrateSerializeDeserializeBorrowSizeZlibZstdZstd Time
bilrost 0.1015.0676.01 µs* 598.28 µs*2.3828 ms1.2509 ms4893482811732493601.8943 ms
bin-proto 0.12.81.4933 ms2.3272 ms5669752393502314751.8283 ms
bincode 2.0.1266.10 µs1.4951 ms632.53 µs3674132212912062421.6399 ms
bincode 1.3.3518.86 µs1.5229 ms721.15 µs5699752405252318841.8242 ms
bitcode 0.6.981.495 µs1.0356 ms117.10 µs327688200947182040625.33 µs
borsh 1.8.0485.09 µs1.4610 ms4465952342362098341.4723 ms
capnp:
capnp 0.27.0
384.84 µs 861.80 µs*803896 489017*335606 293127*280744 271528*2.7347 ms 1.8314 ms*
cbor:
cbor4ii 1.2.2
556.10 µs3.6472 ms2.6031 ms11098313447452743332.5374 ms
cbor:
ciborium 0.2.2
3.0909 ms8.9111 ms11098213447512743452.6096 ms
cbor:
serde_cbor 0.11.2
1.5775 ms3.5958 ms2.5637 ms11098213447512743452.5211 ms
columnar 0.13.1163.11 µs1.5795 ms 542.15 µs*5633922496192176321.3196 ms
compactly 0.1.77.5349 ms5.5797 ms14846114859914847372.269 µs
databuf 0.5.0193.62 µs1.4525 ms645.65 µs3563112130621984031.3846 ms
dlhn 0.1.7594.36 µs2.1800 ms3664962206002055861.4832 ms
flatbuffers 25.12.192.8613 ms8494723478162948712.5624 ms
flexbuffers 25.12.196.3628 ms5.9023 ms4.9463 ms11876885576425537304.4544 ms
json:
flexon 0.4.8
2.0938 ms3.6384 ms16231914665273591574.4458 ms
json:
serde_json 1.0.151
3.0078 ms5.6338 ms16231914665273591574.4137 ms
json:
simd-json 0.17.3
2.2134 ms3.7006 ms16231914665273591574.3497 ms
messagepack:
msgpacker 0.7.1
201.52 µs2.3408 ms1.1249 ms3912512368772203951.5811 ms
messagepack:
rmp-serde 1.3.1
1.2210 ms2.4069 ms1.3331 ms4245332452142260771.6446 ms
messagepack:
zerompk 0.7.1
205.19 µs1.7891 ms791.83 µs4160252438122249651.6118 ms
minicbor 2.3.0481.13 µs2.6767 ms1.4818 ms4287732498572286301.6621 ms
nachricht-serde 0.4.04.0608 ms3.1949 ms2.2484 ms4497452524322309651.7484 ms
nanoserde 0.2.1166.62 µs1.5524 ms5679752399302318721.8352 ms
nibblecode 0.1.0122.49 µs6039284270984056032.5076 ms
postcard 1.1.3370.77 µs1.7305 ms706.70 µs3674892219132072441.4019 ms
pot 3.0.11.7814 ms4.7134 ms3.8046 ms5991252991582476751.9516 ms
protobuf:
buffa 0.9.1
741.11 µs* 2.2597 ms*2.7473 ms* 2.9167 ms*2.2743 ms5968113053192687372.1977 ms
protobuf:
prost 0.14.4
973.95 µs* 2.4103 ms*2.8148 ms* 2.8925 ms*5968113053192687372.2484 ms
protobuf:
protobuf 3.7.2
936.16 µs* 2.5518 ms*2.9693 ms* 3.1982 ms*5968113053192687372.1425 ms
protobuf:
protobuf 4.35.1-release
1.4292 ms* 5.6267 ms*5.4947 ms* 2.3927 ms*5968113053192687372.1467 ms
rkyv 0.8.18214.92 µs1.2562 ms* 1.5649 ms*6037762547762194211.7003 ms
ron 0.12.26.5077 ms22.528 ms21.470 ms14652234349353429074.1850 ms
savefile 0.20.5142.21 µs1.5940 ms5669912393622314781.7745 ms
scale:
parity-scale-codec 3.7.5
543.02 µs1.7211 ms3563112129761984231.4089 ms
serde-brief 0.2.0951.88 µs4.3446 ms2.9191 ms12760143738982933842.8504 ms
serde-zap 0.1.0134.10 µs1.6279 ms585.06 µs3674132212912062421.4348 ms
serde_bare 0.5.0630.89 µs1.9085 ms3563112130621984031.4082 ms
speedy 0.8.7165.88 µs1.3890 ms451.93 µs4495952349702101921.4785 ms
wincode 0.6.0140.23 µs1.3652 ms456.71 µs5669752393502314751.8026 ms
wiring 0.2.4126.66 µs1.5737 ms5669752478102250861.8992 ms

Zero-copy deserialization speed

CrateAccessReadUpdate
capnp:
capnp 0.27.0
63.167 ns*481.34 µs* 494.25 ns*
columnar 0.13.1513.39 ns
flatbuffers 25.12.192.1820 ns* 2.0070 ms*1.1987 µs* 1.9612 ms*
nibblecode 0.1.01.0912 ns* 95.786 µs*136.92 ns* 98.585 µs*603.39 ns*
rkyv 0.8.181.0910 ns* 240.01 µs*136.92 ns* 237.11 µs*603.78 ns*

Comparison

Relative to best. Higher is better.

Serialize / deserialize speed and size

CrateSerializeDeserializeBorrowSizeZlibZstdZstd Time
bilrost 0.1015.012.06%* 13.62%*22.75%9.36%30.34%52.85%59.54%3.82%
bin-proto 0.12.85.46%23.30%26.18%62.08%64.14%3.95%
bincode 2.0.130.63%36.26%18.51%40.41%67.15%71.99%4.41%
bincode 1.3.315.71%35.60%16.24%26.05%61.78%64.03%3.96%
bitcode 0.6.9100.00%52.35%100.00%45.31%73.95%81.56%11.56%
borsh 1.8.016.80%37.11%33.24%63.44%70.76%4.91%
capnp:
capnp 0.27.0
21.18% 9.46%*18.47% 30.36%*44.28% 50.69%*52.89% 54.68%*2.64% 3.95%*
cbor:
cbor4ii 1.2.2
14.65%14.86%4.50%13.38%43.10%54.12%2.85%
cbor:
ciborium 0.2.2
2.64%6.08%13.38%43.10%54.12%2.77%
cbor:
serde_cbor 0.11.2
5.17%15.08%4.57%13.38%43.10%54.12%2.87%
columnar 0.13.149.96%34.32% 100.00%*26.35%59.53%68.22%5.48%
compactly 0.1.71.08%9.72%100.00%100.00%100.00%100.00%
databuf 0.5.042.09%37.33%18.14%41.67%69.74%74.83%5.22%
dlhn 0.1.713.71%24.87%40.51%67.36%72.22%4.87%
flatbuffers 25.12.192.85%17.48%42.72%50.35%2.82%
flexbuffers 25.12.191.28%9.19%2.37%12.50%26.65%26.81%1.62%
json:
flexon 0.4.8
3.89%14.90%9.15%31.85%41.34%1.63%
json:
serde_json 1.0.151
2.71%9.62%9.15%31.85%41.34%1.64%
json:
simd-json 0.17.3
3.68%14.65%9.15%31.85%41.34%1.66%
messagepack:
msgpacker 0.7.1
40.44%23.16%10.41%37.95%62.73%67.37%4.57%
messagepack:
rmp-serde 1.3.1
6.67%22.52%8.78%34.97%60.60%65.67%4.39%
messagepack:
zerompk 0.7.1
39.72%30.30%14.79%35.69%60.95%66.00%4.48%
minicbor 2.3.016.94%20.25%7.90%34.62%59.47%64.94%4.35%
nachricht-serde 0.4.02.01%16.97%5.21%33.01%58.87%64.28%4.13%
nanoserde 0.2.148.91%34.92%26.14%61.93%64.03%3.94%
nibblecode 0.1.066.53%24.58%34.79%36.61%2.88%
postcard 1.1.321.98%31.33%16.57%40.40%66.96%71.64%5.16%
pot 3.0.14.57%11.50%3.08%24.78%49.67%59.95%3.70%
protobuf:
buffa 0.9.1
11.00%* 3.61%*19.73%* 18.59%*5.15%24.88%48.67%55.25%3.29%
protobuf:
prost 0.14.4
8.37%* 3.38%*19.26%* 18.74%*24.88%48.67%55.25%3.21%
protobuf:
protobuf 3.7.2
8.71%* 3.19%*18.26%* 16.95%*24.88%48.67%55.25%3.37%
protobuf:
protobuf 4.35.1-release
5.70%* 1.45%*9.87%* 22.66%*24.88%48.67%55.25%3.37%
rkyv 0.8.1837.92%43.16%* 34.64%*24.59%58.33%67.67%4.25%
ron 0.12.21.25%2.41%0.55%10.13%34.17%43.30%1.73%
savefile 0.20.557.31%34.01%26.18%62.08%64.14%4.07%
scale:
parity-scale-codec 3.7.5
15.01%31.50%41.67%69.77%74.83%5.13%
serde-brief 0.2.08.56%12.48%4.01%11.63%39.74%50.61%2.54%
serde-zap 0.1.060.77%33.30%20.02%40.41%67.15%71.99%5.04%
serde_bare 0.5.012.92%28.41%41.67%69.74%74.83%5.13%
speedy 0.8.749.13%39.03%25.91%33.02%63.24%70.64%4.89%
wincode 0.6.058.12%39.71%25.64%26.18%62.08%64.14%4.01%
wiring 0.2.464.34%34.45%26.18%59.96%65.96%3.81%

Zero-copy deserialization speed

CrateAccessReadUpdate
capnp:
capnp 0.27.0
1.73%*0.03%* 27.70%*
columnar 0.13.10.21%
flatbuffers 25.12.1950.00%* 0.00%*11.42%* 0.01%*
nibblecode 0.1.099.98%* 0.00%*100.00%* 0.14%*100.00%*
rkyv 0.8.18100.00%* 0.00%*100.00%* 0.06%*99.94%*

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

CrateSerializeDeserializeSizeZlibZstdZstd Time
bilrost 0.1015.03.7217 ms* 1.9583 ms*6.6405 ms1704643129425912456688.1568 ms
bin-proto 0.12.84.4057 ms5.4446 ms1791489112799810511467.3094 ms
bincode 2.0.1909.53 µs3.3589 ms1406257111780210624386.4638 ms
bincode 1.3.33.0615 ms3.5351 ms1854234114199410487457.3027 ms
bitcode 0.6.9550.45 µs1.9644 ms9713188780348503402.1479 ms
borsh 1.8.02.6166 ms2.2795 ms1521989110847110385286.9390 ms
capnp:
capnp 0.27.0
2.1510 ms 3.7320 ms*2724288 1616255*1546992 1278764*1239111 1125654*10.659 ms 6.0023 ms*
cbor:
cbor4ii 1.2.2
1.9719 ms14.444 ms60125391695215146495116.456 ms
cbor:
ciborium 0.2.2
20.054 ms47.278 ms60123731695146146502516.361 ms
cbor:
serde_cbor 0.11.2
8.5231 ms15.374 ms60123731695146146502516.581 ms
columnar 0.13.1688.72 µs3.0476 ms 1.0212 ms*15447209967188962133.5401 ms
compactly 0.1.744.575 ms28.136 ms800772801349800799271.95 µs
databuf 0.5.0805.64 µs3.0341 ms1319999106263110083346.1973 ms
dlhn 0.1.73.7458 ms6.0108 ms1311281107752010460955.9263 ms
flatbuffers 25.12.193.9637 ms2325620143918512680609.7087 ms
flexbuffers 25.12.1931.759 ms29.658 ms53526802658295277796724.766 ms
json:
flexon 0.4.8
11.552 ms18.556 ms93904612391679184276727.493 ms
json:
serde_json 1.0.151
16.353 ms25.540 ms93904612391679184276727.394 ms
json:
simd-json 0.17.3
10.229 ms20.774 ms93904612391679184276727.510 ms
messagepack:
msgpacker 0.7.1
811.57 µs4.6981 ms1458773115605511377886.6282 ms
messagepack:
rmp-serde 1.3.1
8.3590 ms8.7441 ms1745322126162712289237.9754 ms
messagepack:
zerompk 0.7.1
869.49 µs3.7850 ms1675866123096811950067.6057 ms
minicbor 2.3.01.9499 ms8.8570 ms1777386127621812525588.5622 ms
nachricht-serde 0.4.023.843 ms13.590 ms1770060127775512633628.6609 ms
nanoserde 0.2.1712.14 µs2.2363 ms1812404113482010531097.4424 ms
nibblecode 0.1.0425.93 µs2075936151664114038689.7648 ms
postcard 1.1.31.5811 ms3.7908 ms1311281108390010414345.9545 ms
pot 3.0.110.959 ms22.545 ms26048121482233129892811.560 ms
protobuf:
buffa 0.9.1
2.8016 ms* 6.5949 ms*8.5627 ms* 9.5716 ms*1859886133807612953518.7064 ms
protobuf:
prost 0.14.4
4.5636 ms* 7.6909 ms*6.9017 ms* 7.5766 ms*1859886133807612953518.7257 ms
protobuf:
protobuf 3.7.2
4.0959 ms* 9.9397 ms*9.8542 ms* 10.655 ms*1859886133807612953518.7516 ms
protobuf:
protobuf 4.35.1-release
6.9465 ms* 25.875 ms*20.234 ms* 8.9905 ms*1859886133807612953518.7220 ms
rkyv 0.8.18831.53 µs1.8255 ms* 2.2285 ms*2075936138377912103779.4855 ms
ron 0.12.234.905 ms145.40 ms86777032233642182618027.413 ms
savefile 0.20.5571.17 µs2.3749 ms1791505112801210511537.3004 ms
scale:
parity-scale-codec 3.7.5
2.7084 ms2.8923 ms1319999106438010107086.1302 ms
serde-brief 0.2.03.4353 ms19.943 ms69517721796265156781918.520 ms
serde-zap 0.1.0596.91 µs3.5948 ms1406257111780210624386.4944 ms
serde_bare 0.5.03.4053 ms4.0783 ms1319999106264510083496.2337 ms
speedy 0.8.7593.80 µs2.0810 ms1584734111983710379927.1525 ms
wincode 0.6.0524.12 µs1.9175 ms1791489112799810511467.3631 ms
wiring 0.2.4478.17 µs2.3178 ms1791489115696310828157.5787 ms

Zero-copy deserialization speed

CrateAccessReadUpdate
capnp:
capnp 0.27.0
66.592 ns*1.6845 ms* 390.06 ns*
columnar 0.13.126.497 ns
flatbuffers 25.12.192.1816 ns* 5.1995 ms*2.3356 µs* 5.3594 ms*
nibblecode 0.1.01.0910 ns* 312.02 µs*295.15 ns* 309.00 µs*481.03 ns*
rkyv 0.8.181.0910 ns* 374.47 µs*295.35 ns* 374.68 µs*552.39 ns*

Comparison

Relative to best. Higher is better.

Serialize / deserialize speed and size

CrateSerializeDeserializeSizeZlibZstdZstd Time
bilrost 0.1015.011.44%* 21.75%*15.38%46.98%61.92%64.29%3.33%
bin-proto 0.12.89.67%18.76%44.70%71.04%76.18%3.72%
bincode 2.0.146.83%30.40%56.94%71.69%75.37%4.21%
bincode 1.3.313.91%28.89%43.19%70.17%76.36%3.72%
bitcode 0.6.977.38%51.99%82.44%91.27%94.17%12.66%
borsh 1.8.016.28%44.80%52.61%72.29%77.11%3.92%
capnp:
capnp 0.27.0
19.80% 11.41%*29.39% 49.54%*51.80% 62.67%*64.63% 71.14%*2.55% 4.53%*
cbor:
cbor4ii 1.2.2
21.60%7.07%13.32%47.27%54.66%1.65%
cbor:
ciborium 0.2.2
2.12%2.16%13.32%47.27%54.66%1.66%
cbor:
serde_cbor 0.11.2
5.00%6.64%13.32%47.27%54.66%1.64%
columnar 0.13.161.84%33.51% 100.00%*51.84%80.40%89.35%7.68%
compactly 0.1.70.96%3.63%100.00%100.00%100.00%100.00%
databuf 0.5.052.87%33.66%60.66%75.41%79.42%4.39%
dlhn 0.1.711.37%16.99%61.07%74.37%76.55%4.59%
flatbuffers 25.12.1910.75%34.43%55.68%63.15%2.80%
flexbuffers 25.12.191.34%3.44%14.96%30.15%28.83%1.10%
json:
flexon 0.4.8
3.69%5.50%8.53%33.51%43.46%0.99%
json:
serde_json 1.0.151
2.60%4.00%8.53%33.51%43.46%0.99%
json:
simd-json 0.17.3
4.16%4.92%8.53%33.51%43.46%0.99%
messagepack:
msgpacker 0.7.1
52.48%21.74%54.89%69.32%70.38%4.10%
messagepack:
rmp-serde 1.3.1
5.10%11.68%45.88%63.52%65.16%3.41%
messagepack:
zerompk 0.7.1
48.99%26.98%47.78%65.10%67.01%3.58%
minicbor 2.3.021.84%11.53%45.05%62.79%63.93%3.18%
nachricht-serde 0.4.01.79%7.51%45.24%62.72%63.39%3.14%
nanoserde 0.2.159.81%45.66%44.18%70.61%76.04%3.65%
nibblecode 0.1.0100.00%38.57%52.84%57.04%2.78%
postcard 1.1.326.94%26.94%61.07%73.93%76.89%4.57%
pot 3.0.13.89%4.53%30.74%54.06%61.65%2.35%
protobuf:
buffa 0.9.1
15.20%* 6.46%*11.93%* 10.67%*43.05%59.89%61.82%3.12%
protobuf:
prost 0.14.4
9.33%* 5.54%*14.80%* 13.48%*43.05%59.89%61.82%3.12%
protobuf:
protobuf 3.7.2
10.40%* 4.29%*10.36%* 9.58%*43.05%59.89%61.82%3.11%
protobuf:
protobuf 4.35.1-release
6.13%* 1.65%*5.05%* 11.36%*43.05%59.89%61.82%3.12%
rkyv 0.8.1851.22%55.94%* 45.82%*38.57%57.91%66.16%2.87%
ron 0.12.21.22%0.70%9.23%35.88%43.85%0.99%
savefile 0.20.574.57%43.00%44.70%71.04%76.18%3.73%
scale:
parity-scale-codec 3.7.5
15.73%35.31%60.66%75.29%79.23%4.44%
serde-brief 0.2.012.40%5.12%11.52%44.61%51.08%1.47%
serde-zap 0.1.071.36%28.41%56.94%71.69%75.37%4.19%
serde_bare 0.5.012.51%25.04%60.66%75.41%79.42%4.36%
speedy 0.8.771.73%49.07%50.53%71.56%77.15%3.80%
wincode 0.6.081.27%53.26%44.70%71.04%76.18%3.69%
wiring 0.2.489.08%44.06%44.70%69.26%73.96%3.59%

Zero-copy deserialization speed

CrateAccessReadUpdate
capnp:
capnp 0.27.0
1.64%*0.02%* 75.67%*
columnar 0.13.14.12%
flatbuffers 25.12.1950.01%* 0.00%*12.64%* 0.01%*
nibblecode 0.1.0100.00%* 0.00%*100.00%* 0.10%*100.00%*
rkyv 0.8.18100.00%* 0.00%*99.93%* 0.08%*87.08%*

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)