What changed in Protocol Buffers from 35 to 36

2 releases numbered after v35.1 up to and including v36.1, stable releases only. v35.1 and v36.1 are the newest stable releases of 35 and 36 we track; this page follows them as new ones ship.

26 changes across 2 releases

Added 7

v36.1

  • Add additional unit tests for Python handling of custom JSON enum names

v36.0

  • Add Bazel 9 test coverage for csharp, hpb, objc, php, python, rust and upb
  • Add bazel targets for standalone plugin binaries
  • Add --<lang>_prefix CLI option
  • Add enforce_proto_limits feature for Edition 2026
  • Add json_options.proto and json_enumvalue_options.proto to release artifacts
  • Add json_name enumval support in Java JSON
Changed 10

v36.1

  • Allow later enum aliases to overwrite in C# custom JSON enum mapping
  • Optimize pure Python parse path for custom JSON enum names
  • Include runtime version details in assertion error messages in Rust
  • Invert the relationship between Rust crates

v36.0

  • Make default_symbol_visibility STRICT in edition 2026
  • Enforce proto limits in the descriptor by default for EDITION_2026
  • Validate Duration/Timestamp in TimeUtil::FromString against spec limits
  • Align C++ Proto JSON behavior on the type.proto path with the descriptor.proto path
  • JavaProto no longer uses sun.misc.Unsafe in standard generated code
  • Make Timestamps.parse() attempt non-lenient parsing first with warning if it fails
Fixed 6

v36.0

  • Disallow reserving field number INT_MAX
  • Apply path traversal guard to WriteAllToZip() matching WriteAllToDisk()
  • Disable option sub-location mapping in open-source builds
  • Use direct map reflection API when converting message to JSON if repeated field reflection is not valid
  • Stop TextFormat iteration if output stream fails
  • Fix confusing error message for map value type name conflicts
Removed 1

v36.1

  • Drop special treatment of Rust versions below 4.33
Deprecated 2

v36.0

  • Add deprecation warnings for py_generic_service, cc_generic_service, and java_generic_service
  • Add deprecation warning for Reflection::GetEnum() and Reflection::GetRepeatedEnum()

Original release notes, newest first

The list above is our reading of these notes; the originals from Google are here, one fold per release.

v36.1Protocol Buffers v36.1

Announcements

  • Protobuf News may include additional announcements or pre-announcements for upcoming changes.

Csharp

Rust

Python

View originalPermalink

v36.0Protocol Buffers v36.0

Announcements

  • Protobuf News may include additional announcements or pre-announcements for upcoming changes.
  • Migration Guide may include additional guidance for breaking changes.

Bazel

Compiler

C++

Java

With this release JavaProto no longer uses sun.misc.Unsafe as long as you are utilizing the standard generated code. You should no longer see warnings printed about sun.misc.Unsafe. If you see any issues, please let us know on https://github.com/protocolbuffers/protobuf/issues/20760

Note that the runtime itself still contains references to sun.misc.Unsafe in paths which are exclusively to support Lite generated code. Lite is emitted by a separate code generator which creates generated code optimized for mobile clientside contexts, especially alongside R8 optimizations. Android does not have a timeline to removing sun.misc.Unsafe, and we have found the performance regression too significant to consider removing these paths at this time. It is still TBD for how we can best navigate this mobile vs JVM split on this topic.

Csharp

Objective-C

Rust

Python

PHP

PHP C-Extension

Ruby

UPB (Python/PHP/Ruby C-Extension)

Other

View originalPermalink