This section summarizes the notable changes of every release and links to the relevant documentation.
The complete release notes — including all changes, the download files, and their checksums — are
published on the GitHub releases page.
!!! info "Unreleased changes"
This documentation is built from the `develop` branch and may describe changes that are not part of a release
yet. Their version numbers are followed by an <span class="unreleased-version">unreleased</span> badge.
Every release has its own page with a summary of its notable changes and an overview of the API that was added or
changed in it. The API overview is generated from the "Version history" section of the
API pages; it is not a change log, but helps to see whether a feature is available in
the version you use.
All releases at a glance (hover a marker for its version and date):
From the first commit (diamond) in 2013 to the latest release, on a time axis by year. Filled dots with a version label are minor or major releases, rings are patch releases.
Fixes bugs found in 3.11.3 and adds several features. No public API was removed or renamed. Highlights: diagnostic byte positions (start_pos/end_pos); templated conversion macros and NLOHMANN_DEFINE_DERIVED_TYPE; std::optional support.
Adds features and fixes bugs found in 3.11.2. All changes are backward-compatible. Highlights: custom base class for basic_json; serialization-only conversion macros; Bazel and Swift Package Manager support.
Fixes bugs found in 3.11.1 and restructures the namespace. All changes are backward-compatible. Highlights: fixes value for strings and size types; restores json_pointer as associative-container key; restructured inline namespace.
One of the largest releases ever. All changes are backward-compatible. Highlights:std::string_view keys; BJData binary format; C++20 support including operator<=>.
Fixes regressions introduced in 3.10.0. All changes are backward-compatible. Highlights: fixes the std::filesystem::path conversion; fixes types with explicit defaulted constructors; fixes std::find/std::remove return values.
Fixes more regressions from 3.10.0. All changes are backward-compatible. Highlights: fixes extended-diagnostics assertions in update and array insertion; custom allocators for binary output; conversion from begin()/end()-only types.
Re-release of 3.10.1, whose Git tag pointed at the wrong commit due to a bug in the release script. All changes are backward-compatible. Highlights: re-release of 3.10.1 with the correct Git tag.
Fixes a regression from 3.10.0. All changes are backward-compatible. Highlights: fixes an extended-diagnostics assertion with ordered_json; hardens the GDB pretty-printer.
Feature release adding four long-requested features. All changes are backward-compatible. Highlights: comment parsing; ordered_json; switch to disable implicit conversions.
Feature release. All changes are backward-compatible. Highlights: binary value type for CBOR, BSON, and MessagePack; input adapters for any LegacyInputIterator container; fixes contains for JSON pointers.
Fixes a regression from 3.7.2 that could yield quadratic complexity in destructor calls. All changes are backward-compatible. Highlights: fixes quadratic complexity in destructor calls.
Fixes a stack overflow for deeply nested input by making the destructor iterative; parsing of JSON text is now bounded only by available memory (the binary-format parsers still recurse). All changes are backward-compatible. Highlights: iterative destructor fixes a stack overflow on deeply nested input.
Bug-fix release. All changes are backward-compatible. Highlights: fixes a crash when serializing the minimum std::int64_t; fixes contains for JSON pointers; items with custom string types.
Convenience features and house-keeping. All changes are backward-compatible. Highlights:contains overload for JSON pointers; generic to_string; return value for emplace_back.
Fixes a regression (GCC 7/8 compilation) and a <Windows.h> build error introduced in 3.6.0. All changes are backward-compatible. Highlights: fixes a GCC 7/8 compilation regression; fixes a <Windows.h> build error.
Feature release. All changes are backward-compatible. Highlights: SAX interface and non-recursive parser; parsing from wide strings; conversion to std::string_view.
Bug-fix release. All changes are backward-compatible. Highlights: fixes a memory leak in the parser callback; user-defined string types in parser and serializer.
Bug-fix release. All changes are backward-compatible. Highlights: fixes parsing of indefinite-length CBOR strings; fixes a user-defined conversion to vector types; fixes UBJSON overflow detection.
Fixes small issues in the JSON Pointer and JSON Patch implementations (invalid "copy" targets and non-integer array indices). All changes are backward-compatible. Highlights: fixes invalid JSON Patch "copy" targets; fixes non-integer array indices in JSON Pointer.
First 3.x release — a major release with breaking changes (see the migration guide). Highlights: user-defined exceptions with identifiers; non-throwing accept and allow_exceptions; update to merge objects.
Bug-fix release. All changes are backward-compatible. Highlights: locale-independent number parsing and serialization; correct floating-point round-tripping; GPG-signed commits and files.
Feature release. All changes are backward-compatible. Highlights: conversions from and to arbitrary user-defined types; meta function; JSON_NOEXCEPTION.
Fixes several security-relevant bugs in the CBOR and MessagePack parsers found by OSS-Fuzz. All changes are backward-compatible. Highlights: fixes security-relevant bugs in the CBOR parser; fixes security-relevant bugs in the MessagePack parser.
Adds the emplace and emplace_back functions and improves parsing and serialization performance. All changes are backward-compatible. Highlights:emplace and emplace_back; faster parsing; faster serialization.
Fixes several parser bugs found through the "Parsing JSON is a Minefield" study (short files, encoding detection, surrogate pairs). All changes are backward-compatible. Highlights: fixes short-file handling; fixes encoding detection; fixes surrogate pairs.
Fixes operator[] for JSON pointers so that it creates missing values like the other overloads. All changes are backward-compatible. Highlights:operator[] creates missing values for JSON pointers.
Fixes a remaining stream end-of-file detection bug in the parser. All changes are backward-compatible. Highlights: fixes a remaining stream end-of-file bug.
Generalizes the parser to accept any contiguous sequence of one-byte elements and deprecates the input-stream constructor in favor of the parse function. All changes are backward-compatible. Highlights: parser accepts any contiguous sequence of one-byte elements; deprecates the input-stream constructor in favor of parse.
Overhauls the parser (now rejecting unescaped control characters), tightens the class invariants, and cleans up the code. All changes are backward-compatible. Highlights: overhauled parser rejecting unescaped control characters; tighter class invariants; code cleanup.
Fixes a performance regression in the dump function by adjusting the stream locale once per serialization. All changes are backward-compatible. Highlights: fixes a performance regression in dump.
Feature release with a minor (potentially non-backward-compatible) API change from added noexcept and constexpr specifiers. Highlights: JSON Pointer support in at and operator[], plus flatten and unflatten; JSON Patch via diff and patch; unsigned 64-bit integers.