Protobuf Decoder

Decode a raw protobuf message from hex or base64 with no .proto schema — field numbers, wire types, strings and nested sub-messages. Free, no upload.

🔒 Everything runs in your browser — the payload is never uploaded. This reads the raw wire format, so no .proto schema is needed.

Decode protobuf without the .proto

Paste a protobuf-encoded message as hex or base64 and this tool walks the binary wire format byte by byte, with no schema required. It recovers the number, wire type (varint, 64-bit, length-delimited, 32-bit) and value of every field, and recurses into nested sub-messages so you can see the whole tree. Everything runs locally in your browser and the payload is never uploaded.

How the wire format is read

The protobuf binary format records a field number and wire type per field but not the declared type, so length-delimited bytes are interpreted heuristically: printable UTF-8 text is shown as a string, otherwise bytes that parse cleanly as a sub-message are shown as a nested message, and anything else as raw hex. Integers too large for JavaScript are shown as exact decimal strings.

Frequently asked questions

Do I need the .proto file to decode a message?

No. The protobuf wire format is self-describing enough to recover field numbers, wire types and raw values without any schema. Declared field names and exact types (for example int32 versus sint32) are not stored on the wire, so they cannot be shown, but the structure and values can.

Why does my gRPC payload fail with a field number 0 error?

gRPC frames each message with a 5-byte prefix (one compression-flag byte plus a 4-byte big-endian length) before the protobuf bytes. Remove those 5 bytes and decode the remainder.

How are strings, bytes and nested messages told apart?

For a length-delimited field the decoder shows printable UTF-8 as a string; if the bytes are not printable text but parse cleanly as a protobuf sub-message they are shown as a nested message; otherwise they are shown as raw hex. This is a heuristic without the schema, so an unusual value may be classified differently than intended.