Skip to content

Commit 05d1dec

Browse files
committed
Update MoQ draft WebTransport docs
1 parent c6d3fe0 commit 05d1dec

2 files changed

Lines changed: 33 additions & 9 deletions

File tree

docs/publisher-api.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -156,8 +156,13 @@ By default, the API applies transport-appropriate ALPN:
156156

157157
- Raw QUIC + draft-14: `moq-00`
158158
- Raw QUIC + draft-16: `moqt-16`
159+
- Raw QUIC + draft-18: `moqt-18`
159160
- WebTransport: `h3`
160161

162+
For WebTransport, the API sends the MoQ application protocol offer separately
163+
from QUIC ALPN: draft-16 offers `moqt-16`, draft-18 offers `moqt-18`, and
164+
draft-14 keeps the legacy no-subprotocol behavior.
165+
161166
If your application already set endpoint ALPN and wants to keep it:
162167

163168
```cpp

docs/webtransport-compliance.md

Lines changed: 28 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ It is intentionally limited to the draft variants we support today:
55

66
- MoQ Transport draft 14
77
- MoQ Transport draft 16
8+
- MoQ Transport draft 18
89
- WebTransport over HTTP/3 draft 14
910

1011
## Normative Model
@@ -43,19 +44,33 @@ In this codebase, picoquic's `picowt_prepare_client_cnx()` already configures th
4344

4445
### 3. WT protocol negotiation
4546

46-
MoQ-over-WebTransport draft selection is not QUIC ALPN.
47+
MoQ-over-WebTransport draft selection is not QUIC ALPN. QUIC ALPN is
48+
`h3`; the MoQ application protocol identifier is advertised on the
49+
WebTransport CONNECT exchange and the MoQ wire version is then confirmed by
50+
the MoQ setup flow.
4751

4852
It is carried in:
4953

5054
- `WT-Available-Protocols`
5155
- `WT-Protocol`
5256

53-
These are Structured Fields strings on the CONNECT exchange.
57+
These are Structured Fields strings on the CONNECT exchange. The
58+
WebTransport draft allows a server to omit `WT-Protocol`, but if it sends one
59+
it must choose a value from the client's offer. MoQ Transport draft-18 still
60+
expects clients to include MOQT protocol identifiers in `WT-Available-Protocols`.
5461

5562
Current offers in this repo:
5663

57-
- draft 14: offer no WebTransport subprotocol
64+
- draft 14: offer no WebTransport subprotocol for legacy compatibility
5865
- draft 16: offer `"moqt-16"` only
66+
- draft 18: offer `"moqt-18"` only
67+
68+
Red5's current picoquic/h3zero server path no longer exposes
69+
`WT-Available-Protocols` to the application on CONNECT accept. Red5 therefore
70+
accepts the WebTransport session without returning draft-specific
71+
`WT-Protocol`, and draft selection proceeds through MoQ setup. Treat this as
72+
an interop compatibility mode, not proof that CONNECT-level subprotocol
73+
selection works.
5974

6075
### 4. MoQ SETUP parameters over WebTransport
6176

@@ -117,19 +132,21 @@ Areas that should be treated as suspect until proven:
117132

118133
Before changing wire behavior, verify each of these:
119134

120-
1. CONNECT succeeded and the WebTransport protocol negotiation matches the intended draft:
121-
draft-14 offers no `WT-Protocol`, while draft-16 offers `moqt-16`.
135+
1. CONNECT succeeded and the WebTransport protocol offer matches the intended draft:
136+
draft-14 offers no WebTransport subprotocol, draft-16 offers `moqt-16`,
137+
and draft-18 offers `moqt-18`. If the relay omits `WT-Protocol`, verify
138+
the negotiated MoQ setup version before treating the session as draft-specific.
122139
2. The first client MoQ bytes are sent only on a WT application stream, not the CONNECT stream.
123140
3. The WT application stream gets exactly one WT preamble.
124141
4. Incoming CONNECT-stream bytes are logged as WT control/capsule traffic, not parsed as MoQ.
125142
5. Incoming application-stream bytes are delivered without the WT preamble before MoQ parsing.
126-
6. Draft-14 and draft-16 are tested separately.
143+
6. Draft-14, draft-16, and draft-18 are tested separately.
127144

128145
## Current risk focus
129146

130147
The current WebTransport path is interoperating with the tested moqx and Red5
131-
draft-16 relays. Remaining risk is now concentrated in broader coverage rather
132-
than initial session establishment:
148+
draft-16/draft-18 relay paths. Remaining risk is now concentrated in broader
149+
coverage rather than initial session establishment:
133150

134151
- higher object volume and backpressure behavior
135152
- live subscriber timing across multiple tracks
@@ -138,7 +155,7 @@ than initial session establishment:
138155

139156
## Current interoperability state
140157

141-
Observed behavior as of April 26, 2026:
158+
Observed behavior as of May 16, 2026:
142159

143160
- `<moqx-la-relay-host>:4433/moq-relay`
144161
- draft-16 CONNECT succeeds with verified TLS
@@ -152,6 +169,8 @@ Observed behavior as of April 26, 2026:
152169
- draft-16 CONNECT succeeds with verified TLS
153170
- `PUBLISH_NAMESPACE_OK` arrives on the WT control stream as expected
154171
- a live `SUBSCRIBE` for `catalog` was observed and served successfully
172+
- draft-14 and draft-18 psychedelic publisher flows have both connected and
173+
published against the Red5 relay during local interop checks
155174
- `moq-relay.red5.net:4433/moq-relay`
156175
- WebTransport CONNECT is rejected with HTTP `404`
157176
- use `/moq` for the Red5 relay on port 4433

0 commit comments

Comments
 (0)