protobuf 59,573 long had two dialects: proto2 (required and optional labels, explicit presence, closed enums) and proto3 (implicit presence, open enums). Editions replace both with one grammar, edition = "2023" or "2024", plus features set per file, message or field, and keep the binary, text and JSON encodings. The editions overview names 2024 the latest released edition; 2026 was announced for the 36.x line, and protoc 36.2 already compiles it. The edition 2024 copy of order.proto changes three lines: edition = "2024";, then option features.field_presence = IMPLICIT; for proto3's behavior, and string coupon = 8 [features.field_presence = EXPLICIT];, because protoc rejects optional in editions. hash.py serializes all 100,000 orders through a given build of order_pb2.py:
protoc -I editions --python_out=editions editions/order.proto
python hash.py . && python hash.py editions # hash 100,000 orders through each buildorder_pb2.py sha256 f1a795b55d53cde0c694fcda editions/order_pb2.py sha256 f1a795b55d53cde0c694fcda
Editions 2023 and 2024 default to proto3's behavior (open enums, packed repeated fields, UTF-8 validation) except field_presence, which defaults to EXPLICIT as in proto2. proto3 is not deprecated, and protoc compiles it unchanged; convert a file when you want per-field control or a feature only a newer edition offers.