Visualiseur MessagePack
Colle un blob MessagePack en hex ou base64 et lis-le comme du JSON. On détecte l'encodage tout seul, on décode dans ton navigateur, rien n'est envoyé.
Ce que fait le Visualiseur MessagePack
Si tu as déjà fixé un blob hex dans un log Cloudflare Worker en te demandant ce qu'il y a vraiment dedans, c'est la page qu'il te faut. MessagePack est un format de sérialisation binaire qui sort un truc du genre 83a76f72646572496478a84f52442d37343231... — compact sur le réseau, totalement illisible à l'œil. Colle l'hex (ou le base64 — on détecte tout seul) dans le panneau de gauche, et le panneau de droite te montre l'arbre JSON décodé.
Le décodage se fait en local avec la librairie officielle @msgpack/msgpack, la même que la plupart des apps Node et navigateur utilisent. Le format suit la spec publique du format MessagePack, donc n'importe quel payload produit par msgpack-python, msgpack-c, msgpack-java ou toute autre implémentation conforme passe ici. Pas d'upload — les octets ne quittent jamais ton navigateur, ce qui compte quand le blob trimballe un truc comme customer: 'Ava Chen' ou un subscriberId: 'SUB-1001' interne.
Le décodage est debouncé à 300ms, du coup tu peux coller, éditer et recoller sans cliquer sur quoi que ce soit. Pas de bouton Convertir, pas de spinner — tu tapes, tu lis.
Comment lire un payload MessagePack
Trois étapes. Marche pour des chaînes hex copiées d'un log, des champs base64 extraits d'un message Kafka, ou des octets bruts collés depuis un debugger.
Colle de l'hex ou du base64 dans le panneau de gauche
Lâche le MessagePack encodé dans l'éditeur de gauche. On détecte tout seul : si ça parse proprement en hex (après avoir viré les espaces, virgules, préfixes 0x et échappements \x), on traite comme hex ; sinon on tente base64 (RFC 4648). Les deux marchent. Exemple d'une commande encodée en hex :
83a76f72646572496478a84f52442d37343231a56974656d739282a3736b75a7534b552d313031a37174790282a3736b75a7534b552d323434a37174790182a8637573746f6d6572a841766120436865 6eCe blob se décode en une commande avec deux lignes (SKU-101 x2 et SKU-244 x1) pour le client Ava Chen.
Lis le JSON décodé à droite
Le panneau de droite est en lecture seule et affiche le payload décodé en JSON pretty-printé — même indentation que JSON.stringify(obj, null, 2). Les maps deviennent des objets, les arrays des arrays, les ints/floats des nombres, et les blobs binaires arrivent en Uint8Array avec leur longueur en octets visible. Les timestamps du type d'extension timestamp s'affichent en chaînes ISO.
Itère sans cliquer
Édite l'entrée et le JSON se met à jour après une pause de 300ms. Si les octets ne sont pas du MessagePack valide on te dit ce qui a cassé (buffer tronqué, octet de type inattendu, etc.) au lieu de faire semblant que ça a parsé. Utilise le bouton Msgpack d'exemple pour charger un payload Order connu et comparer.
Quand tu vas vraiment t'en servir
Inspecter un message MessagePack dans un log
Ton service écrit des payloads encodés en msgpack dans un log structuré, en hex (souvent plus court que le base64). Quand quelque chose pète en prod, tu copies l'hex depuis la ligne de log, tu colles ici, et tu vois illico ce que le producteur a envoyé en vrai — orderId ORD-7421, les bons items, le mauvais champ customer, peu importe.
Déboguer un payload Redis ou Kafka
Beaucoup de backends utilisent MessagePack au lieu de JSON sur les chemins chauds, parce que c'est 30 à 50 % plus petit et plus rapide à parser. Quand tu tires une valeur de Redis ou que tu mates un topic Kafka avec kcat -e, les octets sortent en base64. Colle-les ici pour confirmer que producteur et consommateur sont d'accord sur le schéma.
Vérifier les round-trips entre langages
Tu encodes en Python avec msgpack.packb(...) et décodes en Go avec msgpack.Unmarshal(...). Quand le côté Go voit un mauvais type, dump les octets de Python en hex et passe-les dans ce visualiseur — ça te dit si le bug est dans l'encodeur ou le décodeur avant de passer une après-midi à débattre.
Lire du MessagePack depuis un fichier sauvegardé
Tu as un fichier <code>.msgpack</code> sorti d'un export de notebook Jupyter, d'une sauvegarde de jeu ou d'un dump analytics. Lance <code>xxd -p</code> dessus pour récupérer l'hex, colle, lis. Plus rapide que de monter la librairie dans un REPL Python tout neuf juste pour voir à quoi ressemble un enregistrement.
Questions courantes
Mes données quittent-elles le navigateur ?
Non. Le décodage tourne entièrement dans cet onglet via la librairie @msgpack/msgpack embarquée dans la page. Pas de fetch, pas d'upload, pas de télémétrie sur les octets. Tu fermes l'onglet, les données disparaissent. Cela dit — traite la barre d'URL comme un espace public, n'y mets pas de payload, et vide ton presse-papiers s'il avait des secrets.
Je peux coller du base64 au lieu de l'hex ?
Oui. Le visualiseur détecte tout seul : si l'entrée parse en hex après qu'on a viré les espaces, virgules, préfixes 0x et échappements \x à la Python, on traite en hex ; sinon on tente le base64 standard. L'un comme l'autre marche pour le même payload. La plupart des logs utilisent hex pour les messages courts et base64 pour les plus gros.
Qu'est-ce qui se passe avec les champs binaires, les timestamps et les types d'extension ?
Le binaire (la famille bin) se décode en Uint8Array et s'affiche comme { "0": 134, "1": 12, ... } dans l'arbre JSON (puisque le JSON standard n'a pas de type octets natif — voir la doc Uint8Array sur MDN). Les timestamps du type d'extension timestamp deviennent des objets Date natifs, qui se sérialisent en chaînes ISO 8601. Les autres types d'extension arrivent en tuples { type, data } — tu verras le code de type et les octets bruts.
Pourquoi la sortie décodée diffère de ce que mon serveur a envoyé ?
Deux suspects habituels. Un : ton entrée est tronquée — la troncature de log coupe souvent les derniers octets et msgpack repose sur des champs préfixés par leur longueur, donc une queue manquante donne une erreur confuse ou une sortie partielle. Deux : le producteur a utilisé un type d'extension custom et le récepteur ne le connaît pas. Compare les octets avec la spec officielle si la structure semble impossible.
Ça décode des payloads énormes ?
Quelques mégaoctets d'hex se collent sans souci dans les navigateurs modernes. Au-delà, l'éditeur Ace côté entrée commence à ramer — à ce stade, tu fais mieux de lire le fichier directement avec la librairie dans un script Node. Le décodeur n'est pas le goulot ; c'est l'éditeur.
Comment je produis de l'hex comme dans l'exemple ?
En Python : import msgpack; msgpack.packb(obj).hex(). En JS : Array.from(encode(obj)).map(b => b.toString(16).padStart(2, '0')).join(''). En Go : fmt.Sprintf("%x", msgpack.Marshal(obj)). La plupart des langages ont un one-liner ; l'hex obtenu se colle directement ici.
Autres outils MessagePack
Visualiser n'est qu'un usage — ceux-ci couvrent l'aller-retour complet et les formats voisins :