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 21. The current draft, draft-21, 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-21 19 6 25 234
draft-20 19 6 25 234
draft-19 18 6 24 184
draft-18 19 5 24 164
draft-17 18 5 23 140
draft-16 24 3 27 139
draft-15 23 3 26 130
draft-14 30 3 33 169
draft-13 30 3 33 160
draft-12 29 3 32 132
draft-11 26 3 29 109
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.

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

  • 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