Open-source cross-platform data format used to serialize structured data

Protocol Buffers

Protocol Buffers 30.0

  -  3.1 MB  -  Freeware

Sometimes latest versions of the software can cause issues when installed on older devices or devices running an older version of the operating system.

Software makers usually fix these issues but it can take them some time. What you can do in the meantime is to download and install an older version of Protocol Buffers 30.0.


For those interested in downloading the most recent release of Protocol Buffers or reading our review, simply click here.


All old versions distributed on our website are completely virus-free and available for download at no cost.


We would love to hear from you

If you have any questions or ideas that you want to share with us - head over to our Contact page and let us know. We value your feedback!

What's new in this version:

Announcements:
This version includes breaking changes to: Objective-C, Python, C++:
- [Objective-C] Remove legacy WKT headers
- [Objective-C] Remove deprecated apis
- [Objective-C] Remove support for older generated code
- [Objective-C] Remove GPBUnknownFieldSet
- [Python] Fix closed enum validation under editions
- [Python] Remove deprecated GetDebugString() from protobuf python cpp extension
- [Python] Remove deprecated reflection methods
- [Python] Remove deprecated GetPrototype MessageFactory.GetPrototype()
- [Python] Python nested message class qualname now contains the outer message name
- [Python] Remove deprecated Python RPC Service Interfaces (5ba74b1)
- [Python] Python setdefault behavior change for map field
- [Python] Remove deprecated py_proto_library macro.
- [C++] Prohibit using Bazel+MSVC to build protobuf
- [C++] Remove deprecated Arena::CreateMessage
- [C++] Remove CMake submodule support in favor of fetched or installed dependencies
- [C++] Flip default behavior for handling cmake dependencies
- [C++] Add ASAN poisoning after clearing oneof messages on arena
- [C++] Upgrade return type of type_name() and cpp_type_name() from const char* to absl::string_view
- [C++] Remove deprecated RepeatedPtrField::ClearedCount()
- [C++] Upgrade return type of several string returning functions to absl::string_view
- [C++] Strip ctype from options in C++
- [C++] Remove MutableRepeatedFieldRef::Reserve() in reflection
- [C++] Remove deprecated JsonOptions alias
- [C++] Remove deprecated Arena::GetArena
- 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
- Remove deprecated bazel/system_python.bzl alias

Compiler:
- Add notices.h with information about our dependencies' licenses and add --notices flag to protoc to print the contents of that file
- Have the protoc CLI properly report any parser warnings
- Split protoc apart from libprotoc in our cmake configs
- Begin adding extension numbers to SourceCodeInfo and FileDescriptorSet for tooling purposes
- Fix various unsigned to signed comparison warnings

C++:
- Fixing staleness tests
- Add notices.h with information about our dependencies' licenses and add --notices flag to protoc to print the contents of that file
- Backport: Remove if_constexpr usage for future Abseil compatibility
- Add tests for older gcc versions we still support
- Fix a bug in handling of implicit-presence string_view fields
- Remove rules_rust dependency from MODULE.bazel for 30.x
- Upgrade abseil-cpp to 20250127 and use @com_google_absl -> @abseil-cpp and com_google_googletest -> @googletest canonical BCR names
- Replace std::any with a custom solution
- Make DebugString print debug output, enable debug markers for debug output
- Fix missing port_undef
- Use __builtin_expect_with_probability for proto field presence checks
- Enable meta-tagging for redaction purposes
- Breaking change: Prohibit using Bazel+MSVC to build protobuf
- Breaking change: Upgrade return type of several string returning functions to absl::string_view
- Print the presence probability when analysis is enabled
- Split protoc apart from libprotoc in our cmake configs
- Breaking change: Strip ctype from options in C++
- Breaking change: Remove MutableRepeatedFieldRef::Reserve() in reflection
- Remove stale references to C++14
- Breaking change: Upgrade return type of type_name() and cpp_type_name() from const char* to absl::string_view
- Update cmake minimum version to >=3.16
- Migrate coded output stream arguments from const std::string& to absl::string_view
- Breaking change: Remove deprecated Arena::GetArena
- Remove the time (or time-based) entropy being added to Map's seed
- Don't use CLOCK_UPTIME_RAW if it won't be defined
- Fix DEPENDENCIES in protobuf_generate() to accept multiple values instead of silently dropping
- Use ABSL_PREDICT_TRUE|FALSE instead of PROTOBUF_PREDICT_TRUE|FALSE
- Breaking change: Flip default behavior for handling cmake dependencies
- Use [[maybe_unused]] instead of PROTOBUF_UNUSED
- Use [[nodiscard]] instead of PROTOBUF_NODISCARD
- Breaking change: Remove deprecated JsonOptions alias
- Generate internal hasbits for singular proto3 implicit presence fields
- Add name mangling to nested names that collide with known generated names, like
- Breaking change: Remove deprecated RepeatedPtrField::ClearedCount()
- Breaking change: Add ASAN poisoning after clearing oneof messages on arena
- Breaking change: Remove deprecated Arena::CreateMessage
- Change DynamicCastMessage to throw a std::bad_cast exception when exceptions
- Fixed a missing check in wire format verification
- Comment change: clarifies that the field/value order is based on textual order in the file, not the order of the enums
- Bump minimum C++ version to C++17 after branch cut for v29
- Bump abseil dependency version from 20230802.1 to 20240722.0
- Breaking change: Remove CMake submodule support in favor of fetched or installed dependencies
- Support fetching CMake dependencies via -Dprotobuf_FETCH_DEPENDENCIES=ON
- Avoid field id comparisons in ExtensionSet serialization in case of single range
- Let ArenaStringPtr debug-fail if it ever attempts to clear a default string
- Fix various unsigned to signed comparison warnings
- Remove Protobuf-C++.podspec release

Java:
- Split maven dependencies into dev vs local
- Refactor TextFormat.Printer.MapEntryAdapter to handle more entry types. This will properly sort map keys for DynamicMessage maps
- Re-Expose UnderscoresToCapitalizedCamelCase for plugins in OSS
- Upgrade return type of several string returning functions to absl::string_view
- Fix mishandling of open enum + explicit presence fields
- Disable useShortRepeatedPrimitives for Printer.DEFAULT_DEBUG_FORMAT
- Optimize Java gencode version validation
- Make Java consistently reject unmatched end-group tag
- Make Java-lite reject unmatched end-group tag
- Fix handling of implicit field presence in mergeFrom to match the behavior in other places
- Use ABSL_PREDICT_TRUE|FALSE instead of PROTOBUF_PREDICT_TRUE|FALSE
- Use [[maybe_unused]] instead of PROTOBUF_UNUSED
- Remove deprecation warnings for Timestamp and Duration add/subtract/between that we do not yet have alternatives to
- Add support to print repeated fields with primitive values using short notation
- Fix unexpected NumberFormatException in Durations.parse() by replacing with documented thrown ParseException
- Give Kotlin jars an OSGi Manifest
- Lite: Remove intermediary dynamicMethod function trampolines
- Speed up SingleFieldBuilder.getBuilder() by avoiding reloading this.builder at return
- Restore runtime compatibility with 3.22.x gencode by re-adding the mutableCopy(list) methods
- CodedOutputStream: Avoid updating position to go beyond end of array
- Fix various unsigned to signed comparison warnings
- Throw more informative OutOfSpaceExceptions when we run out of space serializing a proto

Kotlin:
- Give Kotlin jars an OSGi Manifest

Csharp:
- Throw InvalidProtocolBufferException when parsing invalid UTF-8 in C#

Objective-C:
- Generate Kythe annotations for objc messages
- Update minimum supported macOS 11
- Breaking change: [ObjC] Remove legacy WKT headers
- [ObjC] Breaking Change: Remove deprecated apis
- [ObjC] Breaking Change: Remove support for older generated code
- [ObjC] Breaking Change: Remove GPBUnknownFieldSet

Python:
- Fix missing port_undef
- Python protobuf: kwargs initialization now allows dict() for proto map values
- Python: Improve refleak checker for Python 3.12
- Rename bazel "pip_deps" hub_name
- Add has_options to ServiceDescriptor and MethodDescriptor in UPB python and cpp python to match with other descriptors and pure python
- Nextgen Proto Pythonic API: Add byte_size(), clear_message() and clear_field() APIs in proto module
- Nextgen Proto Pythonic API: “Add-on” proto for Text Format serialize/parse
- Fix bug that DiscardUnknownFields did not discard unknown fields of extensions in Py-upb and Php-upb and ruby-upb
- Remove the entire pb_unit_tests/ directory with reflection_test_wrapper
- Performance optimization for upb python extend repeated scalars
- Ensure protobuf Message.dir returns proto fields
- Breaking change: Fix closed enum validation under editions
- Make python text-format reject octal floats
- Treat -0.0 as consistently distinct from 0.0 in pure python
- Remove decoder.SkipField
- Make Pure Python reject unmatched end-group tag in unknown fields
- Make Python/C++ reject unmatched end-group tag
- Override protobuf Message.dir method
- Add "absl::StatusOr GetConstMessagePointer(PyObject* msg)" in proto_api which works with cpp extension, upb and pure python
- Fix a python bug that UPB and Python C++ extension assume MessageSet extensions are ordered first
- Drop Python 3.8 support
- Fix a python bug for text_format pretty print when Struct in Any
- Support tuples when parsing JSON dicts
- Breaking change: Python nested message class qualname now contains the outer message name
- Breaking change: Python setdefault behavior change for map field
- Fix a Python bug: when package is empty, DescriptorDatabase FindFileContainingSymbol method will able to find symbol names not start with '.'
- Use ABSL_PREDICT_TRUE|FALSE instead of PROTOBUF_PREDICT_TRUE|FALSE
- Breaking change: Remove deprecated GetPrototype MessageFactory.GetPrototype(),
- Breaking change: Remove deprecated GetDebugString() from protobuf python cpp extension
- Add Python 3.13 test coverage
- Fix a python bug when assign an empty Struct at creation
- Add "PythonMessageMutator GetClearedMutableMessage(PyObject *);" in proto_api which works with cpp extension, upb and pure python
- Breaking change: Remove deprecated reflection methods
- Breaking change: Remove deprecated Python RPC Service Interfaces
- Fix pyi generation for messages with a field named "self"
- Breaking change: Remove deprecated py_proto_library macro

PHP:
- Handle optional fields correctly in Message_get method
- Delete long-deprecated internal descriptor.proto gencode forwards

PHP C-Extension:
- Upb: Update _upb_map_next signature to return a boolean and remove the _nextmutable Map iterator API
- Add to_proto to descriptor classes
- Fix bug that DiscardUnknownFields did not discard unknown fields of extensions in Py-upb and Php-upb and ruby-upb
- Raise ParseError for non-numeric strings in numeric fields in Ruby and PHP JSON parsing
- Handle optional fields correctly in Message_get method
- See also UPB changes below, which may affect PHP C-Extension

Ruby:
- Add to_proto to descriptor classes
- Support ruby 3.4
- Add a multi-platform Gemfile.lock
- Fix ruby has_...? method
- Raise ParseError for non-numeric strings in numeric fields in Ruby and PHP JSON parsing
- Error if assigning a "UTF-8" string with invalid UTF-8
- Third_party/utf8_range: support arm neon

Ruby C-Extension:
- Upb: Update _upb_map_next signature to return a boolean and remove the _nextmutable Map iterator API
- Add to_proto to descriptor classes
- Ruby: make it possible to specify compiler for C extension
- Fix bug that DiscardUnknownFields did not discard unknown fields of extensions in Py-upb and Php-upb and ruby-upb
- Fix ruby has_...? method
- Raise ParseError for non-numeric strings in numeric fields in Ruby and PHP JSON parsing
- Error if assigning a "UTF-8" string with invalid UTF-8
- Update minimum supported macOS 11
- 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
- Change upb C generated map iteration function to not hand out MapEntry pointers
- Add to_proto to descriptor classes
- Randomize upb's map ordering
- Fix bug that DiscardUnknownFields did not discard unknown fields of extensions in Py-upb and Php-upb and ruby-upb
- Add three conformance test edge cases for ProtoJSON repr of Any
- Fix issue where a tmp buffer could have been too small when handling a serialized FeatureSet
- Fixed comparison of empty repeated/map extensions
- Fix a python bug that UPB and Python C++ extension assume MessageSet extensions are ordered first

Other:
- Remove test platform specification from release config
- Remove reference to rules_rust from .bazelrc
- Protobuf: add //:go_features_proto Bazel alias
- Move to bazel 7 and turn down support for bazel 6
- Upgrade minimum version of macOS support to macOS 10.15 (Catalina)
- Update protoc release to include editions language features proto for Go
- Bazel 8 compatibility for Bazel users, however building test and release targets from source is not compatible with Bazel 8 yet