MessagePack Viewer

Decode MessagePack binary data to readable JSON right in your browser.

Free MessagePack decoder and viewer. Paste hex or base64, or upload a binary file, and see the decoded JSON with int, float, str, bin, array, map and ext types annotated. 100% client-side, no upload. It runs free in your browser on Gera Tools, with nothing uploaded.

Last updated Source: Gera Tools

What is MessagePack?

MessagePack (msgpack) is a compact binary serialization format that is roughly a drop-in faster, smaller alternative to JSON. It is common in Redis tooling, RPC systems, game networking and high-throughput APIs.

MessagePack is a binary serialization format that encodes the same data model as JSON — maps, arrays, strings, numbers, booleans and null — but in a far more compact byte stream. It is widely used in RPC systems, Redis-based tooling, real-time game networking and high-throughput APIs where parsing speed and payload size matter. This viewer decodes raw MessagePack back into readable JSON so you can debug those payloads without writing a script every time.

How it works

MessagePack uses a single leading byte to select a format family, and the value or length follows:

  • Small integers, strings, arrays and maps use compact “fix” forms: positive fixint 0x00–0x7f, negative fixint 0xe0–0xff, fixstr 0xa0–0xbf, fixarray 0x90–0x9f and fixmap 0x80–0x8f.
  • Longer strings, binary blobs, arrays and maps use str, bin, array and map markers with 8, 16 or 32-bit length prefixes.
  • nil, false and true are the single bytes 0xc0, 0xc2 and 0xc3, while floats use 0xca (float 32) and 0xcb (float 64).
  • Extension types (fixext and ext) carry an application-defined type code plus a payload — these are shown without losing data.

The decoder reads the leading byte, dispatches to the matching family, and recurses into nested arrays and maps until the whole stream is consumed.

Example

The hex 82 a1 61 01 a1 62 92 02 03 decodes to:

{
  "a": 1,
  "b": [2, 3]
}

82 is a 2-entry fixmap, a1 61 is the fixstr "a", 01 is the integer 1, a1 62 is "b", and 92 02 03 is a 2-element fixarray [2, 3]. Binary values appear as bin:0x… and extensions as ext(type=n):0x…. All decoding happens locally in your browser.

Common debugging scenarios

Redis payloads — many Redis libraries store objects as MessagePack. If you pull a raw value with redis-cli --raw or GETRANGE, paste the hex here to read the structure without starting a full client.

Network capture — if Wireshark or Chrome DevTools shows a WebSocket frame or HTTP/2 body you cannot read, export the bytes as hex and paste them. The field-by-field breakdown makes it easy to pinpoint which key in a deeply nested map has an unexpected value.

Extension type 1 (Timestamp) — the MessagePack spec defines ext type 1 as a nanosecond-precision timestamp. The viewer displays the raw payload so you can interpret the 4-, 8-, or 12-byte encoding. The 32-bit form stores seconds since the Unix epoch in the upper 32 bits, the 64-bit form adds nanoseconds in the lower 30, and the 96-bit form stores them separately.

Checking compactness — a key reason to prefer MessagePack over JSON is payload size. If you are debugging a performance regression, compare the byte length shown in the viewer against the equivalent JSON character count: MessagePack is typically 20–30% smaller on real objects.

Practical tips

  • Accept both upper- and lowercase hex: 82A1 and 82a1 are treated identically.
  • Spaces, commas, and a leading 0x in hex input are stripped automatically, so you can paste directly from a hex editor or log line.
  • Very large integers (beyond 2⁵³) display in JSON as rounded numbers. If you need exact 64-bit integer values, note the raw bytes shown in the decoder and interpret them separately.
  • The viewer is entirely client-side — useful when inspecting credentials or PII in internal APIs, because nothing leaves your machine.