Skip to content

leo-gan/GLD.SerializerBenchmark

Repository files navigation

Multi-Language Serializer Benchmark

Docs Dashboard Serialization 101 License: MIT Languages

Same data types. Same CSV contract. Same statistics pipeline.
Compare 100+ serialization libraries across nine languages — with fair within-language rankings, not marketing microbenchmarks.

Start here
Numbers 📊 Live dashboard · Benchmarks overview
Learn Serialization 101–401 — students through systems engineers
Method How we measure · Metrics

Python serialize/deserialize latency distribution for message data type (1 instance)
Example: Python latency distribution for the message data type (1 instance). Full tables and charts on each language Results page.


Try it: benchmark Python serializers in ~60 seconds

Requires a recent Python 3 and uv (or pip). No Docker.

git clone https://github.com/leo-gan/GLD.SerializerBenchmark.git
cd GLD.SerializerBenchmark

./scripts/check-host-requirements.sh python   # optional: see what's missing
./scripts/install-host-requirements.sh python # optional: user-local toolchains

cd python && ./scripts/run-benchmarks.sh smoke
# → logs/python/YYYY-MM-DD-HHMMSS.csv

Then open the Python Results page (or run analyze-benchmarks -l python after installing the analysis package) to turn CSVs into tables.

Prefer Rust? ./scripts/run-all-benchmarks.sh --mode smoke --lang rust


Who it is for

Audience Use case Course
Computer science students Theory, history, worked examples 101, 201
System integrators Pick formats that fit payloads and runtimes 301
Researchers Reproducible measurement and experiments Methodology · 301
Serializer authors Add a codec, version A/B, regression checks Adding a serializer · 401

Supported languages

Adding a language · Adding a serializer.


Full quick start

Benchmark runners run natively on the host (no Docker). Prepare toolchains once, then run benchmarks (project deps like uv sync / npm install still happen inside each runner).

# 1) Host toolchains (compilers/runtimes only)
./scripts/check-host-requirements.sh
./scripts/install-host-requirements.sh
./scripts/install-host-requirements.sh csharp   # one language

# 2) Smoke one language
./python/scripts/run-benchmarks.sh smoke
# or: ./rust/scripts/run-benchmarks.sh smoke

# Orchestrator: all languages or one language
./scripts/run-all-benchmarks.sh --mode all-single
./scripts/run-all-benchmarks.sh --mode full --lang rust

# Analysis package (publish tables + plots into docs/)
cd analysis && uv pip install -e .   # or: pip install -e .
analyze-benchmarks
analyze-benchmarks -l python
analyze-benchmarks --compare-a rust:2026-07-09-194122 --compare-b rust:latest

Modes: smoke (2 reps) · all-single (10) · full (100) · research (500).

After regenerating results into docs/, review and commit before publish-docs deploys the site.


Test data

Shared data types: message, document, telemetry, strings, and event.

Catalog and defaults: schemas/data_catalog_v2.yaml. Run matrices: config/library/.
Docs: Test data.


Statistics

Compare serializers within one language (and ideally one category). Cross-language absolute times are directional only — runtimes and GCs differ.

Used by

Contributors

Languages