How does protocol buffer handle versioning?

protobuf-net, protocol-buffers

Solution

Google designed protobuf to be pretty forgiving with versioning:

- unexpected data is either stored as "extensions" (making it round-trip safe), or silently dropped, depending on the implementation

- new fields are generally added as "optional", meaning that old data can be loaded successfully

however:

- do not renumber fields - that would break existing data

- you should not normally change the way any given field is stored (i.e. from a fixed-width 32-bit int to a "varint")

Generally speaking, though - it will just work, and you don't need to worry much about versioning.

Problem

How does protocol buffers handle type versioning? For example, when I need to change a type definition over time? Like adding and removing fields.

Original source

Related problems