Paste your MessagePack hex or base64 string here. We decode it as you type.Paste msgpack hex/base64

What the MessagePack Viewer Does

If you have ever stared at a hex blob in a Cloudflare Worker log and wondered what is actually inside, this is the page for that. MessagePack is a binary serialization format that produces something like 83a76f72646572496478a84f52442d37343231... — compact on the wire, totally unreadable by eye. Paste the hex (or base64 — we auto-detect) into the left pane and the right pane shows you the decoded JSON tree.

Decoding happens locally with the official @msgpack/msgpack library, the same one most Node and browser apps use. The format follows the public MessagePack wire-format spec, so any payload produced by msgpack-python, msgpack-c, msgpack-java, or any other conforming implementation works here. There is no upload step — the bytes never leave your browser, which matters when the blob carries something like customer: 'Ava Chen' or an internal subscriberId: 'SUB-1001'.

Decoding is debounced 300ms, so you can paste, edit, and re-paste without clicking anything. No Convert button, no spinner — just type and read.

How to View a MessagePack Payload

Three steps. Works for hex strings copied out of a log, base64 fields lifted from a Kafka message, or raw bytes you pasted from a debugger.

1

Paste hex or base64 into the left pane

Drop the encoded MessagePack into the left editor. We auto-detect: if it parses cleanly as hex (after stripping whitespace, commas, 0x prefixes, and \x escapes), we treat it as hex; otherwise we try base64 (RFC 4648). Either form is fine. Example of a hex-encoded order:

83a76f72646572496478a84f52442d37343231a56974656d739282a3736b75a7534b552d313031a37174790282a3736b75a7534b552d323434a37174790182a8637573746f6d6572a841766120436865 6e

That blob decodes into an order with two line items (SKU-101 x2 and SKU-244 x1) for customer Ava Chen.

2

Read the decoded JSON on the right

The right pane is read-only and shows the decoded payload as pretty-printed JSON — same indentation as JSON.stringify(obj, null, 2). Maps render as objects, arrays as arrays, ints/floats as numbers, and binary blobs come through as a Uint8Array with its byte length visible. Timestamps from the timestamp extension type render as ISO strings.

3

Iterate without clicking anything

Edit the input and the JSON updates after a 300ms pause. If the bytes are not valid MessagePack we tell you what broke (truncated buffer, unexpected type byte, etc.) instead of pretending it parsed. Use the Sample msgpack button to load a known-good Order payload for comparison.

When You Will Actually Use This

Inspect a MessagePack message in a log

Your service writes msgpack-encoded payloads to a structured log as hex (it is shorter than base64 in many cases). When something breaks in production, you copy the hex out of the log line, paste it here, and instantly see what the producer actually sent — orderId ORD-7421, the right items, the wrong customer field, whatever it is.

Debug a Redis or Kafka payload

Many backends use MessagePack instead of JSON for hot paths because it is 30 to 50 percent smaller and faster to parse. When you pull a value off Redis or peek at a Kafka topic with kcat -e, the bytes come out as base64. Paste them here to confirm the consumer and producer agree on the schema.

Verify cross-language round-trips

You encode in Python with msgpack.packb(...) and decode in Go with msgpack.Unmarshal(...). When the Go side sees a wrong type, dump the bytes from Python as hex and run them through this viewer — that tells you whether the bug is in the encoder or the decoder before you spend an afternoon arguing about it.

Read MessagePack from a saved file

You have a <code>.msgpack</code> file from a Jupyter notebook export, a game save, or an analytics dump. Run <code>xxd -p</code> on it to get the hex, paste, read. Faster than wiring up the library in a fresh Python REPL just to see what one record looks like.

Common Questions

Does my data leave the browser?

No. The decode runs entirely in this tab using the @msgpack/msgpack library bundled with the page. There is no fetch, no upload, no telemetry on the bytes. Close the tab and the data is gone. That said — treat the URL bar like a public space, do not put a payload there, and clear your clipboard if it had secrets.

Can I paste base64 instead of hex?

Yes. The viewer auto-detects: if the input parses as hex after we strip whitespace, commas, 0x prefixes, and Python-style \x escapes, we treat it as hex; otherwise we try standard base64. Either works for the same payload. Most logs use hex for short messages and base64 for larger ones.

What happens with binary fields, timestamps, and extension types?

Binary (the bin family) decodes into a Uint8Array and prints as { "0": 134, "1": 12, ... } in the JSON tree (since standard JSON has no native bytes type — see the Uint8Array docs on MDN). Timestamps from the timestamp extension type decode to native Date objects, which serialize as ISO 8601 strings. Other extension types come through as { type, data } tuples — you will see the type code and the raw bytes.

Why is the decoded output different from what my server sent?

Two usual suspects. One: your input is truncated — log truncation often clips the last few bytes and msgpack relies on length-prefixed fields, so a missing tail produces a confusing error or partial output. Two: the producer used a custom extension type and the receiver does not know about it. Compare the bytes against the official spec if the structure looks impossible.

Can it decode huge payloads?

A few megabytes of hex pastes fine in modern browsers. Beyond that the Ace editor on the input side starts to feel sluggish — at that point you are better off reading the file directly with the library in a Node script. The decoder itself is not the bottleneck; the editor is.

How do I produce hex like the sample shows?

In Python: import msgpack; msgpack.packb(obj).hex(). In JS: Array.from(encode(obj)).map(b => b.toString(16).padStart(2, '0')).join(''). In Go: fmt.Sprintf("%x", msgpack.Marshal(obj)). Most languages have a one-liner; the resulting hex pastes here directly.

Other MessagePack Tools

Viewing is one shape — these handle the full round-trip and adjacent formats: