Beyond basic messages, Protobuf has tools for splitting schemas across files, carrying dynamic data, and evolving types in production without breaking callers. Descriptors, extensions, and validation are covered in the chapters that follow.
Anatomy of an evolving schema
This diagram breaks down the features this chapter covers. Each label points to the topic that covers it in detail.
ORDER.PROTO
edition = "2024";
package shop.v1;
import "google/protobuf/any.proto";
import "google/protobuf/struct.proto";
option features.enum_type = CLOSED;
message Order {
reserved 2;
reserved legacy_status;
string id = 1;
string note = 3 [deprecated = true];
google.protobuf.Any payload = 4;
google.protobuf.Value metadata = 5;
}
Next
Imports
How import statements resolve, and how a schema registry turns copied .proto files into pinned dependencies.