happytails.ai
English

Protobuf Compatibility Checker

Compare two versions of a .proto file and find the edits that break messages already written on the wire or as JSON. Removed numbers, type changes, renamed fields and enum changes are each explained.

Accepts two .proto files of up to 1,000,000 characters each, with at most 200,000 tokens, 2,000 messages and enums, 10,000 fields per message and 32 levels of nested messages. The comparison runs in your browser in a background worker. Downloads are a JSON report and a CSV list of findings. The version that existing data was written with. Put the changed file in New schema. Up to 1,000,000 characters. Review the settings before running.

Your result

How to use Protobuf Compatibility Checker
  1. Paste the old .proto file in the main box.
  2. Paste the new version in the New schema field.
  3. Run the check and review the findings, most severe first.
  4. Download the JSON report or the CSV list.

Report a problem or share an idea.

Useful next steps

Accepts two .proto files of up to 1,000,000 characters each, with at most 200,000 tokens, 2,000 messages and enums, 10,000 fields per message and 32 levels of nested messages. The comparison runs in your browser in a background worker. Downloads are a JSON report and a CSV list of findings.

Severities

Breaking means old and new programs can misread binary messages: a removed field whose number is not reserved, a number reused from a reserved range, a type with a different wire encoding, a change between singular and repeated, a removed message or enum, or a renumbered enum value. Breaking JSON means binary data still works but the JSON or text format changes, such as a renamed field or enum value. Warnings cover changes that work on the wire but can truncate or reinterpret values, such as int32 to int64, or moves into and out of a oneof.

How it compares

Messages and enums are matched by their name without the package, and fields by number, following the protobuf language guide rules for updating a message type. Messages and enums nested inside other messages are compared too.

What is not supported

The parser reads proto2 and proto3 files with messages, enums, oneof, maps, nested types, reserved numbers and names, and field options. Imports are listed but not resolved, so types from other files are compared by name only. Editions, groups and extensions are rejected. Services are skipped.