If I change a field of mine from float to double, does that break backward compatibility in my format? It makes sense that it should, but in my test it didn’t.
On the other hand, I guess float and double have different wire-types, which can let protobuf-net handle the situation correctly and cast.
Are there docs anywhere that cover this sort of stuff?
tl;dr; version: “that’s fine”
At the wire level, this is the difference between – fixed 4-byte vs 8-byte encoding, so of you do this, future serializations will take a few extra bytes per value.
In the case of protobuf-net, it is very forgiving by default – so this will not break your existing data. It tries to handle as many common / likely changes as it can, and this is handled fine. Other implementations may be more strict, so if you are using this for interop purposes I cannot make any statements about the “other end” (meaning: some other protobuf implementation). To help with this, there is also an optional / opt-in strict mode (disabled by default). If you have that enabled, then only the exact representation is allowed (so: 32-bit for float and 64-bit for double).