Are you happy with your logging solution? Would you help us out by taking a 30-second survey? Click here


Protocol Buffers - Google's data interchange format

Star full 4f7b624809470f25b6493d5a7b30d9b9cb905931146e785d67c86ef0c205a402Star full 4f7b624809470f25b6493d5a7b30d9b9cb905931146e785d67c86ef0c205a402Star full 4f7b624809470f25b6493d5a7b30d9b9cb905931146e785d67c86ef0c205a402Star half bd79095782ee4930099175e5ce7f4c89fa3ddabcd56fffcc7c74f6f2a2d46b27Star blank 374f33e4d622a2930833db3cbea26b5d03dc44961a6ecab0b9e13276d97d6682 (2 ratings)
Rated 3.5 out of 5
Subscribe to updates I use protobuf

Statistics on protobuf

Number of watchers on Github 24226
Number of open issues 681
Average time to close an issue 1 day
Main language C++
Average time to merge a PR 2 days
Open pull requests 340+
Closed pull requests 93+
Last commit over 1 year ago
Repo Created about 5 years ago
Repo Last Updated over 1 year ago
Size 44.6 MB
Homepage https://developer...
Organization / Authorgoogle
Latest Releasev3.5.1
Page Updated
Do you use protobuf? Leave a review!
View open issues (681)
View protobuf activity
View on github
Fresh, new opensource launches πŸš€πŸš€πŸš€
Trendy new open source projects in your inbox! View examples

Subscribe to our mailing list

Evaluating protobuf for your project? Score Explanation
Commits Score (?)
Issues & PR Score (?)
What people are saying about protobuf Leave a review
documentation can be made better with samples

Protocol Buffers - Google's data interchange format

Build Status Build status Build Status Build Status Build Status

Copyright 2008 Google Inc.


Protocol Buffers (a.k.a., protobuf) are Google's language-neutral, platform-neutral, extensible mechanism for serializing structured data. You can find protobuf's documentation on the Google Developers site.

This README file contains protobuf installation instructions. To install protobuf, you need to install the protocol compiler (used to compile .proto files) and the protobuf runtime for your chosen programming language.

Protocol Compiler Installation

The protocol compiler is written in C++. If you are using C++, please follow the C++ Installation Instructions to install protoc along with the C++ runtime.

For non-C++ users, the simplest way to install the protocol compiler is to download a pre-built binary from our release page:

In the downloads section of each release, you can find pre-built binaries in zip packages: protoc-$VERSION-$ It contains the protoc binary as well as a set of standard .proto files distributed along with protobuf.

If you are looking for an old version that is not available in the release page, check out the maven repo here:

These pre-built binaries are only provided for released versions. If you want to use the github master version at HEAD, or you need to modify protobuf code, or you are using C++, it's recommended to build your own protoc binary from source.

If you would like to build protoc binary from source, see the C++ Installation Instructions.

Protobuf Runtime Installation

Protobuf supports several different programming languages. For each programming language, you can find instructions in the corresponding source directory about how to install protobuf runtime for that specific language:

Language Source
C++ (include C++ runtime and protoc) src
Java java
Python python
Objective-C objectivec
C# csharp
JavaNano javanano
JavaScript js
Ruby ruby
Go golang/protobuf
PHP php
Dart dart-lang/protobuf

Quick Start

The best way to learn how to use protobuf is to follow the tutorials in our developer guide:

If you want to learn from code examples, take a look at the examples in the examples directory.


The complete documentation for Protocol Buffers is available via the web at:

protobuf open issues Ask a question     (View All Issues)
  • almost 3 years Map causes java.lang.ExceptionInInitializerError: null in J9VM
  • almost 3 years C# add option to generate code with custom Suffix/Prefix
  • almost 3 years 'module' object has no attribute 'Default'
  • almost 3 years MergeFromFail() leaks full path into binary
  • almost 3 years error at make java in examples folder
  • almost 3 years Wrong protobuf build folder?
  • almost 3 years Tangled up in documentation for objective c compiler options.
  • almost 3 years javanano `clone` method generation does not work for Oneof
  • almost 3 years Help required to setup protobuff 2.5 64 bit
  • almost 3 years Class not found for PHP
  • almost 3 years Does not work on ruby:2.3-alpine docker image
  • almost 3 years Compiler-generated PHP code is missing service definition
  • almost 3 years ProtoC C# Code Generator Eats Extra Underscores
  • almost 3 years Language Guide (proto3) typo
  • almost 3 years google/protobuf/timestamp not found in java
  • almost 3 years Fixing Rakefile for JRuby
  • almost 3 years OneofOptions cannot be extended in proto3
  • almost 3 years protoc errors with no line numbers are hard to resolve
  • almost 3 years Support for SystemJS module format
  • almost 3 years Compiler generates invalid Java code when big tags are used.
  • almost 3 years autoreconf-2.69: libtoolize failed with exit status: 1
  • almost 3 years DESCRIPTOR for messages has empty/useless `enum_values_by_name` dict
  • almost 3 years Segment fault on QNX 6.6
  • almost 3 years C++ json decoding is too slow in 3.1.0
  • almost 3 years JavaScript: Closure compilation at the advanced level (WIP)
  • almost 3 years wrong package name when using --javanano_out and "Option java_package"
  • almost 3 years Ruby protoc does not generate :packed => true
  • almost 3 years Can't parse GraphDef from the given flat array that size is bigger than 64MB
  • almost 3 years Preservation of unknown fields in JSON
  • almost 3 years load proto3 generate file without pollute global namespace
protobuf open pull requests (View All Pulls)
  • check if libatomic is needed
  • Debug the XCTool timing
  • Replace __FILE__ with GOOGLE_FILE to enable override source file in logging
  • Validate that end-group tags match their corresponding start-group tags
  • Generate C# code whenever descriptor.proto changes
  • arena : add func to detect size_t overflow fast
  • Remove hack for building Python support with Bazel.
  • Remove const from AttachComments
  • Added support for CommonJS require()
  • Brief tidy-ups in the README
  • Replace StringBuilder with TextWriter in JsonFormatter
  • Added the test_name to the Conformance Request.
  • Small documentation addition to building Visual Studio solutions
  • Amend the conformance tests for Int64/UInt64 non-wrapped values
  • Converting to JUnit4.
  • Changed Ruby to properly camelCase its JSON by default.
  • Add source link in podspec in preparation for next release.
  • Fixed an issue where packageless protos would generate invalid java code (Fixes issue #891)
  • Include protoc in Ruby Gem
  • Adding missing generic gcc 64-bit atomicops.
  • Set limit of data size
  • Merge pull request #1 from google/master
  • Added a quicker way to build visual studio solution.
  • javanano seems to be exporting wrong package
  • change SourceTree to pure virtual
  • Support specifying the indent level when json dumping protobufs
  • Hide unreferenced formal parameters to suppress warnings
  • Removed exec permission from non-exec files.
  • Silence VS code analysis
  • protoc: support '=' in --proto_path arguments
  • Fix compiling clang/libc++ builds. (Issue: #1266)
  • Add support for running on Jenkins
  • Define all atomic functions for Atomic64 in atomicops_internals_generic_gcc.h
  • Adds more information to Objective C error.
  • pass correct args to protoc for wellknown protos when used as an external repository
  • D language support
  • Disable thread local storage for OSX < 10.7
  • Enabled Jenkins testing for Ruby 1.9, 2.0, and 2.2.
  • Internal merge
  • NOT FOR SUBMISSION (yet) - prototype of enum casing for C#
  • Remove static initializers from Status class.
  • Add go_package statements for the Go-supported WKTs.
  • Replace ancient m4/acx_pthread.m4 with m4/ax_pthread.m4
  • Add option `auto_strip_enum_prefixes` and enum value option `scoped_alias` as discussed in #1079
  • fix index out of range error in C# generation using msvc
  • Added ToDiagnosticString for FieldDescriptor
  • examples/go: use multiple versions in Travis
  • Removing undefined behavior and compiler warnings
  • Expose a method to list only the extension fields
  • updated README
  • Updated
  • Deleled warning
  • Fix the std::string error introduced in integration.
  • Alpha 2 fix
  • [Ruby] Add empty descriptor.rb
  • Fix C++ Boost incompatibility on Windows/MSVC
  • Run tests in python 3.5 and add official support
  • Option to preserve json field names for Python.
  • Added ToDiagnosticString for FieldDescriptor (follow-up)
  • Changed public header import paths #1457
  • Added options to CMake configuration to enable/disable certain compilers
  • Make implicit defaults consistent with explicit defaults
  • include java_doc_comment.h in distribution
  • Use nullable for optional fields in generated Objective-C code
  • Fix delete_if for repeated_field, tests for same
  • Integrate interanl changes
  • Upadate and rename REAMDE.txt to
  • Update and rename README.txt to
  • Revert "Test redundant varint fields decoding in JS."
  • Rename README.txt to
  • Remove the comments about iterator validation
  • Cherry-pick the boost compatibility fix for msvc.
  • Added C++ benchmark.
  • Add compatibilty tests against v2.5.0
  • python: force relative imports
  • Fix Windows phone build
  • Fixes for TensorFlow compilation and running problems
  • add protobuf as3 lib and code generator for as3
  • JavaScript: Add has* methods
  • Update the list of places where the version is stored.
  • CMake prerelease versioning
  • Improving the granularity of GPBCodedInputStream errors.
  • Remove the protobuf-module.cmake file.
  • Remove unused lines from CMake files.
  • Bump cmake minimum required version to 2.8.12
  • Add support for components when using find_package
  • Fix optional argument (opt_toObjectFn) annotation.
  • python: remove extra dependencies for python 2.7
  • Xml-doc comments for CodedInputStream.ReadEnum (C#) out-of-date
  • Ruby: Add tests for well known protobuf files
  • Fix Java compatibility issues.
  • Make conformance tests more strict about the failure list.
  • Allow Python Protobufs to work with numpy int32/float
  • Fix #1686: use $(SolutionDir) in csharp project instead of relative path
  • Fix GoogleOnceInit signature discrepancy
  • Fix some unused parameter warnings
  • CMake Fix WITH_ZLIB
  • CMake Fix up prerelease version handling
  • CMake package requirements
  • Conformance tests for JavaScript (Node.js). All tests pass!
  • Fix return type of the DeleteMapValue(const MapKey& map_key) function
  • Cleanup
  • CMake code generator function
  • CMake crosscompiling support
  • Fix some deprecation warnings introduced in 3.0.0-beta-3
  • Generalize plugin support in Bazel Skylark rule
  • Move to dotnet cli for building, and .NET Core (netstandard1.0) as target platform
  • Xcode project cleanup/setup.
  • add nullable qualifier to return types that can be nil, to support Swift 2 try-catch syntax
  • Add minified Json printing functionality
  • Repeated Field improvements
  • Add JsonParseOptions to ignore unknown fields
  • Modify csharp README since there are now two NuGet packages
  • Fix #1682 by adding CopyTo() overload to copy a subset of the byte array
  • Get more info about java6 test.
  • Add automake and libtool to the requirements.
  • Try adding all linux tests to jenkins.
  • Add python protoc package
  • Ruby: translate package names from snake_case -> PascalCase.
  • Update Maven download link in Dockerfile.
  • Add canonical Bazel workspace name.
  • Add
  • Add ability to parse to and from Python native dictionary
  • Remove arbitrary "proto." namespace prefix for generated js
  • Needed on Solaris for PATH_MAX
  • [master] Add dependency cl. Fixes google/protobuf#295.
  • Bazel: export LICENSE file.
  • close opened file descriptors properly
  • JavaScript: Make implicit defaults consistent with explicit defaults in toObject
  • Fix missing import of jspb.Map (#1885)
  • Exports `jspb.Map`; fix for Issue #1885
  • Test if sized_delete is safe for opensource
  • Fix gcc 4.1 build (#1035)
  • Merge docfixes to master
  • JS: Fix for high utf-8 codepoints.
  • Migrating documentation of the ObjectiveC runtime code to appledoc.
  • Cherry pick c# changes from master
  • Try to speed up travis tests using cache.
  • GPBUtilities_PackagePrivate.h should silence implicit conversion warnings
  • fixed cmake config files install path
  • Remove redundant symbol
  • C#: Fix NullReferenceException in CodedInputStream.Dispose
  • JavaScript: Use strings for 64-bit ints to preserve precision
  • Fix Win32 error message on Unicode build
  • More tests to shake out some cases in the json parsing
  • Add link to Elm protobuf plugin
  • Cherry-pick into 3.0.0-GA branch: Add a jenkins test status badge.
  • Add mechanism to allow runtime resolution of Any messages by their full type URL
  • Factored Conformance and Benchmark test messages into shared test schema.
  • Objc any helpers
  • Need to expose generated protobuf C++ headers
  • Update Swift design doc based on recent findings/discussion.
  • Fixed wrong package being exported
  • JavaScript: Add protoc option to preserve field names in toObject
  • Ruby: create forwarding headers to aid the foo.rb ->foo_pb.rb transit…
  • Update TextFormat to handle unknown Enum values
  • Fix #2071 replacing /bin/sh with bash when generates descriptor
  • Fix #2032 unused parameter 'deterministic'
  • Use global namespace to avoid ambiguity.
  • Add go_package to field_mask.proto.
  • Initial check in of PHP implementation
  • Fix Win32 error messages on Unicode build
  • Fix #2036 (Ruby `hash` broken for Messages with repeated fields.)
  • Fixes static analyzer issues from xcode.
  • compiler/cli: PrintHelpText prints to stdout instead of stderr
  • benchmarks: update readme.txt
  • Fix the bug that message without namespace is not found in the descriptor pool.
  • Change CodedInputStream#DEFAULT_SIZE_LIMIT from 64MB to kint32max (0x7FFFFFF)
  • Fix instances of classes implementing `__eq__` but not `__hash__`
  • Missed LIBPROTOC_EXPORT for GRPC added
  • Create paths for external repositories in a way that is forward and backward compatible
  • Add lossy64BitNumberRepresentations option to JsonFormat.Printer
  • Fix gcc warning when using map
  • Fix MSVC build when HAVE_LONG_LONG is defined.
  • Adds a new import-mapping option to the js_generator.
  • Remove missing static analyzer warning.
  • Update
  • Added Dockerfile
  • issue-2108 [protoc/Java] Excessive copying on buildPartial()
  • 3.0.0 beta 4
  • Warn when objectivec compiled with ARC
  • Add conformance tests for Go.
  • Support extra parameters for plugins.
  • Fixed issue in cmake; bool equality can't be tested with EQUAL
  • Update
  • third party: discontinued repo -> new repo (sergei-ivanov/maven-protoc-plugin -> xolstice/protobuf-maven-plugin)
  • 2.7.0
  • Fix php c extension on 32-bit machines.
  • Integrated internal changes from Google
  • Fixes deprecation warnings/errors on Xcode
  • More Ruby-eqsue interface
  • Low-level support for custom options in C#
  • Use require_relative in Ruby for imported definitions
  • Support hash computation for protobuf messages.
  • Fix for construction of messages in the C++ Python implementation.
  • total_bytes_limit_ with size when size is bigger 64MB
  • JavaScript: support using Uint8Array in toObject
  • Use user-supplied descriptor pools in FileDescriptor
  • csharp build requires dotnet preview2
  • Fix typo in command line help text
  • Export symbols used in inline functions
  • Generate phpdoc in php generated files.
  • oneOf fix for JsonFormat includingDefaultValueFields
  • Ruby: assert_false -> assert.
  • Conformance Tests for Null Timestamp and Duration JSON Values
  • Down integrate
  • Fix go_package for descriptor.proto
  • Add go_package option
  • Speed up JSON parsing.
  • Timestamp helper fix, Duration helper cleanup.
  • fix compile error on centos in metadata.h for constructors.
  • Bazel support for javalite
  • Keep loop bounds in a local variable.
  • python: do not include internal 'strutil.h' header
  • Php notice silent (fast fix enum notices)
  • Change hint type to `const void*`
  • update license to 2017
  • Fix cmake module - quote output directory for generation
  • Podsvirov CMake changes backported to 3.0.x
  • Generating service interface with PHP generator
  • unwrap descriptor class before comparison of RepeatedField types
  • add a key to ctx.action dict to prevent protoc losing the default env
  • Fix PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET for Clang 3.7.x and older.
  • [Ruby] fix floating point accuracy problem in Timestamp#to_f
  • Optional require_relative in Ruby generated code
  • update ScalaPB url
  • Adding toolchain deps for proto_gen rule
  • Issue#2456 : ByteInput-based CIS (Mirror of ByteOutput-based COS)
  • JsonUtilTest: Add ParsePrimitiveMapIn subtest
  • Change StringOutputStream's interface for better performance.
  • Fix several C++ build issues.
  • Cherry-pick the fix from pull request #2873
  • Update C# to use csproj project format
  • Fix CMake/autotools build missing files (#3047)
  • Add compatibility test for php.
  • JS: Fix dot usage in filename alias
  • ObjectiveC: make file name same as class name when objc_class_prefix is set
  • Make cpp generated enum bound constants constexpr when Options::proto_h
  • updated
  • updated it
  • CMake: Android crosscompiling
  • changes for CMake to support cross-compilation
  • Memory leak fix since argv array could leak in this block.
  • Windows: support long paths in open/mkdir/access
  • C++: Do not forward-declare dependencies in generated .h files
  • Fix issues for down-integration.
  • Fix missing std::tr1::hash on GCC 4.1
  • Avoid aliasing _has_bits_ during SerializeWithCachedSizes.
  • Update Descriptor.cs
  • Add -DHAVE_ZLIB to the bazel BUILD rule.
  • Defer updating local _has_bits_ in MergeFrom.
  • Avoid aliasing from._has_bits_ in MergeFrom
  • Add property to the C#-JsonParser to ignore unknown fields during parsing
  • Make //:protobuf_python have correct
  • Ruby version optionally emits default values in JSON encoding.
  • Java: Mark sun.misc dependency as optional
  • Better processing of strings with newlines
  • Fix for issue #2166
  • Avoid self-swap check when swapping repeated fields.
  • Avoid aliasing RepeatedField<T>::Rep* during serialization.
  • WIP: support PHP namespace option
  • Issue 3112: Object class with fully qualified name
  • not to use std::random_device for map.Seed().
  • adds PHPDoc @return and @param for getters and setters respectively
  • Adds fluent setters for PHP
  • Follows proper autoloading standards
  • control RepeatedField memory growth on mobile platform
  • Workaround the docker bug when compiling artifacts
  • There is no need to adjust UInt32 values when php supports 8 byte integers
  • Remove broken link to
  • readTextFromFile(): normalize CR-LF to LF
  • Remove 64MB memory limit when deserializing messages in C#
  • Use PHPUnit dedicated assertions
  • Removed using statements from common.h
  • Update minimal Python version to 2.7
  • remove bind for six
  • cmake: privately add sources to targets
  • Adds an option in C++ JSON parser to ignore unrecognized enum values
  • PHP: disable unicode escape for json
  • Add support for libc++ on Windows.
  • enable source link for csharp
  • Ruby: Build packages for Ruby 2.5
  • Add guards against bswap_XX redefnitions
  • Use versions module from Skylib for version checking
  • Ruby: Fix scope resolution for MessageExts
  • Make python_srcs target publicly visible
  • Guards for older GCC versions
  • Guards for older GCC versions
  • Guards for older GCC versions
  • Add TextFormat::Parser AllowUnknownField
  • Remove the executable bit from several source code files
  • PHP: Add support for generating php code for plugin.proto
  • Add VS2017 optional component dependency details to the C# ReadMe for #4119
  • Add files to compiler and util subpackages
  • check null for reference type object before writeto can avoid many nullpointer exception
  • Support Conversion between JSON and message in Objective C
  • Improved install command.
  • POC: improved the generated C++ code
  • Update
  • Feat: add import-style=commonjs_strict option to the compiler
  • Fix GHS Integrity OS compiler error
  • Add field name to error message in proto_writer
  • Fix RepeatedField#delete_if
  • Merge 3.5.x to master
  • Fix all warnings that `./ cpp` prints on my Linux box.
  • [C#] Update test project to be used with dotnet test and Visual Studio Test Explorer
  • [ruby] Adds a base class for all explicitly raised TypeErrors
  • Merge ruby fix repeated message field to development branch
  • Allows the Ruby json marshaller to be passed json marshal options
  • Adds better Ruby error messages for TypeErrors by including the field name
  • skip group tag for backward compatibility
  • Blacklist all WELL_KNOWN_PROTOS from Bazel C++ code generation.
  • `` depends on Bash features, thus needs Bash sebang.
  • js message support for jstype string on integers
  • made RepeatedField<T> throw InvalidOperationException when collection…
  • Ruby JSON encoding omits zero-length repeated fields by default.
  • make Timestamp implement IComparable (fixes #4267)
  • Testing public Kokoro logs
  • Update JsonParser.cs
  • Support using MSVC intrinsics in Log2FloorNonZero
  • Revise package name parsing to reject whitespace
  • Update
  • Ruby: Allows decode_json to optionally ignore unknown fields
  • Output * files when use_grpc_plugin=True
  • Revert "Removed mention of Buffer in byteSourceToUint8Array"
  • Fix spelling error of __GNUC_MINOR__
  • Objective-C: Check return value on write of raw pointer
  • Fix bug: whether always_print_enums_as_ints is true or false, it always print the default value of enums as strings
  • python/google/protobuf/pyext/ fix segfault
  • Include the files in the output files when use_grpc_plugin is used.
  • Make protobuf work with mbstring.func_overload >= 2
  • Add go benchmark
  • Conversion from uint64 to uint32 didn't consider sign bit.
  • Fixes MSVC compiler warning C4800
  • Use LIBPROTOBUF_EXPORT for DLL import/export macros in plugin.pb.h
  • Add and add instruction for linking tcmalloc
  • Allow null value in JSON representation of ListValue
  • source code info for interpreted options; fix source code info for extension range options
  • Add --fatal_warnings flag to treat warnings as errors
protobuf questions on Stackoverflow (View All Questions)
  • Create Spark DataFrame from Protobuf using parquet-protobuf
  • Adding Protobuf-PHP to Server
  • How to ignore wrong fields when parsing a text-format protobuf message
  • How to implement a really optional field in protobuf?
  • CMake: conditionally generate protobuf `*pb.{h|cpp}` files when *.proto files change
  • Unable to build protobuf to go endpoint
  • Don't generate the *Count method in java protobuf
  • C++: Safe delete of pointer to Google Protobuf message object
  • how to compile Protobuf and Curve25519 php extensions in windows
  • WebAPI AuthorizeAttribute with Protobuf returns 500
  • Is there an example on how to generate protobuf files holding trained Tensorflow graphs
  • How do I import protobuf files from one folder in another folder in Eclipse?
  • Why do I get an error with missing ProtocolStringList in google protobuf?
  • Protobuf objects as Keys in Maps
  • Using google protobuf with libraries in cmake on Windows, Visual Studio 2013
  • Converting a Cuda-Convnet checkpoint to a Caffe model binary protobuf
  • golang protobuf remove omitempty tag from generated json tags
  • Generate Protobuf documentation?
  • Python grpc protobuf stubs generation issue: --grpc_out: protoc-gen-grpc: Plugin failed with status code 1
  • Smart or Not: Persist serialized data (dotnet-protobuf, protobuf-net, json) in a Relational DB in CF
  • How to serialize both the graph and values in a protobuf file?
  • How can I describe the Any type in protobuf-net?
  • How to use Protobuf converter in Retrofit
  • How to install Protobuf and curve25519 extensions in php (windows)?
  • OpenTransactions/Protobuf ambiguous error
  • Advantages of varint encoding use by protobuf
  • Protobuf-net serialization/deserialization
  • Protobuf-net v2 and large Dictionaries
  • protobuf is an alternative to existing python wrappers like ctypes/SWIG/cython?
  • Cannot addAll a sequence of instances of a protobuf auto-generated class
protobuf latest release notes
v3.5.1 Protocol Buffers v3.5.1

Planned Future Changes

  • Make C++ implementation C++11 only: we plan to require C++11 to build protobuf code starting from 3.6.0 release, after unknown fields semantic changes are finished. Please join this github issue to provide your feedback.


  • Fixed a bug introduced in 3.5.0 and protoc in Windows now accepts non-ascii characters in paths again.


  • Removed several usages of C++11 features in the code base.
  • Fixed some compiler warnings.


  • Fixed memory leak in C-extension implementation.
  • Added discardUnknokwnFields API.
  • Removed duplicatd typedef in C-extension headers.
  • Avoided calling private php methods (timelib_update_ts).
  • Fixed Any.php to use fully-qualified name for DescriptorPool.


  • Added Google_Protobuf_discard_unknown for discarding unknown fields in messages.


  • Unknown fields are now preserved by default.
  • Floating point values are now bitwise compared, affecting message equality check and Contains() API in map and repeated fields.
v3.5.0 Protocol Buffers v3.5.0

Planned Future Changes

  • Make C++ implementation C++11 only: we plan to require C++11 to build protobuf code starting from 3.5.0 or 3.6.0 release, after unknown fields semantic changes are finished. Please join this github issue to provide your feedback.


  • Unknown fields are now preserved in proto3 for most of the language implementations for proto3 by default. See the per-language section for details.
  • reserve keyword are now supported in enums


  • Proto3 messages are now preserving unknown fields by default. If you rely on unknowns fields being dropped. Please use DiscardUnknownFields() explicitly.
  • Deprecated the unsafe_arena_release_* and unsafe_arena_add_allocated_* methods for string fields.
  • Added move constructor and move assignment to RepeatedField, RepeatedPtrField and google::protobuf::Any.
  • Added perfect forwarding in Arena::CreateMessage
  • In-progress experimental support for implicit weak fields with lite protos. This feature allows the linker to strip out more unused messages and reduce binary size.
  • Various performance optimizations.


  • Proto3 messages are now preserving unknown fields by default. If youd like to drop unknown fields, please use the DiscardUnknownFieldsParserAPI. For example: java Parser<Foo> parser = DiscardUnknownFieldsParser.wrap(Foo.parser()); Foo foo = parser.parseFrom(input);
  • Added a new CodedInputStream decoder for Iterable<ByteBuffer> with direct ByteBuffers.
  • TextFormat now prints unknown length-delimited fields as messages if possible.
  • FieldMaskUtil.merge() no longer creates unnecessary empty messages when a message field is unset in both source message and destination message.
  • Various performance optimizations.


  • Proto3 messages are now preserving unknown fields by default. Use message.DiscardUnknownFields() to drop unknown fields.
  • Add FieldDescriptor.file in generated code.
  • Add descriptor pool FindOneofByName in pure python.
  • Change unknown enum values into unknown field set .
  • Add more Python dict/list compatibility for Struct/ListValue.
  • Add utf-8 support for text_format.Merge()/Parse().
  • Support numeric unknown enum values for proto3 JSON format.
  • Add warning for Unexpected end-group tag in cpp extension.


  • Proto3 messages are now preserving unknown fields.
  • Provide well known type messages in runtime.
  • Add prefix PB to generated class of reserved names.
  • Fixed all conformance tests for encode/decode json in php runtime. C extension needs more work.


  • Fixed some issues around copying of messages with unknown fields and then mutating the unknown fields in the copy.


  • Added unknown field support in JsonParser.
  • Fixed oneof message field merge.
  • Simplify parsing messages from array slices.


  • Unknown fields are now preserved by default.
  • Fixed several bugs for segment fault.


  • Decoder can handle both paced and unpacked data no matter how the proto is defined.
  • Decoder now accept long varint for 32 bit integers.
v3.4.1 Protocol Buffers v3.4.1

This is mostly a bug fix release on runtime packages. It is safe to use 3.4.0 protoc packages for this release.

  • Fixed the missing files in 3.4.0 tarballs, affecting windows and cmake users.
  • C#: Fixed dotnet target platform to be net45 again.
  • Ruby: Fixed a segmentation error when using maps in multi-threaded cases.
  • PHP: php_generic_service file level option tag number (in descriptor.proto) has been reassigned to avoid conflicts.
Other projects in C++