← Back to all sparks
P

Protocol Buffers

DEVOPS
Velocity6.3

Language-neutral mechanism for serializing structured data

Protobuf is loading Edition 2026 with enforced defaults, one release candidate at a time.

serializationeditionsbreaking changesbazeldeprecationsjson
Current state
The v35 and v36 cycles are almost entirely about Edition 2026. Naming-style enforcement arrived in 35.0, and 36.0-rc1 flipped default_symbol_visibility to STRICT and turned on descriptor-level proto limit enforcement for that edition. Alongside it, the build story consolidated hard — Bazel 7 dropped, Bazel 9 tested across every language runtime — and a JSON options surface (json_options.proto, json_name for enum values) is being propagated through C++, Java, Python and upb.
Where it's heading
Editions are being used as a versioned policy channel: rather than break existing users, protobuf stages stricter defaults behind an edition label and lets projects opt in by declaring it. Each release adds another enforcement to the 2026 bucket while deprecating what it replaces — generic services, Reflection::GetEnum, reserving field number INT_MAX. The pattern is a compiler quietly acquiring a lint pass with teeth.
Prediction
Expect 36.0 to go final with the Edition 2026 enforcement set frozen, and further additions to move to a 2027 edition rather than change 2026 after release. The deprecation warnings landing now — generic services, the enum reflection accessors — are the removals to expect in a later major.

Recent moves

  1. 2d ago

    JSON options protos ship in the release artifacts

    The second 36.0 candidate is consolidation rather than new policy: json_options.proto and json_enumvalue_options.proto now ship in release artifacts across languages, and upb picks up the JSON enum value name path the other runtimes already had. A deprecation warning on Reflection::GetEnum continues the steady pruning of the C++ reflection surface.

    View source ↗
  2. 27d ago

    Edition 2026 tightens: strict symbol visibility, proto limits

    ⚡ SPARK

    This is where Edition 2026 stops being a naming convention and becomes an enforcement regime, with symbol visibility defaulting to strict and descriptor-level limits on by default. It sets the terms anyone adopting the edition will have to meet before 36.0 goes final.

    View source ↗
  3. 1mo ago

    Bazel proto fragment dependency reverted to 34.x behavior

    A corrective release that walks back 35.0's dependency on Bazel's proto fragment, restoring 34.x behavior and honoring only the Starlark --proto_toolchain_for flags. Notably, the project labels its own fix a breaking change from 35.0 — a sign of how much churn the Bazel 9 migration is generating.

    View source ↗
  4. 2mo ago

    GCC workarounds and an upb overflow fix

    A maintenance patch on the 34 line: a GCC attribute-handling workaround, an extension registry fix and a theoretical pointer overflow in upb. Nothing here touches the editions work driving the main line.

    View source ↗
  5. 2mo ago

    Edition 2026 starts enforcing naming style; Bazel 7 dropped

    ⚡ SPARK

    35.0 opens the Edition 2026 program with the first enforced rule and simultaneously resets the supported build toolchain. Everything the 36.0 candidates add — strict visibility, proto limits — extends the mechanism established here.

    View source ↗