mrkeyoor.com_
Tue 10 Nov 05:41 UTC
Dataevaluationupdated 26 Oct 2026

simdjson review

simdjson is a C++ JSON library that uses SIMD instructions and microparallel algorithms. Its default front end is On-Demand, and the project also documents JSON writing. Its throughput figures are upstream benchmark claims; our recorded run built an ancillary Rust benchmark crate and did not measure the C++ parser.

+19stars / 7d
Verdict

Consider simdjson when profiling gives you a concrete JSON-processing problem to investigate. Our September 25, 2026 run at commit 23b236d downloaded dependencies in about 1 second and built the nested Rust benchmark crate in about 7 seconds. It did not build or benchmark the C++ parser. The visible Cargo unit-test invocations ran no tests, and repeated summaries prevent treating the stored aggregates as verified exhaustive counts. Select a release, compile its documented C++ example, then compare correctness and end-to-end processing on representative inputs before making an adoption decision.

We ran it

Lab card: what happened when we ran simdjsonScreenshot of simdjson (simdjson.org)
Install✓ · 1s15 packages
Build✓ · 7s
Tests✓ · 1s0 passed · 0 failed of 0 (cargo test)
Repo773 files~119,390 lines of source · 34.2 MB · 44 CI workflows · tests dir

Answers from our run

Does simdjson build from source?

Dependencies installed in 1 seconds (15 packages), and the build succeeded in 7 seconds. We cloned commit 23b236d into a clean Debian container with 3 CPUs and no project-specific setup.

Do simdjson's tests pass?

Yes. The project's own test command finished in 1 seconds and reported 0 passed, 0 failed (cargo test).

Who should not use simdjson?

Readers seeking a locally verified C++ performance result: our recorded run did not provide one.

What are the alternatives to simdjson?

yyjson, JSON for Modern C++. Consider simdjson when profiling gives you a concrete JSON-processing problem to investigate.

Setup3/5The README documents a two-file C++ integration path and compiler prerequisites. Our run built only the nested Rust benchmark crate, so C++ setup remains unverified.
Docs3/5The supplied README and performance guide cover setup and tuning. The basics-guide capture lacks readable API content, limiting assessment of its detailed guidance.
Community2/5The supplied issue discussions show maintainer participation. Adoption, contributor breadth, and support responsiveness were not established; stars are not evidence of active use.
Maturity3/5The v4.6.11 notes document six specific audit findings and their scope. Our ancillary Rust build does not validate C++ correctness, compatibility, or production reliability.

Discussed on

  1. hnSimdjson – Parsing Gigabytes of JSON per Second598 points
  2. hnSimdjson: Parsing gigabytes of JSON per second503 points
  3. hnShow HN: Faster FastAPI with simdjson and io_uring on Linux 5.19290 points
  4. hnSimdjson 0.3: Faster JSON parser258 points
  5. hnThe simdjson library60 points

Who it’s for

C++ developers whose profiling identifies JSON processing as a meaningful application cost.
Engineers who can compare representative documents and value extraction on their deployment hardware.
Teams prepared to evaluate input padding, parser reuse, allocation costs, and the API against their application requirements.

Who it’s NOT for

Readers seeking a locally verified C++ performance result: our recorded run did not provide one.
Applications requiring full JSONPath support: issue 2070 describes strictly limited support.
Teams expecting the basic C++ quick start to work unchanged on a 32-bit system: the README specifies a 64-bit system.
Production users planning to track the development branch without selecting a release: the README explicitly recommends releases.

Setup reality

In our recorded run on September 25, 2026, at commit 23b236d6e713691e3de43ca3452394b2e230daf4, the harness selected benchmark/static_reflect/serde-benchmark/. This was a Rust benchmark crate, not the main C++ library.

The dependency-download step completed in 952 ms, the build step in 7,113 ms, and the cargo test step in 1,356 ms. The stored summary rounds these to 1, 7, and 1 seconds and records 15 dependencies. Dependency download does not establish that a simdjson executable was installed. The build log identifies serde-benchmark v0.1.0 and an unoptimized development build.

The visible unit-test invocations for lib.rs and src/main.rs each say running 0 tests. The stored aggregates report 0 passed, 0 failed, and 0 total, but the output repeats summaries and unique, exhaustive counts were not verified. The successful command provides no substantive parser-test coverage.

Separately, the README documents a C++ quick start using simdjson.h and simdjson.cpp, g++ 7 or better or clang++ 6 or better, and a 64-bit system. Visual Studio and Xcode require different steps. We did not execute that quick start, check an installed binary, or measure a JSON workload.

A Rust benchmark build leaves the C++ decision open

simdjson's speed claims need a workload measurement that our recorded run does not supply. On September 25, 2026, our harness selected the Rust crate at benchmark/static_reflect/serde-benchmark/, at commit 23b236d6e713691e3de43ca3452394b2e230daf4. That distinction determines what this review can conclude.

The README describes a C++ library using SIMD instructions and microparallel algorithms, with On-Demand as its default front end. It claims parsing speeds over four times those of commonly used production parsers. Those are project claims, not results reproduced here.

For a C++ team, the useful next question is whether simdjson improves the work the application actually performs, including input preparation and value extraction.

What our recorded run established

The recorded environment had 3 CPUs, 12 GB of memory, and image label lab-rust:1. That label does not establish an actual Rust compiler version.

Step Recorded observation Limit
Dependency download Exit 0 in 952 ms; stored summary: 1 second and 15 dependencies This does not prove a simdjson executable was installed
Build Exit 0 in 7,113 ms; stored summary: 7 seconds The log identifies serde-benchmark v0.1.0, built in an unoptimized development profile
cargo test Exit 0 in 1,356 ms; stored summary: 1 second The visible lib.rs and src/main.rs unit-test invocations each report running 0 tests

The stored test aggregates are 0 passed, 0 failed, and 0 total. The captured output repeats summaries after a replay marker, and unique, exhaustive counts were not verified. We therefore draw no suite-count or parser-correctness conclusion from those aggregates. The command completed successfully, but the visible invocations supplied no substantive tests.

The logs also contain warnings about an unspecified Rust edition and extern declarations without an explicit ABI. Neither prevented the recorded build. They do not establish a defect in the C++ parser.

The checkout measurements were 773 files, approximately 119,390 source lines, and 34.2 MB. The scan recorded 44 CI workflow files and a tests directory. These describe the checkout, not deployed library size, executed CI coverage, or application memory use. No audit result or advisory coverage was recorded.

We did not execute the C++ quick start, check an installed binary, exercise CPU dispatch, validate input-buffer behavior, or measure parsing throughput.

The documented C++ setup is a separate path

The README documents integration through simdjson.h and simdjson.cpp. Its command-line quick start calls for g++ 7 or better or clang++ 6 or better and a 64-bit system. It notes separate steps for Visual Studio and Xcode and says clang++ users may need to select a C++ language version explicitly.

The README also says the library selects a CPU-tailored parser at runtime and recommends working from a release when using simdjson in a product. These are documented capabilities and recommendations, not checks completed by our Rust run.

The performance guide recommends reusing parsers because internal buffers persist between parses. It also discusses input padding and recommends defining NDEBUG for release builds once application code has been tested. Its warning about floating-point-heavy documents is useful: number conversion can dominate processing, so a headline throughput figure is a poor substitute for your own corpus.

The supplied basics-guide capture contains GitHub navigation and file metadata rather than its API text. This review therefore does not use it to substantiate detailed lifetime, invalidation, or DOM behavior. Check the documentation matching your selected release before designing around those rules.

Release and feature evidence need their own scope

The v4.6.11 release notes list six audit findings reproduced on 4.6.10. They cover scalar handling at a parse_many window boundary, a zero-depth allocation case, source-view lengths across batches, a fallback UTF-8 boundary case, capacity overflow guards, and allocation-failure state. These are upstream release findings. Our run did not reproduce them or verify their fixes.

The UTF-8 entry specifically says the described over-read was not reachable through a public API on 4.6.x; its observable defect was rejection of a valid NDJSON stream at a window edge. The release notes do not justify treating every listed item as an independently demonstrated security vulnerability. They also do not establish that v4.6.11 remains the latest release. The supplied current README refers to examples using simdjson 5.0.1, while our measurement remains tied to the September commit.

Issue 2070 remains open and describes JSONPath support as strictly limited to a subset convertible to JSON Pointer. If full JSONPath is a requirement, verify the exact expressions you need before adopting the library.

Issue 1020 is closed. On September 29, 2026, the maintainer closed it with a link to a compressed-input demonstration. The issue's original 2020 description of fully decompressing a document first cannot establish a current blanket limitation. We did not inspect or run the linked demonstration, so this review makes no claim about its formats, throughput, or integration into the core library.

Choose a comparison that fits your code

The supplied yyjson README describes an ANSI C library whose parsing results are immutable and require a mutable copy for modification. It is a relevant comparison when a C interface and explicit document manipulation suit the application.

JSON for Modern C++ emphasizes intuitive syntax, a single C++11 header, and STL-like access. It is a relevant comparison when those integration and programming choices matter to your team. Its README acknowledges that faster JSON libraries exist; that statement does not quantify a difference for your workload.

This review has no comparative benchmark result. Use the same documents, correctness checks, extracted values, and deployment CPU for each candidate. Include allocation and decompression when they are part of the application path, and distinguish cold setup from repeated parsing.

How to read the scores

These are editorial assessments of the supplied evidence, not benchmark results. The scale is 1 for substantial documented obstacles, 2 for limited evidence, 3 for a documented evaluation path with material checks remaining, 4 for detailed support within the assessed scope, and 5 for strong support across that scope. Unknown adoption and untested compatibility do not earn a high score.

Setup receives 3 because the C++ entry path is documented but was not executed here. Documentation receives 3 because the README and performance guide are useful, while the supplied basics capture does not expose its API text. Community receives 2 because the extracts show maintainer participation but do not establish adoption or support responsiveness. Maturity receives 3 because the release notes document concrete defect review, while this run supplies no C++ correctness or deployment evidence.

Start with a selected release and its C++ example. Proceed to an application comparison only after that path builds and produces the expected result in your environment.

Alternatives

ProjectWhat it isPick it when
yyjsonAn ANSI C JSON library with immutable parsing results and mutable document APIs.Choose it when you need a C API and document modification through a mutable copy. Its README documents integration with one header and one C source file; this review did not benchmark it.
JSON for Modern C++ gh↗A C++11 JSON library with a single header and an STL-like container interface.Choose it when familiar container operations and straightforward integration fit your application. Its stated design priorities favor intuitive syntax over maximum parsing speed; this review did not measure a performance difference.

What people are saying

  1. [velocity-scout] simdjson/simdjson

Sources

  1. simdjson README
  2. simdjson basics guide
  3. simdjson performance guide
  4. Release v4.6.11
  5. Full JSONPath issue 2070
  6. Compressed input issue 1020
  7. Measured commit 23b236d
  8. MrKeyoor test method

More data reviews

rerun · telegraf · rocksdb · redash · akshare · DB-GPT · the whole board →