mojo-json parses JSON at 6.5 GB/s on Apple Silicon — 52% faster than the fastest C++ and Rust parsers.
We benchmarked 6 JSON parsers across 3 languages on an M3 Ultra. mojo-json wins all 3 files.
The Numbers
| Library | Language | twitter.json | canada.json | citm_catalog.json |
|---|---|---|---|---|
| mojo-json | Mojo | 6,574 MB/s | 5,673 MB/s | 6,337 MB/s |
| simdjson | C++ | 4,313 MB/s | 3,898 MB/s | 5,970 MB/s |
| sonic-rs | Rust | 1,650 MB/s | 1,144 MB/s | 2,855 MB/s |
| simd-json | Rust | 1,019 MB/s | 494 MB/s | 1,269 MB/s |
| orjson | Python | 794 MB/s | 405 MB/s | 817 MB/s |
| serde-json | Rust | 353 MB/s | 535 MB/s | 806 MB/s |
10 iterations each, 5 warmup. Apple M3 Ultra, macOS Sequoia 15.2.
What the Benchmarks Test
These files are from nativejson-benchmark, the standard suite for JSON parser comparison:
| File | Size | Tests |
|---|---|---|
| twitter.json | 617 KB | Web API payloads, Unicode, nested objects |
| canada.json | 2.2 MB | GeoJSON coordinates, heavy float parsing |
| citm_catalog.json | 1.7 MB | Deeply nested structures, mixed types |
How
mojo-json implements the simdjson algorithm in Mojo:
- ARM NEON SIMD via C FFI for 64-byte vectorized chunk processing
- Branchless classification with lookup tables
- Prefix-XOR string tracking using carry-less multiply
- Pure Mojo — no Python interpreter overhead
The result: simdjson-level performance in a language with Python's syntax.
Try It
git clone https://github.com/atsentia/mojo-json
cd mojo-json/neon && ./build.sh
mojo run -I . benchmarks/bench_neon.mojoFull benchmark methodology: docs/BENCHMARKS.md
Note: These results are from a single hardware configuration (M3 Ultra). Performance may vary on other systems — we'd welcome community benchmarks on different platforms.
Originally posted at atsentia.com blog

