Visualizador MessagePack
Cole um blob MessagePack em hex ou base64 e leia como JSON. Detectamos a codificação sozinhos, decodificamos no seu navegador, sem upload.
O que o Visualizador MessagePack faz
Se você já encarou um blob hex em um log do Cloudflare Worker se perguntando o que tem ali dentro de fato, esta é a página pra isso. MessagePack é um formato de serialização binária que produz algo como 83a76f72646572496478a84f52442d37343231... — compacto na rede, totalmente ilegível a olho nu. Cole o hex (ou base64 — detectamos automaticamente) no painel da esquerda, e o painel da direita mostra a árvore JSON decodificada.
A decodificação acontece localmente com a biblioteca oficial @msgpack/msgpack, a mesma que a maioria dos apps Node e de navegador usa. O formato segue a spec pública do formato MessagePack, então qualquer payload produzido por msgpack-python, msgpack-c, msgpack-java ou outra implementação que respeite a spec funciona aqui. Não tem upload — os bytes nunca saem do seu navegador, o que importa quando o blob carrega algo como customer: 'Ava Chen' ou um subscriberId: 'SUB-1001' interno.
A decodificação tem um debounce de 300ms, então dá pra colar, editar e colar de novo sem clicar em nada. Sem botão Converter, sem spinner — você digita e lê.
Como ver um payload MessagePack
Três passos. Vale pra strings hex copiadas de um log, campos base64 tirados de uma mensagem Kafka, ou bytes brutos colados de um debugger.
Cole hex ou base64 no painel da esquerda
Largue o MessagePack codificado no editor da esquerda. Detectamos sozinhos: se parsear limpinho como hex (depois de tirar espaços, vírgulas, prefixos 0x e escapes \x), tratamos como hex; senão, tentamos base64 (RFC 4648). Qualquer um dos dois serve. Exemplo de um pedido em hex:
83a76f72646572496478a84f52442d37343231a56974656d739282a3736b75a7534b552d313031a37174790282a3736b75a7534b552d323434a37174790182a8637573746f6d6572a841766120436865 6eEsse blob decodifica num pedido com duas linhas (SKU-101 x2 e SKU-244 x1) para o cliente Ava Chen.
Leia o JSON decodificado à direita
O painel da direita é só leitura e mostra o payload decodificado como JSON formatado — mesma indentação que JSON.stringify(obj, null, 2). Maps viram objetos, arrays viram arrays, ints/floats viram números e blobs binários chegam como Uint8Array com o tamanho em bytes visível. Timestamps do tipo de extensão timestamp aparecem como strings ISO.
Itere sem clicar em nada
Edite a entrada e o JSON atualiza depois de uma pausa de 300ms. Se os bytes não forem MessagePack válido, dizemos o que quebrou (buffer truncado, byte de tipo inesperado, etc.) em vez de fingir que parseou. Use o botão Msgpack de exemplo pra carregar um payload Order conhecido pra comparar.
Quando você vai realmente usar isso
Inspecionar uma mensagem MessagePack num log
Seu serviço escreve payloads codificados com msgpack num log estruturado em hex (em muitos casos é mais curto que base64). Quando algo quebra em produção, você copia o hex da linha do log, cola aqui e vê na hora o que o produtor mandou de fato — orderId ORD-7421, os items certos, o campo customer errado, o que for.
Debugar um payload do Redis ou Kafka
Muitos backends usam MessagePack no lugar de JSON em hot paths porque é 30 a 50% menor e mais rápido pra parsear. Quando você puxa um valor do Redis ou olha um tópico do Kafka com kcat -e, os bytes saem como base64. Cole aqui pra confirmar que produtor e consumidor concordam no schema.
Verificar round-trips entre linguagens
Você codifica em Python com msgpack.packb(...) e decodifica em Go com msgpack.Unmarshal(...). Quando o lado Go vê um tipo errado, despeje os bytes do Python como hex e passe por este visualizador — isso te diz se o bug está no encoder ou no decoder antes de gastar uma tarde discutindo.
Ler MessagePack de um arquivo salvo
Você tem um arquivo <code>.msgpack</code> de um export de Jupyter notebook, um save de jogo ou um dump de analytics. Roda <code>xxd -p</code> nele pra pegar o hex, cola, lê. Mais rápido que montar a biblioteca num REPL Python novinho só pra ver como um registro é.
Perguntas comuns
Meus dados saem do navegador?
Não. A decodificação roda inteira nesta aba usando a biblioteca @msgpack/msgpack embutida na página. Sem fetch, sem upload, sem telemetria nos bytes. Fechou a aba, foi-se o dado. Dito isso — trate a barra de URL como um espaço público, não jogue payload lá, e limpe a área de transferência se ela tinha segredos.
Posso colar base64 em vez de hex?
Pode. O visualizador detecta sozinho: se a entrada parseia como hex depois que tiramos espaços, vírgulas, prefixos 0x e escapes \x estilo Python, tratamos como hex; senão, tentamos base64 padrão. Os dois funcionam pro mesmo payload. A maioria dos logs usa hex pra mensagens curtas e base64 pras maiores.
O que acontece com campos binários, timestamps e tipos de extensão?
Binário (a família bin) é decodificado em Uint8Array e impresso como { "0": 134, "1": 12, ... } na árvore JSON (já que JSON padrão não tem tipo de bytes nativo — veja a doc do Uint8Array no MDN). Timestamps do tipo de extensão timestamp viram objetos Date nativos, que se serializam como strings ISO 8601. Outros tipos de extensão chegam como tuplas { type, data } — você vê o código do tipo e os bytes brutos.
Por que a saída decodificada é diferente do que meu servidor mandou?
Dois suspeitos de sempre. Um: sua entrada está truncada — a truncagem de log costuma cortar os últimos bytes e msgpack depende de campos com prefixo de comprimento, então uma cauda faltando produz erro confuso ou saída parcial. Dois: o produtor usou um tipo de extensão custom e o receptor não conhece. Compare os bytes com a spec oficial se a estrutura parecer impossível.
Decodifica payloads enormes?
Alguns megabytes de hex colam tranquilo em navegadores modernos. Acima disso o editor Ace no lado da entrada começa a ficar lento — a essa altura é melhor ler o arquivo direto com a biblioteca em um script Node. O gargalo não é o decodificador; é o editor.
Como produzo hex como o do exemplo?
Em Python: import msgpack; msgpack.packb(obj).hex(). Em JS: Array.from(encode(obj)).map(b => b.toString(16).padStart(2, '0')).join(''). Em Go: fmt.Sprintf("%x", msgpack.Marshal(obj)). Quase toda linguagem tem um one-liner; o hex resultante cola direto aqui.
Outras ferramentas MessagePack
Visualizar é uma face — estas cuidam do round-trip completo e formatos próximos: