edition = "2023"; // File level options supported. option optimize_for = SPEED; message SomeMessage { // Field identifiers reserved after message changes. reserved 8, 100; // Many integer types with specific encodings. int32 aMostlyPositiveInteger = 1; sint64 aSignedInteger = 2; uint64 anUnsignedInteger = 3; fixed32 anOftenBigUnsignedInteger = 4; sfixed32 anOftenBigSignedInteger = 5; // String always with UTF 8 encoding. string aString = 10; // Another message type. AnotherMessage aMessage = 111; // Variable length content supported. repeated string aStringList = 333; map <int32, string> aMap = 444; // Field level options supported. int32 aDeprecatedInteger = 666 [deprecated = true]; float aFloatWithoutPresenceTracking = 222 [features.field_presence = IMPLICIT]; // Extension field range. extensions 1234 to 5678; } extend SomeMessage { // Extension field in extension field range. int32 anExtensionField = 1234; }
A spectrum of basic types
Packages and nested types
Fields can be repeated
Fields have presence tracked unless disabled
Explicit field identifiers for versioning
Options tune code generation
Extensions reserve fields