Draft Versions
Supported drafts
Section titled “Supported drafts”moqtap supports MoQT drafts 07 through 17. Draft-17 is the latest and most relevant version as of early 2026.
| Draft | Wire version | Notes |
|---|---|---|
| draft-07 | 0xff000007 | Legacy; uses SUBSCRIBE_ANNOUNCES instead of SUBSCRIBE_NAMESPACE |
| draft-08 – draft-13 | 0xff000008 – 0xff00000d | Intermediate drafts with incremental changes |
| draft-14 | 0xff00000e | Widely deployed; separate CLIENT_SETUP / SERVER_SETUP |
| draft-15 | 0xff00000f | Transitional |
| draft-16 | 0xff000010 | Introduces message framing changes |
| draft-17 | 0xff000011 | Latest — unified SETUP message, consolidated response pattern |
Version negotiation
Section titled “Version negotiation”During connection setup:
- moqtap sends a setup message with a list of supported versions
- The relay responds selecting one version
- moqtap loads the version-specific codec for the negotiated version
The negotiated version is displayed prominently in all moqtap tools — the desktop app, the CLI output, and the browser extension’s DevTools panel.
What changes between drafts
Section titled “What changes between drafts”| Aspect | Example changes |
|---|---|
| Setup messages | Separate CLIENT_SETUP / SERVER_SETUP in draft-14 → unified SETUP (0x2F00) in draft-17 |
| Response pattern | Per-message error types (e.g., SUBSCRIBE_ERROR, FETCH_ERROR) in draft-14 → consolidated REQUEST_OK / REQUEST_ERROR in draft-17 |
| Message names | SUBSCRIBE_UPDATE → REQUEST_UPDATE; SUBSCRIBE_ERROR → REQUEST_ERROR |
| Message type IDs | IDs shift between drafts (e.g., CLIENT_SETUP: 0x40 in early drafts, 0x20 in draft-14, part of SETUP 0x2F00 in draft-17) |
| Feature availability | FETCH didn’t exist in early drafts; PUBLISH is new in draft-14; PUBLISH_BLOCKED and NAMESPACE are new in draft-17 |
| Data streams | Object status codes changed (e.g., End of Group: 0x1 in draft-16, 0x3 in draft-17); subgroup stream header uses bitfield flags in draft-17 |
| Namespace discovery | SUBSCRIBE_ANNOUNCES in draft-07 → SUBSCRIBE_NAMESPACE in draft-14+ |
| Error codes | Code values and meanings have shifted |
Multi-draft support across tools
Section titled “Multi-draft support across tools”| Tool | Drafts supported | How |
|---|---|---|
| moqtap CLI | 07–17 | --draft flag; auto-detection in peek mode |
| Browser Extension | 07–17 | Auto-detects draft from CLIENT_SETUP wire bytes |
| Desktop App | 07–17 | Draft selector in connection UI |
| @moqtap/codec (JS) | 07–17 | Subpath imports: @moqtap/codec/draft07 through @moqtap/codec/draft17 |
| moqtap-codec (Rust) | 07–17 | Feature flags: draft07..draft17, all-drafts (default) |
| moqtap-client (Rust) | 07–17 | Feature flags: draft07..draft17 (default: draft14) |
Adding new draft versions
Section titled “Adding new draft versions”moqtap’s codecs use a DraftVersion enum (Rust) or per-draft subpath exports (JS). Adding a new draft version is additive — implement the version-specific parser alongside existing ones. The version abstraction isolates draft-specific logic so existing drafts remain unaffected.