# v3.12.0 Released on 2025-04-11. Fixes bugs found in 3.11.3 and adds several features. No public API was removed or renamed. - 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 raises the minimum [CMake](../../integration/cmake.md) version to 3.5 and supports CMake 4.0. [Full release notes](https://github.com/nlohmann/json/releases/tag/v3.12.0). ## API changes