Protobuf Decoder (No Schema)

Decode raw Protobuf wire bytes without a .proto file, right in your browser.

Ad placeholder (leaderboard)

Protocol Buffers (Protobuf) is Google’s compact binary serialization format, used heavily in gRPC APIs and high-performance services. Normally you need the matching .proto schema to decode a message, but the wire format carries enough structure to parse without one. This tool reverse-engineers raw Protobuf bytes into field numbers, wire types and candidate values, which is invaluable when inspecting API traffic you do not have the schema for.

How it works

Every Protobuf field on the wire begins with a varint key that packs two pieces of information: field_number << 3 | wire_type. The wire type tells the decoder how to read the payload that follows:

  • Wire type 0 (varint) — covers int32, int64, uint, sint (zigzag-encoded), bool and enum. The tool shows the plain integer, the zigzag-decoded signed value, and a bool reading when the value is 0 or 1.
  • Wire type 1 (64-bit) — eight little-endian bytes shown as fixed64, sfixed64 and double.
  • Wire type 2 (length-delimited) — a varint length then that many bytes. This could be a UTF-8 string, raw bytes, an embedded message, or a packed repeated field, so the tool tries each.
  • Wire type 5 (32-bit) — four little-endian bytes shown as fixed32, sfixed32 and float.

Length-delimited payloads are recursively re-parsed as embedded messages, so deeply nested structures are revealed automatically.

Example

The hex 08 96 01 12 07 74 65 73 74 69 6e 67 decodes to two fields:

Field 1 (varint): 150
Field 2 (length-delimited): string "testing"

08 is the key for field 1, wire type 0; the varint 96 01 decodes to 150. 12 is the key for field 2, wire type 2; 07 is the length and the next seven bytes spell testing. Because there is no schema, field names are not recoverable — only numbers, types and values. Everything runs locally in your browser.

Ad placeholder (rectangle)