Workshop Division // Tool

PROTOBUF WIRE DECODER

The wire format carries field numbers, not names, so bytes alone can be decoded a long way without the schema — which is exactly what protoc --decode_raw does, and what this does without installing anything.

Hover a field above to light up the bytes it came from. The tag byte carries both the field number and the wire type — (number << 3) | wire_type — which is why field 1 with a length-delimited payload always starts 0a.


    

A starting point, not the truth: the wire format cannot tell you a field's name, whether a number was meant as signed, or whether a repeated field was packed by choice. Anything marked with a comment is a guess the bytes cannot settle.

Wire type 2 is the ambiguous one: a string, a byte blob, a nested message and a packed repeated field all look identical on the wire. This page tries all four and shows you which ones are self-consistent — a payload that parses cleanly as a message usually is one, but a short string of the right shape can parse as a message too, and there is no way to be sure without the schema.

Incoming Transmission — Slippy

"A field number, a wire type, and a length. Everything else is convention."

← Back to Archive