Decode protobuf payloads from Base64 or hex in your browser. Inspect wire-format fields without a schema, or paste a .proto definition for typed JSON output.
Privacy: Decoding runs entirely in this tab. Your bytes and schema text are not uploaded to Codeground servers.
Protobuf payload
Optional .proto schema
Leave blank to decode wire format only (field numbers + values). Provide a schema and message type for structured JSON.
Decoded output
{
"id": 1,
"name": "John"
} gRPC, Kafka, and many mobile APIs ship binary protobuf payloads. When debugging, you often capture Base64 from logs, hex from packet dumps, or raw bytes from a test client. This tool helps you decode protobuf wire format locally and, when you have a .proto file handy, render typed JSON with field names instead of numbers.
Wire-only mode walks the protobuf encoding (varint tags, length-delimited strings and nested messages, fixed32/64) and prints each field number with its value. Nested messages are expanded when the payload looks like valid sub-messages.
Schema mode parses your pasted .proto definition with protobufjs and decodes against the message type you specify—ideal when you know the contract but only have the encoded bytes.
Paste Base64 (common in logs and REST gateways) or hex (common in hex editors and firmware traces). Auto-detect treats even-length hex strings as hex; otherwise Base64 is assumed. Whitespace is stripped automatically.
Do you store my protobuf data? No. Everything runs client-side in JavaScript.
Why do I see field numbers instead of names? Protobuf on the wire does not include field names. Paste your .proto schema and message type for named JSON output.
Does this support proto2? Wire decoding works for both proto2 and proto3. Schema decode depends on your pasted definition.