Inspect Protobuf wire and local schemas
Protobuf binary wire fields0/1/2/3/4/5 with exact offsets and bytes; no schema means no guessed names or text.
- Runs in your browser
- No upload
- Check before download
Files and schemas stay in this tab and a local worker. Nothing is uploaded or stored automatically. Clear/close loses your inputs; keep originals and save wanted results.
Protobuf binary wire fields0/1/2/3/4/5 with exact offsets and bytes; no schema means no guessed names or text. Local proto2/proto3 grammar with explicit local imports, scalar/enum/message/group, repeated packed/unpacked, map and oneof interpretation. Missing optional fields stay absent; required fields must exist. Singular message fragments merge; scalars use the last value and oneof uses the final active member. Map entries retain duplicates for inspection rather than producing canonical Protobuf JSON. Editions/extensions are unsupported. No remote imports, generated constructors/codecs, eval or application execution. Integers are decimal strings, bytes hex; names/unknown fields are inspected, not a claim that a message conforms to an application's semantics. Save wire/decoded reports and original bytes; schemas.json preserves supplied local schemas. Message fragments within one map value merge; separate map entries remain separate and scalar values use the last occurrence.
File up to 16 MiB; Protobuf up to 1 MiB; each schema up to 256 KiB and 1 MiB combined. Depth 64, 20,000 metadata or wire nodes and 100,000 physical or retained values; decoded budget 32 MiB; generated output 8 MiB plus the original. Preview 200 rows; export 10,000 rows. The worker stops after 5 seconds. SQLite's 64 MiB of linear memory is not the whole browser heap.
Method and limits
Supported profile
Protobuf binary wire fields0/1/2/3/4/5 with exact offsets and bytes; no schema means no guessed names or text. Local proto2/proto3 grammar with explicit local imports, scalar/enum/message/group, repeated packed/unpacked, map and oneof interpretation. Missing optional fields stay absent; required fields must exist. Singular message fragments merge; scalars use the last value and oneof uses the final active member. Map entries retain duplicates for inspection rather than producing canonical Protobuf JSON. Editions/extensions are unsupported. No remote imports, generated constructors/codecs, eval or application execution. Integers are decimal strings, bytes hex; names/unknown fields are inspected, not a claim that a message conforms to an application's semantics. Save wire/decoded reports and original bytes; schemas.json preserves supplied local schemas. Message fragments within one map value merge; separate map entries remain separate and scalar values use the last occurrence.
Resource limits
File up to 16 MiB; Protobuf up to 1 MiB; each schema up to 256 KiB and 1 MiB combined. Depth 64, 20,000 metadata or wire nodes and 100,000 physical or retained values; decoded budget 32 MiB; generated output 8 MiB plus the original. Preview 200 rows; export 10,000 rows. The worker stops after 5 seconds. SQLite's 64 MiB of linear memory is not the whole browser heap.
Files and schemas stay in this tab and a local worker. Nothing is uploaded or stored automatically. Clear/close loses your inputs; keep originals and save wanted results.
How to inspect safely
- Local binary file
Load a binary message. Wire mode needs no schema. Schema mode needs local .proto files, the main filename and an explicit message type. Load the sample to start with sample.proto and message Sample.
- Schema and metadata
The sample bytes begin 08 96 01 and then a length-delimited field. With Sample {int64 id=1; string name=2;} they decode to id=150 and name=Café. Wire mode reports field numbers, byte ranges and the raw payload instead of guessing names.
- Verify and save exports
Compare the decoded fields with the wire offsets and unknown-field counts. Save report.json, schemas.json (when you supplied schemas) and original.pb. Integer values are shown as decimal strings, and bytes as hex rather than guessed UTF-8 text.
Method and limits
Why do the wire and schema reports differ?
Wire format alone can't tell whether a length-delimited value is text, bytes or a submessage. The schema you select supplies that meaning. Missing optional fields stay absent, repeated fields keep every occurrence, and oneof follows the last active member. The report is not canonical Protobuf JSON and does not validate what the data means for your application.
Why can’t this file or selection be read?
Use the exact, fully qualified message name and supply the local imports. Truncated varints, wrong wire types, missing required fields and missing schemas are errors. Don't decode a framed or compressed application envelope as if it were a raw message.
What does this inspector deliberately not do?
Local proto2/proto3 inspection only; Editions and extensions are not supported. Up to 16 local schema files, 1 MiB combined, and 1 MiB of message bytes. No remote imports, generated application code or execution. Duplicate map entries can still be inspected.