Skip to content

MoQT Control Message Types

Every MoQT control message begins with a type code, and the set of codes has moved more than any other part of the protocol. Messages have been added, merged, renumbered and retired across the draft range, so a type code on its own does not identify a message — you need the draft too.

moqtap covers drafts 07 through 20. The current draft, draft-20, defines 19 control message types and reserves 6 more code points for types that earlier drafts used.

These pages carry the type codes. For the field layout of a particular message, follow its section link into the draft text; for how the control stream works, see control messages.

Draft Assigned Reserved Rows Test vectors
draft-20 19 6 25 228
draft-19 18 6 24 178
draft-18 19 5 24 163
draft-17 18 5 23 139
draft-16 24 3 27 138
draft-15 23 3 26 129
draft-14 30 3 33 168
draft-13 30 3 33 159
draft-12 29 3 32 131
draft-11 26 3 29 108
draft-10 26 0 26 108
draft-09 26 0 26 108
draft-08 26 0 26 105
draft-07 25 0 25 96

A reserved row is a code point the draft explicitly refuses to reuse, usually because an earlier draft assigned it to something else. The test-vector column counts the encode/decode vectors moqtap publishes for that draft.

Newest first, computed by diffing each draft's Control Messages table against the previous one.

  • Added: PUBLISH_STATE_NOTIFY (0x22).
  • Renamed or retired: 0x1E PUBLISH_OK → RESERVED and 0xF PUBLISH_BLOCKED → PUBLISH_SKIPPED.
  • Added: SUBSCRIBE_TRACKS (0x51).
  • Renumbered: SUBSCRIBE_NAMESPACE 0x11 → 0x50.
  • Added: SETUP (0x2F00) and PUBLISH_BLOCKED (0xF).
  • Renamed or retired: 0x20 CLIENT_SETUP → RESERVED and 0x21 SERVER_SETUP → RESERVED.
  • Removed: MAX_REQUEST_ID (0x15), REQUESTS_BLOCKED (0x1A), UNSUBSCRIBE (0xA), FETCH_CANCEL (0x17), PUBLISH_NAMESPACE_DONE (0x9) and PUBLISH_NAMESPACE_CANCEL (0xC).
  • Added: NAMESPACE (0x8) and NAMESPACE_DONE (0xE).
  • Renamed or retired: 0x2 SUBSCRIBE_UPDATE → REQUEST_UPDATE.
  • Removed: UNSUBSCRIBE_NAMESPACE (0x14).
  • Renamed or retired: 0x7 PUBLISH_NAMESPACE_OK → REQUEST_OK and 0x5 SUBSCRIBE_ERROR → REQUEST_ERROR.
  • Removed: PUBLISH_ERROR (0x1F), FETCH_ERROR (0x19), TRACK_STATUS_OK (0xE), TRACK_STATUS_ERROR (0xF), PUBLISH_NAMESPACE_ERROR (0x8), SUBSCRIBE_NAMESPACE_OK (0x12) and SUBSCRIBE_NAMESPACE_ERROR (0x13).
  • Renamed or retired: 0xB SUBSCRIBE_DONE → PUBLISH_DONE, 0x6 ANNOUNCE → PUBLISH_NAMESPACE, 0x7 ANNOUNCE_OK → PUBLISH_NAMESPACE_OK, 0x8 ANNOUNCE_ERROR → PUBLISH_NAMESPACE_ERROR, 0x9 UNANNOUNCE → PUBLISH_NAMESPACE_DONE and 0xC ANNOUNCE_CANCEL → PUBLISH_NAMESPACE_CANCEL.
  • Added: TRACK_STATUS_ERROR (0xF).
  • Renamed or retired: 0xD TRACK_STATUS_REQUEST → TRACK_STATUS, 0xE TRACK_STATUS → TRACK_STATUS_OK, 0x11 SUBSCRIBE_ANNOUNCES → SUBSCRIBE_NAMESPACE, 0x12 SUBSCRIBE_ANNOUNCES_OK → SUBSCRIBE_NAMESPACE_OK, 0x13 SUBSCRIBE_ANNOUNCES_ERROR → SUBSCRIBE_NAMESPACE_ERROR and 0x14 UNSUBSCRIBE_ANNOUNCES → UNSUBSCRIBE_NAMESPACE.
  • Added: PUBLISH (0x1D), PUBLISH_OK (0x1E) and PUBLISH_ERROR (0x1F).
  • Added: RESERVED (0x01).
  • Renumbered: CLIENT_SETUP 0x40 → 0x20 and SERVER_SETUP 0x41 → 0x21.
  • Renamed or retired: 0x40 CLIENT_SETUP → RESERVED, 0x41 SERVER_SETUP → RESERVED, 0x15 MAX_SUBSCRIBE_ID → MAX_REQUEST_ID and 0x1A SUBSCRIBES_BLOCKED → REQUESTS_BLOCKED.

No control message type was added, removed, renumbered or renamed.

No control message type was added, removed, renumbered or renamed.

  • Added: SUBSCRIBES_BLOCKED (0x1A).

Each draft's rows are parsed from the Control Messages table in the frozen xml2rfc rendering this site keeps at site/spec-sources/draft-NN.html. Those files hash to the same source_sha256 the moqtap codec's committed registry extraction records, so the message types and the error codes on this site come from provably the same documents.

Every draft is then cross-checked against the moqtap test-vector corpustest-vectors/transport/draftNN/codec/messages/*.json — which all three moqtap implementations validate against. The corpus never contributes a row; where the two sources disagree, the per-draft page says so rather than reconciling them silently.

Error codes by draft · The MoQT specification, section by section · How control messages work