Serialization benchmark results: hardware-specific snapshot (not a regression baseline)
Environment
- Python
- 3.14.7 (64-bit) (cpython)
- Platform
- Linux-6.17.0-1022-azure-x86_64-with-glibc2.39
- CPU model
- AMD EPYC 7763 64-Core Processor
- CPU count
- 4
- Git revision
- ce8d32b0ca7490ced179293369ce0daa03e88322
- Benchmark version
- 0.1.0
- GC policy
- enabled
- Run UTC
- 2026-09-20T21:15:40.082583+00:00
- Unit
- second
Primitive / dump_many / batch 100 / dataclass
| Adapter | Version | Mean | Std dev | Operations/s | Samples | Prerelease | Speed vs baseline (higher is faster) |
|---|
| Adaptix 3.0 beta | 3.0.0b12 | 494.379 µs | 10.6218 µs | 2022.74 | 120 | pre-release | 0.56x |
| cattrs | 26.2.0 | 342.202 µs | 4.074 µs | 2922.25 | 120 | | 0.81x |
| dataclasses.asdict | 3.14.7 | 2.26202 ms | 23.3214 µs | 442.082 | 120 | | 0.12x |
| Django REST Framework | 3.18.0 | 5.49781 ms | 116.544 µs | 181.891 | 120 | | 0.05x |
| Handwritten | 3.14.7 | 277.237 µs | 4.93405 µs | 3607.02 | 120 | | 1.00x |
| Marshmallow | 4.3.1 | 6.53307 ms | 62.2435 µs | 153.067 | 120 | | 0.04x |
| mashumaro | 3.22 | 274.437 µs | 6.33518 µs | 3643.83 | 120 | | 1.01x |
| msgspec | 0.21.1 | 305.307 µs | 5.14207 µs | 3275.4 | 120 | | 0.91x |
| Pydantic v2 | 2.13.5 | 539.135 µs | 8.00062 µs | 1854.82 | 120 | | 0.51x |
| serpyco-rs | 1.22.0 | 287.95 µs | 5.10649 µs | 3472.82 | 120 | | 0.96x |
Primitive / dump_one / batch 1 / dataclass
| Adapter | Version | Mean | Std dev | Operations/s | Samples | Prerelease | Speed vs baseline (higher is faster) |
|---|
| Adaptix 3.0 beta | 3.0.0b12 | 4.28196 µs | 63.4622 ns | 233538 | 120 | pre-release | 0.51x |
| cattrs | 26.2.0 | 3.08328 µs | 55.8683 ns | 324330 | 120 | | 0.71x |
| dataclasses.asdict | 3.14.7 | 21.843 µs | 432.864 ns | 45781.3 | 120 | | 0.10x |
| Django REST Framework | 3.18.0 | 53.6616 µs | 626.992 ns | 18635.3 | 120 | | 0.04x |
| Handwritten | 3.14.7 | 2.1922 µs | 62.7735 ns | 456163 | 120 | | 1.00x |
| Marshmallow | 4.3.1 | 65.0563 µs | 1.37576 µs | 15371.3 | 120 | | 0.03x |
| mashumaro | 3.22 | 2.32811 µs | 54.0659 ns | 429533 | 120 | | 0.94x |
| msgspec | 0.21.1 | 2.59241 µs | 54.3215 ns | 385742 | 120 | | 0.85x |
| Pydantic v2 | 2.13.5 | 5.61991 µs | 99.0672 ns | 177939 | 120 | | 0.39x |
| serpyco-rs | 1.22.0 | 2.46027 µs | 72.2843 ns | 406460 | 120 | | 0.89x |
Primitive / load_many / batch 100 / dataclass
| Adapter | Version | Mean | Std dev | Operations/s | Samples | Prerelease | Speed vs baseline (higher is faster) |
|---|
| Adaptix 3.0 beta | 3.0.0b12 | 752.139 µs | 8.43536 µs | 1329.54 | 120 | pre-release | 1.18x |
| cattrs | 26.2.0 | 1.02493 ms | 15.3763 µs | 975.673 | 120 | | 0.86x |
| Django REST Framework | 3.18.0 | 17.1821 ms | 249.719 µs | 58.2001 | 120 | | 0.05x |
| Handwritten | 3.14.7 | 886.348 µs | 36.6135 µs | 1128.23 | 120 | | 1.00x |
| Marshmallow | 4.3.1 | 22.8918 ms | 440.118 µs | 43.6838 | 120 | | 0.04x |
| mashumaro | 3.22 | 560.546 µs | 6.93689 µs | 1783.98 | 120 | | 1.58x |
| msgspec | 0.21.1 | 354.034 µs | 4.11348 µs | 2824.59 | 120 | | 2.50x |
| Pydantic v2 | 2.13.5 | 1.08105 ms | 19.6991 µs | 925.024 | 120 | | 0.82x |
| serpyco-rs | 1.22.0 | 257.76 µs | 7.45228 µs | 3879.58 | 120 | | 3.44x |
Primitive / load_one / batch 1 / dataclass
| Adapter | Version | Mean | Std dev | Operations/s | Samples | Prerelease | Speed vs baseline (higher is faster) |
|---|
| Adaptix 3.0 beta | 3.0.0b12 | 7.57047 µs | 96.5444 ns | 132092 | 120 | pre-release | 1.14x |
| cattrs | 26.2.0 | 10.0999 µs | 128.94 ns | 99010.4 | 120 | | 0.86x |
| Django REST Framework | 3.18.0 | 170.764 µs | 4.23983 µs | 5856.04 | 120 | | 0.05x |
| Handwritten | 3.14.7 | 8.64844 µs | 210.654 ns | 115628 | 120 | | 1.00x |
| Marshmallow | 4.3.1 | 233.326 µs | 4.48429 µs | 4285.84 | 120 | | 0.04x |
| mashumaro | 3.22 | 5.64426 µs | 81.6289 ns | 177171 | 120 | | 1.53x |
| msgspec | 0.21.1 | 4.44578 µs | 63.1647 ns | 224933 | 120 | | 1.95x |
| Pydantic v2 | 2.13.5 | 7.32424 µs | 174.229 ns | 136533 | 120 | | 1.18x |
| serpyco-rs | 1.22.0 | 2.63189 µs | 66.4533 ns | 379956 | 120 | | 3.29x |