MessagePack Viewer
Füge einen MessagePack-Blob als Hex oder Base64 ein und lies ihn als JSON. Wir erkennen das Encoding selbst, decodieren im Browser, kein Upload.
Was der MessagePack Viewer macht
Wenn du je auf einen Hex-Blob in einem Cloudflare-Worker-Log gestarrt und dich gefragt hast, was da eigentlich drinsteht, ist das hier die Seite dafür. MessagePack ist ein binäres Serialisierungsformat, das etwas in der Form 83a76f72646572496478a84f52442d37343231... ausspuckt — kompakt auf der Leitung, mit dem Auge nicht lesbar. Füg den Hex (oder Base64 — wir erkennen es automatisch) ins linke Panel ein, und das rechte zeigt dir den decodierten JSON-Baum.
Decodiert wird lokal mit der offiziellen Bibliothek @msgpack/msgpack, derselben, die die meisten Node- und Browser-Apps nutzen. Das Format folgt der öffentlichen MessagePack-Wire-Format-Spec, also funktioniert hier jedes Payload, das von msgpack-python, msgpack-c, msgpack-java oder einer anderen spec-konformen Implementierung erzeugt wurde. Es gibt keinen Upload — die Bytes verlassen deinen Browser nie, was zählt, wenn der Blob etwas wie customer: 'Ava Chen' oder ein internes subscriberId: 'SUB-1001' enthält.
Das Decodieren ist um 300ms entprellt, du kannst also einfügen, bearbeiten und neu einfügen, ohne irgendwo zu klicken. Kein Convert-Button, kein Spinner — tippen und lesen.
So liest du ein MessagePack-Payload
Drei Schritte. Funktioniert für Hex-Strings aus einem Log, Base64-Felder aus einer Kafka-Nachricht oder Rohbytes, die du aus einem Debugger eingefügt hast.
Hex oder Base64 ins linke Panel einfügen
Schmeiß das encodierte MessagePack in den linken Editor. Wir erkennen das Format automatisch: parst es sauber als Hex (nachdem wir Whitespace, Kommas, 0x-Präfixe und \x-Escapes entfernt haben), behandeln wir es als Hex; sonst probieren wir Base64 (RFC 4648). Beides geht. Beispiel einer hex-codierten Bestellung:
83a76f72646572496478a84f52442d37343231a56974656d739282a3736b75a7534b552d313031a37174790282a3736b75a7534b552d323434a37174790182a8637573746f6d6572a841766120436865 6eDieser Blob wird zu einer Bestellung mit zwei Positionen (SKU-101 x2 und SKU-244 x1) für die Kundin Ava Chen.
Decodiertes JSON rechts lesen
Das rechte Panel ist nur lesbar und zeigt das decodierte Payload als hübsch formatiertes JSON — gleiche Einrückung wie JSON.stringify(obj, null, 2). Maps werden zu Objekten, Arrays zu Arrays, Ints/Floats zu Zahlen, und binäre Blobs kommen als Uint8Array mit sichtbarer Bytelänge durch. Timestamps aus dem Timestamp-Extension-Type werden als ISO-Strings dargestellt.
Iterieren ohne Klicks
Bearbeite die Eingabe, das JSON aktualisiert sich nach 300ms Pause. Sind die Bytes kein gültiges MessagePack, sagen wir dir, was kaputt war (abgeschnittener Buffer, unerwartetes Type-Byte usw.), statt vorzutäuschen, es hätte geparst. Mit dem Beispiel-msgpack-Button lädst du ein bekanntes Order-Payload zum Vergleich.
Wann du das wirklich brauchst
Eine MessagePack-Nachricht im Log inspizieren
Dein Service schreibt msgpack-codierte Payloads als Hex in ein strukturiertes Log (oft kürzer als Base64). Wenn in Produktion etwas kaputtgeht, kopierst du den Hex aus der Logzeile, fügst ihn hier ein und siehst sofort, was der Producer wirklich geschickt hat — orderId ORD-7421, die richtigen Items, das falsche customer-Feld, was auch immer.
Ein Redis- oder Kafka-Payload debuggen
Viele Backends nutzen auf Hot-Pathen MessagePack statt JSON, weil es 30 bis 50 Prozent kleiner und schneller zu parsen ist. Wenn du einen Wert aus Redis ziehst oder mit kcat -e auf ein Kafka-Topic schaust, kommen die Bytes als Base64 raus. Hier einfügen, um zu prüfen, dass Producer und Consumer sich beim Schema einig sind.
Cross-Language-Round-Trips verifizieren
Du codierst in Python mit msgpack.packb(...) und decodierst in Go mit msgpack.Unmarshal(...). Wenn die Go-Seite einen falschen Typ sieht, dump die Bytes aus Python als Hex und jag sie durch diesen Viewer — dann weißt du, ob der Bug im Encoder oder Decoder steckt, bevor du einen Nachmittag damit verstreitest.
MessagePack aus einer gespeicherten Datei lesen
Du hast eine <code>.msgpack</code>-Datei aus einem Jupyter-Notebook-Export, einem Spielsave oder einem Analytics-Dump. <code>xxd -p</code> drauf, Hex rauskopieren, einfügen, lesen. Schneller als die Bibliothek in einem frischen Python-REPL aufzusetzen, nur um zu sehen, wie ein Datensatz aussieht.
Häufige Fragen
Verlassen meine Daten den Browser?
Nein. Die Decodierung läuft komplett in diesem Tab über die @msgpack/msgpack-Bibliothek, die mit der Seite ausgeliefert wird. Kein Fetch, kein Upload, keine Telemetrie zu den Bytes. Tab schließen, Daten weg. Trotzdem — behandle die URL-Leiste als öffentlichen Raum, leg dort kein Payload ab, und leere die Zwischenablage, wenn dort Geheimnisse waren.
Kann ich Base64 statt Hex einfügen?
Ja. Der Viewer erkennt es automatisch: parst die Eingabe als Hex, nachdem wir Whitespace, Kommas, 0x-Präfixe und Python-style \x-Escapes entfernt haben, behandeln wir sie als Hex; sonst probieren wir Standard-Base64. Beides funktioniert für dasselbe Payload. Logs nutzen meist Hex für kurze Nachrichten und Base64 für größere.
Was passiert mit Binärfeldern, Timestamps und Extension-Types?
Binär (die bin-Familie) wird zu Uint8Array decodiert und im JSON-Baum als { "0": 134, "1": 12, ... } ausgegeben (Standard-JSON kennt keinen nativen Byte-Typ — siehe die Uint8Array-Doku auf MDN). Timestamps aus dem Timestamp-Extension-Type werden zu nativen Date-Objekten, die als ISO-8601-Strings serialisiert werden. Andere Extension-Types kommen als { type, data }-Tupel durch — du siehst den Type-Code und die Rohbytes.
Warum unterscheidet sich die decodierte Ausgabe von dem, was mein Server geschickt hat?
Zwei übliche Verdächtige. Erstens: Deine Eingabe ist abgeschnitten — Log-Truncation kappt oft die letzten Bytes, und msgpack verlässt sich auf Felder mit Längenpräfix, sodass ein fehlender Schwanz einen verwirrenden Fehler oder eine Teil-Ausgabe produziert. Zweitens: Der Producer hat einen eigenen Extension-Type benutzt, den der Empfänger nicht kennt. Vergleich die Bytes mit der offiziellen Spec, wenn die Struktur unmöglich aussieht.
Kann er riesige Payloads decodieren?
Ein paar Megabyte Hex einfügen klappt in modernen Browsern problemlos. Darüber wird der Ace-Editor auf der Eingabeseite zäh — ab dem Punkt liest du die Datei besser direkt mit der Bibliothek in einem Node-Skript. Der Decoder ist nicht der Engpass, der Editor ist es.
Wie produziere ich Hex wie im Beispiel?
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)). Die meisten Sprachen haben einen Einzeiler; das resultierende Hex fügst du direkt hier ein.
Weitere MessagePack-Tools
Anschauen ist eine Seite — diese kümmern sich um den vollen Round-Trip und benachbarte Formate: