Proto buffer (serialisation)

Protocol Buffers Google’s language-neutral, platform-neutral, extensible mechanism for serializing structured data.

see also

  • Reverse Engineering Protobuf Definitions from Compiled Binaries
  • Replacing Protobuf with Rust to go 5 times faster - The problem they have software written in Rust, and they need to use the libpg_query library, that is written in C. Because they can’t use the C library directly, they had to use a Rust-to-C binding library, that uses Protobuf for portability reasons. Problem is that it is slow.
    • So what they did is that they wrote their own non-portable but much more optimized Rust-to-C bindings, with the help of a LLM.
    • Calling the C function is not the problem here. It is dealing with the big data structure this function returns in a Rust-friendly manner.
      • This is something Protobuf does very well, at the cost of performance.

# Alernatives

# Cap’n Proto

Cap’n Proto is the result of years of experience working on Protobufs, listening to user feedback, and thinking about how things could be done better.

# flatbuffers

Binary message format faster than protobuf

FlatBuffers is an efficient cross platform serialization library for C++, C#, C, Go, Java, JavaScript, TypeScript, PHP, and Python. It was originally created at Google for game development and other performance-critical applications.

# Overview (source FlatBuffers)

  • Cap’n’Proto promises to reduce Protocol Buffers much like FlatBuffers does, though with a more complicated binary encoding and less flexibility (no optional fields to allow deprecating fields or serializing with missing fields for which defaults exist). It currently also isn’t fully cross-platform portable (lack of VS support).

  • msgpack: has very minimal forwards/backwards compatibility support when used with the typed C++ interface. Also lacks VS2010 support.

  • Thrift: very similar to Protocol Buffers, but appears to be less efficient, and have more dependencies.

  • YAML: a superset of JSON and otherwise very similar. Used by e.g. Unity.

  • C# comes with built-in serialization functionality, as used by Unity also. Being tied to the language, and having no automatic versioning support limits its applicability.

  • Project Anarchy (the free mobile engine by Havok) comes with a serialization system, that however does no automatic versioning (have to code around new fields manually), is very much tied to the rest of the engine, and works without a schema to generate code (tied to your C++ class definition).

Written on April 25, 2018, Last update on January 24, 2026
serialization protobuf reverse