Releases
v30.0
Announcements
This version includes breaking changes to: Objective-C, Python, C++.
[Objective-C] Remove legacy WKT headers. (d9caebc )
[Objective-C] Remove deprecated apis. (2a52b90 )
[Objective-C] Remove support for older generated code. (cffa590 )
[Objective-C] Remove GPBUnknownFieldSet. (2b93422 )
[Python] Fix closed enum validation under editions (72b3eda )
[Python] Remove deprecated GetDebugString() from protobuf python cpp extension. (721a452 )
[Python] Remove deprecated reflection methods (292f964 )
[Python] Remove deprecated GetPrototype MessageFactory.GetPrototype(), (c261b49 )
[Python] Python nested message class qualname now contains the outer message name. (Previous qualname has the same result with name for nested message that outer message name was not included) (0720536 )
[Python] Remove deprecated Python RPC Service Interfaces (5ba74b1 )
[Python] Python setdefault behavior change for map field. (81da6b9 )
[Python] Remove deprecated py_proto_library macro.
[C++] Prohibit using Bazel+MSVC to build protobuf (117e7bb )
[C++] Remove deprecated Arena::CreateMessage. (d83a536 )
[C++] Remove CMake submodule support in favor of fetched or installed dependencies. (3f06ca4 )
[C++] Flip default behavior for handling cmake dependencies. (9cc685e )
[C++] Add ASAN poisoning after clearing oneof messages on arena. (54d068e )
[C++] Upgrade return type of type_name()
and cpp_type_name()
from const char*
to absl::string_view
. (a9ad51f )
[C++] Remove deprecated RepeatedPtrField::ClearedCount(). (e8e3253 )
[C++] Upgrade return type of several string returning functions to absl::string_view
. (d1990d9 )
[C++] Strip ctype from options in C++ (aebf8b9 )
[C++] Remove MutableRepeatedFieldRef::Reserve()
in reflection (913f7b0 )
[C++] Remove deprecated JsonOptions alias. (e2eb0a1 )
[C++] Remove deprecated Arena::GetArena. (30ed452 )
Protobuf News may include additional announcements or pre-announcements for upcoming changes.
Migration Guide will include migration guides for breaking changes (to be updated shortly).
Bazel
Remove reference to cc_proto_aspect (fa02f76 )
Remove deprecated bazel/system_python.bzl alias. (00f108c )
Compiler
Add notices.h with information about our dependencies' licenses and add --notices flag to protoc to print the contents of that file. (a7df327 )
Have the protoc CLI properly report any parser warnings. (cafeaa4 )
Split protoc apart from libprotoc in our cmake configs. (b4b93b3 )
Begin adding extension numbers to SourceCodeInfo and FileDescriptorSet for tooling purposes. (9d7236b )
Fix various unsigned to signed comparison warnings. (#17212 ) (67de087 )
C++
Fixing staleness tests (6abaf77 )
Add notices.h with information about our dependencies' licenses and add --notices flag to protoc to print the contents of that file. (a7df327 )
Backport: Remove if_constexpr usage for future Abseil compatibility (#20488 ) (450ee76 )
Add tests for older gcc versions we still support (#20463 ) (0778473 )
Fix a bug in handling of implicit-presence string_view fields. (#20403 ) (81196ac )
Remove rules_rust dependency from MODULE.bazel for 30.x (#20310 ) (b8248f6 )
Upgrade abseil-cpp to 20250127 and use @com_google_absl -> @abseil-cpp and com_google_googletest -> @googletest canonical BCR names. (#20295 ) (df849cc )
Replace std::any
with a custom solution. (#20251 ) (6250d09 )
Make DebugString print debug output, enable debug markers for debug output (9a03332 )
Fix missing port_undef (#20052 ) (0644388 )
Use __builtin_expect_with_probability for proto field presence checks. (e958419 )
Enable meta-tagging for redaction purposes (1f48795 )
Breaking change: Prohibit using Bazel+MSVC to build protobuf (117e7bb )
Breaking change: Upgrade return type of several string returning functions to absl::string_view
. (d1990d9 )
Print the presence probability when analysis is enabled. (d4ba7ff )
Split protoc apart from libprotoc in our cmake configs. (b4b93b3 )
Breaking change: Strip ctype from options in C++ (aebf8b9 )
Breaking change: Remove MutableRepeatedFieldRef::Reserve()
in reflection (913f7b0 )
Remove stale references to C++14. (f4cc92c )
Breaking change: Upgrade return type of type_name()
and cpp_type_name()
from const char*
to absl::string_view
. (a9ad51f )
Update cmake minimum version to >=3.16. (21f535c )
Migrate coded output stream arguments from const std::string&
to absl::string_view
. (0361a59 )
Breaking change: Remove deprecated Arena::GetArena. (30ed452 )
Remove the time (or time-based) entropy being added to Map's seed. (a7875bb )
Don't use CLOCK_UPTIME_RAW if it won't be defined (#16951 ) (097dcda )
Fix DEPENDENCIES in protobuf_generate() to accept multiple values instead of silently dropping (52887e1 )
Use ABSL_PREDICT_TRUE|FALSE instead of PROTOBUF_PREDICT_TRUE|FALSE. (fd47730 )
Breaking change: Flip default behavior for handling cmake dependencies. (9cc685e )
Use [[maybe_unused]] instead of PROTOBUF_UNUSED. (a7dd155 )
Use [[nodiscard]] instead of PROTOBUF_NODISCARD (1ceedf8 )
Breaking change: Remove deprecated JsonOptions alias. (e2eb0a1 )
Generate internal hasbits for singular proto3 implicit presence fields. (3e82ed4 )
Add name mangling to nested names that collide with known generated names, like (f2cf85c )
Breaking change: Remove deprecated RepeatedPtrField::ClearedCount(). (e8e3253 )
Breaking change: Add ASAN poisoning after clearing oneof messages on arena. (54d068e )
Breaking change: Remove deprecated Arena::CreateMessage. (d83a536 )
Change DynamicCastMessage to throw a std::bad_cast
exception when exceptions (33bbbeb )
Fixed a missing check in wire format verification. (2ac862f )
Comment change: clarifies that the field/value order is based on textual order in the file, not the order of the enums. (f92335b )
Bump minimum C++ version to C++17 after branch cut for v29. (fe53593 )
Bump abseil dependency version from 20230802.1 to 20240722.0. (c75095b )
Breaking change: Remove CMake submodule support in favor of fetched or installed dependencies. (3f06ca4 )
Support fetching CMake dependencies via -Dprotobuf_FETCH_DEPENDENCIES=ON
(d3735bc )
Avoid field id comparisons in ExtensionSet serialization in case of single range. (8f6a7a2 )
Let ArenaStringPtr debug-fail if it ever attempts to clear a default string. (6c9c12c )
Fix various unsigned to signed comparison warnings. (#17212 ) (67de087 )
Remove Protobuf-C++.podspec release. (b204518 )
Java
Split maven dependencies into dev vs local (#20549 ) (#20558 ) (a5c906a )
Refactor TextFormat.Printer.MapEntryAdapter to handle more entry types. This will properly sort map keys for DynamicMessage maps. (84769d3 )
Re-Expose UnderscoresToCapitalizedCamelCase for plugins in OSS. (94ae26d )
Upgrade return type of several string returning functions to absl::string_view
. (d1990d9 )
Fix mishandling of open enum + explicit presence fields. (0ccd845 )
Disable useShortRepeatedPrimitives for Printer.DEFAULT_DEBUG_FORMAT (1900cbe )
Optimize Java gencode version validation (59a8de6 )
Make Java consistently reject unmatched end-group tag. (a4d4bfe )
Make Java-lite reject unmatched end-group tag. (84e81cf )
Fix handling of implicit field presence in mergeFrom to match the behavior in other places. (3e0f82e )
Use ABSL_PREDICT_TRUE|FALSE instead of PROTOBUF_PREDICT_TRUE|FALSE. (fd47730 )
Use [[maybe_unused]] instead of PROTOBUF_UNUSED. (a7dd155 )
Remove deprecation warnings for Timestamp and Duration add/subtract/between that we do not yet have alternatives to. (f6cddd2 )
Add support to print repeated fields with primitive values using short notation (b8d3567 )
Fix unexpected NumberFormatException in Durations.parse() by replacing with documented thrown ParseException. (ee5aa49 )
Give Kotlin jars an OSGi Manifest (#18812 ) (27ddb9c )
Lite: Remove intermediary dynamicMethod function trampolines (25724ab )
Speed up SingleFieldBuilder.getBuilder() by avoiding reloading this.builder at return. (f7b0faf )
Restore runtime compatibility with 3.22.x gencode by re-adding the mutableCopy(list) methods. (6628b8a )
CodedOutputStream: Avoid updating position to go beyond end of array. (24160d5 )
Fix various unsigned to signed comparison warnings. (#17212 ) (67de087 )
Throw more informative OutOfSpaceExceptions when we run out of space serializing a proto. (bc24489 )
Kotlin
Csharp
Throw InvalidProtocolBufferException when parsing invalid UTF-8 in C#. (db9b2c8 )
Objective-C
Generate Kythe annotations for objc messages. (8868171 )
Update minimum supported macOS 11 (9f1b38e )
Breaking change: [ObjC] Remove legacy WKT headers. (d9caebc )
[ObjC] Breaking Change: Remove deprecated apis. (2a52b90 )
[ObjC] Breaking Change: Remove support for older generated code. (cffa590 )
[ObjC] Breaking Change: Remove GPBUnknownFieldSet. (2b93422 )
Python
Fix missing port_undef (#20052 ) (0644388 )
Python protobuf: kwargs initialization now allows dict() for proto map values. (6235687 )
Python: Improve refleak checker for Python 3.12. (336d6f0 )
Rename bazel "pip_deps" hub_name. (32838e8 )
Add has_options to ServiceDescriptor and MethodDescriptor in UPB python and cpp python to match with other descriptors and pure python (4214ee7 )
Nextgen Proto Pythonic API: Add byte_size(), clear_message() and clear_field() APIs in proto module (975bb07 )
Nextgen Proto Pythonic API: “Add-on” proto for Text Format serialize/parse (e9fa879 )
Fix bug that DiscardUnknownFields did not discard unknown fields of extensions in Py-upb and Php-upb and ruby-upb. (98aab04 )
Remove the entire pb_unit_tests/ directory with reflection_test_wrapper. (39808bc )
Performance optimization for upb python extend repeated scalars. (6c3ff5a )
Ensure protobuf Message.dir returns proto fields (1803f8b )
Breaking change: Fix closed enum validation under editions (72b3eda )
Make python text-format reject octal floats (8f2ad12 )
Treat -0.0 as consistently distinct from 0.0 in pure python (bc16fe8 )
Remove decoder.SkipField. (1b0b1c9 )
Make Pure Python reject unmatched end-group tag in unknown fields (f69ea1c )
Make Python/C++ reject unmatched end-group tag. (482752a )
Override protobuf Message.dir method (9668016 )
Add "absl::StatusOr GetConstMessagePointer(PyObject* msg)" in proto_api which works with cpp extension, upb and pure python. (b9e69e8 )
Fix a python bug that UPB and Python C++ extension assume MessageSet extensions are ordered first (3781f45 )
Drop Python 3.8 support (f5a2937 )
Fix a python bug for text_format pretty print when Struct in Any (d3e9897 )
Support tuples when parsing JSON dicts (75bb72e )
Breaking change: Python nested message class qualname now contains the outer message name. (Previous qualname has the same result with name for nested message that outer message name was not included) (0720536 )
Breaking change: Python setdefault behavior change for map field. (81da6b9 )
Fix a Python bug: when package is empty, DescriptorDatabase FindFileContainingSymbol method will able to find symbol names not start with '.' (610702e )
Use ABSL_PREDICT_TRUE|FALSE instead of PROTOBUF_PREDICT_TRUE|FALSE. (fd47730 )
Breaking change: Remove deprecated GetPrototype MessageFactory.GetPrototype(), (c261b49 )
Breaking change: Remove deprecated GetDebugString() from protobuf python cpp extension. (721a452 )
Add Python 3.13 test coverage (7060d3d )
Fix a python bug when assign an empty Struct at creation. (47613cf )
Add "PythonMessageMutator GetClearedMutableMessage(PyObject *);" in proto_api which works with cpp extension, upb and pure python. (5706140 )
Breaking change: Remove deprecated reflection methods (292f964 )
Breaking change: Remove deprecated Python RPC Service Interfaces (5ba74b1 )
Fix pyi generation for messages with a field named "self" (fa858b8 )
Breaking change: Remove deprecated py_proto_library macro. (1e8e356 )
PHP
Handle optional fields correctly in Message_get method (#18982 ) (f1aa92a )
Delete long-deprecated internal descriptor.proto gencode forwards. (cf9b774 )
PHP C-Extension
Upb: Update _upb_map_next signature to return a boolean and remove the _nextmutable Map iterator API. (#20467 ) (0913d39 )
Add to_proto
to descriptor classes (#19971 ) (74122eb )
Fix bug that DiscardUnknownFields did not discard unknown fields of extensions in Py-upb and Php-upb and ruby-upb. (98aab04 )
Raise ParseError for non-numeric strings in numeric fields in Ruby and PHP JSON parsing. (abb197c )
Handle optional fields correctly in Message_get method (#18982 ) (f1aa92a )
See also UPB changes below, which may affect PHP C-Extension.
Ruby
Add to_proto
to descriptor classes (#19971 ) (74122eb )
Support ruby 3.4 (#19752 ) (4a92a1c )
Add a multi-platform Gemfile.lock (#19804 ) (56f318d )
Fix ruby has_...?
method (#19731 ) (4031c19 )
Raise ParseError for non-numeric strings in numeric fields in Ruby and PHP JSON parsing. (abb197c )
Error if assigning a "UTF-8" string with invalid UTF-8. (2f505a7 )
Third_party/utf8_range: support arm neon (#18126 ) (d83ad15 )
Ruby C-Extension
Upb: Update _upb_map_next signature to return a boolean and remove the _nextmutable Map iterator API. (#20467 ) (0913d39 )
Add to_proto
to descriptor classes (#19971 ) (74122eb )
Ruby: make it possible to specify compiler for C extension (#19863 ) (b46f315 )
Fix bug that DiscardUnknownFields did not discard unknown fields of extensions in Py-upb and Php-upb and ruby-upb. (98aab04 )
Fix ruby has_...?
method (#19731 ) (4031c19 )
Raise ParseError for non-numeric strings in numeric fields in Ruby and PHP JSON parsing. (abb197c )
Error if assigning a "UTF-8" string with invalid UTF-8. (2f505a7 )
Update minimum supported macOS 11 (9f1b38e )
See also UPB changes below, which may affect Ruby C-Extension.
UPB (Python/PHP/Ruby C-Extension)
Upb: Update _upb_map_next signature to return a boolean and remove the _nextmutable Map iterator API. (#20467 ) (0913d39 )
Change upb C generated map iteration function to not hand out MapEntry pointers. (#20462 ) (503abcc )
Add to_proto
to descriptor classes (#19971 ) (74122eb )
Randomize upb's map ordering (066531d )
Fix bug that DiscardUnknownFields did not discard unknown fields of extensions in Py-upb and Php-upb and ruby-upb. (98aab04 )
Add three conformance test edge cases for ProtoJSON repr of Any (b985164 )
Fix issue where a tmp buffer could have been too small when handling a serialized FeatureSet. (eb8a34d )
Fixed comparison of empty repeated/map extensions. (a79fbc9 )
Fix a python bug that UPB and Python C++ extension assume MessageSet extensions are ordered first (3781f45 )
Other
Remove test platform specification from release config (#20475 ) (2b9b101 )
Remove reference to rules_rust from .bazelrc (#20470 ) (90e893c )
Protobuf: add //:go_features_proto Bazel alias (#20419 ) (8892adc )
Move to bazel 7 and turn down support for bazel 6. (afe2de2 )
Upgrade minimum version of macOS support to macOS 10.15 (Catalina). (67fca5c )
Update protoc release to include editions language features proto for Go (353d726 )
Bazel 8 compatibility for Bazel users, however building test and release targets from source is not compatible with Bazel 8 yet.
You can’t perform that action at this time.