How to use
Paste the old .proto in “Before (old definition)” and the new one in “After (new definition)”, or open a file with “Open file”. “Try a sample” also works.
To check one definition, press “Check definition” (it reads the left pane). To compare two, press “Compare” (or Ctrl / ⌘ + Enter).
The check lists messages, fields (number, type and label), enums, services and rpcs, with issues by line. The comparison shows breaking change candidates, cautions and safe changes.
Use “Copy Markdown” to paste a table into a pull request description, or “Save JSON” to keep the verdict, counts and changes.
What it does
Definition list
Reads package, import, nested message, enum, oneof, map, service and rpc (stream), and lists each field with its number, type and label.
Issues by line number
Shows numbers outside 1 to 536870911, the reserved 19000 to 19999 range, duplicate numbers or names, reused reserved numbers, the first value of a proto3 enum and undefined types, each with its line.
Compatibility groups
Changed field numbers, reused numbers, type and label changes, and removed fields not marked reserved are breaking candidates. Compatible pairs such as int32 and int64 are cautions.
A reason on every row
Each row says which rule put it in its group. The rules are on the page, so the basis can be used in a review.
Runs only in your browser
The .proto is not sent anywhere and is analysed inside your browser. Imported files are never fetched.
Use cases
- Check a pull request that edits a .proto for changed field numbers or types
- Confirm that a removed field was reserved, using the list
- Find duplicate or out-of-range numbers and reused reserved numbers by line before generating code
- Compare internal .proto definitions without sending them outside
Supported formats
Input
Output
Capability matrix
| Feature | Support | Notes |
|---|---|---|
| Reading .proto with the syntax or edition line for proto2, proto3 and editions | Supported | — |
| Lists of package, import, nested message, enum, oneof, map, service and rpc (stream) | Supported | — |
| Field number, type and label (optional, repeated, map) for each field | Supported | — |
| Issues: number range, reserved numbers, duplicates, reused reserved numbers, proto3 enums, duplicate names, undefined types | Supported | Not identical to protoc checks. These are the issues this tool reads |
| Comparing numbers, types, labels, removals, reserved, enums and rpcs | Supported | Judged by wire compatibility in general. Stored data and the code that reads it are not known |
| extend and proto2 group | Partial | extend is skipped with a note. A group is shown as a line that cannot be read |
| Moving fields between oneofs, and option values | Not supported | Not compared |
| Checking imported files or the types they define | Not supported | Not fetched. Types from an import are noted as not checked |
| Decoding binary data (use the binary data tool) | Not supported | — |
| Code generation or running protoc | Not supported | — |
| Offline use | Supported | Works without a connection once the page has loaded |
Limits & notes
- Up to 300,000 characters per .proto. Files up to 1 MB.
- Lists and issues count every item, then show them on the screen.
- The verdict follows general compatibility practice. Each API may have its own policy.
Privacy & safety
The .proto is analysed only inside your browser. Nothing is sent or stored, and closing the page discards it. Analytics only record that a run happened, with no content or counts.
FAQ
What happens if I change a field number?
Is changing int32 to int64 safe?
How should I handle a removed field?
Can it check types from imported files?
Can it read binary data?
Related tools
Schema Codegen — JSON to Types & Schema
Paste sample JSON, a JSON Schema or an OpenAPI document to get type definitions in 10 formats. Put several samples in a row to infer optional keys and unions. Your data never leaves your device.
Binary Data Studio (Hex Viewer)
Drop a file to open it as a hex dump with offsets, hex bytes and a text column. Only the visible rows are read, so even multi-gigabyte files open without freezing, and nothing leaves your device. Search, value interpretation, compare and export are on the same screen.
OpenAPI Diff (Breaking Change Checker)
Paste the old and new OpenAPI (or Swagger 2.0) definitions to list the changes that break clients: removed paths, newly required fields, type changes and more. Each change is sorted into breaking, caution or non-breaking, with the reason on its row. Nothing leaves your browser.
AsyncAPI Check and Event API Diff
Paste AsyncAPI YAML or JSON to list its servers, channels, operations and messages, with issues such as unresolved $ref and unused components by line number. Paste an old and a new version to see candidates such as removed channels or operations, and removed or newly required payload properties. Nothing leaves your browser.
GraphQL Schema Check and Breaking Changes
Paste a GraphQL SDL schema (schema.graphql) to list its types, fields and arguments, with issues such as undefined types by line number. Paste an old and a new schema to see breaking change candidates, such as removed fields or newly required arguments, apart from safe changes. Nothing leaves your browser.
Diff Tool — Text & Code Compare
Paste or drop two versions and see added and removed lines, plus the exact words that changed inside each line. Copy or save the result as a unified patch. Nothing leaves your browser.
Last updated: