Protobuf Wire Decoder

Paste raw Protocol Buffers bytes as base64 or hex and see the decoded field tree — no .proto schema required. Nested messages are recursed automatically. Runs entirely in your browser, no server, no sign-up.

Decoded fields

Decode protobuf without the .proto file

Protocol Buffers is a compact binary format, and the bytes on the wire only tell you each field's number and wire type — not its name or its declared type. That is exactly enough to walk the structure even when you do not have the original .proto schema. This tool parses the wire bytes you paste (as base64 or hex) and shows you the full field tree.

What you get for each field

Because the schemaless wire format is ambiguous, every field is shown with all of its plausible interpretations:

Pick JSON output for a structured tree you can feed to another tool, or text for a quick indented outline.

Common uses

Everything runs locally in your browser via WebAssembly — your bytes never leave your machine.

FAQ

Why does a single field show three or four different values?

Because the wire format doesn't carry the declared type. A varint could be an unsigned int, a negative int32, a zigzag sint, or a bool — the bytes are identical — so the decoder prints every plausible reading and lets you pick the one that matches the API. The same goes for fixed32/fixed64 (int vs float) and length-delimited fields (nested message vs string vs bytes).

Why is my string decoded as a nested message (or vice versa)?

A length-delimited field is recursed as a nested message whenever its bytes happen to parse cleanly as protobuf — short ASCII strings sometimes do. The decoder therefore also shows the UTF-8 string and raw hex readings alongside the message tree, so the true interpretation is never hidden.

What inputs will fail to decode?

Hex with an odd number of digits, invalid base64 characters, messages using the long-deprecated start/end group wire types (3/4), and nesting deeper than 64 levels all produce a clear error. A truncated buffer errors at the point where a field's length runs past the end of the data.

Can I paste bytes captured from gRPC?

Yes, but strip the 5-byte gRPC message prefix first (1 compression flag byte + 4-byte big-endian length) — the decoder expects the bare protobuf message that follows it. In practice: drop the first 10 hex characters of the frame, then paste the rest.

Developer & Automation Access

Run it from the terminal

Same engine as this page, headless — via the gizza CLI:

gizza tool protobuf-decode "08 96 01"

New to the CLI? Get gizza →

Open it by URL

Pre-fill and auto-run this tool with query parameters — the names match the API/CLI:

https://gizza.ai/tools/protobuf-decode/?input=08%2096%2001&encoding=auto&format=json

Machine-readable descriptor: tool.json — title + parameters JSON Schema for agents.