# Releases This page 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](https://github.com/nlohmann/json/releases). ## v3.12.0 (2025-04-11) Fixes bugs found in 3.11.3 and adds several features. All changes are backward-compatible. - Adds diagnostic byte positions via [`JSON_DIAGNOSTIC_POSITIONS`](../api/macros/json_diagnostic_positions.md), exposed through the new [`start_pos`](../api/basic_json/start_pos.md) and [`end_pos`](../api/basic_json/end_pos.md) member functions. - Makes the [conversion macros](../features/arbitrary_types.md#simplify-your-life-with-macros) templated (so they also work with [`ordered_json`](../api/ordered_json.md)) and adds [`NLOHMANN_DEFINE_DERIVED_TYPE`](../api/macros/nlohmann_define_derived_type.md) for derived classes. - Adds `std::optional` support (C++17) and lets [`patch`](../api/basic_json/patch.md), [`diff`](../api/basic_json/diff.md), and [`flatten`](../api/basic_json/flatten.md) work with arbitrary string types. - Extends the [binary formats](../features/binary_formats/index.md): [BJData](../features/binary_formats/bjdata.md) draft 3 and unsigned 64-bit integers for [BSON](../features/binary_formats/bson.md). - Adds multidimensional C-array conversion and UTF-8 encoded `std::filesystem::path` conversions, and lowers the minimum [CMake](../integration/cmake.md) version to allow CMake 4.0. [Full release notes](https://github.com/nlohmann/json/releases/tag/v3.12.0). ## v3.11.3 (2023-11-28) Adds features and fixes bugs found in 3.11.2. All changes are backward-compatible. - Adds a [custom base class](../api/basic_json/json_base_class_t.md) as a node customization point. - Adds serialization-only [conversion macros](../features/macros.md) (`NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE` and `NLOHMANN_DEFINE_TYPE_INTRUSIVE_ONLY_SERIALIZE`) and a clearer parse error for empty input. - Adds [Bazel](../integration/package_managers.md#bazel) and [Swift Package Manager](../integration/package_managers.md#swift-package-manager) build support. - Fixes custom allocators, a memory leak in [`adl_serializer`](../api/adl_serializer/to_json.md)'s `to_json`, initializer-list construction when `size_type` is not `int`, and many compiler warnings. [Full release notes](https://github.com/nlohmann/json/releases/tag/v3.11.3). ## v3.11.2 (2022-08-12) Fixes bugs found in 3.11.1 and restructures the namespace. All changes are backward-compatible. - Fixes the [`value`](../api/basic_json/value.md) function (broken for strings, size types, and `nullptr` in 3.11.0) and makes `json_fwd.hpp` self-contained. - Restores using [`json_pointer`](../api/json_pointer/index.md) as a key in associative containers and comparing it with strings. - Restructures the inline [namespace](../features/namespace.md) and allows disabling the version component, and avoids heap allocations in the [BJData](../features/binary_formats/bjdata.md) parser. [Full release notes](https://github.com/nlohmann/json/releases/tag/v3.11.2). ## v3.11.1 (2022-08-01) Fixes a regression from 3.11.0. All changes are backward-compatible. - Restores the global [user-defined string literals](../api/macros/json_use_global_udls.md) [`operator""_json`](../api/operator_literal_json.md) and [`operator""_json_pointer`](../api/operator_literal_json_pointer.md), which 3.11.0 had moved into a namespace by default. [Full release notes](https://github.com/nlohmann/json/releases/tag/v3.11.1). ## v3.11.0 (2022-08-01) One of the largest releases ever. All changes are backward-compatible. - Allows `std::string_view` as object keys in [`at`](../api/basic_json/at.md), [`operator[]`](../api/basic_json/operator%5B%5D.md), [`value`](../api/basic_json/value.md), [`erase`](../api/basic_json/erase.md), [`find`](../api/basic_json/find.md), [`contains`](../api/basic_json/contains.md), and [`count`](../api/basic_json/count.md). - Adds the [BJData](../features/binary_formats/bjdata.md) binary format (the fifth supported format). - Improves C++20 support, including [`operator<=>`](../api/basic_json/operator_spaceship.md) and ``-compatible iterators. - Adds a versioned, ABI-tagged inline [namespace](../features/namespace.md) ([`NLOHMANN_JSON_NAMESPACE`](../api/macros/nlohmann_json_namespace.md)) and the option to move the UDLs out of the global namespace ([`JSON_USE_GLOBAL_UDLS`](../api/macros/json_use_global_udls.md)). - Adds [`patch_inplace`](../api/basic_json/patch_inplace.md), default values for the [conversion macros](../features/arbitrary_types.md#simplify-your-life-with-macros), and an option to disable enum serialization ([`JSON_DISABLE_ENUM_SERIALIZATION`](../api/macros/json_disable_enum_serialization.md)). This release introduced a UDL regression that was fixed in [3.11.1](https://github.com/nlohmann/json/releases/tag/v3.11.1). [Full release notes](https://github.com/nlohmann/json/releases/tag/v3.11.0). ## v3.10.5 (2022-01-03) Bug-fix release. All changes are backward-compatible. - Guards the `std::filesystem` conversions behind compiler-support checks ([`JSON_HAS_FILESYSTEM`](../api/macros/json_has_filesystem.md)), which can be set to `0` to disable them altogether. [Full release notes](https://github.com/nlohmann/json/releases/tag/v3.10.5). ## v3.10.4 (2021-10-16) Fixes regressions introduced in 3.10.0. All changes are backward-compatible. - Fixes the `std::filesystem::path` conversion (which could trigger a stack overflow and broke compilation on Windows). - Fixes compilation for types with an explicit defaulted constructor and for code relying on the return values of `std::find` and `std::remove`. [Full release notes](https://github.com/nlohmann/json/releases/tag/v3.10.4). ## v3.10.3 (2021-10-08) Fixes more regressions from 3.10.0. All changes are backward-compatible. - Fixes [extended-diagnostics](../api/macros/json_diagnostics.md) assertions triggered by [`update`](../api/basic_json/update.md) and by inserting into arrays. - Supports custom allocators when writing binary formats into a `std::vector`, and allows conversion from types that only provide `begin()`/`end()`. [Full release notes](https://github.com/nlohmann/json/releases/tag/v3.10.3). ## v3.10.2 (2021-08-26) 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. [Full release notes](https://github.com/nlohmann/json/releases/tag/v3.10.2). ## v3.10.1 (2021-08-24) Fixes a regression from 3.10.0. All changes are backward-compatible. - Fixes an [extended-diagnostics](../api/macros/json_diagnostics.md) assertion triggered when used with [`ordered_json`](../api/ordered_json.md), and hardens the GDB pretty-printer. [Full release notes](https://github.com/nlohmann/json/releases/tag/v3.10.1). ## v3.10.0 (2021-08-17) Feature release. All changes are backward-compatible. - Adds [extended diagnostic messages](../api/macros/json_diagnostics.md) ([`JSON_DIAGNOSTICS`](../api/macros/json_diagnostics.md)) that prepend a JSON pointer to exception messages to pinpoint the offending value. - Adds a GDB pretty-printer and a [`cbor_tag_handler_t`](../api/basic_json/cbor_tag_handler_t.md) `store` option to keep CBOR tags as binary subtypes. - Supports containers with non-default-constructible types and parsing from `std::byte`. - Adds [`JSON_NO_IO`](../api/macros/json_no_io.md) to exclude the I/O headers and the [`JSON_HAS_CPP_*`](../api/macros/json_has_cpp_11.md) macros to override the detected C++ standard. [Full release notes](https://github.com/nlohmann/json/releases/tag/v3.10.0). ## v3.9.1 (2020-08-06) Fixes two regressions from 3.9.0. All changes are backward-compatible. - Accepts consecutive [comments](../features/comments.md) and completes the [`ordered_json`](../api/ordered_json.md) interface (e.g. `ordered_json::parse`). [Full release notes](https://github.com/nlohmann/json/releases/tag/v3.9.1). ## v3.9.0 (2020-07-27) Feature release adding four long-requested features. All changes are backward-compatible. - Optional [comment](../features/comments.md) parsing in [`parse`](../api/basic_json/parse.md) via the `ignore_comments` parameter. - [`ordered_json`](../api/ordered_json.md) to preserve the [insertion order](../features/object_order.md) of object keys. - An option to switch off [implicit conversions](../api/macros/json_use_implicit_conversions.md). - The [`NLOHMANN_DEFINE_TYPE_*`](../features/arbitrary_types.md#simplify-your-life-with-macros) convenience macros, plus high-precision-number support for [UBJSON](../features/binary_formats/ubjson.md) and CBOR tag handling. [Full release notes](https://github.com/nlohmann/json/releases/tag/v3.9.0). ## v3.8.0 (2020-06-14) Feature release. All changes are backward-compatible. - Introduces a [binary value](../features/binary_values.md) type that is read from and written to [CBOR](../features/binary_formats/cbor.md), [BSON](../features/binary_formats/bson.md), and [MessagePack](../features/binary_formats/messagepack.md), and can be shared between formats. - Generalizes the input adapters to read from any `LegacyInputIterator` container (3–10 % faster parsing). - Fixes [`contains`](../api/basic_json/contains.md) for JSON pointers and makes the binary [`from_cbor`](../api/basic_json/from_cbor.md)/[`from_msgpack`](../api/basic_json/from_msgpack.md)/etc. functions respect `allow_exceptions`. [Full release notes](https://github.com/nlohmann/json/releases/tag/v3.8.0). ## v3.7.3 (2019-11-17) Fixes a regression from 3.7.2 that could yield quadratic complexity in destructor calls. All changes are backward-compatible. [Full release notes](https://github.com/nlohmann/json/releases/tag/v3.7.3). ## v3.7.2 (2019-11-10) Fixes a stack overflow for deeply nested input by making the destructor iterative; parsing is now bounded only by available memory. All changes are backward-compatible. [Full release notes](https://github.com/nlohmann/json/releases/tag/v3.7.2). ## v3.7.1 (2019-11-06) Bug-fix release. All changes are backward-compatible. - Fixes a segmentation fault when serializing the `std::int64_t` minimum value and fixes [`contains`](../api/basic_json/contains.md) for JSON pointers. - Allows [`items`](../api/basic_json/items.md) with a custom string type and makes `json_pointer::back` `const`. [Full release notes](https://github.com/nlohmann/json/releases/tag/v3.7.1). ## v3.7.0 (2019-07-28) Convenience features and house-keeping. All changes are backward-compatible. - Adds a [`contains`](../api/basic_json/contains.md) overload that checks a JSON pointer without throwing, a generic `to_string`, and a return value for [`emplace_back`](../api/basic_json/emplace_back.md). [Full release notes](https://github.com/nlohmann/json/releases/tag/v3.7.0). ## v3.6.1 (2019-03-20) Fixes a regression (GCC 7/8 compilation) and a `` build error introduced in 3.6.0. All changes are backward-compatible. [Full release notes](https://github.com/nlohmann/json/releases/tag/v3.6.1). ## v3.6.0 (2019-03-20) Feature release. All changes are backward-compatible. - Reworks the [JSON pointer](../features/json_pointer.md) interface (`operator/`, `push_back`, `parent_pointer`, …). - Adds a [`contains`](../api/basic_json/contains.md) function to test for an object key and greatly improves the performance of integer serialization. [Full release notes](https://github.com/nlohmann/json/releases/tag/v3.6.0). ## v3.5.0 (2018-12-22) Feature release. All changes are backward-compatible. - Adds structured-binding support via the [`items`](../api/basic_json/items.md) function and reading from `FILE*` in the [`parse`](../api/basic_json/parse.md) function. - Fixes the `eofbit` handling on input streams and a bug in the BSON SAX parser. [Full release notes](https://github.com/nlohmann/json/releases/tag/v3.5.0). ## v3.4.0 (2018-10-30) Feature release. All changes are backward-compatible. - Adds [BSON](../features/binary_formats/bson.md) read/write support. - Adds configurable Unicode error handlers to [`dump`](../api/basic_json/dump.md) (throw, replace with U+FFFD, or ignore) and the [`NLOHMANN_JSON_SERIALIZE_ENUM`](../api/macros/nlohmann_json_serialize_enum.md) macro for [enum conversion](../features/enum_conversion.md). - Improves parse-error messages with line/column positions and context. [Full release notes](https://github.com/nlohmann/json/releases/tag/v3.4.0). ## v3.3.0 (2018-10-05) Feature release. All changes are backward-compatible. - Adds GCC 4.8 support, the [`get_to`](../api/basic_json/get_to.md) function, and an overhauled and documented [CMake](../integration/cmake.md) integration. [Full release notes](https://github.com/nlohmann/json/releases/tag/v3.3.0). ## v3.2.0 (2018-08-20) Feature release. All changes are backward-compatible. - Adds a [SAX interface](../features/parsing/sax_interface.md) and a non-recursive parser. - Adds parsing from wide-string types (`std::wstring`, `std::u16string`, `std::u32string`) and `std::string_view` (C++17), and round-tripping of `std::map`/`std::unordered_map` with non-string keys. [Full release notes](https://github.com/nlohmann/json/releases/tag/v3.2.0). ## v3.1.2 (2018-03-14) Bug-fix release. All changes are backward-compatible. - Fixes a memory leak in the parser callback and adds user-defined string-type support to the parser and serializer. [Full release notes](https://github.com/nlohmann/json/releases/tag/v3.1.2). ## v3.1.1 (2018-02-13) Bug-fix release. All changes are backward-compatible. - Fixes parsing of indefinite-length CBOR strings, a user-defined conversion to vector types, and overflow detection for UBJSON containers. [Full release notes](https://github.com/nlohmann/json/releases/tag/v3.1.1). ## v3.1.0 (2018-02-01) Feature release. All changes are backward-compatible. - Adds [UBJSON](../features/binary_formats/ubjson.md) read/write support and [JSON Merge Patch](../features/merge_patch.md) via [`merge_patch`](../api/basic_json/merge_patch.md). - Switches to the Grisu2 algorithm for short, round-trippable floating-point output, and splits the header into [multiple files](../integration/index.md) with a forward-declaration header. [Full release notes](https://github.com/nlohmann/json/releases/tag/v3.1.0). ## v3.0.1 (2017-12-29) Fixes small issues in the [JSON Pointer](../features/json_pointer.md) and [JSON Patch](../features/json_patch.md) implementations (invalid "copy" targets and non-integer array indices). All changes are backward-compatible. [Full release notes](https://github.com/nlohmann/json/releases/tag/v3.0.1). ## v3.0.0 (2017-12-17) First 3.x release — a major release with breaking changes (see the [migration guide](../integration/migration_guide.md)). - Introduces user-defined [exceptions](exceptions.md) (`json::exception` and subtypes, each with an identifier). - Adds a non-throwing [`accept`](../api/basic_json/accept.md) function and an `allow_exceptions` flag for [`parse`](../api/basic_json/parse.md), and an [`update`](../api/basic_json/update.md) function to merge objects. - Adds streaming for CBOR and MessagePack and allows storing NaN/infinity. - Non-UTF-8 strings now throw on serialization, and the iterator category changed to bidirectional. [Full release notes](https://github.com/nlohmann/json/releases/tag/v3.0.0). ## v2.1.1 (2017-02-25) Bug-fix release. All changes are backward-compatible. - Makes number parsing and serialization locale-independent with correct floating-point round-tripping; released files are now GPG-signed. [Full release notes](https://github.com/nlohmann/json/releases/tag/v2.1.1). ## v2.1.0 (2017-01-28) Feature release. All changes are backward-compatible. - Adds conversions from and to [arbitrary user-defined types](../features/arbitrary_types.md) via `to_json`/`from_json`, the [`meta`](../api/basic_json/meta.md) function, and the option to switch off exceptions ([`JSON_NOEXCEPTION`](../api/macros/json_noexception.md)). [Full release notes](https://github.com/nlohmann/json/releases/tag/v2.1.0). ## v2.0.10 (2017-01-02) Fixes several security-relevant bugs in the CBOR and MessagePack parsers found by OSS-Fuzz. All changes are backward-compatible. [Full release notes](https://github.com/nlohmann/json/releases/tag/v2.0.10). ## v2.0.9 (2016-12-16) Adds the [CBOR](../features/binary_formats/cbor.md) and [MessagePack](../features/binary_formats/messagepack.md) binary formats. All changes are backward-compatible. [Full release notes](https://github.com/nlohmann/json/releases/tag/v2.0.9). ## v2.0.8 (2016-12-02) Adds the [`emplace`](../api/basic_json/emplace.md) and [`emplace_back`](../api/basic_json/emplace_back.md) functions and improves parsing and serialization performance. All changes are backward-compatible. [Full release notes](https://github.com/nlohmann/json/releases/tag/v2.0.8). ## v2.0.7 (2016-11-02) Fixes several parser bugs found through the "Parsing JSON is a Minefield" study (short files, encoding detection, surrogate pairs). All changes are backward-compatible. [Full release notes](https://github.com/nlohmann/json/releases/tag/v2.0.7). ## v2.0.6 (2016-10-15) Fixes [`operator[]`](../api/basic_json/operator%5B%5D.md) for [JSON pointers](../features/json_pointer.md) so that it creates missing values like the other overloads. All changes are backward-compatible. [Full release notes](https://github.com/nlohmann/json/releases/tag/v2.0.6). ## v2.0.5 (2016-09-14) Fixes a remaining stream end-of-file detection bug in the parser. All changes are backward-compatible. [Full release notes](https://github.com/nlohmann/json/releases/tag/v2.0.5). ## v2.0.4 (2016-09-11) Fixes stream end-of-file detection in the parser. All changes are backward-compatible. [Full release notes](https://github.com/nlohmann/json/releases/tag/v2.0.4). ## v2.0.3 (2016-08-31) Generalizes the parser to accept any contiguous sequence of one-byte elements and deprecates the input-stream constructor in favor of the [`parse`](../api/basic_json/parse.md) function. All changes are backward-compatible. [Full release notes](https://github.com/nlohmann/json/releases/tag/v2.0.3). ## v2.0.2 (2016-07-31) Overhauls the parser (now rejecting unescaped control characters), tightens the class invariants, and cleans up the code. All changes are backward-compatible. [Full release notes](https://github.com/nlohmann/json/releases/tag/v2.0.2). ## v2.0.1 (2016-06-28) Fixes a performance regression in the [`dump`](../api/basic_json/dump.md) function by adjusting the stream locale once per serialization. All changes are backward-compatible. [Full release notes](https://github.com/nlohmann/json/releases/tag/v2.0.1). ## v2.0.0 (2016-06-24) Feature release with a minor (potentially non-backward-compatible) API change from added `noexcept` and `constexpr` specifiers. - Adds [JSON Pointer](../features/json_pointer.md) support in [`at`](../api/basic_json/at.md) and [`operator[]`](../api/basic_json/operator%5B%5D.md), plus [`flatten`](../api/basic_json/flatten.md) and [`unflatten`](../api/basic_json/unflatten.md). - Adds [JSON Patch](../features/json_patch.md) via [`diff`](../api/basic_json/diff.md) and [`patch`](../api/basic_json/patch.md), unsigned 64-bit integer support, and locale-independent serialization. [Full release notes](https://github.com/nlohmann/json/releases/tag/v2.0.0). ## v1.1.0 (2016-01-24) Bug-fix and feature release. All changes are backward-compatible. - Improves floating-point round-tripping, adds a `get_ref` accessor for stored values, and introduces runtime [assertions](../features/assertions.md). [Full release notes](https://github.com/nlohmann/json/releases/tag/v1.1.0). ## v1.0.0 (2015-12-28) First official release. [Full release notes](https://github.com/nlohmann/json/releases/tag/v1.0.0). ## See also - [Migration Guide](../integration/migration_guide.md) — how to future-proof your code for the next major version and replace deprecated functions.