Visor de MessagePack
Pega un blob de MessagePack en hex o base64 y léelo como JSON. Detecta el formato automáticamente y lo decodifica en tu navegador, sin subidas.
Qué hace el Visor de MessagePack
Si alguna vez te has quedado mirando un blob hex en un log de Cloudflare Worker preguntándote qué hay realmente ahí dentro, esta es la página que buscabas. MessagePack es un formato de serialización binaria que produce algo como 83a76f72646572496478a84f52442d37343231... — compacto en la red, totalmente ilegible a simple vista. Pega el hex (o base64 — lo detectamos solos) en el panel izquierdo y el panel derecho te muestra el árbol JSON decodificado.
La decodificación ocurre localmente con la librería oficial @msgpack/msgpack, la misma que usan la mayoría de apps Node y de navegador. El formato sigue la especificación pública del formato MessagePack, así que cualquier payload generado por msgpack-python, msgpack-c, msgpack-java o cualquier otra implementación que cumpla el spec funciona aquí. No hay paso de subida — los bytes nunca salen de tu navegador, lo cual importa cuando el blob lleva algo como customer: 'Ava Chen' o un subscriberId: 'SUB-1001' interno.
La decodificación va con un debounce de 300ms, así que puedes pegar, editar y volver a pegar sin pulsar nada. Sin botón Convertir, sin spinner — escribes y lees.
Cómo ver un payload MessagePack
Tres pasos. Vale para cadenas hex copiadas de un log, campos base64 sacados de un mensaje Kafka, o bytes en bruto pegados desde un debugger.
Pega hex o base64 en el panel izquierdo
Suelta el MessagePack codificado en el editor de la izquierda. Lo detectamos solos: si parsea limpio como hex (tras quitar espacios, comas, prefijos 0x y escapes \x), lo tratamos como hex; si no, probamos base64 (RFC 4648). Cualquiera de los dos vale. Ejemplo de un pedido codificado en hex:
83a76f72646572496478a84f52442d37343231a56974656d739282a3736b75a7534b552d313031a37174790282a3736b75a7534b552d323434a37174790182a8637573746f6d6572a841766120436865 6eEse blob se decodifica como un pedido con dos líneas (SKU-101 x2 y SKU-244 x1) para el cliente Ava Chen.
Lee el JSON decodificado a la derecha
El panel derecho es de solo lectura y muestra el payload decodificado como JSON formateado — la misma indentación que JSON.stringify(obj, null, 2). Los maps salen como objetos, los arrays como arrays, los enteros y floats como números, y los blobs binarios llegan como un Uint8Array con su longitud en bytes visible. Los timestamps del tipo de extensión timestamp se renderizan como cadenas ISO.
Itera sin pulsar nada
Edita la entrada y el JSON se actualiza tras una pausa de 300ms. Si los bytes no son MessagePack válido te decimos qué falló (buffer truncado, byte de tipo inesperado, etc.) en vez de fingir que parseó. Usa el botón Msgpack de ejemplo para cargar un payload Order conocido y comparar.
Cuándo lo vas a usar de verdad
Inspeccionar un mensaje MessagePack en un log
Tu servicio escribe payloads codificados con msgpack en un log estructurado como hex (en muchos casos es más corto que base64). Cuando algo se rompe en producción, copias el hex de la línea de log, lo pegas aquí y ves al instante lo que el productor envió de verdad — orderId ORD-7421, los items correctos, el campo customer equivocado, lo que sea.
Depurar un payload de Redis o Kafka
Muchos backends usan MessagePack en lugar de JSON en rutas calientes porque es entre un 30 y un 50 por ciento más pequeño y más rápido de parsear. Cuando sacas un valor de Redis o miras un topic de Kafka con kcat -e, los bytes salen como base64. Pégalos aquí para confirmar que productor y consumidor están de acuerdo en el esquema.
Verificar round-trips entre lenguajes
Codificas en Python con msgpack.packb(...) y decodificas en Go con msgpack.Unmarshal(...). Cuando el lado Go ve un tipo equivocado, vuelca los bytes de Python en hex y pásalos por este visor — eso te dice si el bug está en el codificador o el decodificador antes de pasar la tarde discutiendo.
Leer MessagePack desde un fichero guardado
Tienes un fichero <code>.msgpack</code> de un export de Jupyter notebook, una partida guardada o un volcado analítico. Pásale <code>xxd -p</code> para sacar el hex, pega y lee. Más rápido que montar la librería en un Python REPL fresco solo para ver qué pinta tiene un registro.
Preguntas habituales
¿Mis datos salen del navegador?
No. La decodificación va entera en esta pestaña con la librería @msgpack/msgpack incluida en la página. No hay fetch, no hay subida, no hay telemetría sobre los bytes. Cierra la pestaña y los datos desaparecen. Dicho esto — trata la barra de URL como un sitio público, no metas un payload ahí, y limpia el portapapeles si llevaba secretos.
¿Puedo pegar base64 en lugar de hex?
Sí. El visor lo detecta solo: si la entrada parsea como hex tras quitar espacios, comas, prefijos 0x y escapes estilo Python \x, la tratamos como hex; si no, probamos base64 estándar. Cualquiera vale para el mismo payload. La mayoría de logs usan hex para mensajes cortos y base64 para los más largos.
¿Qué pasa con los campos binarios, timestamps y tipos de extensión?
Los binarios (la familia bin) se decodifican como Uint8Array y se imprimen como { "0": 134, "1": 12, ... } en el árbol JSON (porque JSON estándar no tiene tipo de bytes nativo — mira los docs de Uint8Array en MDN). Los timestamps del tipo de extensión timestamp se decodifican como objetos Date nativos, que se serializan como cadenas ISO 8601. Los demás tipos de extensión llegan como tuplas { type, data } — verás el código de tipo y los bytes en bruto.
¿Por qué la salida decodificada no coincide con lo que envió mi servidor?
Dos sospechosos habituales. Uno: tu entrada está truncada — el truncado de logs suele cortar los últimos bytes y msgpack se apoya en campos con prefijo de longitud, así que una cola que falta produce un error confuso o una salida parcial. Dos: el productor usó un tipo de extensión propio y el receptor no lo conoce. Compara los bytes con la especificación oficial si la estructura parece imposible.
¿Puede decodificar payloads enormes?
Unos pocos megas de hex se pegan bien en navegadores modernos. Más allá de eso el editor Ace en el lado de la entrada empieza a ir lento — en ese punto te conviene leer el fichero directamente con la librería desde un script Node. El cuello de botella no es el decodificador; es el editor.
¿Cómo produzco hex como el del ejemplo?
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)). Casi todos los lenguajes tienen una línea; el hex resultante se pega aquí directamente.
Otras herramientas MessagePack
Verlo es solo una parte — estas cubren el round-trip completo y formatos cercanos: