Google developed Protocol Buffers for internal use and provided a code generator for multiple languages under an open-source license.
The method serves as a basis for a custom remote procedure call (RPC) system that is used for nearly all inter-machine communication at Google.
[5] Data structure schemas (called messages) and services are described in a proto definition file (.proto) and compiled with protoc.
Canonically, messages are serialized into a binary wire format which is compact, forward- and backward-compatible, but not self-describing (that is, there is no way to tell the names, meaning, or full datatypes of fields without an external specification).
The officially supported implementation includes an ASCII serialization format,[6] but this format—though self-describing—loses the forward- and backward-compatibility behavior, and is thus not a good choice for applications other than human editing and debugging.
[13] Protobuf 3.0 provides a code generator for C++, Java (including JavaNano, a dialect intended for low-resource environments), Kotlin, Python, Go, Ruby, Objective-C, C#, PHP, Dart.
[15] Third-party implementations are also available for Ballerina,[16] C,[17][18] C++,[19] Dart, Elixir,[20][21] Erlang,[22] Haskell,[23] JavaScript,[24] Julia,[25] Nim,[26] Perl, PHP, Prolog,[27][28] R,[29] Rust,[30][31][32] Scala,[33] and Swift.