Chapter 22: Schema Evolution and Backward Compatibility

Golden Rules of Proto Evolution

Reserved Fields

message User {
  reserved 3, 7;              // these numbers can never be reused
  reserved "old_field";       // this name can never be reused
  string name = 1;
  string email = 2;
  // field 3 was "phone" — removed, reserved forever
}

Backward vs Forward Compatibility

ScenarioWhat Happens
New client, old serverServer ignores unknown fields (forward compatible)
Old client, new serverClient sees default values for new fields (backward compatible)