Online Protobuf Wire Decoder (No Schema)
Drop in a binary protobuf payload to decode it field by field without a .proto schema. The decoder reads the raw wire format and shows each field number, its wire type (Varint, I64, Len, or I32), and the decoded value. Because length-delimited fields are ambiguous without a schema, it shows both a likely UTF-8 string and a nested-message attempt for each one. The file is parsed entirely in your browser and is never uploaded.
How to decode a protobuf message
- Drag a binary protobuf file onto the box, or click browse to pick one.
- Read the table: each row is one field with its number, wire type, and decoded value.
- For length-delimited fields, toggle between the string, hex, and nested-message views to find the right reading.
Examples
The canonical varint example
Bytes 08 96 01
Field 1, Varint, value 150
A string field
Bytes 12 05 68 65 6c 6c 6f
Field 2, Len, string "hello"
Frequently asked questions
Is my file uploaded anywhere?
No. The file is read and decoded entirely in your browser using JavaScript. Nothing is uploaded, runs in your browser, so even sensitive or proprietary payloads stay on your device.
Do I need the .proto schema?
No. This decoder reads the raw wire format, which encodes a field number and a wire type for every field. It recovers the structure and values without a schema. The trade-off is that field names and exact types are not in the bytes, so it shows best-effort interpretations instead.
Why does one field show several interpretations?
Without a schema some wire types are ambiguous. A length-delimited field could be a string, packed bytes, or a nested message, so the tool shows the UTF-8 text, the raw hex, and a nested-message attempt. A varint could be an int, a boolean, or a zigzag-encoded signed value, so all three readings are shown.
What are the wire types?
Protobuf uses four main wire types: 0 Varint (base-128 integers, booleans, and enums), 1 I64 (eight fixed bytes for fixed64 or double), 2 Len (a length then that many payload bytes for strings, bytes, and sub-messages), and 5 I32 (four fixed bytes for fixed32 or float).
What happens with a truncated or invalid payload?
The decoder reports an error rather than guessing. A varint that never ends, a fixed field with too few bytes, or a length-delimited field that claims more bytes than exist will all be flagged as malformed input.
What is zigzag decoding?
ZigZag is how protobuf stores signed integers (sint32 and sint64) so that small negative numbers stay small on the wire. The tool shows the zigzag-decoded signed value next to the plain unsigned reading for every varint.
Related tools
Hex Viewer
View any file as a classic hex dump in your browser: byte offsets, two-digit hex, and an ASCII gutter side by side. Nothing is uploaded. Copy the dump.
File Type Identifier
Find out what a file really is from its magic bytes, not its extension. Detects images, audio, video, archives, fonts, and more in your browser. Private.
Strings Extractor
Extract readable text from any binary file in your browser, like the Unix strings command. See each printable run with its byte offset, set a minimum length.
Base64 File Encoder
Encode any file to Base64 and a data URI in your browser. Drop a file to get the raw Base64 and a ready data: URI to copy. Nothing is uploaded.
CBOR Decoder
Decode a CBOR file (RFC 8949) to readable JSON in your browser. Handles integers, byte strings, arrays, maps, tags, and floats. Nothing is uploaded.
CSV File Inspector
Inspect a CSV file in your browser: detect the delimiter, encoding and BOM, count rows and columns, guess the header, and preview sample rows. Private.