Protobuf Schema Workbench
Open a small proto3 schema and local binary to see each wire tag, value and zero-based byte span. Add an earlier schema for a conservative field-number review. The original binary stays unchanged for download, and unknown or wire-mismatched fields retain exact raw bytes. This bounded inspector is not a full protoc implementation.
Key features
- Parse a restricted proto3 subset: one root message, nested and scalar fields, repeated/optional and reservations
- Decode VARINT, I64, LEN and I32 with nested and packed field trees
- Show inclusive byte spans and exact raw TLV hex for unknown or wire-mismatched fields
- Compare field numbers, names, types, repetition and reservations across schema versions
- Download JSON findings and byte-for-byte original binary without upload
How to use
- Paste or open a supported current .proto file and binary message or hex.
- Optionally add the previous schema for a field-number comparison.
- Analyze field trees, byte offsets, unknown TLVs and compatibility findings.
- Download the JSON report or unchanged original binary.
Use cases
- Find a truncated or overflowing varint in a captured message
- Identify unknown field numbers without losing raw bytes
- Review whether a removed field number was reserved
- Check a proposed schema for possible field-number reuse
Frequently asked questions
Are unknown fields preserved?
The original binary download is byte-for-byte identical to the input. The report also contains each unknown field's raw tag, length and payload bytes. This tool does not re-encode a modified message or guarantee behavior in other software.
Does a renamed field always mean number reuse?
No. The wire identifies fields by number and wire type, not source name. A changed name on the same number is marked for review because the tool cannot infer intent. A type change is conservatively marked breaking.
Which .proto syntax is supported?
Only proto3 with one top-level message, nested messages, supported scalars, repeated/optional, packed true/false and simple reserved numbers/names. Imports, enums, maps, oneof, services, groups, extensions and custom options are rejected.
How are offsets counted?
Offsets are zero-based byte positions in the original binary. Displayed ranges include both first and final bytes. Packed child offsets point within the parent's payload.
Is this a compatibility guarantee?
No. It screens a bounded set of field-number, type, repetition and reservation changes. It does not prove application semantics, generated API stability, presence behavior, JSON mapping or every protobuf rule.
Are my files uploaded?
No. Selected files are read into browser memory and decoded in this tab. Downloads happen only when requested.
Privacy
Schemas and binary bytes stay in this browser tab; this tool does not submit them to a server API or save them automatically.
Comments & questions