Skip to content

v6.3.0

Choose a tag to compare

@stephenberry stephenberry released this 17 Dec 14:28
· 182 commits to main since this release

Major Features

  • RFC compliance for JSON Patch and JSON Merge Patch
  • Big endian architecture support
  • std::chrono JSON support
  • Enhanced BEVE format streaming capabilities

Big Endian Support

Full support for big endian architectures with compile-time detection via std::endian::native. Includes byte-swapping implementations across all components, with CI testing through GCC cross-compilation and QEMU. (Closes #1675)

JSON Patch (RFC 6902)

Complete implementation of RFC 6902 JSON Patch for computing and applying document differences:

  • glz::diff() - Generate patches between documents
  • glz::patch() - Apply operations in-place
  • glz::patched() - Non-mutating patch application
  • glz::patch_json() - Work directly with JSON strings
  • All six operations: add, remove, replace, move, copy, test
  • Atomic transactions with automatic rollback on failure
  • Option to create missing intermediate paths
  • #2131

JSON Merge Patch (RFC 7386)

Full support for RFC 7386 JSON Merge Patch:

  • merge_patch() - Apply patches in-place
  • merge_patched() - Returns new patched value
  • merge_diff() - Generate patches between documents
  • Correct handling of null-value removal, recursive merging, and array replacement
  • #2132

std::chrono Support

Zero-allocation serialization for chrono types: (Closes #1110)

  • std::chrono::duration - Serialized as numeric count
  • std::chrono::system_clock::time_point - ISO 8601 UTC format
  • std::chrono::steady_clock::time_point - Numeric format
  • Epoch wrappers: epoch_seconds, epoch_millis, epoch_micros, epoch_nanos
  • Precision-aware fractional seconds based on duration type
  • Automatic timezone offset conversion to UTC
  • #2130

BEVE Delimiter and Incremental Writing

New streaming capabilities for BEVE (Binary Efficient Value Encoding) similar to NDJSON for JSON:

  • write_beve_delimiter() - Outputs delimiter byte (0x06)
  • write_beve_append() - Adds values without clearing buffer
  • write_beve_append_with_delimiter() - Streaming-friendly writes
  • write_beve_delimited() - Container serialization with delimiters
  • read_beve_delimited() - Read delimiter-separated values
  • read_beve_at() - Offset-based reading with automatic delimiter skipping

When converting delimited BEVE to JSON via beve_to_json, delimiters become newlines for NDJSON-compatible output.

std::u8string and std::u8string_view Support

Native serialization support for UTF-8 string types.

mimic Type in glz::meta

New mimic type alias to prevent double-quoting of custom types as map keys: (Closes #1477)

template <>
struct glz::meta<my_key> {
   using mimic = std::string;
   static constexpr auto value = &my_key::value;
};

Networking Improvements

  • HTTP Server Keep Alive - Persistent connection support for HTTP servers #2128
  • WebSocket internal() Methods - Access underlying implementation via internal() and socket() methods #2140

Performance Improvements

  • Reduced template instantiations when various glz::opts are used, decreasing compile times #2138
  • Pass end iterator by value for higher performance in parsing #2133
  • Pass std::string_view by value throughout codebase #2134
  • Remove reinterpret_cast from atoi implementation #2136

Code Cleanup

  • Removed legacy hash_map implementation and cleaned up variant hashing #2135

Bug Fixes

  • Fixed glz::seek for invalid paths to maps by using find #2129

Breaking Changes

  • Error code renamed: get_nonexistent_json_ptrnonexistent_json_ptr for consistency #2131

Full Changelog: v6.2.0...v6.3.0