gRPC Message Workbench
An online debugger for gRPC / protobuf. Choose wire-format heuristics when you do not have a proto, or strict reflection-based serialization and deserialization when you do.
Start with a task
Do you have a .proto schema?
Two decoding paths
overviewPath 1 · Schema-free decoding
Paste a hex / base64 payload from a capture. The tool reconstructs each field from the protobuf wire format and shows candidate interpretations: uint64 / int64 / zigzag / bool for varints, plus strings, nested messages, and packed arrays for length-delimited values.
Useful for packet captures, raw bytes in logs, and historical data without a proto.
Path 2 · Schema serialization / deserialization
Paste .proto source, compile it in memory (no protoc required), and use reflection in both directions: bytes → structured fields → JSON and JSON → bytes. Field names, enum names, nested messages, repeated fields, maps, and oneofs follow the schema.
Useful for API integration, constructing request bodies, and checking responses.
Protobuf wire-type reference
reference| Wire type | Name | Possible field types |
|---|---|---|
| 0 | varint | int32 / int64 / uint32 / uint64 / sint32 / sint64 / bool / enum |
| 1 | 64-bit | fixed64 / sfixed64 / double |
| 2 | length-delimited | string / bytes / nested messages / packed repeated fields |
| 3 | start group | group (deprecated, legacy proto2) |
| 4 | end group | group end marker (deprecated) |
| 5 | 32-bit | fixed32 / sfixed32 / float |
gRPC framing format
framing+---------------+-------------------------------+-------------------------------+ | 1 byte | 4 bytes (big-endian) | N bytes | | compression | message length | message payload (protobuf) | | flag | | | | 0=identity | | | | 1=compressed | | | +---------------+-------------------------------+-------------------------------+
When parsing as gRPC frames, the tool removes the 5-byte prefix from each frame and decodes the payload separately. Compressed frames (flag 1) are reported but not decompressed.