Announcements
• Protobuf News may include additional announcements or pre-announcements for upcoming changes.
• Migration Guide may include additional guidance for breaking changes.
Bazel
• Add Bazel9 test (https://github.com/protocolbuffers/protobuf/commit/90ad7e978849e11406eeb47baf228b099c5da9d0)
• Bazel 9 tests for csharp, hpb, objc, php, python, rust and upb (https://github.com/protocolbuffers/protobuf/commit/f9e028f29fa83d0fcfb01c19ce0a4635e9beff5c)
Compiler
• Make default_symbol_visibility STRICT in edition 2026 (https://github.com/protocolbuffers/protobuf/commit/fcd68c563cf2be486622a118caaf8c5f3858f744)
• Add deprecation warnings for (py|cc|java)_generic_service. (https://github.com/protocolbuffers/protobuf/commit/517be42cfe43c9e2c69f5ee40e437a9d8cbd3f99)
• Disallow reserving field number INT_MAX. (https://github.com/protocolbuffers/protobuf/commit/933c522f9e9a09d30f370dc885640af248e52469)
• Add bazel targets for standalone plugin binaries (#23919) (https://github.com/protocolbuffers/protobuf/commit/81880fad1673797b6326a91582b2bf77069d505d)
• Feat:--<lang>_prefix cli option (#24824) (https://github.com/protocolbuffers/protobuf/commit/92dd27ccf0c5c674b48de48310e0ebf45d0d5b88)
• Enforce proto limits in the descriptor by default for EDITION_2026. (https://github.com/protocolbuffers/protobuf/commit/d8520d93af2aadf99afcb5e17bfb99c14ad57364)
• Fix:Apply path traversal guard to WriteAllToZip() matching WriteAllToDisk() (#27171) (https://github.com/protocolbuffers/protobuf/commit/28bef9809e4d1f5f3b6da2a4a26a3bd5b488136b)
• Add an enforce_proto_limits feature which will be implemented in Edition 2026. (https://github.com/protocolbuffers/protobuf/commit/5ddd5244f7a04539e59f97fbc0c0df02334d0b12)
C++
• Disable option sub-location mapping in open-source builds. (https://github.com/protocolbuffers/protobuf/commit/1d8a656f5273a3b41afa609cf0f08b65491dbd48)
• Add json_options.proto and json_enumvalue_options.proto and/or gencode derived from them to release artifacts (https://github.com/protocolbuffers/protobuf/commit/15e93345f8b821ad74334fd503318f8860b774bb)
• Add deprecation warning for Reflection::GetEnum() and Reflection::GetRepeatedEnum(). (https://github.com/protocolbuffers/protobuf/commit/0bca2886d724d6782186ae970a0214b6fcc3e4e0)
• Migrate top-level protobuf unittest protos from Edition 2024 to Edition 2026. (https://github.com/protocolbuffers/protobuf/commit/271ca53b50bebdb4b910563928b1f7f3d5c61990)
• Util:validate Duration/Timestamp in TimeUtil::FromString against spec limits (#27443) (https://github.com/protocolbuffers/protobuf/commit/e33749537254d42895ef084e482faaba230fddc2)
• Make default_symbol_visibility STRICT in edition 2026 (https://github.com/protocolbuffers/protobuf/commit/fcd68c563cf2be486622a118caaf8c5f3858f744)
• Use the direct map reflection API when converting message to JSON, if the repeated field reflection is not valid. (https://github.com/protocolbuffers/protobuf/commit/e75aac33c3615d22d0cba61e8f9d92939a39a73f)
• Add bazel targets for standalone plugin binaries (#23919) (https://github.com/protocolbuffers/protobuf/commit/81880fad1673797b6326a91582b2bf77069d505d)
• Fix(cpp):stop TextFormat iteration if output stream fails (#26237) (https://github.com/protocolbuffers/protobuf/commit/2718dd5f3dda891f7e0224e5f50aa946219499ff)
• Enforce proto limits in the descriptor by default for EDITION_2026. (https://github.com/protocolbuffers/protobuf/commit/d8520d93af2aadf99afcb5e17bfb99c14ad57364)
• Add an enforce_proto_limits feature which will be implemented in Edition 2026. (https://github.com/protocolbuffers/protobuf/commit/5ddd5244f7a04539e59f97fbc0c0df02334d0b12)
• Workaround for attribute handling bug in gcc < 13 (https://github.com/protocolbuffers/protobuf/commit/ba10a4e179fa6cd0cbe4597f6fd19c1b3442c5bd)
• Fix confusing error message for map value type name conflicts (https://github.com/protocolbuffers/protobuf/commit/7864b8534c4425ac98eee69b57600fd15ea8bf9b)
• C++Proto JSON:Align behavior on the type.proto path with the descriptor.proto path (https://github.com/protocolbuffers/protobuf/commit/0bc1f14c966a6714f757cdebf9dcc1f2ec3bb928)
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.
• Add json_options.proto and json_enumvalue_options.proto and/or gencode derived from them to release artifacts (https://github.com/protocolbuffers/protobuf/commit/15e93345f8b821ad74334fd503318f8860b774bb)
• Json/java:add json_name enumval support (https://github.com/protocolbuffers/protobuf/commit/bff6ed13255054eb8425f75f3b3f00af961f753d)
• Make Timestamps.parse() attempt non-lenient parsing first and warning if this fails. (https://github.com/protocolbuffers/protobuf/commit/d5e039a3021524ea1f1d68b2cf910f2379403a0e)
• Add a warning for potential OneofDescriptor collisions prior to Q1 2027 breaking changes. (https://github.com/protocolbuffers/protobuf/commit/ab6983138057ae4e2bc7ce4a7e8d853d5403913a)
• Make default_symbol_visibility STRICT in edition 2026 (https://github.com/protocolbuffers/protobuf/commit/fcd68c563cf2be486622a118caaf8c5f3858f744)
• Reject negative size in mergeDelimitedFrom (#28097) (https://github.com/protocolbuffers/protobuf/commit/c56cd5b4417249e091ccce3739b4e4176ac33403)
• Add deprecation warnings for (py|cc|java)_generic_service. (https://github.com/protocolbuffers/protobuf/commit/517be42cfe43c9e2c69f5ee40e437a9d8cbd3f99)
• Update Java protobuf generator to use Objects.requireNonNull (https://github.com/protocolbuffers/protobuf/commit/31ef11cb59a269acf8a20aa40373ae5c59a30a9f)
• Use natural String comparison instead of UTF-8 ByteString comparison for sorting map keys in JsonFormat. (https://github.com/protocolbuffers/protobuf/commit/ae1faeedfd57b2cdc4c26e7befe4d34138210494)
• Add option to enable strict JSON parsing in Protobuf Java JsonFormat. (https://github.com/protocolbuffers/protobuf/commit/40825a1df7f87857560a03bf901fdd7649930010)
• Add bazel targets for standalone plugin binaries (#23919) (https://github.com/protocolbuffers/protobuf/commit/81880fad1673797b6326a91582b2bf77069d505d)
• Remove experimental FieldOrder enum. (https://github.com/protocolbuffers/protobuf/commit/ec52338ef068245df952ecbfcfee8ad3fb44a180)
• Optimize GeneratedMessage.ExtendableBuilder to avoid temporary allocations when merging empty extendable messages. (https://github.com/protocolbuffers/protobuf/commit/a37dbd643372b05de834190941671a1563d7e499)
• Stop using sun.misc.Unsafe in isValidUtf8 paths. (https://github.com/protocolbuffers/protobuf/commit/421d7451ef41e158cd1ec3b84709de4018500b82)
• Use String#encodedLength on JDK versions that support it (https://github.com/protocolbuffers/protobuf/commit/efca121a668ecc73ca010c9457ba35bf189c01ec)
• Add an enforce_proto_limits feature which will be implemented in Edition 2026. (https://github.com/protocolbuffers/protobuf/commit/5ddd5244f7a04539e59f97fbc0c0df02334d0b12)
• Java:limit numeric string length before BigDecimal parsing (#26908) (https://github.com/protocolbuffers/protobuf/commit/25e7005814c4b2dd1cd21519c6cf116380a5ad21)
• Validate java package and class against injection risks. (https://github.com/protocolbuffers/protobuf/commit/f8514d8c42af41fbaaa73cd095e5e16cf347a23f)
Csharp
• Cache custom JSON enum names in JsonParser using Lazy. (https://github.com/protocolbuffers/protobuf/commit/156d42deee0f8d1f571a567b5ff6a01a769dbf2c)
• Csharp:add support for custom json strings for enum values (https://github.com/protocolbuffers/protobuf/commit/f11aac42193dceeb3f548be48ca4f9a5b50381ca)
• Validate language-specific namespace options in code generators (#28667) (https://github.com/protocolbuffers/protobuf/commit/34e959b42c181ef881c17d9b382b7eac0aaeef01)
• Make default_symbol_visibility STRICT in edition 2026 (https://github.com/protocolbuffers/protobuf/commit/fcd68c563cf2be486622a118caaf8c5f3858f744)
• Advertise that C# supports Edition 2026, and move C# Nullable Reference Type support into that edition. (https://github.com/protocolbuffers/protobuf/commit/a1f718cdd7703878f35a521cfdb019bc8e129004)
• First implementation of C# nullable reference types enablement using the current (unreleased) edition. (https://github.com/protocolbuffers/protobuf/commit/7a732d1fb803e2c8df600838e554ac3ebeb0c7ef)
• Add bazel targets for standalone plugin binaries (#23919) (https://github.com/protocolbuffers/protobuf/commit/81880fad1673797b6326a91582b2bf77069d505d)
• Csharp:propagate recursion depth into JsonReplayTokenizer to honor Any nesting limit (#26835) (https://github.com/protocolbuffers/protobuf/commit/cee45bff13ca18981453b170ea1725d0119e858f)
• Fix csharp string interpolation in Timestamp.ToDateTime() exception message (#26341) (https://github.com/protocolbuffers/protobuf/commit/a29828239fcef702b485dddae09e13306b23fcd1)
Objective-C
• [ObjC] Carry recursion depth across MessageSet item parsing (#27571) (https://github.com/protocolbuffers/protobuf/commit/f89baedfd2984c2ee08f9fd1ddf5708f2cc7e3aa)
• Add bazel targets for standalone plugin binaries (#23919) (https://github.com/protocolbuffers/protobuf/commit/81880fad1673