Skip to content

MessagePack

MessagePack is an industry spec, not an RFC. The living document is spec.md. Revisions are additive.

Versions

Label in this corpus What landed Parser-visible difference
2008-raw Original type chart One raw family for text and bytes (fixraw / raw 16 / raw 32).
2013-str-bin August 2013 str vs bin, plus ext. This is what current libraries speak.
2017-timestamp August 2017 Extension type −1 (0xff): timestamp 32 / 64 / 96.

There is no official “MessagePack 2.0” number (see msgpack/msgpack#195).

What the cases cover

  • fixint, nil, bool, fixarray, fixmap, uint/int, float64
  • Legacy fixraw / modern fixstr (a161"a")
  • bin 8 (c4…) as bytes, not text
  • fixext 1 and timestamp 32 / 64 (accept-only: the host type varies)
  • Rejects: truncated heads, reserved 0xc1, short timestamp payload

Catalog: compliance/data/msgpack/. Inputs are hex.

Python adapters

msgpack (use_bin_type=True on encode) and msgspec.msgpack.

Both current libraries understand 2013+ types, so they pass the 2008 raw cases that overlap the str family. A decoder that still treated raw as opaque bytes only would fail the decoded: "a" cases.

Official suite

kawanet/msgpack-test-suite is MIT and is vendored (mps-* ids). Original extras cover the pre-2013 raw chart. See legal provenance.