Summary of active discussions in the MOQ ecosystem during June 2026.
Activity (June 30 → July 1) — Two Datatracker events headline the day: [[moq-lite|draft-lcurley-moq-lite]] bumps to -05 (catching the spec up to the wire moq has run since May) and a brand-new [[moq-overview|draft-westerlund-moq-overview-00]] appears — a suite-level overview co-authored by WG co-chair Magnus Westerlund + Nokia’s Zaheduzzaman Sarker. moq-dev ships the matching moq-lite-05 wire (SETUP+PATH #1954, TRACK_INFO/SUBSCRIBE_END/timestamps #1963) and drops per-frame compression (#1962), a pivot in the compression debate, alongside a moq-mux audio-codec expansion (FLAC/MP3/Opus-TS). Will Law opens a coordinated media-format editorial push across MSF (dual Track+Object initData #186, track-cloning #187) and CMSF (catalog-URL #26 + fragment-identifier Issue #25), and Tobbe’s long-open MSF example-fix PR #177 finally merges. moq-transport’s June-29 sharmafb editorial set merges (June 30 morning) as the read-through keeps generating issues; on the list Martin Duke floats “Proposed Virtual Interim dates”. The interop runner cuts twice on June 30 and pass climbs to a post-expansion high (85/266, ~32.0%, at-target 78). No new WG revision (transport-18 Day +50); Slack silent (newest June 22, ~9 days); no new MoQ Monthly (#2, May 31); no open wiki issues.
Datatracker — moq-lite -05 lands + a new MoQ suite-overview draft
Two individual-draft events June 30:
- [[moq-lite|
draft-lcurley-moq-lite-05]] — Luke Curley bumps -04 → -05 (Informational, expires 2027-01-01). This is the-05revision the wiki has flagged as “presumably forthcoming” since May 5: the published spec now catches up to the Lite05 / DRAFT_05 wire version moq-dev has carried in code since PR #1374 (May 4). The same 48 hours, moq hardens the matching wire (see Implementations), so draft and reference impl are re-converged. - [[moq-overview|
draft-westerlund-moq-overview-00]] “Media over QUIC Overview” (BRAND NEW) — Magnus Westerlund (Ericsson), a WG co-chair, + Zaheduzzaman Sarker (Nokia). An Informational top-down survey of the whole MoQ suite (architecture, data model, transport, streaming formats, security). Co-chair authorship makes it read as an orienting/roadmap document rather than a competing design; it adds no wire mechanism. First-look, undiscussed on the list beyond the announcement. See moq-overview.
No WG-document revision bumped (transport still -18, Day +50; msf-01, cmsf-01, loc-02, secure-objects-00, c4m-01, privacy-pass-auth-02 all unchanged); no transport-19; draft-ietf-moq-dts4moq still 404.
moq-transport — the June-29 editorial set merges; the read-through keeps generating issues
The three OPEN sharmafb (Aman Sharma) editorial-polish PRs from June 29 all MERGED June 30 ~07:00–07:01 UTC: #1791 (fix ALPN examples §3.1.3, +1/−1), #1794 (add SUBSCRIBE_TRACKS to namespace-scoped requests §10.6.1, +3/−3), #1797 (fix incorrect skip-unknown-properties text §15.8, +3/−2). afrind opened one small new OPEN PR — #1799 “Include enumerations in extensible protocol elements” (+1/−1). The draft-18 read-through keeps converting into issues: sharmafb filed #1792 (misleading “shares a common prefix”), #1793 (REDIRECT ambiguity with empty namespace + empty name), #1795 (“Track Aliases: allow re-use or not?”); ianswett filed #1796 (“PUBLISH_OK parameters can have unpredictable results”) + #1798 (“Optimal Routing and Loop Prevention are useful”). The gated Design PRs stay frozen (Range Filters #1765, DTS/SSTS #1638, Fill #1642, fill-fetch #1673, SWITCH_FROM #1674) and the June-27 trio (#1788/#1789/#1790) also stays OPEN — the July-6 gate has not lifted. See moq-transport.
MSF / CMSF — Will Law’s coordinated media-format editorial push; Tobbe’s #177 merges
The London Day-2 MSF/CMSF issue burst (Gwendal’s msf #178–#184) starts converting into concrete PRs, all June 30:
- MSF: Torbjörn Einarsson’s PR #177 MERGED (+24/−24) “Fix version in examples and minor typos in draft-01” — the CUE-validator-surfaced editorial fix OPEN since June 4 lands, normalizing
version: "draft-01"across all 15 catalog examples. Will Law opens PR #186 “Add new track and Object properties to carry initialization data” (+50/−20, OPEN) — the dual Track+Object initData design he previewed for London (stable Track property for steady-state init + Object property for synchronized mid-track changes), the answer to the Issue #153/#178 initData problem and the machinery LOCMAF + the LOCMAF→CMSF-packaging plan rely on — plus PR #187 “Clarify track cloning and delta update rules” (+28/−14, OPEN). - CMSF: Will Law opens PR #26 “Document URL usage for CMSF catalogs” (+7/−0, OPEN) + companion Issue #25 “Clarify which fragment type identifier to use with CMSF” — picking up the MSF/CMSF URI-fragment question (msf #181). Tobbe’s LOCMAF-as-packaging Issue #24 stays OPEN.
This is a coordinated wilaw push across both media-format specs the same day — the -02 backlog now moving toward text. See moq-msf, moq-cmsf, moq-locmaf.
Mailing list — virtual-interim dates; the overview announcement; a PR1673 reply
Three June-30 list messages (Slack still silent ~9 days; newest is Martin Duke’s June-22 Google-Meet link):
- Martin Duke “Proposed Virtual Interim dates” (June 30, new thread) — Duke floating post-Vienna virtual-interim slots (the WG’s recurring ~monthly cadence between IETF meetings). See interim-meetings.
- Magnus Westerlund “FW: I-D Action: draft-westerlund-moq-overview-00.txt” (June 30) — the announcement of his new overview draft (above).
- Alan Frindell “Re: Review of PR1673” (June 30) — a reply on Cullen Jennings’s June-29 review thread for transport PR #1673 (the fill-fetch-replaces-joining-fetch design), continuing the editor↔reviewer loop on one of the gated Design PRs.
Implementations — moq-dev’s moq-lite-05 wire + compression pivot; moqx; moqtail wire-fix; moxygen retraction
- moq (June 29 late → July 1, ~18 PRs MERGED) — the day’s biggest impl story: a moq-lite-05 wire push (#1954 SETUP+PATH +828/−116, #1963 TRACK_INFO/SUBSCRIBE_END/timestamps +854/−64) matching the newly-published -05; a compression pivot — #1962 “drop per-frame compression, restore Publisher Max Latency” (+149/−614) walks back the per-frame DEFLATE experiment (Issue #1958 flags the
@moq/flatenpm gap; DEFLATE lite-ANNOUNCE #1929 still OPEN); a moq-mux audio-codec expansion (#1969 FLAC, #1965 Opus-over-TS, #1970/#1967 MP3); OS-platform-verifier TLS #1968 (supersedes the June-30 OPEN #1949); a big merge main into dev #1950 (+5379/−2243). Notable OPEN — gateway consolidation: #1975 absorb the rtmp/srt/rtc gateway binaries into moq-cli (+957/−1316) + #1974 fold the internal listener into--server-bind(one authenticated accept path) + #1971 pluggable GroupSource for a deep out-of-RAM replay window (Eli Mallon / iameli). See moq-dev, moq-lite. - moqx — active: MERGED gmarzot’s #461 (clean empty-bind error) + #456 (scripts/onboarding no-sudo), afrind’s #423 (fix stats-collector leak), plus mlog structured logging (#388/#306) + sync-bot mirrors. OPEN: mondain’s #468 (CAT4MOQ issuer utility — ties to C4M/CAT auth), afrind’s #462 (subgroup-reset + object-ack-latency metrics — the moxygen #204 work landing here), qlog #464, PKCS#12 TLS #460. See openmoq.
- moqtail — PR #208 MERGED (+690/−382) “Fix/delta encode key-value params” (closes #207) — a genuine wire bug: KVP parameters were encoded as absolute values instead of the draft-mandated v16 deltas, exactly the cross-version KVP mismatch that shows up as interop failures; + #206 (treat empty extensions as absent). See moqtail.
- moxygen — the upstream tree keeps retracting afrind’s PRs (Meta internal-diff workflow): #204 (stats callbacks), 201 (test fixes), 199 all CLOSED-unmerged; only #202 stays OPEN. The work flows through moqx instead. See moxygen.
- quiche (moqt still June 24), moq-rs, moq-js, imquic, birneee/quiche_moq, Eyevinn (moqlivemock / moqtransport; warp-player dependabot-only), Moqtopus all quiet.
Interop: the runner cuts twice on June 30 and pass climbs to a post-expansion high — the newest June-30 21:32:43 UTC cut is 266/85/147/34 (at-target 78; ~32.0% pass). Versus June 29 (266/76/156/34): pass +9 (76 → 85), fail −9, skip/matrix/at-target flat — the June-29 skip→fail reshuffle recovering as impl mains settle (moqtail’s KVP v16-delta fix #208 is exactly the kind of correctness change that converts failing KVP-mismatch cells). At-target holds at 78. See interop-runner.
Activity (June 29 → June 30) — The draft-19 editorial pass keeps draining — three more moq-transport clarification PRs merge June 29 evening (closing two London-consensus issues + a Cullen datagram/subgroup-priority issue), secure-objects lands its long-pending test-vectors appendix (PR #88, the first secure-objects merge since May 1), and two new entrants appear: Alibaba submits the first MoQ + AI-agent draft ([[moq-live-agent-interaction|draft-liu-moq-live-agent-interaction-00]]) and Martin Duke reactivates the AUTH design team on the list. moq has a heavy moq-mux cleanup day (rendition selection unified, HLS CLI routed through moq-hls), moxygen gains three OPEN afrind relay/test PRs, and the interop runner cuts a fourth day running (266/76/156/34, at-target 78) with a skip→fail reshuffle. No new draft revision (transport-18 Day +49); Slack silent (newest June 22, ~8 days); no new MoQ Monthly (#2, May 31); no open wiki issues.
moq-transport — three more clarification merges land (June 29 evening); sharmafb opens an editorial-polish set
After June 29 morning’s #1760 (Object Status IANA registry), the editorial pass kept converting issues into draft-19 text — three PRs MERGED June 29 19:04–19:07 UTC (after the June-29 update’s check time), each closing a standing issue:
- PR #1777 “Move GROUP_ORDER from PUBLISH_OK to SUBSCRIBE_TRACKS” (Suhas, +12/−5) — closes #1651 (Martin Duke, June 4: “How does GROUP_ORDER interact with PUBLISH?”). Moving
GROUP_ORDERtoSUBSCRIBE_TRACKSis the dependency ianswett’s still-OPEN #1788 (Subscription-Parameters-copied-to-PUBLISH) explicitly assumed would land. - PR #1782 “Update Forward handling for relays” (afrind, +12/−5) — closes #1650 (afrind, June 4: “Forward Handling SHOULD set Forward=1 upstream is too strong”, the London-interim consensus issue the wiki logged June 12 — “agree to remove the SHOULD in favor of giving relays more discretion”). The PR replaces the over-strong normative SHOULD with pure relay discretion + clearer tradeoffs.
- PR #1780 “Clarify forwarding preference order in scheduling” (afrind, +1/−1) — closes #1702 (fluffy / Cullen Jennings, June 14: “Remove priority ambiguity between datagrams and subgroups”). Settles the tiebreak: for two objects on the same request / subscriber priority / publisher priority where one is a single subgroup and the other a single datagram, the datagram wins.
Separately, sharmafb (Aman Sharma) opened a three-PR editorial-polish set (June 29, all OPEN): #1791 “Fix MoQ ALPN examples in section 3.1.3” (+1/−1, final ALPN is moqt, draft ALPNs moqt-N), #1794 “Add SUBSCRIBE_TRACKS to namespace-scoped requests in section 10.6.1” (+3/−3), and #1797 “Fix incorrect text about skipping unknown properties” (+3/−2 — §15.8 wrongly says unknown Properties are skipped “using the length field,” but even-numbered Key-Value-Pair types are varints with no length field). The June-27 trio stays OPEN (ianswett’s #1788/#1790 — #1790 now also fixes the new #1796 — + Suhas’s impersonation #1789), and the gated Design PRs (Range Filters #1765, DTS/SSTS #1638) remain frozen pending July 6. See moq-transport.
secure-objects — the test-vectors appendix finally lands (first merge since the May-1 wave)
PR #88 MERGED June 29 16:07 UTC (Suhas Nandakumar, +326/−0) “Add test vectors appendix” — the first content merge on the moq-wg/secure-objects repo since the May-1 cleanup wave. The page has tracked this PR OPEN since May 30 (it was the “informal-reference fallback” if -01 didn’t land before London); it now lands, adding worked AEAD test vectors so implementations can verify their object encryption/authentication against canonical inputs — a concrete interop-readiness step for the encryption layer. afrind’s standing Issue #72 “Specify how integers are serialized in AAD” (open since March 20 — align the AAD (i) varint notation with vi64, and note Object ID isn’t transmitted) saw fresh June-29 activity, still the open AAD-serialization precision item. No Datatracker -01 yet (secure-objects remains -00). See moq-secure-objects.
New individual I-D — Alibaba’s first MoQ + AI-agent draft
[[moq-live-agent-interaction|draft-liu-moq-live-agent-interaction-00]] “Live Agent Interaction over MoQ” was submitted June 29 by Yanmei Liu (Alibaba Inc.) and Dapeng Liu (Alibaba Cloud) — the first MoQ + AI-agent draft the wiki has tracked, and a second Alibaba MoQ artifact alongside xquic-moq. It is a pure application profile (no transport change): it maps a live conversational AI session onto MOQT’s object hierarchy — conversational turns → Groups, inference steps → Subgroups, token batches → Objects — and defines turn-taking with interruption (barge-in) for voice. Streaming inference outputs (ASR transcripts, LLM tokens, TTS audio) ride MOQT’s pub/sub + prioritized delivery, and because the structure is in MOQT’s native data model, relays route the traffic without payload inspection. Brand new and undiscussed on the list as of this writing — logged as a first-look. See moq-live-agent-interaction.
Mailing list — AUTH design team reactivated; PR1673 review; IETF-126 agenda reply
Three new June-29 list messages (Slack stayed silent ~8 days; newest is still Martin Duke’s June-22 Google-Meet link):
- Martin Duke “AUTH design team” (June 29) — reactivates the authentication design team that first formed June 12 (the coordination venue that produced C4M and that has absorbed the fragmented auth gap across Cullen’s #1662, Suhas’s generic-AUTH-challenges work, and privacy-pass). It is the spec-side counterpart to the security tranche now in flight — Suhas’s impersonation PR #1789 and afrind’s mutual-TLS #1786. (Message body behind the archive auth wall at check time; characterized from the thread subject + WG context.)
- Cullen Jennings “Review of PR1673” (June 29) — a review note on transport PR #1673 (the fill-fetch-replaces-joining-fetch design), Cullen continuing his read-through-and-review cadence.
- Will Law “Re: IETF 126 Agenda requests” (June 29) — a reply on the Vienna agenda-request thread (deadline July 6; sessions July 20/23/24).
The only other recent list item is the routine weekly GitHub digest (June 28). See moq-c4m, interim-meetings.
CMSF / LOCMAF — Tobbe’s plan: a new LOCMAF draft revision first
On the CMSF side, Torbjörn Einarsson added a follow-up comment to cmsf Issue #24 (June 29, the LOCMAF→CMSF packaging-mode issue he opened June 28): “I’ll probably make a new version of draft-einarsson-moq-locmaf as a first step.” So the near-term path is a fresh LOCMAF -01 that consolidates the 0.2 design before folding it into CMSF as the locmaf packaging — staging the retirement of the standalone draft rather than rewriting CMSF directly. See moq-cmsf, moq-locmaf.
Implementations — moq-dev’s moq-mux cleanup; moxygen relay/test PRs; moqx TLS
- moq (June 29, kixelated / codex, ~10 PRs MERGED, net code reduction) — a
moq-muxAPI-cleanup day ahead of a semver bump: #1941 MERGED “moq-mux: API cleanup before the semver bump” (+509/−1063) + #1943 MERGED “unify rendition selection behindselect::Broadcast” (+588/−432, a single rendition/track-selection entry point) + #1944 MERGED drop redundantnon_exhaustive. HLS routing lands: #1939 MERGED “Route HLS CLI import through moq-hls” (+252/−907, the OPEN net-deletion refactor flagged June 29) — the competing #1940 “[codex] add fmp4 track selection for hls” was CLOSED unmerged. Media correctness: #1945 MERGED “moq-hls: preserve discontinuity sequence through fMP4 import” (the follow-on to June-29’s #1933 fMP4 fix). Plus CI #1947 (retire self-hosted A1 runner) + dependabot 1936. New OPEN: #1949 (06-30, defer TLS root resolution forhttp://fingerprint bootstrap) + version-bump #1948; DEFLATE lite-ANNOUNCE #1929 + RAM-cache #1899 stay OPEN. See moq-dev. - moxygen — three more OPEN afrind PRs (June 29): #202 “Reset open subgroups when a subscription is cancelled” (+62/−1, sibling to June-28’s #200), #201 (gtest_discover_tests) + #203 (test fix). Five afrind PRs now OPEN on the upstream tree. See moxygen.
- moqx — only sync-bot #458 MERGED (June 29, +1/−1); gmarzot opens a TLS pair — #460 “tls: PKCS#12 bundle support (in-memory, cloud-vault-friendly)” (+963/−22) + #461 (clean error for empty bind address) — both OPEN. See openmoq.
- quiche (no new moqt commit), moq-rs, moq-js, moqtail, imquic, birneee/quiche_moq, Moqtopus, and Eyevinn (moqlivemock / moqtransport; warp-player saw dependabot-only churn) all quiet June 29–30.
Interop: the runner cuts a fourth day running — a new June-29 01:41:40 UTC cut is 266/76/156/34 (at-target draft-18 78; ~28.6% pass). Versus the June-28 cut (266/79/137/50): matrix flat at 266, pass −3 (79 → 76), fail +19 (137 → 156), skip −16 (50 → 34), at-target flat at 78 — a skip→fail reshuffle (≈16 previously-skipped cross-version pairings were attempted and failed), a test-coverage shift on the behind-target cells rather than a regression of working cells; the structurally important at-target draft-18 count holds at 78. See interop-runner.
Activity (June 28 → June 29) — Two concrete WG events: the draft-19 editorial pass resumes merging — afrind’s #1760 (Object Status IANA registry, the first transport merge since the June-25 batch) lands June 29, closing another of Cullen Jennings’s draft-18 read-through issues (#1727) — and Torbjörn Einarsson opens moq-wg/cmsf Issue #24 (June 28) formalizing the London interim-11 agreement to fold LOCMAF into CMSF as a packaging mode rather than proceed as a standalone draft. The June-27 transport trio (#1788/#1789/#1790) stays OPEN. On implementations, moq merges an fMP4 zero-duration-sample fix (#1933) + a TypeScript-7-RC upgrade (#1938) while the DEFLATE lite-ANNOUNCE compression work re-shuffles (#1928 closed unmerged, but the larger #1929 stays OPEN); the moxygen upstream wakes again with two OPEN afrind relay PRs (#199/#200). The interop runner cuts a third day running (June-28 00:47 UTC, 266/79/137/50, at-target 78) — pass recovers +4 (75 → 79) back to the June-26 level. No new draft revision (transport-18 Day +48); the only new mailing-list item is the routine weekly GitHub digest (June 28); Slack silent (newest June 22, ~7 days); no new MoQ Monthly (#2, May 31); no open wiki issues.
CMSF — Tobbe opens Issue #24: fold LOCMAF into CMSF as a packaging mode
Torbjörn Einarsson opened moq-wg/cmsf Issue #24 “Incorporate LOCMAF as a packaging mode in CMSF” (June 28), turning the London interim-11 (Day-2, June 12) agreement — that LOCMAF should become part of CMSF rather than a standalone draft — into a tracked work item with a concrete proposal. The issue frames LOCMAF (draft-einarsson-moq-locmaf-00, T. Einarsson / H. Björs) as a third packaging alongside the two CMSF already spans, sitting exactly between them:
| Packaging | Wire shape | Receiver |
|---|---|---|
cmaf (CMSF) | full CMAF chunks | pass through to MSE |
locmaf | tagged fields + unmodified samples | reconstruct CMAF chunk (MSE), or extract samples (WebCodecs) |
loc | codec-elementary frames | WebCodecs |
The pitch is that LOCMAF is end-to-end (relays forward the MOQT Object payload unchanged; only the encoder produces LOCMAF and only the receiver expands it) and reconstructs the same CMAF chunk a cmaf track would carry — so it slots into CMSF’s existing catalog/init machinery with steady-state per-object overhead down to a couple of bytes (comparable to LOC, including Common Encryption). This is the first formal step in retiring the standalone individual draft the wiki has tracked since LOCMAF -00 (June 2) — moving it from “competing low-overhead carrier” into a defined mode of a WG document, the outcome wilaw’s June-9 dual-Track+Object init proposal and the June-3 initData-carriage thread were converging toward. See moq-cmsf, moq-locmaf, interim-meetings.
moq-transport — the editorial pass resumes merging: #1760 lands (Object Status IANA registry)
After the June-26/27 no-merge stretch (only OPEN PRs accreting), PR #1760 MERGED June 29 00:37 UTC (afrind, +20/−1) “Make Object Status payload rule extensible via IANA registry” — the first transport merge since the June-25 evening batch. It replaces the blanket “any non-zero Object Status MUST have an empty payload” rule with an Object Status IANA registry carrying a Payload column, deferring the constraint to the registry so future status codes can define payload-bearing statuses. It closes Issue #1727 “Extensibility of object with non zero status code” (fluffy / Cullen Jennings) — another of Cullen’s June-15 draft-18 read-through issues converted to spec text, the same IANA-registry-for-extensibility pattern the WG has applied to extensions/versions (#1761) and the SSTS switching algorithm. The June-27 trio stays OPEN — ianswett’s #1788/#1790 (PUBLISH-parameter copying) + Suhas’s #1789 (impersonation) — and the gated Design PRs (Range Filters #1765, DTS/SSTS #1638) remain frozen pending July 6. The only new list item is the routine weekly GitHub digest (June 28). See moq-transport.
Implementations — moq-dev fMP4/TS7 fixes; moxygen upstream wakes again
- moq (June 28–29, kixelated / codex) — #1933 MERGED (06-29 00:06, +172/−8) “Fix fMP4 zero-duration samples” — treats explicit zero fMP4 sample durations as unknown on decode/import and strips them when republishing passthrough fragments (the day’s most substantive code change); #1938 MERGED (06-28 20:23, +383/−292) “[codex] upgrade TypeScript 7 RC”; #1935 MERGED dependabot bun group. The DEFLATE lite-ANNOUNCE compression work re-shuffles: #1928 CLOSED unmerged (June 28) but the larger companion #1929 stays OPEN (+22128/−5643) — so the compression bet (the code side of Luke’s “MoQ + Compression” list thread) is consolidated onto one PR, not abandoned. Also OPEN: #1939 “[codex] Route HLS CLI import through moq-hls” (+287/−908, a net-deletion refactor) + dependabot 1934. See moq-dev.
- moxygen — the upstream wakes again: #199 “Add getKeepAlive() to MoQExecutor for keeping the backing loop alive” (+13/−0) and #200 “relay: reset open subgroup consumers on SubgroupForwarder detach” (+53/−0), both OPEN (June 28, afrind) — the upstream source of the omoq-sync-bot mirrors on the moqx fork. See moxygen.
- moqx — only a trivial sync: omoq-sync-bot moxygen sync #457 MERGED (June 28, +1/−1); gmarzot’s quickstart/no-sudo #456 stays OPEN. quiche (no new moqt commit since the June-24 WebTransport-only client split), moq-rs, moq-js, moqtail, imquic, Eyevinn, birneee/quiche_moq, Moqtopus all quiet. See openmoq.
Interop: the runner cuts a third day running — a new June-28 00:47:13 UTC cut is 266/79/137/50 (at-target draft-18 78; ~29.7% pass). Versus the June-27 00:45 cut (266/75/141/50): matrix flat at 266, pass +4 (75 → 79), fail −4, skip flat — recovering the June-27 −4 dip exactly back to the June-26 expansion-cut level (79). Three consecutive daily cuts (June 26 22:22 → June 27 00:45 → June 28 00:47) confirm the cadence is firmly restored after the ~5-day June-22→26 lapse. See interop-runner.
Activity (June 27 → June 28) — A quiet consolidation day. The only new WG-spec movement is three small moq-transport clarification PRs opened June 27 (no merges) — ianswett’s pair (#1788/#1790) resolving Martin Duke’s #1660 (Subscription Parameters carry through SUBSCRIBE_TRACKS → PUBLISH) and Suhas’s #1789 resolving Cullen Jennings’s #1737 (preventing impersonation) — the draft-19 phased review’s editorial/security pass still accreting PRs ahead of July 6. moq continues its dev→main backport sweep (three more codex backports: relay web embedding, moq-rtc session runner, relay HTTPS cert arrays); moqx’s afrind LF-mode relay batch keeps landing (#450 datagram queue, #445 joining-fetch). The interop runner cuts a second day running (June-27 00:45 UTC, 266/75/141/50, at-target 78) — the daily cadence genuinely resumed after the ~5-day lapse. No new draft revision (transport-18 Day +47), no new Slack (newest June 22, ~6 days silent), no new mailing-list thread (newest June 26), no new MoQ Monthly (#2, May 31), no open wiki issues.
moq-transport — three clarification PRs open (no merges); the editorial pass continues
The draft-19 phased review keeps accreting editorial/clarification PRs — three opened June 27, all still OPEN (no transport merge since the June-25 evening batch):
- PR #1788 “SUBSCRIBE_TRACKS Parameters copied to PUBLISH” (ianswett, +18/−7) — specifies that any Subscription Parameters on
SUBSCRIBE_TRACKSbecome the defaults for the resulting PUBLISHes. Fixes #1660 (Martin Duke, June 11: “SUBSCRIBE_TRACKS should contain SUBSCRIBE parameters”); assumes Suhas’s #1777 lands. - PR #1790 “Subscription parameters appear in PUBLISH, not PUBLISH_OK” (ianswett, +18/−18) — the companion, fixing the rest of #1660 (the parameters travel on PUBLISH, not on PUBLISH_OK); ianswett notes the two might be combined.
- PR #1789 “Add additional details on preventing impersonation” (suhasHere, +42/−1) — fixes #1737 (fluffy / Cullen Jennings, June 15: “Preventing impersonation”), one of Cullen’s June-15 security-considerations issues.
So June 27 is the “find issues / draft conversions” phase still running on schedule — ianswett converting Duke’s PUBLISH-parameter-propagation question into spec text and Suhas hardening the Security Considerations against impersonation — exactly the editorial + security tranche afrind’s two-phase plan reserves for the run-up to the July-6 deadline. No Design-PR movement (Range Filters #1765, DTS/SSTS #1638 still gated). See moq-transport.
Implementations — moq-dev’s backport sweep continues; moqx LF-mode batch lands
- moq (June 27, kixelated, codex-assisted) — three more
dev→mainbackports MERGED, continuing the June-26 sweep: #1930 MERGED “Backport relay web embedding” (+144/−55, the OPEN item flagged June 27), #1931 MERGED “expose moq-rtc session runner” (+180/−54), #1932 MERGED “support relay HTTPS cert arrays” (+167/−104). The DEFLATE lite-ANNOUNCE compression PRs #1928/#1929 stay OPEN (the code side of Luke’s compression thread). See moq-dev. - moqx (June 27, afrind) — the LF-mode relay batch keeps draining: #450 MERGED “deepen datagram send queue and drop oldest-first” (+8/−0, OPEN June 26 → merged) and #445 MERGED “resolve joining fetch on subscriber exec in LF mode” (+128/−1, the long-standing carryover) both land; omoq-sync-bot moxygen sync #455 MERGED. afrind closes #429 (jemalloc auto-detection) unmerged. New OPEN: #456 (gmarzot) “scripts: add README quickstart + default relay to no-sudo” (+96/−7) — an onboarding quickstart doc + flipping
moqx-run.sh’s sudo default to opt-in (--sudo). See moxygen. - moxygen (#194/#195 still OPEN, no change), quiche (newest moqt commit still the June-24 WebTransport-only client split), moq-js (the June-26 71 merges done; the big refactor #72 still OPEN), moq-rs, moqtail, imquic, Eyevinn (moqlivemock / warp-player / moqtransport), birneee/quiche_moq, Moqtopus all quiet since the June-26 cutoff.
Interop: the runner cuts a second day running — a new June-27 00:45:16 UTC cut is 266/75/141/50 (at-target draft-18 78 · 0 ahead · 188 behind; ~28.2% pass). Versus the June-26 22:22 expansion cut (266/79/137/50): matrix flat at 266, pass −4 (79 → 75), fail +4, skip flat, at-target flat at 78 — a small flaky-variance dip on the same expanded 15-impl matrix, two cuts ~2.4 h apart. The daily cadence is genuinely back after the ~5-day June-22→26 lapse. See interop-runner.
Activity (June 26 → June 27) — The day’s substance is a new mailing-list design debate: Luke Curley takes compression to the WG list (“MoQ + Compression”), arguing it should be a reusable MoQ feature rather than per-application, and the WG splits four ways over which layer owns it — moq-transport (Luke), Full-Track-Name (afrind), HTTP-style end-to-end Content-Encoding (Lucas Pardue), or the MSF streaming-format layer (Suhas). This is the spec-side counterpart to moq’s shipping DEFLATE code, which June 26 extends from group payloads to lite ANNOUNCE payloads (#1928/#1929) amid a heavy dev→main backport sweep (the full moq-mux pipeline #1918 + the moq-hls/LL-HLS gateway #1924 land on main). The interop runner WAKES UP after a ~5-day lapse with a major expansion (266/79/137/50, at-target 40 → 78, matrix +41). moq-transport is otherwise quiet (no merge June 26); the IETF 126 Vienna sessions are now formally scheduled (secretariat, June 26). No new draft revision (transport-18 Day +46, transport-19 not cut, dts4moq still 404); Slack (newest June 22, ~5 days silent) and MoQ Monthly (#2, May 31) unchanged; no open wiki issues.
Mailing list — “MoQ + Compression”: a four-way layering debate
The day’s central thread is Luke Curley’s “MoQ + Compression” (June 26). Luke argues compression should be a reusable, transport-level feature so every application doesn’t reinvent it, and brings measurements: on JSON sensor data, per-frame DEFLATE gives ~39% reduction but per-sub-group DEFLATE (with Z_SYNC_FLUSH) gives ~89% — because the encoder can reuse the prior 32 KB as a dictionary instead of restarting each frame (JSON Merge Patch landed 58–91% depending on method). He dropped zstd for lack of browser support, recommends sub-group-level (not per-frame) compression parameters, and proposes the scheme be handled in moq-transport (citing HTTP Transfer-Encoding as precedent so subscribers needn’t pre-support every method). The replies stake out four distinct positions on where compression belongs:
- afrind — MOQT’s “objects can’t change for the same track name” model leaves only one way to signal compression today: bake it into the Full Track Name (e.g.
SUBSCRIBE namespace--name.deflate). Anything else, he warns, ends up reinventing HTTP content negotiation (Vary). - Lucas Pardue — pushes back on
Transfer-Encoding: it is “not practically deployable…[being] a property of the transport, which is hop-by-hop, and therefore raises problems for intermediary use cases.” He argues HTTP’sContent-Encoding— resource-oriented and end-to-end — is the correct model. - Suhas Nandakumar — says it belongs at the MSF / streaming-format layer, which “defines [a] track property and object property for the compression scheme to be used. Track property is end-to-end and can be used for this purpose.”
So the WG now has an explicit hop-by-hop vs end-to-end and transport-vs-MSF-vs-Full-Track-Name layering question — a draft-19-era design input, directly tied to the code moq-dev is already shipping. See moq-transport, moq-msf, moq-dev.
Mailing list — IETF 126 Vienna sessions formally scheduled
The IETF Secretariat posted “moq - Requested sessions have been scheduled for IETF 126” (June 26), confirming the three MOQ sessions previewed by Martin Duke’s June-25 agenda-request call and the interim-17 minutes: July 20 12:00 UTC, July 23 14:30 UTC, July 24 14:00 UTC — moving the two later slots from “awaiting scheduling” to scheduled. The July-6 agenda-request deadline (also the interim-2026-moq-18 date and the draft-19 Design-PR cutoff) is unchanged. No new I-D Action and no weekly GitHub digest in the window. See interim-meetings.
Implementations — a moq-dev dev→main backport sweep; moqx LF-mode fixes; moq-js wakes
- moq (June 26, kixelated, codex-assisted) — a major
dev→mainbackport sweep: #1918 MERGED “Backport moq-mux to main” (+9226/−4925 — per-codec splitters, AV1 fMP4/CMAF init synthesis, MSF draft-01, catalog filter/Annex-B exporters, adapted to main’s moq-net with no wire/API breaks) and #1924 MERGED “Backport moq-hls to main” (+2390/−67 — the moq-hls / LL-HLS gateway crate), with #1925 MERGED fixing CodeRabbit-flagged H.264/H.265 bare-IDR-merge bugs from the #1918 review. #1920 MERGED “remove moq-lite broadcast epoch” drops the lite-05-wip epoch field fromANNOUNCE_BROADCAST(Rust + JS), switching duplicate-route selection to hop count + deterministic hash. OPEN #1928/#1929 “Compress lite announce payloads” re-exports the standalonemoq-flatefrommoq-netand DEFLATE-compresses moq-lite ANNOUNCE payloads (the code side of Luke’s compression thread); plus #1922 moq-srt pacing fix + #1919 nix CA-bundle, and OPEN #1930 (relay web embedding) / #1921 (zero-copy frame bytes). See moq-dev. - moqx (June 26, afrind) — a LF-mode (local-forwarder) relay-correctness batch: #449 MERGED (hop cross-exec handle teardown), #451 MERGED (answer trackStatus without touching the registry forwarder in LF mode), #452 MERGED (LF
onTrackEvictedno-op + seed-read race); OPEN #450 (deepen datagram send queue, drop oldest-first), #453 (adminGET /config), #445 (LF joining-fetch). afrind is now the dominant author on the fork, de-racing the lock-free relay path. - moxygen — the upstream wake-up retracts further: #193 (draft<18 SUBSCRIBE_NAMESPACE fallback) CLOSED unmerged June 26, joining 197; only 195 remain OPEN.
- moq-js (June 26, itzmanish) — first material merges since late May: #70 MERGED (player lifecycle + browser audio playback), #71 MERGED (logger), #69 MERGED (CF relay URL for draft-14) — and the maintainers merging these within ~a day partly eases the long-standing stewardship-lag worry (the big refactor #72 stays OPEN).
- quiche (no new moqt commits since the June-24 WebTransport-only client split), moq-rs (docs #177 OPEN), moqtail, imquic, Eyevinn (moqlivemock / warp-player / moqtransport), birneee/quiche_moq, Moqtopus all quiet.
Interop: the runner WAKES UP — a new June-26 22:22:55 UTC cut is 266/79/137/50 (at-target draft-18 40 → 78, matrix +41 vs June-21) after the ~5-day cadence lapse, landing the WG-mandated ~70-case expansion. See interop-runner.
Activity (June 25 06:00 UTC → June 26) — The moq-transport merge freeze breaks: 5 editorial/relay-clarification PRs land June 25 evening — the first transport merges since June 22 — as the phased review’s “immediate-review” tranche begins converting to merges, while the substantive Design PRs (Range Filters #1765, DTS/SSTS #1638) stay OPEN behind the 2-week + 4-editor bar pending the July-6 deadline. On the list, Martin Duke opens the IETF 126 (Vienna) agenda-request call (email the chairs, deadline July 6, three MOQ sessions: July 20 12:00 UTC approved + July 23/24 pending; non-MoQT talks land in the Friday slot) and Youngkwon Lim flags an ITU-T SG21 / MPEG joint-workshop program. moq-dev lands its two-phase SETUP-path accept (#1910) and reverts the lite-05 Hop-ID to a varint (#1911). No new draft revision (transport-18 Day +45, transport-19 not cut, dts4moq still 404); Slack (newest June 22), MoQ Monthly (#2, May 31), and the interop runner (newest June 21 225/67/128/30, now ~5–6 days lapsed) are all unchanged.
moq-transport — the phased review begins landing: 5 PRs merge June 25 evening
The wiki has tracked the moq-transport merge pause as a deliberate draft-19 phased review since interim-17 (afrind: ~50% of the ~18 open PRs for immediate review, the rest near the July-6 deadline; Design PRs need two weeks open + stamps from the four editors). June 25 evening is the first day the immediate-review tranche converts to merges — 5 PRs merged 18:23–19:02 UTC (all after the June-25 update’s check time, which reported “no merge June 24–25”), the first transport merges since the two interim-window editorial PRs on June 22:
- PR #1779 “Rename PUBLISH_BLOCKED to PUBLISH_SKIPPED” (ianswett, +17/−13, merged 18:23 UTC) — the message-name change opened in the June-18/19 cluster.
- PR #1762 “Remove relay exception for reordering or dropping objects” (afrind, +1/−1, 18:36) — drops the stray relay allowance to reorder/drop objects.
- PR #1763 “Remove stray relay prioritization SHOULD” (afrind, +3/−2, 18:38) — the cleanup sharmafb had approved June 24 (two approvals: vasilvv + sharmafb).
- PR #1771 “Specify relay processing rules for known Track Properties” (michalhosna, +5/−2, 18:42) — converting his own #1663.
- PR #1784 “Unexpected REQUEST_UPDATE is a session error” (afrind, +3/−0, 19:02) — closes RichLogan’s Issue #1769 “Is an unexpected REQUEST_UPDATE a request or session error?” (the WG settles on session error).
All five are small editorial / relay-clarification PRs, not the gated “Design” PRs — exactly the “~50% for immediate review” half afrind described, now clearing review and merging into the draft-19 editor’s copy. Several siblings drew review/iteration the same evening but stayed OPEN — afrind’s #1786 (expand mutual TLS security considerations), #1783 (restrict reason-phrase/impl-name to safe ASCII), #1782 (Forward handling for relays), #1780 (forwarding-preference order), and #1775 (multiple concurrent subscriptions per Track). The substantive Design PRs stay frozen by design — Mo Zanaty’s Range Filters #1765 and wilaw’s DTS/SSTS #1638 (which drew ArcherDTY’s first review June 24) remain OPEN behind the two-week + four-editor bar.
So the “freeze” reading sharpens: it was never a blanket merge stop — it was a Design-PR hold, and the clarification/editorial backlog is now draining on schedule into draft-19. No new transport revision (transport-18 Day +45; transport-19 not yet cut; draft-ietf-moq-dts4moq still 404). See moq-transport.
Mailing list — IETF 126 (Vienna) agenda call opens; an ITU-T/MPEG workshop
Two June-25 list items, both administrative:
- Martin Duke “IETF 126 Agenda requests” (June 25) — the chairs open the call for IETF 126 / Vienna agenda time: “email the chairs and indicate how much time you need,” leave adequate room for discussion (presentations without interactive elements are poor slot candidates), and non-MoQT-protocol talks are likely to land in the Friday-afternoon session. Deadline July 6 (now triply-loaded — the same date as the interim-2026-moq-18 meeting and the draft-19 Design-PR submission deadline). Per the datatracker, MOQ has three IETF 126 sessions: July 20 12:00 UTC (approved), July 23 14:30 UTC, and July 24 14:00 UTC (the latter two awaiting final scheduling) — consistent with the “3 slots at Vienna” the interim-17 minutes recorded, with the late-Friday slot reserved for the non-transport drafts.
- Youngkwon Lim “Program of the ITU-T SG21 and MPEG joint workshop is published” (June 25) — announces the program for an ITU-T SG21 / MPEG joint workshop (media-coding/standards venue, tangential to MoQ but of cross-SDO interest to the WG’s media-format work).
No new I-D Action and no weekly GitHub digest in the window. See interim-meetings.
Implementations — moq-dev lands the SETUP-path accept; moxygen upstream PRs close unmerged
- moq (June 25, kixelated) — PR #1910 MERGED “feat(moq-net): two-phase accept exposing the SETUP request path (lite-05 + moq-transport 14-18)” (+720/−122) — the OPEN PR flagged June 25 lands, surfacing a two-phase server accept that exposes the SETUP/negotiation path across moq-lite-05 and moq-transport drafts 14–18 (the multi-draft handshake follow-on to #1896’s mandatory-timestamps work). PR #1911 MERGED “revert(moq-net): encode Hop ID as a 62-bit varint again, not fixed-width 64-bit” (+61/−199) — reverts the June-19 #1788 fixed-width-64-bit Hop-ID wire change, returning Hop ID to a standard QUIC-style 62-bit varint. The shared-RAM LRU group cache #1899 stays OPEN, grown to +1580/−290. See moq-dev.
- moxygen — the upstream wake-up partly retracts: #192 (handleTrackStatus session), #196 (Subscriber requestID from PUBLISH_OK), and #197 (mock
fetch()on MockMoQSession) all CLOSED unmerged June 24–25 (consistent with Meta’s internal-diff workflow showing on GitHub as closed-without-merge); #193/#194/#195 remain OPEN. - moqx — active: #443/#444 MERGED June 25 (the per-thread
MoQStatsCollector+ LF-mode relay-exec fix that were OPEN June 25), #446/#447 MERGED moxygen submodule syncs, #448 MERGED June 26 00:59 (CI test-reporter lists only failed tests to dodge the 64 KiB Check-Run cap); OPEN #445/#449 (LF-mode joining-fetch + hop cross-exec teardown). - quiche — June-24/25 commits are mostly QUIC-layer, not MoQT-specific: a
FrameAckTimestampRangestruncation refactor + droppingprocess_timestamps_in favor ofmax_receive_timestamps_per_ack, a TLS-session-ticket creation-time accessor, removing Q046 timestamp serialization, andWebTransportSessionperspective/protocol accessors (alongside the June-24 WebTransport-only client split already logged). - moq-rs docs PR #177 still OPEN (no code change); moq-js, moqtail, imquic, Eyevinn (moqlivemock / warp-player / moqtransport), birneee/quiche_moq, Moqtopus quiet.
Interop: no new runner cut — newest is still the June-21 225/67/128/30 report. June 22–26 cuts are all absent; with the spec in editorial review and no draft-19 wire change to score, the matrix has nothing new to measure — the ~5–6-day cadence gap is now the longest the wiki has tracked. See interop-runner.
Activity (June 24 06:00 UTC → June 25) — A quiet WG/list day on the surface — Slack (newest June 22), the mailing list (newest June 23), the datatracker, and MoQ Monthly are all unchanged — but moq had a heavy June-24 merge day the June-24 update (checked at the June-23 tail) missed: the OPEN mandatory moq-lite-05 timestamps PR landed alongside a full DEFLATE compression workstream, client-TLS unification, and a stats-label generalization. On moq-transport the draft-19 phased review stays merge-frozen (~7th day, by design), but afrind’s June-23 “Design PRs to Review” call now visibly bears fruit — the DTS/SSTS PR #1638 draws its first community review since June 8 (ArcherDTY, on the bandwidth/ABR-algorithm design) and #1763 is approved. No new draft revision (transport-18 Day +44, transport-19 not cut, dts4moq still 404); the interop runner’s daily cut is now ~4–5 days lapsed (newest still the June-21 225/67/128/30 report).
moq-dev — mandatory lite-05 timestamps land, plus a DEFLATE compression suite
June 24 was one of moq’s heaviest merge days of the month (kixelated unless noted) — and the June-24 wiki update caught only the “June-23 tail,” so the bulk is new here:
- PR #1896 MERGED (06-24 16:52 UTC, +710/−401 final) — “mandatory timestamps for moq-lite-05”: the OPEN PR flagged June 24 lands, making per-track timescale non-optional and per-frame timestamps mandatory on moq-lite-05, with moq-transport timestamp pass-through via per-object extension headers. The moq-lite analogue of [[moq-timestamp|
draft-lcurley-moq-timestamp]] is now a hard contract, not an option. - The DEFLATE compression line: #1897 MERGED “group-scoped DEFLATE compression with browser support” (+1015/−62) → #1905 MERGED “extract group-scoped DEFLATE into
moq-flate/@moq/flate” (+960/−421, factors the codec into a standalone crate + npm package) → #1904 MERGED “hang: compressed catalog track (catalog.json.z)” (+212/−26), with #1909 MERGED gating group rolls on already-written deltas. This productionizes the per-frame-compression bet that had churned OPEN for days (the now-CLOSED 1898), consolidating the storage side into the still-OPEN #1899 “shared RAM LRU group cache” (+1492/−280, 5s/unbounded default + FFICachesurface). - Client-TLS unification: #1902 MERGED “moq-native: unified client TLS verification + quiche backend support” (+295/−106) + #1901 MERGED “moq-relay: reuse client TLS for outbound auth HTTP; consistent
--client-tls-*flags” (+243/−55) — the security follow-on to June-23’s noq-default flip, now extended to the quiche backend. - Stats / model: #1906 MERGED “generalize stats
Tierto an arbitrary label” (+759/−435); #1900 MERGED “broadcasts own tracks own groups own frames via inheritedArc<Info>” (+411/−324); #1908 MERGED encapsulateGroup.statebehind non-blocking read methods. - OPEN June 24–25: #1910 “two-phase server accept surfacing the lite-05 SETUP path” (+481/−112, June 25 — the direct follow-on to #1896); #1899 (RAM cache, above); #1895 usage-stats-in-model (+936/−538); #1887 chore: release (not cut yet). See moq-dev, moq-timestamp.
moq-transport — the phased review turns visibly active
No moq-transport PR merged June 24–25; the interim-17 two-phase plan (Design PRs need two weeks open + four-editor stamps before the July-6 deadline) keeps the backlog OPEN by design. But June 24 is the first day the review half of that plan is observable — answering afrind’s June-23 “Design PRs to Review” list call:
- PR #1638 “Add Dynamic Track Switching (DTS)” (wilaw, OPEN, +155/−0) drew its first community review since the June-8 round — ArcherDTY (COMMENTED) left three inline comments probing the SSTS bandwidth/ABR design: (1) whether restricting track selection to “available downstream bandwidth” is too narrow vs. also using subscriber buffer length; (2) whether the bandwidth parameter is decided by the subscriber or the relay — arguing it belongs inside the ABR algorithm rather than as a subscriber-specified value; (3) whether the mandatory “Algorithm Zero” needs to specify a bandwidth-estimation algorithm. These are exactly the open design questions interim-17 deferred when it made the switching algorithm an extensible IANA-registered ID with Algorithm Zero as the baseline. See switch-abr.
- PR #1763 “Remove stray relay prioritization SHOULD” (afrind) — APPROVED by sharmafb (00:59 UTC), now with two approvals (vasilvv June 15 + sharmafb June 24); still unmerged behind the freeze.
No new transport revision (transport-18 Day +44; transport-19 not yet cut; draft-ietf-moq-dts4moq still 404). See moq-transport.
Other implementations — the upstream moxygen wakes up; quiche + imquic move
- moxygen — the upstream repo (the wiki has tracked the openmoq/moqx fork as the active line for weeks) lands four new OPEN PRs June 24–25: #194 “moqtest: support server-initiated PUBLISH via SUBSCRIBE_TRACKS” (+430/−21), #195 “graceful SIGINT/SIGTERM shutdown for client and server” (+551/−42), #196 “MoQForwarder: set Subscriber requestID from PUBLISH_OK”, #193 “MoQRelaySession: fall back to SUBSCRIBE_NAMESPACE on draft < 18” — the draft-18 PUBLISH / SUBSCRIBE_TRACKS surface showing up upstream.
- moqx — MERGED June 24: #440
moq_decode.pydrops the Existing Request ID from REQUEST_UPDATE at draft-18 (the offline wire-decoder tracking the draft-18 field change), #442 serializedoPublishNamespaceDonecleanup ontorelayExec_, #438 moxygen submodule sync; OPEN #443 (don’t inspect the publisher forwarder fromrelayExec_on publishDone) + #444 “per-threadMoQStatsCollectorfor MT-safe collection” (the multi-thread-relay observability follow-on). - quiche moqt — one June-24 commit: “Create a dedicated WebTransport-only client class, and switch
MoqtClientto using it” (splits a WebTransport-only client out of the general MoQT client). - imquic — one June-24 commit: “Add partial support for DYNAMIC_GROUPS and NEW_GROUP_REQUEST to the relay demo.”
- moq-rs docs PR #177 touched June 24 (no code change); moq-js, moqtail, Eyevinn (moqlivemock / warp-player / moqtransport), birneee/quiche_moq, Moqtopus quiet.
Interop: no new runner cut — newest is still the June-21 225/67/128/30 report. June 22, 23, 24, and 25 cuts are all absent; with the spec in editorial review and no draft-19 wire change to score, the matrix has nothing new to measure — but the ~4–5-day cadence gap is now the longest the wiki has tracked. See interop-runner.
Activity (June 23 06:00 UTC → June 24) — A quiet spec day with one genuinely new WG-doc thread: the LOC draft repo wakes up after ~2 weeks dormant. sharmafb opens PR #22 (move LOC TIMESTAMP from 0x06 to 0x10 because 0x06 collides with MoQ SUBGROUP_DELIVERY_TIMEOUT — the next chapter of the cross-spec property-ID coordination dispute), a small editorial fix (#23), and Issue #21 (“No audio config property?” — LOC has a Video Config property but no audio equivalent for codec init data like AAC). On moq-transport the deliberate draft-19 phased review holds — zero merges for a 5th–6th straight day, by design — but afrind nudges two design PRs (#1761 IANA registry for extension/version compatibility, #1763 remove stray relay prioritization SHOULD) and posts “Design PRs to Review” to the list. moq-dev flips its default QUIC backend from quinn to its own noq (#1891) and opens a PR making moq-lite-05 timestamps mandatory (#1896). No new draft revision (transport-19 not cut, dts4moq still 404); the interop runner has now skipped its daily cut for ~4 days (newest still the June-21 225/67/128/30 report).
LOC repo wakes up — property-ID collision + an audio-config gap
After ~2 weeks of quiet (the last LOC movement was the June-12 interim), moq-wg/loc sees three June-23 items from sharmafb:
- PR #22 OPEN — “Change TIMESTAMP to value 0x10”: LOC’s current
TIMESTAMP=0x06collides with MoQSUBGROUP_DELIVERY_TIMEOUT. This is the next concrete step in the cross-spec property-ID coordination dispute the wiki has tracked since loc#20 — the same conflict moq-dev/moq resolved in code on May 23 by voting-with-code for the transport-18 §15.8 assignments (TIMESTAMP=0x06, TIMESCALE=0x08). With MoQ now reusing0x06forSUBGROUP_DELIVERY_TIMEOUT, LOC moves its own TIMESTAMP out of the way to0x10. - PR #23 OPEN — an editorial truncated-sentence fix in the MoQ Object Mapping section.
- Issue #21 OPEN — “No audio config property?”: LOC defines a Video Config property for video decoder setup but has no audio equivalent, so codec-specific initialization data not fully captured by the codec string (the issue cites AAC’s AudioSpecificConfig) has no standard place to live. A real spec gap, raised as a pre-
-03design input.
The LOC draft text itself is unchanged (draft-ietf-moq-loc-02). See moq-loc.
moq-transport — the draft-19 phased review holds
No moq-transport PR merged June 23–24; the two-phase review set at interim-2026-moq-17 (Design PRs need two weeks open + stamps from all four editors before the July-6 submission deadline) keeps the ~16-PR backlog OPEN by design. The visible activity is the review phase running on schedule:
- afrind PR #1761 “Add IANA registry for extension/version compatibility” (updated June 23, OPEN) — adds a MOQT Extensions registry with an Applicable Versions column so versions and extensions can record their mutual compatibility (fixes #1681). This is the editorial counterpart to interim-17’s IANA-registry-for-extensibility direction (the same mechanism the SSTS switching algorithm now uses).
- afrind PR #1763 “Remove stray relay prioritization SHOULD” (June 24, OPEN) — a small relay-text cleanup.
- On the list, afrind posts “Design PRs to Review” (June 23) — the list-side push to get the four editors’ eyes on the open design PRs inside the July-6 window.
No new transport revision (transport-18 Day +43; transport-19 not yet cut; draft-ietf-moq-dts4moq still 404). interim-2026-moq-18 (July 6, 16:30 UTC) is now on the datatracker meetings page with a minimal “MoQT issues” agenda (posted June 18). See moq-transport.
Implementations — moq-dev defaults to noq; moq-lite-05 timestamps go mandatory
The day’s implementation activity is mostly a June-23 tail of moq work that landed after the June-23 update’s check time, plus a couple of June-24 open PRs:
- PR #1891 MERGED — “default QUIC backend to noq instead of quinn” (+40/−26): flips the default-compiled + auto-selected backend across
moq-nativeand all binaries from quinn → noq (auto-detect priority nownoq > quinn > quiche), with quinn kept as an opt-in--features quinnescape hatch. moq-dev’s own QUIC stack becomes the default — the operational culmination of the recurring noq work (mTLS-on-noq June 16, the RUSTSEC-2026-0185 quinn bump June 23). - PR #1896 OPEN (June 23 22:31) — “mandatory timestamps for moq-lite-05” (+482/−328): makes per-track timescale non-optional (defaults to ms) and per-frame timestamps mandatory on moq-lite-05, with moq-transport timestamp pass-through via per-object extension headers. The moq-lite analogue of [[moq-timestamp|
draft-lcurley-moq-timestamp]] hardening from optional into a non-optional contract. - Other moq-dev: #1888 MERGED expose the broadcast hop chain on announcements via moq-ffi; #1890 MERGED make moq-net
request_broadcast/subscribe/fetch_groupinfallible; OPEN #1894/#1895 usage-stats-in-model, #1893/#1870 moq-gst moqsink on GstAggregator, #1889 keep payload compression compressed in RAM. - moxygen (tooling only): #431 MERGED
moq_decode.pydecodes draft-18 SUBSCRIBER_PRIORITY/GROUP_ORDER/FORWARD asuint8per transport-18 §10.2.7/8/12; #433 MERGED pin the benchmark macOS runner tomacos-15; OPEN #428 parameterized relay config template with a draft-18 fallback + #429 jemalloc auto-detection. - quiche moqt: two June-23 follow-ons to the PUBLISH-on-bidi change — “Fold all control-message handlers from the control stream object into the session itself” (lets the standalone control-stream class go away once control streams are split in two) + “Fix msan error in moqt_publish_stream_test.”
- moqtail raw-QUIC support (#204/#205) already logged June 23; moq-rs saw only a docs-request Issue #166; moq-js #72 refactor still OPEN; Eyevinn, imquic, birneee/quiche_moq, Moqtopus quiet.
Interop: no new runner cut — newest is still the June-21 225/67/128/30 report. June 22, 23, and 24 cuts are all absent; with the spec in editorial review and no draft-19 wire change to score, the matrix has nothing new to measure — but the ~4-day cadence gap is the longest the wiki has tracked. See interop-runner.
Activity (June 22 → June 23 06:00 UTC) — The June 22 interim’s minutes land as interim-2026-moq-17 and settle the SSTS (ex-DTS) switching design: DTS is renamed Sender Side Track Switching, the switching algorithm becomes an extensible IANA-registered numeric ID with a mandatory “Algorithm Zero” baseline, and the contested per-set DDoS-protection negotiation properties are removed in favour of auth tokens + relay-side protection. The transport “freeze” turns out to be a deliberate draft-19 phased review — only the 2 interim-window PRs merged, the ~16-PR backlog stays open by design behind a 2-week/4-editor-stamp bar, with a July 6 design-PR deadline. moq-dev stays very active (catalog-extension FFI, group-rewind buffer clears, a RUSTSEC quinn bump); moqtail lands raw-QUIC support; google/quiche moves PUBLISH to a bidi stream. No new draft revision (transport-19 not yet cut, dts4moq still 404); no new interop cut.
TL;DR:
- The interim is on the record and resolves SSTS. Martin Duke posts “Yesterday’s minutes available” June 23; the off-calendar June 22 meeting now exists as interim-2026-moq-17. DTS → SSTS (Sender Side Track Switching); consensus on an extensible switching algorithm (numeric IANA ID, negotiated via an array of preferred algorithms) with the current impl as mandatory “Algorithm Zero”; remove the DDoS-protection negotiation properties (concurrent-track / throughput limits) in favour of auth tokens + relay-side protection; keep single-message switching-set assignment; unsubscription auto-removes a track. Will Law demoed Nokia’s 3-track (500/1500/3000 kbps) impl. Next interim July 6 (= interim-2026-moq-18, IESG-announced June 22); Authorization Design Team enrollment closes June 26; October-venue poll closes July 5; 3 MOQ slots at IETF 126 Vienna. See interim-meetings, switch-abr.
- moq-transport’s “freeze” was a phased draft-19 review, not a stall. Only 2 PRs merged (both in the interim window June 22): #1787 (session-vs-per-request GOAWAY migration, closes #1706) + #1781 (remove the “re-requesting objects” statement, closes #1732). The ~16-PR backlog (#1765, #1770–#1777, #1779–#1786) stays OPEN by design behind the 2-week + 4-editor-stamp Design-PR bar afrind set in the interim, with a July 6 deadline. No transport-19 yet (transport-18 Day +42);
draft-ietf-moq-dts4moqstill 404; c4m/msf unchanged. See moq-transport. - Implementations: moq very active June 22–23 — MERGED catalog-extension exposure via moq-ffi/libmoq (#1886, +538/−31), moq-mux clear-buffer-on-group-rewind (#1884, +613/−17) + begin-TS-export-at-first-keyframe (#1885), relay WebSocket fallback at root (#1883), moq-net MAX_FRAME_SIZE enforcement (#1881/#1882) + Gauge/Usage stats unify (#1876, +219/−342), quinn-proto 0.11.15 bump for RUSTSEC-2026-0185 (#1872), in-tree cross-language interop smoke test (#1871); OPEN per-hop per-frame payload compression (#1874, +879/−275) + payload metering (#1873). moqtail lands raw QUIC support (#204 +543/−89, #205 +364/−127) + client-js publish tab/unordered objects. quiche moqt “Move PUBLISH to a Bidi stream” (June 23). imquic fixes broken NAMESPACE/NAMESPACE_DONE relay notifications + a LOC sender-demo crash. moxygen submodule syncs only. moq-js big structure-refactor PR #72 still OPEN. moq-rs, moqlivemock, Eyevinn/moqtransport, birneee/quiche_moq, Moqtopus quiet.
- Interop: no new cut — newest is still 225 / 67 / 128 / 30 at 2026-06-21 00:51:51 UTC (draft-18 target; ~29.8% pass; at-target 40; 12-impl set). No June-22 or June-23 run had posted at check time. See interop-runner.
interim-2026-moq-17: SSTS replaces DTS, and the switching algorithm gets an IANA registry
The June 22 virtual interim — which ran off-calendar after the secretariat cancelled the meeting request and the Meetecho session dropped mid-session (Duke fell back to a Google Meet link) — turned out to be a substantive design meeting, and its minutes are now the durable record the wiki flagged would be the only one. It closes the SWITCH/DTS arc the wiki has tracked since the May 21–June 4 consensus call:
- Rename: “Dynamic Track Switching” (DTS) becomes “Sender Side Track Switching” (SSTS) — “this title more accurately reflects the functionality” (RFC editors keep final naming authority). The feature is the relay-forwarded, sender-driven counterpart to client-side ABR: a publisher exposes a switching set of renditions and the relay forwards exactly one, toggling the forward state to switch.
- Nokia demo (Will Law presenting Yu You’s pre-recorded run): one switching set of 500 / 1500 / 3000 kbps, relay receiving all three but forwarding one, “smooth, continuous switching by toggling the forward state,” stable 1080p with switching off, and clean handling of “fast-frequency switching close to segment boundaries” under aggressive throughput oscillation — the first on-the-record measured SSTS demo since Nokia’s May-29 on-list report.
- Extensible algorithm + Algorithm Zero: rather than freezing one switching algorithm, the WG adopted a numeric ID in an IANA table so “future, more advanced algorithms” can be negotiated (client sends an array of preferred algorithms, relay answers with its supported set). The current implementation is defined as the mandatory “Algorithm Zero” baseline in the base spec.
- DDoS-protection properties removed: the per-switching-set concurrent-track and throughput limits — the exact (D)DoS vector Gwendal Simon raised on DTS PR #1638 June 8 (a
MAX_DTS_CONCURRENT_TRACKSthat bounds track count but not aggregate throughput, scoped per-set not per-connection) — are dropped from negotiated properties, with protection deferred to authorization tokens + existing relay-side mechanisms. This is the WG choosing not to bake a bespoke DoS knob into the switching feature. - Message shape: the group decided against splitting switching-set assignment into multiple messages (keeps the single-message architecture), and unsubscription auto-removes a track from the set (no explicit removal message).
Draft-19: the “editorial freeze” was a deliberate phased review
The four-day no-merge stretch the wiki read as a freeze-pending-interim is now explained: afrind proposed (and Duke backed) a two-phase review of draft-19’s ~18 open PRs — “approximately 50% for immediate review, the remainder for the period just before the deadline.” The bar for merging “Design” PRs is two weeks open + stamps from the four editors and authors, and any design PR meant for draft-19 had to be published June 22 to fit the two-week window before the July 6 submission deadline. So the only two PRs that merged June 22 — #1787 (GOAWAY session-vs-per-request migration, → #1706) and #1781 (drop the “re-requesting objects” statement, → #1732) — are small editorial clarifications, while the substantive backlog (#1765 Range Filters, Suhas’s #1772–#1777, the afrind Security-Considerations cluster #1780–#1786) sits open on purpose, accruing review time. The “stall” reading from June 19–22 was wrong about cause, right about effect.
Implementations: moq-dev codec/ops polish, moqtail raw QUIC, quiche PUBLISH-on-bidi
- moq (June 22–23, kixelated unless noted) keeps the codec/ops cadence: #1886 exposes untyped catalog extensions through moq-ffi + libmoq (+538/−31) — the FFI counterpart to the generic-catalog work; #1884 clears the moq-mux consumer buffer when group timestamps rewind (+613/−17) + #1885 begins TS export at the first video keyframe (+217/−11) — B-frame/reorder pipeline hardening; #1883 serves a WebSocket fallback at the relay root path (the qmux/WebSocket fallback surface); #1881/#1882 enforce/bound moq-net
MAX_FRAME_SIZE; #1876 unifies stats on Gauge/Usage (+219/−342); #1872 bumps quinn-proto to 0.11.15 for RUSTSEC-2026-0185 (a security fix, not just churn); #1871 adds an in-tree cross-language interop smoke test. OPEN: #1874 per-hop per-frame payload compression (drafts#39, +879/−275) + #1873 payload-usage metering (bill non-MoQ gateway traffic). - moqtail breaks its long quiet stretch (last tracked May 26, still draft-16) with raw-QUIC transport landing in two steps — #204 (+543/−89) + #205 (+364/−127), both merged June 23 — plus client-js publish-tab + unordered-object handling (June 22). Raw QUIC (vs WebTransport) is the same alternative-transport surface qmux addresses; moqtail adding it widens the cross-impl test matrix for non-WebTransport MoQ.
- quiche moqt committed “Move PUBLISH to a Bidi stream” June 23 — aligning Google’s C++ impl with the draft direction of carrying PUBLISH on a bidirectional stream.
- imquic (June 22–23, lminiero) fixed broken NAMESPACE / NAMESPACE_DONE notifications in the relay and a crash in the LOC sender demo (audio-or-video-only) — follow-on polish to the June-19 push-to-talk demo.
Activity (June 20 06:00 UTC → June 22) — The June 22 virtual interim runs today but never made it onto the datatracker — Martin Duke confirms it on-list (“I assure you there is an interim meeting Monday”), says the announcement is stuck in a queue, and promises a Google Meet fallback link; he separately opens a poll to pick the October-2026 in-person venue. The moq-transport editorial pipeline stays frozen (no merge June 19–22, a 4th straight day) with the ~16-PR clarification backlog held — most plausibly pending the interim. moq-dev shifts from gateways to codec depth: H.265 hardware decode lands on macOS (VideoToolbox) + Windows (Media Foundation/DXGI), B-frame DTS/reorder handling gets real, and MSF draft-01 support arrives (the first impl pickup of MSF-01 the wiki has tracked). No new draft revision; interop nudges to 67/225 (~29.8%) on the June-21 cut (June-20 skipped)
TL;DR:
- The June 22 interim happens off-calendar. After the June 18–20 calendar-gap saga, Martin Duke posts to the list June 21 (“I assure you there is an interim meeting Monday … the announcement is stuck in a datatracker queue. If it doesn’t go out 30 min before, I will send a Google Meet link”) — so the meeting convenes at 16:30 UTC with no datatracker entry and no agenda. Duke separately opens a Poll: Interim Location (deadline July 5) for the October 2026 in-person interim (“no serious objection to any location except Costa Rica, which is excluded”). Mike English’s weekly GitHub digest posted on schedule June 21. See interim-meetings.
- moq-transport stays frozen — no merge June 19–22 (4th straight day). The ~16-PR clarification backlog (afrind #1780–#1787, ianswett #1779, michalhosna #1770/#1771, Suhas #1772–#1777, Mo Zanaty Range Filters #1765) is all still OPEN, none merged — almost certainly held pending today’s interim. No new issues, no new revision (transport-18 Day +41;
draft-ietf-moq-dts4moqstill 404). See moq-transport. - Implementations: moq very active — MERGED MSF draft-01 (#1834, +743/−181), WHIP/WHEP shared-UDP-port mux (#1864, +446/−72), macOS VideoToolbox H.265 HW decode (#1859) + Windows Media Foundation HEVC (#1854) + DXGI screen capture (#1855), B-frame DTS authoring (#1843) + reorder-depth-as-catalog-jitter (#1857), moq-hls pause/resume (#1862), composable relay router (#1856); OPEN #1865 (SRT egress pacing clamp), #1841 (per-track durable cache). moxygen near-quiet (sync-bot #425 only). quicr/moq-web deploy/CI plumbing June 22. moq-rs #178 draft-18 still OPEN. imquic, moqtail, quiche moqt, moq-js, Moqtopus, moqlivemock, warp-player, Eyevinn/moqtransport, birneee/quiche_moq quiet.
- Interop: 225 / 67 / 128 / 30 at 2026-06-21 00:51:51 UTC (draft-18 target; ~29.8% pass; at-target unchanged; 12-impl set) — pass 66 → 67 (+1) vs the June-19 cut. The June-20 cut was skipped (3rd missed/late cut in five days) and no June-22 cut had posted at check time; the +1 is cross-version main-churn noise from moq-dev’s codec/HW-decode work. See interop-runner.
The June 22 interim: a real meeting the datatracker never published
The wiki tracked the calendar gap from June 18 (Ali Begen / Aman Sharma couldn’t find the interim on the datatracker; Victor Vasiliev noted it had no agenda). June 21 resolves the will-it-happen question but not the is-it-on-the-record one: Martin Duke posts to the MoQ list — subject “I assure you there is an interim meeting Monday” — that the meeting is real, the announcement is “stuck in a datatracker queue,” and he will send a Google Meet link 30 minutes before the 16:30 UTC start if the official announcement doesn’t clear. So the June 22 interim runs on an ad-hoc link, with no posted agenda and no datatracker meeting entry (agenda-interim-2026-moq-12 404s; the meetings page still shows only interim-2026-moq-11/June 12). This is an unusual state for an IETF WG interim — if minutes are taken they’ll be the only durable record. Worth watching whether interim-2026-moq-12 appears retroactively.
Forward-looking: Duke separately opens a Poll: Interim Location (June 21, deadline July 5) to choose the venue for the October 2026 in-person interim — “no serious objection to any location except Costa Rica, which is excluded” (in-person attendees only). This is the next-interim planning the London minutes flagged (~October horizon, North-American venue TBD).
moq-dev: from gateways to codec depth — H.265 HW decode, B-frames, and MSF-01
After the June 19–20 bidirectional-gateway wave (RTMP/SRT/WebRTC in and out), moq-dev’s June 21–22 work is codec-pipeline maturation rather than new transport surface:
- H.265 hardware decode across two more platforms: PR #1859 (macOS VideoToolbox, +162/−64) + PR #1854 (Windows Media Foundation HEVC backend, +228/−118) — the hardware-accelerated decode counterpart to the June-13/14 native-encode bet; plus PR #1855 (Windows DXGI Desktop Duplication screen capture) and PR #1860 (opt-out nvenc/vaapi features).
- B-frame support — the decode-timestamp/reordering plumbing the timestamp/DTS-for-MoQ spec work is about: PR #1843 (“moq-mux: author DTS for B-frame MPEG-TS export”, +444/−56) + PR #1857 (“carry B-frame reorder depth as catalog jitter”, +251/−79).
- MSF draft-01 — PR #1834 (+743/−181) lands MSF’s
-01revision in code behind a version-agnostic snapshot; the first implementation pickup of an MSF revision the wiki has tracked, signalling the catalog/streaming-format layer is starting to track the WG drafts the way the transport layer already does. - WHIP/WHEP + egress + ops: PR #1864 (moq-rtc single shared-UDP-port mux for WHIP/WHEP servers), PR #1862 (moq-hls pause/resume export + discontinuity markers), PR #1856 (composable relay web router), PR #1849 (redesigned relay stats page + live charts); OPEN PR #1865 (SRT egress pacing clamp — the egress follow-on to the June-20 cluster) + PR #1841 (per-track RAM+disk durable cache). The June-20 egress cluster + always-on-HW-encoder #1819 appear resolved/superseded.
Activity (June 19 06:00 UTC → June 20 06:00 UTC) — The day belongs to the implementations: moq-dev turns its protocol gateways bidirectional (a full RTMP/E-RTMP ingest gateway lands, then a wave of RTMP/SRT/WebRTC egress gateways opens) and stands up an internal qmux relay listener — the same day moxygen adds its own qmux listener + merges a draft-18 SUBSCRIBE_TRACKS port, so the out-of-charter QMux transport is being built in parallel across two impls exactly as the chairs encouraged; Lorenzo’s imquic push-to-talk demo merges and goes live in-browser, the first real-time conversational-media MoQ app the wiki has tracked; the moq-transport editorial pipeline pauses (a second straight day with no merge, ~16 clarification PRs queued behind review); no new draft revision, no new interop cut, and the June 22 interim is still missing from the datatracker 2 days out
TL;DR:
- No spec/WG event today — the moq-transport editorial pipeline pauses. After June 18’s 8-merge batch, no moq-transport PR merged June 19–20: afrind’s Security-Considerations cluster (#1780–#1787) is iterated (rebases / review comments) but stays OPEN, alongside ianswett’s #1779, michalhosna’s #1770/#1771, Suhas’s #1772–#1777, and Mo’s Range Filters #1765. No new issues (newest still RichLogan’s #1769). No new draft revision (transport-18 Day +39; c4m-01 unchanged;
draft-ietf-moq-dts4moqstill 404); on the list only Martin Duke’s AUTH design team thread continues (Manish, Nemanja Djordjevic June 19). The June 22 virtual interim is still not on the datatracker calendar (2 days out, no agenda). See moq-transport, moq-c4m. - The implementation story is the gateway direction flipping bidirectional + qmux interop landing in two relays at once. moq lands a full RTMP/E-RTMP ingest gateway (#1824 +2643/−142) and opens a cluster of egress gateways — serve broadcasts back OUT over RTMP (#1829), SRT (#1828), and WebRTC/H.265+AV1 (#1827) — plus an internal qmux relay-to-relay listener (#1810 MERGED). The same day, moxygen merges afrind’s
proxygen_qmuxlistener (#420) + akash-a-n’s draft-18 SUBSCRIBE_TRACKS port (#411). See moq-dev, openmoq. - Implementations: moq ~14 PRs MERGED (RTMP ingest #1824/#1826, qmux listener #1810, MPEG-TS verbatim #1815, all-SPS/PPS/VPS transmux #1812, public
whip::accept#1823) + a 4-PR egress cluster OPEN (#1827–#1829, demo inspector #1822) + always-on HW encoders OPEN (#1819). moxygen merges draft-18 SUBSCRIBE_TRACKS port #411 + qmux listener #420 + gmarzot’s moqx-run.sh #416; #421 mvfst MTU option OPEN. imquic push-to-talk demo #31 MERGED + live web demo announced. moq-rs #178 draft-18 still OPEN (no change). moqtail CI release PR only. quiche moqt (June 6), moq-js, Moqtopus, quicr/moq-web, moqlivemock, warp-player, Eyevinn/moqtransport, birneee/quiche_moq quiet. - Interop: no new run published — newest cut is still 225 / 66 / 129 / 30 at 2026-06-19 00:56:39 UTC (draft-18 target; ~29.3% pass; at-target 40 · 0 ahead · 185 behind; 12-impl set). The June-20 daily cut had not posted at check time — the second skipped/late cut in four days (June-17 was also missing), so the daily cadence stays intermittent. See interop-runner.
moq-dev: the gateway story turns bidirectional + an internal qmux relay transport
moq-dev/moq’s June 15–16 work built the contribution-ingress side (a native SRT gateway, FLV/RTMP container parsing, MPEG-TS); June 19–20 it (a) completes ingress with a dedicated RTMP gateway and (b) opens the egress half — pulling a MoQ broadcast back out over the same protocols.
- RTMP ingest lands: PR #1824 MERGED “feat(moq-rtmp): RTMP / enhanced-RTMP ingest gateway + E-RTMP codecs” (+2643/−142) — a new
moq-rtmpcrate terminating an RTMP / enhanced-RTMP feed (the OBS / hardware-encoder default that still dominates live contribution) and republishing it as a MoQ broadcast; PR #1826 MERGED adds RTMPS via generic stream + TLS helpers (+429/−40). - The new direction — egress gateways (OPEN June 20 05:xx): PR #1829 “RTMP play mode (egress)” (+895/−178), PR #1828 “moq-srt: serve broadcasts back out over SRT (m=request egress)” (+267/−82), PR #1827 “moq-rtc: H.265 + AV1 egress, unify NALU reshaping via moq-mux” (+220/−91). Together these turn the ingest-only gateways into bidirectional bridges — moq-dev is becoming an any-to-any media gateway (RTMP/SRT/WebRTC/MPEG-TS in and out, with MoQ as the hub).
- Internal qmux relay transport: PR #1810 MERGED “feat(relay): unauthenticated internal listener over qmux (tcp:// + unix://)” (+1046/−52) — a relay-to-relay qmux data path over raw TCP / Unix sockets, with the cross-version qmux WebSocket backward-compat test #1813 CLOSED.
- Media/ops: #1815 generic verbatim MPEG-TS carriage (+1005/−384), #1812 carry all distinct SPS/PPS/VPS through transmux (+611/−264), #1816 moq-net 32 MiB frame cap, #1808/#1809 moq-gst fixes, #1823 public
whip::accept. OPEN #1819 (breaking) makes hardware encoders always-on with openh264 as software fallback, and #1822 adds a multi-broadcast watch inspector + stats dashboard (+2268/−601).
QMux interop is now being built in parallel across two relays — exactly as the chairs’ out-of-charter ruling intended
The June-17 chairs+AD ruling put MOQT-over-QMux outside the WG’s current charter but explicitly permitted interop testing by interested parties as an individual-draft effort. June 19 shows that happening concretely: two independent relays add qmux listeners on the same day.
- moq PR #1810 adds an unauthenticated internal qmux listener (tcp:// + unix://) for relay-to-relay links — Luke Curley building qmux into his own relay (he originated QMux as the Safari/TCP-fallback mechanism).
- moxygen PR #420 MERGED (afrind, “Add proxygen_qmux listener support”, +499/−19) — qmux support in the moxygen reference relay.
This is the post-ruling pattern the wiki predicted: the QMux work can’t enter WG documents until a recharter, but the impl community is hardening it for interop in the meantime — and with afrind’s earlier draft-18 over qmux-01 hackathon probe (June 11) + draft-nandakumar-moq-qmux-moqt, the cross-impl qmux test surface is being assembled outside the WG draft.
moxygen: the June-18 open queue clears, draft-18 capability accrues
The PRs left OPEN in the June-18 update land June 19: PR #411 MERGED (akash-a-n, draft-18 SUBSCRIBE_TRACKS port, +651/−0 as merged) gives moxygen the draft-18 SUBSCRIBE_NAMESPACE→SUBSCRIBE_TRACKS message handling in-code — notably, this accrues draft-18 capability in the codebase even though afrind’s June-16 version-gating keeps the relay advertising 14/16 by default (moxygen stays the stable floor relay while quietly gaining draft-18 support). Also merged: gmarzot’s #416 (moqx-run.sh utility + template config) and #419 (CI benchmark uses a moxygen snapshot tarball instead of source-building), plus two omoq-sync-bot moxygen syncs. afrind’s #421 (mvfst ignore_path_mtu config option) is OPEN June 20.
imquic: the push-to-talk demo merges and goes live in-browser
PR #31 MERGED June 19 15:00 UTC (lminiero, “Push-to-talk MoQ demo”, +1376/−20) — the conversational-media demo OPEN since June 16 lands, and two hours later (June 19 17:22 CEST) Lorenzo Miniero announces a live, publicly-reachable web demo on #moq, breaking the channel’s near-silence:
“just to play a bit more with real-time media, and most importantly in the browser, I wrote a very dumb push-to-talk demo… it’s configured to use my relay, and on the client side it uses Moqtail (thanks Ali!), but there’s a native demo in the imquic repo too.” —
lminiero.it/moqp2t/
How it works: every client subscribes to the push2talk namespace; holding the spacebar publishes an audio track to push2talk-<name> so everyone receives the PUBLISH, with QUIC datagrams carrying the audio packets. It’s Chrome-only (relies on MediaStreamTrackProcessor) and the web encode/decode is admittedly unoptimized (no workers), but it is the first publicly-reachable real-time conversational-media app the wiki has tracked over MoQ — and it exercises two things at once: the PUBLISH-driven (vs SUBSCRIBE-driven) delivery pattern and datagram media end-to-end across two independent impls (imquic relay ↔ Moqtail client, Ali C. Begen’s TS impl). It also lands the same week as Lorenzo’s other media-demo work (the June-9 LOC live-capture demos, the June-12 LOC payload-prefix fix), continuing imquic’s role as the ecosystem’s real-time-media demo surface.
moq-transport: the editorial pipeline pauses
For the first time since the WGLC read-through began, a full day passes with no moq-transport merge (June 19–20). The June-18 8-merge batch is not followed by a June-19 batch; instead afrind’s Security-Considerations cluster (#1780–#1787) is iterated (rebases, review comments) and held OPEN, joining the still-open ianswett (#1779), michalhosna (#1770/#1771), Suhas (#1772–#1777), and Mo Zanaty (#1765 Range Filters) PRs. No new issues were filed. The “find issues → draft conversions” phase is complete; the remaining work is clearing the ~16-PR merge queue + settling Range Filters (the one open design item) before Security Considerations reaches WGLC-complete. The pause most plausibly reflects review bandwidth (afrind drafting and reviewing in parallel) rather than a blocker — but it is a notable break in the daily-merge cadence the wiki tracked June 15–18. See moq-transport.
Activity (June 18 06:00 UTC → June 19 06:00 UTC) — The auth workstream ships its first artifact — draft-ietf-moq-c4m-01 (Common Access Token authorization, Will Law et al.) is published June 18, the WG’s first new draft revision since transport-18 (May 12); the WGLC editorial drain converts in bulk as afrind merges 8 clarification PRs and immediately opens a 9-PR Security-Considerations / error-handling cluster (#1779–#1787) with Ian Swett now drafting alongside; moq-dev lands its big moq-mux importer/catalog decouple (#1749, +3910/−3150) plus relay session-lifecycle + clustering controls and opens a native-H.264-decode PR to drop ffmpeg; moq breaks a 6-day silence to sort out the June 22 virtual interim’s time + missing agenda; interop resumes its daily cadence at 225/66/129/30 (+2)
TL;DR:
- The auth track produces its first concrete output. [[moq-c4m|
draft-ietf-moq-c4m-01]] “Authorization scheme for MOQT using Common Access Tokens” (Will Law (Akamai), Chris Lemmons (Comcast), Gwendal Simon (Synamedia), Suhas Nandakumar (Cisco)) is published June 18 — the first new moq-wg draft revision the wiki has tracked since transport-18 (May 12), and the first C4M revision since WG adoption (c4m-00, 2025-09-19, from the individualdraft-law-moq-cat4moqt). C4M is the signed-bearer-token auth scheme — a CTA-5007-B Common Access Token (a CWT) whosemoqtclaim names the authorized actions (PUBLISH_NAMESPACE/SUBSCRIBE/PUBLISH/FETCH, namespace/track-matched), with optional DPoP proof-of-possession + amoqt-revalrevalidation interval. It’s the scoped-authorization counterpart to privacy-pass’s privacy-preserving model. Martin Duke’s AUTH design team thread (open since June 12) stays active June 18–19 (Manu Gupta, Nemanja Djordjevic, Manish replies). See moq-c4m, moq-privacy-pass. - The WGLC editorial review-issue→PR drain converts in bulk. 8 clarification PRs MERGE June 18 — afrind #1709 (0-RTT security ref), #1708 (Group/Subgroup terminology), #1756 (Message Payload→Message Body, closes #1717), #1749 (complete REDIRECT applicability list, → #1725), #1752 (remove duplicate relay text, → #1715); suhasHere #1656 (PubNs/SubNs Authz); michalhosna #1654 (URI-scheme reorder); and ianswett #1778 “No Node”. Then a fresh 9-PR cluster opens June 18–19, weighted to Security Considerations — afrind #1786 (expand mutual TLS, → #1739), #1783 (restrict reason phrase + impl name to safe ASCII), #1787 (session-vs-per-request GOAWAY migration, → #1706), #1785 (Retry-Interval-0 + REDIRECT, → #1764), #1784 (unexpected REQUEST_UPDATE = session error, → #1769), #1782/#1781/#1780 (relay Forward handling / “re-requesting” / scheduling), plus ianswett #1779 “Rename PUBLISH_BLOCKED to PUBLISH_SKIPPED”. Suhas’s #1772–#1777 + Mo’s Range Filters #1765 stay OPEN. See moq-transport.
- Implementations: moq lands the long-running moq-mux importer/catalog decouple (#1749 MERGED, +3910/−3150) + relay session-lifecycle/clustering (#1789 close sessions on token/cert expiry, #1786
--cluster-id, #1779Unroutable) + lite-05 wire (#1788 fixed-width 64-bit Hop ID) + Go-wrapper hardening (#1784); new direction OPEN #1796 “native H.264 decode (drop ffmpeg dependency)” (+1271/−10) + #1783 (expose connection stats over FFI) + #1794 (remove deprecated catalog aliases). moq-rs #178 draft-18 still OPEN (now +1012/−597). moqx quiet but for gmarzot #416 (moqx-run.sh utility script, OPEN) + a moxygen sync. moqtail docs/DeepWiki-badge commits only. imquic #31 push-to-talk still OPEN. quiche moqt (June 6), moq-js, Moqtopus, quicr/moq-web, moqlivemock, warp-player, Eyevinn/moqtransport, birneee/quiche_moq quiet. - Interop: 225 / 66 / 129 / 30 at 2026-06-19 00:56:39 UTC (draft-18 target; ~29.3% pass) — the daily cadence resumes (index now 06-16 → 06-18 → 06-19; June-17 still the lone gap), with pass 64 → 66 (+2) vs June 18, fail 131 → 129 (−2); matrix flat at 225 cells, skip flat at 30, at-target flat at 40 (· 0 ahead · 185 behind). Same 12-impl set;
moq-rs-draft-18still the only perfectly-aligned at-target impl. The +2 is cross-version main-churn noise (moq-dev’s #1749 decouple + relay/lite-05 work); the at-target draft-18 cells are unchanged. See interop-runner.
The auth workstream ships: draft-ietf-moq-c4m-01 (Common Access Tokens)
For the first time since transport-18 (May 12), a moq-wg draft publishes a new revision: [[moq-c4m|draft-ietf-moq-c4m-01]] “Authorization scheme for MOQT using Common Access Tokens” (June 18, expires 2026-12-20). The authors are Will Law (Akamai), Chris Lemmons (Comcast), Gwendal Simon (Synamedia), and Suhas Nandakumar (Cisco). It is the first revision since WG adoption — the document was adopted as c4m-00 (2025-09-19) from the individual draft-law-moq-cat4moqt-00 (2025-07-22).
C4M is the bearer-token / scoped-authorization half of the WG’s two-track auth design (the other being Privacy Pass, which optimizes for subscriber privacy). The mechanism:
- A Common Access Token (CTA WAVE CTA-5007-B, which is a signed CBOR Web Token / CWT) is presented at connection establishment and with subsequent MOQT actions (PUBLISH_NAMESPACE, SUBSCRIBE, PUBLISH, FETCH); it can be Base64-encoded into a URL.
- The
moqtclaim carries arrays of action scopes — which operations are authorized, each optionally constrained to a namespace and track by exact / prefix / suffix matching. - The
moqt-revalclaim sets revalidation intervals for ongoing streams (re-checking long-lived subscriptions/publications). - Optional DPoP binding (a
cnfconfirmation claim with a JWK thumbprint +catdpopsettings) ties the token to a key so a stolen bearer token can’t be replayed. - Relays enforce by validating the signature (pre-shared secret), checking expiration/claims, matching requested actions to authorized scopes, and — when DPoP is present — verifying proof-of-possession.
Why it matters now: the auth gap has been fragmenting across issues all month (Cullen’s #1662 “How does auth work”, Suhas’s generic-AUTH-challenges #1658, privacy-pass #18), which is exactly why Martin Duke spun up the AUTH design team thread June 12. C4M-01 is the first design-team-era artifact to actually ship — and it lands in parallel with moq-dev’s relay-side PR #1789 (close sessions on token/cert expiry), the implementation echo of C4M’s revalidation/expiry model. The design-team thread itself keeps drawing replies June 18–19 (Manu Gupta, Nemanja Djordjevic, Manish).
The WGLC editorial drain converts in bulk — and Ian Swett joins the drafting
The June-15 read-through (Cullen’s ~59 issues) → June-18 multi-author PR pipeline now closes the loop by merging. June 18 lands 8 clarification merges in a batch, three of which close Cullen review issues directly (Message-Body rename #1717, REDIRECT applicability #1725, duplicate-relay-text #1715), alongside afrind’s 0-RTT + Group/Subgroup-terminology clarifications, suhasHere’s PubNs/SubNs authz, michalhosna’s URI-scheme reorder, and — new this cycle — ianswett’s #1778 “No Node”.
Then afrind re-loads the queue with a 9-PR cluster (June 18–19) that is visibly the Security-Considerations residue of the June-15 read-through:
- PR #1786 “Expand mutual TLS security considerations” (+49/−9) — the substantive answer to fluffy’s mutual-TLS #1739 (note this reverses direction from the June-15 #1754 “drop mutual-TLS speculation” — the WG now wants the section expanded, not deleted).
- PR #1783 “Restrict reason phrase and implementation name to safe ASCII” — the logging/UTF-8 security-hardening Cullen flagged (#1668-style).
- PR #1787 “Clarify session vs. per-request GOAWAY migration” (→ #1706 “Two types of goaway?”), PR #1785 “Clarify Retry Interval of 0 with REDIRECT” (→ sharmafb #1764), PR #1784 “Unexpected REQUEST_UPDATE is a session error” (→ RichLogan #1769) — each closing one of the isolated post-read-through issues.
- Relay-behavior trims #1782 (update Forward handling), #1781 (remove the “re-requesting objects” statement), #1780 (clarify forwarding-preference order in scheduling).
- Plus ianswett’s #1779 “Rename PUBLISH_BLOCKED to PUBLISH_SKIPPED” — a bikeshed/naming fix.
The shift: with afrind merging conversions and re-opening the security residue in the same day, and Ian Swett now contributing his own PRs (#1778, #1779) on top of Suhas’s still-open #1772–#1777 cluster, the editor pipeline is in steady drain. The remaining open backlog is Security Considerations completeness + Suhas’s error-code/timeout cluster + Mo’s Range Filters — the last substantive design item before the section is WGLC-complete.
moq-dev: the importer/catalog decouple lands, the relay gets lifecycle + clustering, and ffmpeg gets dropped from decode
The day’s MERGE headline is PR #1749 “moq-mux: decouple importers from the catalog, split byte-parsing into per-codec splitters, pure frame publishers” (+3910/−3150) — the refactor tracked OPEN since June 16 (it grew through +2916/−1866 → +3426/−2712 → this final shape). It makes per-codec parsing composable across the SRT/FLV/MPEG-TS ingest gateways moq-dev built June 15–16, finishing the contribution-ingest consolidation.
Two other threads stand out:
- Relay session-lifecycle + clustering: PR #1789 “close sessions when the token/cert expires” (+169/−26) is the implementation counterpart to C4M’s revalidation/expiry model (and the transport draft’s auth-token-lifecycle issues) — a relay now actively tears down a session at credential expiry rather than letting it run stale. PR #1786 adds
--cluster-id(fixed origin id) and PR #1779 returnsUnroutablefromrequest_broadcastwhen no route exists — both origin-routing hardening. - Drop ffmpeg, part two: OPEN PR #1796 “native H.264 decode (drop ffmpeg dependency)” (+1271/−10) is the decode counterpart to the June-13 native-H.264-encode bet (PR #1691). Together they remove the last ffmpeg runtime dependency from the media path — the soname-churn/hardware-encoder fragility kixelated has been chasing since early June.
Also merged: a lite-05 wire tweak (#1788 fixed-width 64-bit Hop ID), Go-wrapper hardening (#1784), moq-boy-over-moq-json routing (#1778); OPEN #1783 (connection stats over FFI) + #1794 (remove deprecated catalog aliases). External contributor arielmol’s June-17 moqsink/moq-mux PRs saw no new activity.
moq reopens to schedule the June 22 interim
After 6 straight days of silence (the channel’s newest message had been Martin Duke’s June-12 logo since June 12), the moq channel reopens June 18 — not for design, but logistics: the June 22 virtual interim (scheduled May 26 for 16:30–18:00 UTC) is 4 days out and not on the datatracker calendar. Ali C. Begen asks the chairs for the time; Aman Sharma confirms it’s missing from the datatracker; afrind recalls “9:30–11 Pacific”; Martin Duke gives “1630 UTC”; Victor Vasiliev notes there’s “no agenda” either. afrind adds he “heard the chairs say that folks who yielded London time to MOQT would get a chance” — framing June 22 as the make-up slot for the MSF/CMSF/LOC/Privacy-Pass topics squeezed out of the MOQT-blocker-heavy London agenda. The meeting is real (on-list since May 26) but, as of this update, neither the calendar entry nor the agenda has materialized. See interim-meetings.
Activity (June 17 06:00 UTC → June 18 06:00 UTC) — The chairs rule MOQT-over-QMux out of the WG’s current charter — Magnus Westerlund posts “MOQT over QMUX” June 17 conveying a chairs + AD (Mike Bishop) decision that the TLS+TCP fallback is outside the charter and must proceed as an individual draft (interop encouraged) until a recharter, which scopes afrind’s QMux-framing PR #1628 out of the transport draft; meanwhile the WGLC editorial review-issue→PR drain goes multi-author as Suhas Nandakumar opens a 6-PR cluster (#1772–#1777) converting Cullen’s review issues into spec text alongside afrind’s still-open clarification PRs and new contributor Michal Hošna; moxygen’s multi-threaded relay scaling stack (#361–#365) resumes after the version-gating settled; moq-dev ships latency-range buffered playback + OriginDynamic fallback broadcasts (new contributor Ariel Molina lands a moq-gst rewrite); interop rebounds +4 to 64 on a skipped-June-17 cadence
TL;DR:
- The chairs rule MOQT-over-QMux out of the WG’s current charter. Magnus Westerlund (co-chair) posts “MOQT over QMUX” to the moq@ietf.org list June 17, conveying a decision from the chairs + AD (Mike Bishop): a TLS+TCP fallback transport for MoQT via QMux is outside the WG’s current charter. The recommended path: (1) maintain a separate individual draft documenting the technical requirements, (2) let interested parties continue implementation + interop testing, (3) permit progress updates via the list + WG sessions — but WG documents cannot incorporate QMUX specs/discussion until a recharter happens. This scopes afrind’s PR #1628 “Add QMux framing for moqt-18 over TLS+TCP” (OPEN, fixes #1626) out of the transport draft for now, and reframes the June-11 hackathon “draft-18 over qmux-01” probe +
draft-nandakumar-moq-qmux-moqtas explicitly out-of-charter individual work. See qmux, moq-transport. - The WGLC editorial review-issue→PR drain goes multi-author. Suhas Nandakumar opens a 6-PR cluster (#1772–#1777, June 18, all OPEN) converting Cullen’s review issues into spec text — #1773 protocol-violation error codes organized by area (+200/−54 → #1664), #1774 hex-codepoints→bitfield syntax (→ #1730), #1775 clarify multiple concurrent subscriptions per Track, #1772 URI-scheme security per RFC 7595 §3.7, #1776 missing-data-timeout scenarios+bounds (→ #1743), #1777 move GROUP_ORDER PUBLISH_OK→SUBSCRIBE_TRACKS (→ #1651). They join afrind’s ~10 still-open clarification PRs (iterated June 17–18) and new contributor Michal Hošna’s #1771 (relay processing rules for known Track Properties → his own #1663) + #1770 (make Default Publisher Priority updatable → fluffy #1270). No new merges since June 17 (#1768).
- Implementations: moqx afrind resumes the multi-threaded relay scaling stack — the #361–#365 cluster (OPEN since June 1–2, deferred through London) gets a batch rebase/push June 18 03:23–05:23 UTC (#365 per-thread local forwarders +2810/−365, #362 dedicated-executor relay state, #363 MultiThread test mode, #364 passive-subscriber cache, #361
relay_threadconfig); external akash-a-n #411 “port SUBSCRIBE_TRACKS for draft 18” (+8304/−0, OPEN). moq ships #1620watchlatency-range with buffered playback (+713/−76) + #1772 moq-netOriginDynamicfor unannounced fallback broadcasts (+793/−86), plus #1773 cert-reload busy-loop fix, #1776 embeddable moq-rtc gateway; OPEN #667 “IETF: Joining fetch is gross (JS)” (the JS echo of fill-fetch-replaces-joining-fetch). New external contributor Ariel Molina (arielmol): #1771 moq-gst moqsink rewrite (+2624/−317) + #1770 moq-mux backpressure. moq-rs #178 draft-18 still OPEN; imquic #31 push-to-talk still OPEN (June 16); quiche moqt (June 6), moq-js, moqtail, Moqtopus, quicr/moq-web, moqlivemock, warp-player quiet. - Interop: 225 / 64 / 131 / 30 at 2026-06-18 00:52:53 UTC (draft-18 target; ~28.4% pass) — the June-17 daily cut was skipped (one-day gap), and June-18 resumes with pass 60 → 64 (+4) vs June 16, fail 134 → 131 (−3); matrix flat at 225 cells, skip flat at 30, at-target flat at 40 (· 0 ahead · 185 behind). Same 12-impl set;
moq-rs-draft-18still the only perfectly-aligned at-target impl (18/18). The +4 is cross-version main-churn noise; the at-target draft-18 cells are unchanged. See interop-runner.
The chairs rule MOQT-over-QMux out of the WG charter
For the first time the wiki has tracked, the chairs make an explicit charter-scope ruling on a proposed feature. Magnus Westerlund (co-chair, Ericsson) posts “MOQT over QMUX” to the moq@ietf.org list June 17, conveying a decision reached by the chairs together with the Area Director (Mike Bishop): running MoQT over QMux — the QUIC-multiplexing-over-TLS+TCP polyfill that provides a TCP fallback when UDP/QUIC is blocked (and the path Luke Curley already uses for Safari) — is outside the MoQ WG’s current charter.
The ruling lays out three permitted actions and one hard constraint:
- Maintain a separate individual draft documenting the technical requirements (the existing
draft-nandakumar-moq-qmux-moqtis the natural home). - Interested parties may continue implementation and interop testing — QMux work is not forbidden, just not WG work.
- Progress updates are permitted via the mailing list and WG sessions.
- Constraint: the WG’s documents cannot incorporate QMUX-related specifications or discussion until a recharter has happened.
Why it matters now: afrind had been pulling QMux into the spec’s orbit. His PR #1628 “Add QMux framing for moqt-18 over TLS+TCP” (OPEN since May 11, fixes #1626) proposes that “when the moqt-18 ALPN is negotiated over TLS+TCP, the underlying framing uses QMux version 1” — i.e. QMux framing language inside the transport draft. And on June 11 he asked on #moq: “Does anyone want to try draft-18 over qmux-01?”, with the hackathon producing live TCP-fallback interop. The June-17 ruling settles the venue: PR #1628’s base-spec path is superseded-in-direction — QMux framing must move to the individual draft, and only a recharter can fold it back.
This is the same pattern as the DTS readout (June 7): the WG is consistently pushing optional/transport-adjacent features (Dynamic Track Switching, now QMux TCP-fallback) out of the core draft-18 as it approaches Last Call, accepting them as extensions/individual-drafts rather than base-spec integrations. The difference here is that QMux runs into a harder wall — not “extension vs base spec” but “in charter vs out of charter,” which only a recharter can move.
The review-issue→PR drain goes multi-author (afrind + Suhas + Michal Hošna)
Through June 15–17 the conversion of Cullen Jennings’s ~59-issue draft-18 read-through into spec text was almost entirely afrind. June 18 it becomes a three-contributor pipeline.
Suhas Nandakumar (co-editor, Cisco) opens a 6-PR cluster (June 18 03:25–04:30 UTC, all OPEN), each PR mapping to a specific review issue:
- PR #1773 “Add specific protocol violation error codes organized by protocol area” (+200/−54) — the largest, answering fluffy’s #1664 “Can not differentiate protocol violations” with a structured error-code taxonomy.
- PR #1774 “Replace hex code point enumerations with bitfield syntax” (+39/−13) — addresses fluffy’s #1730 on the Object-Datagram / Subgroup-header Type field + SUBGROUP_ID_MODE.
- PR #1775 “Clarify multiple concurrent subscriptions per Track” (+10/−17) — the Concurrent-Subscribe (#1633) text the London minutes approved (allow concurrent subscriptions with a warning).
- PR #1772 “Add URI scheme security considerations per RFC 7595 Section 3.7” (+15/−2) — Security-Considerations fill-out for the
moqtURI scheme. - PR #1776 “Add guidance on missing data timeout scenarios and bounds” (+39/−1) — the PR for fluffy’s same-day #1743 “Errors from missing data timeouts”.
- PR #1777 “Move GROUP_ORDER from PUBLISH_OK to SUBSCRIBE_TRACKS” (+12/−5) — answers Martin Duke’s #1651 “How does GROUP_ORDER interact with PUBLISH?“.
New contributor Michal Hošna continues his own pipeline: PR #1771 “Specify relay processing rules for known Track Properties” (+17/−2, closing his own #1663 “Known Properties have no defined processing rules”) and PR #1770 “Make Default Publisher Priority an updatable parameter” (+37/−28, answering fluffy #1270). And afrind keeps iterating his ~10 open clarification PRs (June 17–18 pushes on #1752, #1710, #1754, #1749, #1709, #1708, #1698).
The shift: with a co-editor and an external contributor both drafting clarification PRs against Cullen’s review backlog, the WGLC fill-out drains in parallel rather than through afrind as a single throughput bottleneck. The editorial center of gravity is now “merge the open PRs,” not “find more issues” — the read-through has been fully absorbed; what’s left is landing the conversions. New issues are now isolated points (RichLogan’s #1769 “Is an unexpected REQUEST_UPDATE a request or session error?”; fluffy’s #1743), not a wave.
moq-dev ships product polish; #667 is the fill-fetch implementation tell
moq’s June-18 work is downstream hardening, not wire change. The two notable MERGEs (kixelated):
- PR #1620 “feat(watch): latency range with buffered playback” (+713/−76) — a player UX feature letting
<moq-watch>trade latency for smoothness within a chosen window (buffered playback at a latency range rather than a fixed target). - PR #1772 “feat(moq-net): add OriginDynamic for unannounced fallback broadcasts” (+793/−86) — origin-routing resilience: serve a fallback broadcast for a name that was never explicitly announced.
Plus reliability/packaging follow-ons: #1773 stops a cert-reload busy loop + dedupes the FileWatcher; #1776 feature-gates the moq-rtc binary so the WebRTC gateway is embeddable as a library.
The implementation tell is OPEN PR #667 “IETF: Joining fetch is gross (JS)” (+516/−135) — the JS-client counterpart to the WG’s fill-fetch-replaces-joining-fetch consensus (afrind #1673, confirmed in the London minutes): kixelated is removing joining-fetch from the JS client exactly as the spec deletes it. New external contributor Ariel Molina (arielmol) continues to land substantial work on the GStreamer/mux surface — #1771 rewrites moqsink with a unit-tested core (+2624/−317) and #1770 adds moq-mux backpressure + discontinuity().
moxygen’s multi-thread relay scaling resumes post-London
moqx’s #361–#365 stack was afrind’s pre-London sprint (May 27–June 2) for threads > 1 production readiness — cBPF reuseport steering, recvmmsg batching, IOThreadPoolExecutor ownership, per-thread forwarders, the relay_thread config knob. It then sat untouched through the interim while afrind did the June-16 version-gating (pin moxygen to advertise 14/16, exclude draft-18). June 18 sees a batch rebase/push of all five (03:23–05:23 UTC): #365 per-thread local forwarder data path (use_local_forwarders, +2810/−365), #362 isolate relay state on a dedicated executor (+556/−163), #363 MultiThread relay test mode (+788/−206), #364 cache as passive subscriber of the primary forwarder (+894/−212), #361 relay_thread config. Plus external contributor akash-a-n PR #411 “port SUBSCRIBE_TRACKS functionality for draft 18” (+8304/−0, OPEN June 17). The signal: with the floor-relay version story stable, afrind is back on the scaling work — moxygen advancing on two axes (stable 14/16 conformance + multi-threaded throughput) rather than chasing draft-18 on main. gmarzot’s macOS relay_chain segfault Issue #403 remains OPEN.
Activity (June 16 06:00 UTC → June 17 06:00 UTC) — The formal London-interim minutes finally land on the datatracker (Magnus Westerlund, June 16) — for the first time since June 13 the WG’s design decisions are documented as minutes rather than inferred from a GitHub issue/PR proxy, and they confirm every direction the wiki tracked (fill-fetch replacing joining-fetch, switch_from hard mode, Draft-18 as the Vienna interop target, Top-Tracks-as-extension); the day’s fresh design input is range filters becoming the active thrust — Mo Zanaty opens “Add Range Filters” (#1765), the direct follow-up to the interim’s object-range-filters consensus + Ian Swett’s list thread; afrind lands his editorial-clarification merges (closing four Cullen review issues + the Management-Considerations issue); afrind’s moxygen version-gating cluster (14/16, exclude draft-18) merges; moq-dev/moq pivots from ingest gateways to FFI/catalog/packaging (two breaking moq-ffi changes, a published moq-vaapi crate); imquic opens a push-to-talk demo; no new interop run published yet
TL;DR:
- The formal minutes from the June 11–12 London interim are uploaded to the datatracker — Magnus Westerlund posts “Minutes from Interim meeting 260611-260612” to the list June 16 (“I have uploaded draft minutes to the datatracker. Please review so no significant error has slipped in”), linking Day-1 (interim-08) + Day-2 (interim-10). Since June 13 the wiki has flagged “formal written minutes still not posted” and read the interim’s output through its GitHub issue/PR proxy; the minutes now confirm every inferred direction — keep the object-ID filter in object-range-filters, fill-fetch replaces joining-fetch (afrind #1673), switch_from hard mode (#1674/#1675), Draft-18 confirmed as the Vienna interop target, Top-Tracks-Filter continues as an extension, PR #1613 (MAX_REQUEST_UPDATES) approved default-infinity, an AUTH/Privacy-Pass challenge design team, and a next interim ~October (North-American venue TBD). See interim-meetings.
- Range filters become the active design thrust. Mo Zanaty opens PR #1765 “Add Range Filters” (June 16 13:47 UTC, OPEN, +145/−17) — the direct follow-up to the interim’s Day-1 Object-Range-Filters consensus (and the action item to re-add the location filter in a separate PR), building on his longstanding PR #1518 “Filters with reduced scope” (OPEN, +265/−16) and answering Ian Swett’s June-15 “Filters on SUBSCRIBE_TRACKS” list thread. This is the first genuinely-new wire-design input after the June-14/15 editorial-review wave was absorbed.
- afrind’s editorial-clarification PRs land. Four MERGE June 16 ~22:16–22:18 UTC — #1757 (name the Section-7 priority parameters), #1751 (point Subscribing-to-Namespaces at the matching definition), #1750 (render the SUBSCRIBE_NAMESPACE example in recommended name syntax), #1753 (clarify Message-Parameter types are defined in subsections) — closing four Cullen review issues (#1733/#1697/#1726/#1718). sharmafb lands two wire-table fixes — #1766 (change
i→vi64in message Type fields) MERGED, #1768 (reconcile §15.8/§2.5 application-specific params) MERGED, closing the long-standing codepoint-conflict #1646 (#1767 superseded/CLOSED). The new Management Considerations issue #1713 is also CLOSED (section being added). - Implementations: moq pivots from the SRT/FLV ingest gateways to FFI / catalog / packaging (June 16 06:00 → June 17, ~12 PRs MERGED, all kixelated unless noted) — two breaking moq-ffi changes: #1761 “defer dynamic track accept so media tracks declare a timescale” (+383/−114, breaking; ties to the timestamp-extension track-level Timescale), #1763 “expose Subscription and TrackInfo instead of hardcoding defaults” (+204/−53, breaking); @moq/json catalog: #1767 (Catalog Producer/Consumer wrapping @moq/json, +115/−44), #1765 (default delta_ratio to 8, +114/−65), #1762; #1757 replace the cros-codecs git dep with the published
moq-vaapicrate (+100/−341), termoose #1758 standardise pkg-config paths (breaking). New external contributor arielmol #1770 “cap pending AU growth and add discontinuity()” (+514/−15, OPEN); big WIP #1749 moq-mux importer/catalog decouple now ~+2900 LOC. imquic #31 “Push-to-talk MoQ demo” OPEN (lminiero, +1330/−4). moqx afrind version-gating cluster MERGES (#405/#406/#407, June 16 14:02–14:05 UTC). moq-rs #178 draft-18 request-ID removal still OPEN (+1155/−553). quiche moqt (June 6), moq-js, moqtail, Moqtopus, quicr/moq-web, moqlivemock, warp-player, Eyevinn/moqtransport quiet. - Interop: no new run published — newest is still the 2026-06-16 00:57:25 UTC report: 225 / 60 / 134 / 30 (draft-18 target; ~26.7% pass; at-target 40 · 0 ahead · 185 behind; 12-impl set). The June-17 daily cut had not posted by check time (it typically appears ~00:5x UTC). The minutes confirm Draft-18 as the Vienna interop target and Mike English’s plan to expand coverage from a handful of cases to ~70, so the at-target matrix has explicit WG backing to keep filling. 29-day cadence streak intact (latest published run still June 16; June-17 cut not yet posted).
The formal London-interim minutes land — design directions documented, not inferred
For the first time since the formal London interim closed June 12, the WG’s decisions are written down. Magnus Westerlund (co-chair, Ericsson) posts “Minutes from Interim meeting 260611-260612” to the moq@ietf.org list June 16 (“I have uploaded draft minutes to the datatracker. Please review so no significant error has slipped in”), with two documents: Day-1 / interim-08 (June 11) and Day-2 / interim-10 (June 12) (chairs: Magnus Westerlund + Martin Duke; 33 attendees Day-1, ~29/26 Day-2).
Since June 13 the wiki has read the interim’s output through a GitHub issue/PR proxy — Cullen’s issue bursts, afrind’s SWITCH_FROM/fill-fetch cluster, the AUTH design team thread — and inferred the design directions from them. The minutes now confirm those inferences point-for-point:
- Object Range Filters (Mo Zanaty, PR #1518) — consensus to keep the object-ID filter despite keyframe-reliability concerns; separate PR to re-add the location filter after working through fetch-semantics interaction → exactly Mo’s June-16 PR #1765 below.
- Joining Fetch / Fill Fetch (Alan Frindell + Mo Zanaty) — survey showed mixed views on the current design; strong positive sentiment for “fill fetch” replacing joining fetch (subscriptions deliver past groups through fetch-formatted streams), design team to handle priority/error edge cases → afrind’s PR #1673. Victor Vasiliev noted fill-fetch removes joining-fetch’s hazards; Ali Begen pushed to include groups beyond the current group.
- switch_from (Alan) — consensus to proceed with “hard mode”; softer modes deferred pending use-case analysis → afrind’s PR #1674/#1675.
- Other MOQT issues — Remove Request ID from GOAWAY; PUBLISH_DONE must precede FIN on response streams; allow concurrent subscriptions with warning text; rate-limiting via PR #1613 (MAX_REQUEST_UPDATES, approved with default infinity); track properties remain immutable (priority updates via object properties / the data plane).
- Day-2 Interop Report (Mike English) — Draft-18 confirmed as the Vienna interop target; consensus to expand the runner from a handful of cases to ~70 while holding the Draft-18 baseline.
- Top Tracks Filter (Mo Zanaty / Cullen Jennings, renamed from “Track Filter”) — negligible measured overhead; continues as an extension pending a second independent implementation.
- MSF/CMSF (Will Law, draft-01: encryption + metrics tracks + URL schema), Secure Objects (Cullen — fan-out attack analysis, canonicalization, test vectors; near WGLC readiness), Privacy Pass (Suhas — working prototype of three flows; needs a challenge-mechanism design team → the June-12 AUTH design team).
- DOS design-team readout (Mike English) — relay resource protection, continuing toward the Vienna deadline.
- Next interim — ~October, ~12-week horizon, North-American venue pending.
The takeaway: the wiki’s June-13→16 reconstruction was accurate — the interim genuinely produced decisions, and the GitHub PR cluster afrind opened June 14 (SWITCH_FROM, fill-fetch) was the faithful spec-text encoding of the floor consensus. The minutes close the 27-day “no minutes” gap the interim-meetings page has been tracking. See interim-meetings, moq-transport.
Range filters become the active design thrust; the editorial wave’s merges land
With Cullen’s ~70-issue editorial read-through (June 12–15) now absorbed, the fresh wire-design input is range filters. Mo Zanaty opens PR #1765 “Add Range Filters” (June 16 13:47 UTC, OPEN, +145/−17) — the direct follow-up to the interim’s object-range-filters consensus and the explicit action item to re-add the location filter in a separate PR. It builds on his longstanding PR #1518 “Filters with reduced scope, no location or group filter” (still OPEN, +265/−16) and answers Ian Swett’s June-15 “Filters on SUBSCRIBE_TRACKS” list thread (reply from Mo). Filters are now the live front after the editorial wave.
Meanwhile afrind’s editorial-clarification PRs convert into merges. Four land June 16 ~22:16–22:18 UTC — #1757 (name the Section-7 priority parameters/properties → closes Cullen #1733), #1751 (point Subscribing-to-Namespaces at the matching definition → #1697), #1750 (render the SUBSCRIBE_NAMESPACE example in recommended name syntax → #1726), #1753 (clarify Message-Parameter types are defined in subsections → #1718). sharmafb lands two wire-table consistency fixes — #1766 (i→vi64 in message Type fields) and #1768 (reconcile the §15.8 vs §2.5 application-specific-property reservations), the latter closing the long-standing codepoint-conflict Issue #1646 that sharmafb himself opened June 3 (#1767 was the superseded first attempt, CLOSED). afrind’s IANA-registry cluster (#1759–#1763) stays OPEN, and the new Management Considerations tracking issue #1713 is CLOSED as the section is added. See moq-transport.
moq-dev/moq pivots from ingest gateways to FFI / catalog / packaging
After the June-15/16 broadcast-ingest gateways (SRT, FLV/RTMP), moq’s June-16/17 burst (~12 PRs MERGED, all kixelated unless noted) turns to the FFI surface, the catalog, and packaging:
- Two breaking moq-ffi changes — PR #1761 MERGED “feat(moq-ffi)!: defer dynamic track accept so media tracks declare a timescale” (+383/−114) makes a media track declare a Timescale before it is accepted — the moq-lite/FFI analogue of the [[moq-timestamp|
draft-lcurley-moq-timestamp]] track-level Timescale, so timestamps are interpretable downstream; PR #1763 MERGED “feat(moq-ffi)!: expose Subscription and TrackInfo instead of hardcoding defaults” (+204/−53) surfaces the real subscription/track metadata through the C FFI rather than baking in defaults. - @moq/json catalog — PR #1767 MERGED adds
Catalog.Producer/Consumerwrapping@moq/json(+115/−44); PR #1765 MERGED defaultsdelta_ratioto 8 and counts only delta bytes (+114/−65); PR #1762 MERGED wires up the devDependency. - Packaging — PR #1757 MERGED “replace the cros-codecs git dep with the published
moq-vaapicrate” (+100/−341) — the VAAPI backend reintroduced June 14 on a git dependency is now a published crate, removing a git pin; termoose PR #1758 MERGED “standardise the pkg-config paths” (+27/−14, breaking) forlibmoqconsumers.
New external contributor arielmol (who landed the June-12/13 MPEG-TS audio + SCTE-35 work) opens PR #1770 “feat(moq-mux): cap pending AU growth and add discontinuity()” (+514/−15, OPEN) — backpressure + a discontinuity signal on the mux. The large in-progress PR #1749 (decouple moq-mux importers from the catalog, split per-codec splitters) has grown to ~+2916/−1866, with #1726 (@moq/wasm drop-in) and #1727 (metadata-over-MoQ) still open. Separately, imquic opens PR #31 “Push-to-talk MoQ demo” (lminiero, +1330/−4, OPEN) — a new conversational-media demo on top of the LOC send/recv pair. See moq-dev, imquic.
Activity (June 15 06:00 UTC → June 16 06:00 UTC) — The draft-18 editorial wave decays to a trickle — afrind’s residual PRs are IANA-registry / relay-text cleanups (the extensibility tail of the Last-Call fill-out), and the only fresh design input is Ian Swett’s “Filters on SUBSCRIBE_TRACKS” list thread; the day’s real momentum is in moq-dev/moq, which turns to broadcast contribution ingest (a native SRT gateway + FLV/RTMP container support + arbitrary custom tracks), while afrind separately goes hands-on version-gating the moxygen reference relay (default 14/16, exclude draft-18); interop rebounds +5 to 60 pass, exactly the predicted recovery of the June-15 dip
TL;DR:
- The spec side is in the tail of the June-14/15 editorial-review wave (the Cullen-Jennings read-through section below). afrind adds a small IANA-registry / relay-text cleanup PR cluster (#1759–#1763, June 15 06:20–06:22 UTC, all OPEN) — the extensibility angle of the WGLC fill-out after June-15’s Security + Management push: #1760 make the Object-Status payload rule extensible via an IANA registry, #1761 add an IANA registry for extension/version compatibility (answering Cullen’s June-14 #1681), #1759 recommend Immutable Properties for relay-visible unmodifiable data, plus relay-behavior trims #1762 (remove relay reorder/drop exception) + #1763 (remove stray relay-prioritization SHOULD). Two June-15 clarification PRs MERGE (#1712 varint encodings; #1758 subgroup-end-via-FIN). Cullen’s review-issue volume drops to a trickle — only sharmafb #1764 “Make retry interval = 0 and REDIRECT error code illegal?” opens (June 16); #1746 closes. New mailing-list thread — Ian Swett’s “Filters on SUBSCRIBE_TRACKS” (June 15, reply Mo Zanaty) — filter semantics on the draft-18-renamed message. No new Datatracker revision (transport-18 Day +35;
draft-ietf-moq-dts4moq404; [[moq-timestamp|draft-lcurley-moq-timestamp-00]] unchanged). Slack near-silent (newest still Martin Duke’s June-12 “I made us a logo”). No new MoQ Monthly (#2). tobbee/moq-llm-wiki: no open issues. - afrind goes hands-on in the moxygen/moqx reference relay, version-gating it for the draft-18 transition (June 15 16:57 → June 16 01:46 UTC): #405 default MOQT versions to 14,16 — excluding draft-18 (the relay deliberately does not advertise draft-18 yet), #406 gate bidi NAMESPACE forwarding on negotiated draft ≥16, #407 re-enable the relay_chain Direction-4 gating + macOS run (connects to gmarzot’s macOS segfault Issue #403), #408 PR-#362 review feedback (CLOSED). See openmoq.
- Implementations: moq turns to broadcast contribution ingest (June 15 14:40 → June 16 06:00 UTC, all kixelated, ~13 PRs MERGED) — #1747 moq-srt: SRT contribution ingest gateway (+949/−27), #1745 FLV (Flash Video / RTMP) container support in moq-mux (+1286/−4), #1748 publish & subscribe arbitrary custom tracks within a broadcast (+350/−105); plus #1741 mTLS + preferred_address on the noq backend (+186/−19), #1744
<moq-watch visible>download-distance control (+135/−24), #1746 moq-relay/healthreverts to a plain liveness probe, dropping sysinfo (+21/−876), and a lite-05 wire change #1753 “remove per-frame duration from Frame and the lite-05 wire” (+39/−186, breaking); new OPEN #1749 decouple moq-mux single-track importers from the broadcast catalog (+461/−240). imquic #30 MERGED (lminiero, fix nested-namespace SUBSCRIBE_NAMESPACE/SUBSCRIBE_TRACKS notifications surfaced in interop, +100/−27). moqx afrind version-gating cluster (above). moq-rs #178 draft-18 request-ID removal still OPEN (unchanged). quiche moqt (June 6), moq-js, moqtail, Moqtopus, quicr/moq-web, moqlivemock, warp-player (dependabot only), Eyevinn/moqtransport quiet. - Interop: 225 / 60 / 134 / 30 at 2026-06-16 00:57:25 UTC (draft-18 target; ~26.7% pass) — pass rebounds 55 → 60 (+5), fail 139 → 134 (−5), recovering the June-15 dip to the June-14 level; matrix flat at 225 cells, skip flat at 30, at-target flat at 40 (· 0 ahead · 185 behind). Same 12-impl set;
moq-rs-draft-18still the only perfectly-aligned at-target impl (18/18). The +5 is exactly the rebound the June-15 entry predicted — the −5 was transient matrix-on-mainnoise from June-14 moq-dev churn, not a regression. 29-day cadence streak (new longest).
moq-dev/moq turns to broadcast contribution ingest — SRT + FLV/RTMP on-ramps
The wiki has tracked moq’s steadily widening egress gateway surface — WebRTC (moq-rtc, May 29), MPEG-TS (June 2), HLS / LL-HLS (moq-hls, June 7), fMP4, and MKV. June 15–16 adds the other direction — contribution ingress (June 15 14:40 → June 16 06:00 UTC, all kixelated):
- SRT ingest gateway — PR #1747 MERGED “feat(moq-srt): SRT contribution ingest gateway” (+949/−27) — a new
moq-srtcrate that terminates an SRT contribution feed and republishes it as a MoQ broadcast. SRT is the de-facto pro contribution protocol (low-latency feeds from venue to cloud), so this is moq-dev positioning as a drop-in ingest tier. - FLV / RTMP container — PR #1745 MERGED “Add FLV (Flash Video / RTMP) container support to moq-mux” (+1286/−4) — moq-mux can now parse the FLV container that RTMP carries, i.e. the legacy encoder default (OBS, hardware encoders) that still dominates live contribution. Paired with SRT, moq-dev now ingests the two protocols a broadcaster is most likely to already be sending.
- Arbitrary custom tracks — PR #1748 MERGED “feat: publish & subscribe arbitrary custom tracks within a broadcast” (+350/−105) — generalizes a broadcast beyond the fixed audio/video/catalog track set so an ingest gateway can carry application-defined side-tracks (timed metadata, ancillary data) through unchanged. PR #1749 OPEN then decouples the moq-mux single-track importers (opus, H.264) from the broadcast catalog (+461/−240), the refactor that makes per-track importers composable for these gateways.
Alongside the ingest work: PR #1741 MERGED adds mTLS + a QUIC preferred_address to the noq backend (+186/−19); PR #1744 MERGED adds a visible attribute on <moq-watch> so an off-screen player can be told how far ahead to keep downloading (+135/−24); and PR #1746 MERGED makes moq-relay’s /health a plain liveness probe again, dropping the sysinfo dependency (+21/−876) — a deliberate walk-back of the June-3 PR #1604 CPU/RAM/RX/TX load-shedding endpoint to a simpler liveness check. A moq-lite-05 wire change also lands: PR #1753 MERGED “feat(moq-net)!: remove per-frame duration from Frame and the lite-05 wire” (+39/−186, breaking) — strips the duration field that the June-11 PR #1681 had added per-frame (timestamp is retained), aligning moq-lite with the timestamp-extension model where duration is optional rather than carried on every frame. This is the cross-version churn the interop matrix runs against on main. See moq-dev.
afrind version-gates the moxygen reference relay; the editorial tail; the interop rebound
Two smaller threads close the day. afrind goes hands-on in the moxygen/moqx C++ relay, but the work is version negotiation, not draft-18 conformance: PR #405 sets moxygen’s default advertised MOQT versions to 14,16 — explicitly excluding draft-18; PR #406 gates bidi NAMESPACE forwarding on a negotiated draft ≥16; PR #407 re-enables the relay_chain Direction-4 gating + the macOS run — the macOS path connects to gmarzot’s still-open segfault Issue #403. The decision is the relay-operator mirror of the interop matrix’s cross-version-noise story: keep moxygen a stable floor relay on 14/16 rather than chase draft-18 on main and re-break 14/16 interop — while moq-rs-draft-18 carries the at-target draft-18 cells. See openmoq.
On the spec side, the June-14/15 editorial-review wave is now a trickle: afrind’s residual June-15 PRs (#1759–#1763) are IANA-registry additions (extensible Object-Status payloads, an extension/version-compatibility registry) + relay-text trims — the extensibility / IANA-Considerations piece of the WGLC fill-out, following the Security + Management sections. Only one new issue (#1764) and one new list thread (Ian Swett’s “Filters on SUBSCRIBE_TRACKS”, reply Mo Zanaty) opened — isolated points, not a new wave. And interop rebounds +5 to 60 pass (2026-06-16 report), recovering the June-15 −5 dip exactly as that entry predicted; the 40 at-target draft-18 cells held flat throughout, confirming the dip was impl-main noise rather than a draft-18 regression. See moq-transport, interop-runner.
Activity (June 14 06:00 UTC → June 15 06:00 UTC) — draft-18’s work-mode flips from London structural design to a full editorial review pass: Cullen Jennings files ~59 moq-transport issues in a single day (#1677–#1748), concentrated on Security Considerations + a new Management Considerations section, and afrind answers in a same-day editor↔reviewer loop (merges ~8 trivial editorial PRs, opens ~15 clarification PRs); moq-dev/moq finishes the Windows capture path + a JSR-publishing wave; interop dips −5 to 55 pass on the recurring matrix-on-main noise pattern
TL;DR:
- Cullen Jennings (
fluffy) runs a comprehensive read-through of draft-18 and files ~59 moq-transport issues June 14–15 (#1677–#1748) — by far the largest single-author issue burst the wiki has tracked, dwarfing his own June-12 ~11-issue burst. The wave targets the sections an IETF draft needs filled out before Last Call: a large Security Considerations cluster (URI-scheme security #1679, bearer-token risk #1688, protecting E2E content from relays #1711, impersonation #1737, mutual TLS #1739, replay attacks #1740, E2E-encryption schemes #1741, resource exhaustion #1742); a brand-new Management Considerations push (#1683/#1713 section, #1692 client diagnostics, #1693 metrics); plus naming/bikeshed (#1694 forward-state name, #1717 Message Payload terminology, #1745 implementation string, #1747 IMMUTABLE_PROPERTIES naming), URI/namespace (#1678 structured query space, #1680 i18n, #1695–#1697/#1699 discovery/resolution/matching/authority), auth-token lifecycle (#1685 when evaluated, #1724 which token errored, #1744 rate limits), and fetch/fill/object-model items. Several auth items were opened and closed the same day (#1686/#1687/#1719/#1721/#1723/#1736). See moq-transport. - afrind answers in a tight, same-day editor↔reviewer loop. He merges ~8 small editorial PRs (#1657 PROPERTIES-bit June 14 13:03 UTC; then June 15 04:53–05:02 UTC #1734/#1731/#1714/#1700/#1691/#1690/#1689, several authored by fluffy + sharmafb) and opens ~15 clarification PRs (#1698 FIN-vs-RST/STOP_SENDING — supersedes CLOSED #1676; #1708 Group/Subgroup terminology; #1709 reference 0-RTT security; #1710 namespace discovery; #1712 varint multiple encodings; #1749–#1758), several explicitly tracking specific review issues — recommend Secure Objects for confidentiality #1755 (→#1711), drop mutual-TLS speculation #1754 (→#1739), rename Message Payload→Message Body #1756 (→#1717), subgroup end signaled by FIN not Object Status #1758 (→#1728). No new Datatracker revision (transport-18 Day +34;
draft-ietf-moq-dts4moqstill unsubmitted, 404; [[moq-timestamp|draft-lcurley-moq-timestamp-00]] unchanged). Mailing list adds only two June-14 items — Jordi Cenzano’s moq-encoder-player v16 release (“big refactor + prettify”) + the weekly GitHub digest; no new design threads. Slack near-silent (newest still Martin Duke’s June-12 “I made us a logo”). No new MoQ Monthly (#2). tobbee/moq-llm-wiki: no open issues. - Implementations: moq finishes the Windows capture path + runs a JSR-publishing wave (June 14 ~15:00 → ~23:01 UTC, kixelated unless noted, ~15 PRs MERGED) — #1718 Windows D3D11 zero-copy + HW H.264 MERGED (+981/−88), #1732 Windows dual-stack IPv4/IPv6 +
setup.bat+just dev(+289/−12), #1740 HW-encoder test (#1737 Media-Foundation HW-encode CLOSED as superseded); JSR: #1725 publish to JSR alongside npm (+152/−19), #1729<moq-console>demo output (+256/−2), #1738/#1733/#1731/#1730 doc-gen/license/race fixes; kio reworks #1735 (Producer::poll/wait read-only predicate, +98/−94) + #1739 (split waiters by condition, +238/−24); #1728 remove capture from moq-cli (+9/−209); #1717 unauthorized-announce session-survival MERGED (+304/−6); new OPEN #1727 metadata-over-MoQ helpers (+1686/−6) + #1726@moq/wasmdrop-in for@moq/net(+1982/−415). moqx #402 bot sync + new macOS relay_chain segfault Issue #403 (gmarzot). moq-rs #178 draft-18 request-ID removal still OPEN (now +1133/−551). quiche moqt (June 6), imquic, moq-js, moqtail, Moqtopus, quicr/moq-web, moqlivemock, warp-player, Eyevinn/moqtransport quiet. - Interop: 225 / 55 / 139 / 30 at 2026-06-15 00:53:18 UTC (draft-18 target; ~24.4% pass) — pass dips 60 → 55 (−5), fail 134 → 139 (+5); matrix flat at 225 cells, skip flat at 30, at-target flat at 40 (· 0 ahead · 185 behind). Same 12-impl registration set, no shape change. The −5 is most plausibly cross-version noise from moq-dev/moq’s heavy June-14 main-branch churn (Windows-capture / JSR / kio reshapes) — the recurring matrix-on-
mainsensitivity pattern (cf. May-22/24, May-28, June-5/6), not a registration or shape change; the 40 at-target draft-18 cells are unaffected. 28-day cadence streak (new longest).
Cullen Jennings reads draft-18 end-to-end — the largest issue burst yet
The June-9→14 arc the wiki tracked was structural: SWITCH-as-a-parameter, fill-fetch streams, the AUTH design team, the Joining-FETCH replacement — new wire features designed at and after the London interim. June 14–15 is a different mode entirely. Cullen Jennings (fluffy) does a full editorial read-through of draft-18 and files ~59 moq-transport issues in a single day (#1677 through #1748) — the largest single-author issue burst the wiki has tracked, roughly 5× his own June-12 ~11-issue post-interim burst.
What is striking is which parts of the document he reads. The wave is concentrated on the boilerplate IETF requires before a Working-Group Last Call:
- Security Considerations (the biggest theme): #1679 URI-scheme security considerations, #1684 0-RTT warning, #1688 risk of bearer tokens, #1711 protecting end-to-end content from relays, #1737 preventing impersonation, #1738 inter-relay identification, #1739 mutual TLS, #1740 replay attacks, #1741 E2E-encryption schemes, #1742 resource-exhaustion section, #1743 errors from missing-data timeouts.
- Management Considerations (a section that doesn’t yet exist): #1683/#1713 add a Management Considerations section, #1692 a way for a client to get diagnostic data from a relay, #1693 well-defined metrics for management.
- Naming / bikeshed: #1694 forward-state name, #1717 Message Payload terminology, #1722 REQUEST_ERROR name alias, #1745 “nothing good comes from an implementation string”, #1747 IMMUTABLE_PROPERTIES property naming.
- URI / namespace: #1678 prefer a structured MOQT query space, #1680 URI internationalization, #1695 namespace discovery, #1696 URI resolution, #1697 name matching, #1699 authoritative-for-namespace, #1701 subscriber MAY send to any publisher, #1726 update examples to recommended syntax.
- Auth-token lifecycle: #1685 when are auth tokens evaluated, #1724 which token caused the error, #1744 rate limits for SUBSCRIBE_NAMESPACE/SUBSCRIBE_TRACKS — plus several opened+closed the same day (#1686 tokens-passed-upstream, #1687 non-bearer challenge schemes, #1736 aggregated subscription authorization), folded back toward the existing AUTH design team workstream rather than re-litigated.
- Fetch / fill / object model: #1702 priority ambiguity between datagrams and subgroups, #1707 upstream fetch for multiple publishers, #1720 fill-timeout reduction by a relay, #1727 extensibility of objects with non-zero status, #1728 end-of-subgroup markers, #1730 datagram/subgroup header Type + SUBGROUP_ID_MODE, #1748 standalone-fetch end limits; plus #1681 (IANA table to track required extensions per MOQ version).
afrind (the document editor) answers in a tight, same-day loop. He merges ~8 trivial editorial PRs (punctuation, formatting, ALPN/AI-mention text, a 0-RTT SUBSCRIBE_NAMESPACE→SUBSCRIBE_TRACKS fix from sharmafb) and opens ~15 clarification PRs that map directly onto the review issues — #1755 points readers at Secure Objects for confidentiality (→#1711), #1754 drops the out-of-scope mutual-TLS speculation (→#1739), #1756 renames “Message Payload” to “Message Body” (→#1717), #1758 clarifies that subgroup end is signaled by stream FIN, not an Object Status (→#1728), #1712 notes that variable-length integers have multiple encodings. The June-14 SWITCH_FROM cluster (#1673/#1674/#1675) remains open in parallel — the substantive wire design now lives in PRs while the document gets polished around it. See moq-transport.
moq-dev/moq: Windows capture path finishes; a JSR-publishing wave
moq follows its native-capture bet onto Windows and then pivots to packaging/distribution (June 14 ~15:00 → ~23:01 UTC, kixelated unless noted):
- Windows capture lands: PR #1718 MERGED “Windows D3D11 zero-copy GPU capture + hardware H.264 encoder” (+981/−88) — the June-14 OPEN giant lands; PR #1732 MERGED adds Windows dual-stack IPv4/IPv6 sockets +
setup.bat+just dev(+289/−12); PR #1740 MERGED covers the Windows HW encoder with a test. The competing PR #1737 (Media-Foundation HW encode) is CLOSED as superseded by the D3D11 path. - JSR-publishing wave: PR #1725 MERGED publishes the JS packages to JSR alongside npm (+152/−19), with PR #1738 (document exported symbols for JSR, +370/−76), PR #1733/PR #1730 (doc-gen + parallel-download-race fixes), PR #1731 (normalize JSR license) following. PR #1729 surfaces console output on the web demos via a new
<moq-console>element (+256/−2). - kio internals + cleanup: PR #1735 reworks
Producer::poll/waitinto a read-only predicate returning aMut(+98/−94); PR #1739 splits waiters by condition so writes don’t churn closed/consumer waiters (+238/−24); PR #1728 removes the capture feature frommoq-cli(+9/−209) now that capture lives inmoq-video; PR #1717 MERGED “don’t tear down session on unauthorized announce-interest” (+304/−6). - New OPEN client surfaces: PR #1727 “moq-data: metadata-over-MoQ helpers (set + json)” (+1686/−6) and PR #1726 “
@moq/wasmas a drop-in for@moq/net” (+1982/−415) — both widen the publish/watch surface.
Separately, moqx sees a moxygen bot sync (PR #402) and a new macOS Issue #403 from Giovanni Marzot (gmarzot): a relay_chain segfault in proxygen’s WebTransport uni-stream dispatch after a proxygen/mvfst dependency bump — the second moqx build/runtime fragility surfacing at the proxygen layer. See moq-dev.
Activity (June 13 06:00 UTC → June 14 06:00 UTC) — The post-interim backlog starts converting from issues into PRs: afrind opens a SWITCH_FROM track-switching PR cluster (#1674 + #1675) plus a fill-fetch redesign (#1673, revising #1642) in a ~33-minute window, and runs a triage/assignment pass over the post-interim issue backlog (assigning owners, closing #1023); moq-dev/moq’s native-capture / drop-ffmpeg arc continues into June 14 (V4L2 + Windows Media Foundation + D3D11 zero-copy + NVENC + VAAPI-via-cros-codecs; nokhwa dropped) plus moq-net fan-out/API hardening; interop ticks +3 to 60 pass
TL;DR:
- The interim’s “triage backlog” (June 13 finding) begins converting into concrete spec PRs. In a ~33-minute window (June 14 00:18–00:51 UTC), afrind opens three moq-transport PRs that materialize two London-interim design directions at once: Track Switching — PR #1674 “Track Switching via the SWITCH_FROM parameter” (+97/−0; a
SWITCH_FROMparameter for SUBSCRIBE/PUBLISH_OK/REQUEST_UPDATE with a Mode enum + a “Hard” mode flipping Forward State + a “Publish Done” option, see Issue #1354) and PR #1675 “SWITCH_FROM Soft Mode” (+14/−3; a group-aligned “Soft” mode that drains the suspend track by ending its filter at Start Group−1); and the Joining-FETCH→fill-fetch redesign — PR #1673 “Replace Joining FETCH with fill fetch streams” (+205/−179), a revision of PR #1642 that lets any object range on a subscription be satisfied (the pre-Largest-Object portion arriving on a unidirectional fill fetch stream), adding aRelativeStartFillfilter +FILL_PARAMETERS(fill-specific priority/group-order). Earlier (June 13 12:30–13:07 UTC) afrind ran a triage/assignment pass over ~10 backlog issues (assigning owners — e.g. Suhas/Mo on the TIMESTAMP-codepoint-collision #1647 — and closing #1023 “Subgroups and DELIVERY_TIMEOUT can result in pathological FETCH” as COMPLETED, the exact FETCH surface the fill-fetch redesign reworks). See moq-transport. - No new specs/threads/minutes; the list and Slack are quiet. No new Datatracker revision (transport-18 Day +33;
draft-ietf-moq-dts4moqstill unsubmitted, 404; [[moq-timestamp|draft-lcurley-moq-timestamp-00]] unchanged at -00). No new mailing-list threads since June 12 (the AUTH-design-team + timestamp threads are the latest; no formal interim minutes posted yet). Slack near-silent (newest message still Martin Duke’s June-12 “I made us a logo”). No new MoQ Monthly (still #2, May 31). tobbee/moq-llm-wiki: no open issues. - Implementations: moq extends its native-capture / drop-ffmpeg arc (June 13 14:06 → June 14 05:23 UTC, kixelated unless noted, ~13 PRs MERGED) — capture goes fully native per-platform: #1704 native V4L2 + NVENC-via-dlopen, drop VAAPI+nokhwa (+448/−673), #1716 native Windows Media Foundation capture, drop nokhwa (+422/−283), #1720 reintroduce VAAPI via discord/cros-codecs + NV12 (+460/−38), with #1718 OPEN (Windows D3D11 zero-copy GPU capture + hardware H.264, +976/−88). moq-net hardening: #1714 js/net real broadcast fan-out (+543/−34), #1715 release cached state on producer abort (+251/−8), #1713 revert origin builder toward main (+428/−333), #1707 tighten public API, #1711
--tls-system-roots; plus skirsten@moq/watchfixes (#1365/#1399/#1400). moq-rs (#178 draft-18 request-ID removal still OPEN), imquic, quiche moqt (June 6), moq-js, moqtail, Moqtopus (June 11), quicr/moq-web (June 9), moqx, moqlivemock (June 8), warp-player, Eyevinn/moqtransport quiet. - Interop: 225 / 60 / 134 / 30 at 2026-06-14 00:50:22 UTC (draft-18 target; ~26.7% pass) — pass climbs 57 → 60 (+3), fail 137 → 134 (−3); matrix flat at 225 cells, skip flat at 30, at-target flat at 40 (· 0 ahead · 185 behind). The June-13 moq-dev draft-18 join is now stabilizing into passing cells rather than adding new ones — the +3 is the at-target pass count climbing on a structurally unchanged matrix. 27-day cadence streak (new longest).
The post-interim backlog converts to PRs: SWITCH_FROM + fill-fetch
The June-13 wiki entry’s key finding was that the London interim’s deliverable was “a triage backlog, not minutes” — ~11 Cullen-Jennings transport issues + ~7 Gwendal-Simon MSF issues, no written minutes. June 13–14 is the first sign of that backlog converting into spec PRs, and it is afrind doing the conversion in two moves:
- June 13 12:30–13:07 UTC — a triage/assignment pass. afrind walks ~10 backlog issues, assigning owners (e.g. assigning + mentioning Suhas and Mo Zanaty on the #1647 TIMESTAMP/SUBGROUP_DELIVERY_TIMEOUT codepoint collision; assigning the Concurrent-Subscribe #1633; commenting on the DDoS-security-section #374 and privacy #515) and closing Issue #1023 “Subgroups and DELIVERY_TIMEOUT can result in pathological FETCH” as COMPLETED. The backlog is getting owners, not just labels.
- June 14 00:18–00:51 UTC — three new PRs in 33 minutes. afrind opens, in sequence:
- PR #1673 “Replace Joining FETCH with fill fetch streams” (00:18 UTC, +205/−179) — a revision of the June-2 PR #1642. It generalizes the fill design so that any range of objects passed to a subscription can be satisfied: the portion of the range before Largest Object arrives on a fill fetch stream (a unidirectional stream beginning with a
FETCH_HEADER). Renames theAbsoluteStart/Rangefilters toAbsoluteStart/RangeFill, adds a newRelativeStartFillfilter, adds aFILL_PARAMETERSparameter carrying fill-specific versions ofSUBSCRIBER_PRIORITY/GROUP_ORDER, and updates the priority algorithm to order objects on the fill-fetch portion vs the live portion. (#1642 itself was also touched 00:19 UTC; both remain OPEN, #1673 as the working revision.) - PR #1674 “Track Switching via the SWITCH_FROM parameter” (00:50 UTC, +97/−0) — introduces a new
SWITCH_FROMparameter that can appear in SUBSCRIBE, PUBLISH_OK, or REQUEST_UPDATE, with a Mode enum controlling the switching algorithm. The base algorithm + a single “Hard” mode (which flips the Forward State) are defined; subsequent PRs add more modes. A “Publish Done” option lets the subscriber control whether the other (suspend) track is closed or left open after the switch. Explicitly answers Issue #1354 (acbegen, “Why do we need a dedicated SWITCH message?“) — i.e. SWITCH-as-a-parameter rather than a dedicated control message. - PR #1675 “SWITCH_FROM Soft Mode” (00:50 UTC, +14/−3) — the first follow-on mode: a “Soft” switch mode that assumes group alignment between the suspend and resume tracks, executing the switch by updating the suspend subscription’s filter to end at Start Group − 1, allowing graceful draining and preventing a gap between the two tracks’ aligned groups.
- PR #1673 “Replace Joining FETCH with fill fetch streams” (00:18 UTC, +205/−179) — a revision of the June-2 PR #1642. It generalizes the fill design so that any range of objects passed to a subscription can be satisfied: the portion of the range before Largest Object arrives on a fill fetch stream (a unidirectional stream beginning with a
Together this is the spec-PR counterpart to the June-12 issue burst: the SWITCH/DTS “Implementation Lessons” interim slot and the Joining-FETCH-replacement agenda item both now have concrete draft text, authored by the same chair (afrind) who triaged the issue backlog hours earlier. The June-9→14 arc — hackathon floor interop → formal sessions → issue burst → triage+PRs — closes another loop. See moq-transport, interim-meetings.
moq-dev/moq: capture goes fully native per-platform; moq-net hardening
moq carries the June-12/13 ffmpeg-removal / native-capture bet straight into June 14, now landing the per-platform capture backends one by one (June 13 14:06 → June 14 05:23 UTC, kixelated unless noted):
- Linux: PR #1704 MERGED June 13 23:42 UTC “native V4L2 capture, NVENC via dlopen, drop VAAPI + nokhwa” (+448/−673) — the June-13 OPEN item lands.
- Windows: PR #1716 MERGED June 14 02:54 UTC “native Windows Media Foundation capture, drop nokhwa” (+422/−283), with PR #1718 OPEN June 14 05:23 UTC adding D3D11 zero-copy GPU capture + hardware H.264 (+976/−88).
- VAAPI reintroduced cleanly: PR #1720 MERGED June 14 04:53 UTC “reintroduce VAAPI via discord/cros-codecs + NV12 surfaces” (+460/−38) — after #1704 dropped the unbuildable old VAAPI backend, this brings it back on a maintained crate. (PR #1680, the “ship capture in release binaries with dynamic ffmpeg” approach, is CLOSED June 14 04:59 — superseded by the native path.)
Alongside the capture work, moq-net gets a hardening pass: PR #1714 (js/net real broadcast fan-out, +543/−34), PR #1715 (release cached state when a producer is aborted/dropped, +251/−8), PR #1713 (revert origin builder/Session toward main’s shape, +428/−333), PR #1707 (tighten public API surface), PR #1711 (--tls-system-roots), PR #1717 OPEN (don’t tear down session on unauthorized announce-interest), PR #1712 (unblock deadlocking dynamic_track_request tests). Plus a batch of skirsten @moq/watch player fixes (#1365 expose AudioContext, #1399/#1400 close MultiBackend sources + stop leaking PromiseReactions). See moq-dev.
Activity (June 12 06:00 UTC → June 13 06:00 UTC) — Formal London interim concludes (Day-2, June 12); the interim’s design backlog erupts as a GitHub issue wave (Cullen Jennings ~11 moq-transport issues, Gwendal Simon ~7 MSF issues), a new individual I-D lands (draft-lcurley-moq-timestamp-00 formalizing the moq-lite per-frame timestamp wire change), and Martin Duke spins up an AUTH design team on the list; moq-dev/moq runs its largest media-pipeline burst yet (drop-ffmpeg, overlay UIs, legacy MPEG-TS audio); moq-rs starts draft-18 request-ID removal (#178); imquic lands the LOC private-object payload prefix (#29, resolving the June-9 ambiguity); interop at-target more than doubles 16→40 as moq-dev’s Rust+JS endpoints join draft-18
TL;DR:
- The formal interim wraps on Day-2 (June 12), and within hours its design discussions become a flood of GitHub issues. Mike English posted the Day-2 morning interim-10 session 35336 link (June 12 10:32 CEST); the afternoon interim-11 ran the Top-N/MSF/CMSF/Privacy-Pass/Secure-Objects/LOC block. The visible output is a post-interim issue wave: Cullen Jennings (
fluffy) opens ~11 moq-transport clarification/design issues June 12 (#1661–#1672: subgroup→stream mapping, object ordering, “how does auth work”, varint footgun, Sub Group terminology, protocol-violation differentiation, priority-without-per-object), plus Michal Hošna’s #1663 (Known Properties have no defined processing rules); Gwendal Simon opens ~7 MSF issues (#178–#184, several tagged LondonInterim: catalog mutability after creation, MSF/CMSF URL fragments, event-timeline header, initData update, LOCMAF reference, object-to-stream mapping). No spec PRs merged; suhasHere’s PR #1659 (REQUEST_ERROR Error Payload) is CLOSED June 12 without merge. See moq-transport, moq-msf, interim-meetings. - A new individual draft —
draft-lcurley-moq-timestamp-00— lands June 12, formalizing the moq-lite per-frame timestamp wire change as a portable MOQT extension. Luke Curley posts MoQ Object Timestamp Extension (June 12, expires Dec 14 2026): a track-level Timescale property + object-level Timestamp property + optional Duration property, so relays make consistent age-based drop/timeout decisions without parsing media containers. It is the spec counterpart to moq’s PR #1681 (per-frame timestamp+duration on the moq-lite-05 wire, merged June 12) and to Martin Duke’s new list thread “How timestamps totally solve delivery timeout” (June 12, replies from Luke Curley) — the same delivery-timeout question behind the June-11 close of Issue #1489. Separately, Martin Duke opens an “AUTH design team” thread (June 12, replies from Mike English, Aman Sharma, Suhas Nandakumar, Cullen Jennings) — the coordination venue for the auth gap Cullen’s #1662 (“How does auth work”), Suhas’s #1658 (generic AUTH challenges), and thibmeu’s new privacy-pass #18 all point at. No new WG revision (transport-18 Day +32;draft-ietf-moq-dts4moqstill unsubmitted); no new MoQ Monthly (still #2); no formal interim minutes posted yet. See moq-timestamp, moq-transport, moq-privacy-pass. - Implementations: moq runs its largest media-pipeline burst yet (June 12 15:30 → June 13 05:47 UTC, kixelated unless noted, ~15 PRs MERGED) — #1691 native per-platform H.264 + zero-copy capture, drop ffmpeg MERGED (+3561/−698), #1682 overlay player UIs MERGED (+3372/−1266), #1701 (arielmol) moq-mux legacy MPEG-TS mp2/ac-3/e-ac-3 audio ingest+export MERGED (+1377/−13), #1698 certificate pinning MERGED, #1686 Windows/winget CI MERGED, #1706 BBR3 + #1705 cluster.connect-full-URL + #1708 mic-error + moq-mux SIMD hardening (#1694–#1697) MERGED; new OPEN #1704 drop-VAAPI/add-NVENC, #1707, #1710, #1692. moq-rs #178 OPEN (englishm, “draft-18: Remove MAX_REQUEST_ID, use bidi streams for requests”, +753/−568). imquic #29 MERGED (lminiero, LOC private-object payload prefix, +151/−52). moqx bot sync (#401). quiche moqt, moq-js (PR #72), moqtail, Moqtopus, moqlivemock, warp-player, Eyevinn/moqtransport, quicr/moq-web quiet.
- Interop: 225 / 57 / 137 / 30 at 2026-06-13 00:51:28 UTC (draft-18 target; ~25.3% pass) — matrix grows 213 → 225 cells (+12), pass 55 → 57 (+2), and at-target more than doubles 16 → 40 (· 0 ahead · 185 behind) as
moq-dev-rsandmoq-dev-jsjoin draft-18 pairings against the registered draft-18 endpoints. 26-day cadence streak (new longest). The draft-18 matrix keeps filling in as more impls advertise the target.
Formal London interim concludes — the post-interim GitHub issue wave
The hybrid interim closes on Day-2 (June 12) — morning interim-10 session 35336 (Mike English posted the link 10:32 CEST) ran the Interop Report + DOS readout + conditional SWITCH/DTS, and the afternoon interim-11 ran the Top-N / MSF-CMSF / Privacy-Pass / Secure-Objects / LOC block. Slack itself is quiet (only Mike’s session link and Martin Duke’s “I made us a logo” June 12 15:49 CEST), but the design output is dumped straight into the issue trackers within hours:
- moq-transport — Cullen Jennings (
fluffy) opens ~11 issues June 12 (11:13-14:28 UTC): #1661 (publisher priority change without per-object marking), #1662 (“How does auth work”), #1664 (can’t differentiate protocol violations), #1665 (groups need not be temporally ordered), #1666 (define “Sub Group” in terminology), #1667 (varint footgun warning), #1668 (UTF-8-to-logging security consideration), #1669 (shorter Parsing-Serialized-Names text), #1670 (order of objects), #1671 (object-ID gaps ≠ non-existence), #1672 (objects in same subgroup SHOULD share a stream). Plus Michal Hošna #1663 (Known Properties have no defined processing rules). This is the largest single-author moq-transport issue burst the wiki has tracked — Cullen converting his Day-2 floor notes into a triage queue (mirrors his pre-London editorial bursts). suhasHere’s PR #1659 (Error Payload for binary challenge data) is CLOSED June 12 13:13 without merge — the privacy-pass challenge-carrier question moves to the new auth design team rather than a point PR. - MSF — Gwendal Simon opens ~7 issues June 12 (13:44-14:31 UTC, several tagged LondonInterim): #178 (update of initData), #179 (event-timeline header section) + #180 (Suhas, “should event timeline track have a header section”), #181 (MSF/CMSF fragment identifier in URL), #182 (MOQT Object-to-Stream mapping, opened+closed same day), #183 (can track properties in the catalog be modified after creation), #184 (LOCMAF reference). See moq-msf.
- privacy-pass — thibmeu #18 (“Specify token challenge and acquisition during regular operation”, June 12 12:25 UTC) — extends his June-11 17 on retry + issuer interaction (see moq-privacy-pass).
A new I-D for object timestamps + an AUTH design team
Two list-level moves convert interim discussion into durable artifacts:
draft-lcurley-moq-timestamp-00— Luke Curley posts the MoQ Object Timestamp Extension (June 12, expires Dec 14 2026): a small MOQT extension defining a track-level Timescale property (time units), an object-level Timestamp property (presentation time), and an optional Duration property, “enabling relays to make consistent age-based dropping decisions without parsing media containers.” It lifts the per-frame timestamp+duration carriage Luke just merged on the moq-lite-05 wire (moq PR #1681, June 12) into a portable, container-agnostic transport extension — and is the concrete spec behind Martin Duke’s June-12 list thread “How timestamps totally solve delivery timeout” (Martin argues object timestamps let relays make age-based drop/timeout decisions identically across hops, regardless of buffering/jitter — the gap behind the June-11 closure of delivery-timeout Issue #1489 and the long-runningTIMESTAMP/SUBGROUP_DELIVERY_TIMEOUTproperty work). See moq-timestamp.- AUTH design team — Martin Duke opens an “AUTH design team” thread June 12 (replies from Mike English, Aman Sharma, Suhas Nandakumar, Cullen Jennings) to coordinate the authentication work now fragmenting across Cullen’s #1662, Suhas’s generic-AUTH-challenges #1658, thibmeu’s privacy-pass issues, and the just-closed Error-Payload PR #1659. Auth is now an explicit cross-draft workstream rather than scattered point fixes.
moq-dev/moq: the largest media-pipeline burst yet; the ffmpeg-removal bet lands
With draft-18 conformance and the moq-lite-05 timestamp wire behind it, moq spends June 12-13 on the broadest media-surface push the wiki has tracked. The headline is PR #1691 MERGED June 13 02:33 UTC (+3561/−698) — native per-platform H.264 codecs + zero-copy capture, dropping ffmpeg-next — the June-12 OPEN giant lands, betting on hardware encoders to remove the soname-churn fragility behind recent capture bugs (the follow-on PR #1704 OPEN drops the unbuildable VAAPI backend and adds NVENC CI). Alongside it: PR #1682 overlay player UIs MERGED (+3372/−1266), PR #1701 (arielmol) moq-mux ingest+export of legacy non-browser MPEG-TS audio (MP2 / AC-3 / E-AC-3) MERGED (+1377/−13, broadening the June-12 SCTE-35 TS round-trip into legacy broadcast audio), certificate pinning for native+browser clients (#1698), BBR3 congestion control (#1706), cluster.connect-full-URL (#1705), and a cluster of SIMD moq-mux MPEG-TS sync/start-code hardening (#1694/#1695/#1696/#1697). On the matrix this shows up as moq-dev-rs and moq-dev-js joining draft-18 pairings, driving the at-target count from 16 to 40. See moq-dev, interop-runner.
moq-rs starts draft-18 request-ID removal; imquic resolves the LOC private-object encoding
Two implementation moves track directly to open spec questions:
- moq-rs PR #178 OPEN June 12 (englishm, +753/−568) “draft-18: Remove MAX_REQUEST_ID, use bidi streams for requests” — the first substantial follow-on to the June-11 draft-18 merge, implementing the request-ID removal / requests-on-bidi-streams direction the WG converged on (cf. martinduke’s June-8 “it’d be great to get rid of request ID” on Issue #1653). It targets the rolling
draft-18-devbranch behind themoq-rs-draft-18interop relay. See moq-rs. - imquic PR #29 MERGED June 12 08:54 UTC (lminiero, +151/−52) “Add mechanism for adding payload prefix (for LOC private objects)” — the implementation answer to the June-9 floor ambiguity about how LOC private properties are framed (omit-the-block vs write-a-zero-count): imquic now writes an explicit payload prefix for LOC private objects, closing the encoding gap Lorenzo surfaced building his LOC live-media demos. See imquic, moq-loc.
Activity (June 11 06:00 UTC → June 12 06:00 UTC) — Formal London interim opens: hybrid sessions June 11 (Day-1) + June 12 (Day-2 in progress); hackathon momentum converts into WG decisions and registered matrix endpoints; cloudflare/moq-rs lands draft-18 (PR #173) and deploys a draft-18-interop relay → runner registers moq-rs-draft-18, at-target triples 5→16; Mike English creates an ad-hoc-interop-reports wiki page; Moqtopus↔imquic objects flow after PR #28; moq-dev/moq burst widens the media pipeline (SCTE-35 round-trip, AAC, drop-ffmpeg)
TL;DR:
- The formal interim sessions begin and the hackathon’s draft-18 momentum becomes WG decisions in real time. Two June-11 Meetecho sessions ran (morning interim-08 session 35333, afternoon 35334); June 12 runs the Day-2 interim-10 morning + interim-11 afternoon (Interop Report, DOS readout, MSF/CMSF, DTS, Top-N filter). Outcomes surface as moq-transport triage within hours: afrind resolves Issue #1650 — “Discussed in London — agree to remove the SHOULD in favor of giving relays more discretion” (the Forward=1-upstream over-strength) — and closes #1489 (Reconnect Timeout) + #1507 (sender bitrate); Martin Duke opens Issue #1660 (“SUBSCRIBE_TRACKS should contain SUBSCRIBE parameters” — London consensus). See interim-meetings, moq-transport.
- cloudflare/moq-rs lands draft-18 in a single day — closing the version-axis gap the wiki flagged June 11 as the last holdout. moq-rs PR #173 “Start work on draft-18” MERGED June 11 10:52 UTC (+5638/−3477); follow-on PR #176 (Draft) routes ongoing fixes to a
draft-18-devbranch auto-deployed tomoqt://draft-18-interop.cloudflare.mediaoverquic.com:443. The June 12 00:52 UTC runner report registersmoq-rs-draft-18as a third draft-18 endpoint (aftermoqt-nr+imquic), tripling at-target 5 → 16. See interop-runner, interop-endpoints. - Mike English creates a new GitHub-wiki page for anecdotal interop, formalizing the floor-vs-matrix split. June 11 13:19 CEST: “I started a new page in the wiki to capture anecdotal reports of interop… Getting formal and systematic interop test results via the interop-runner is still the priority, but it’d be helpful for my interop report if people can fill in more info about anything not represented in the interop runner yet.” —
moq-wg/moq-transport/wiki/ad-hoc-interop-reports, already listing Suhas’s moq-web ↔ Lorenzo/Nokia/mvfst relays and Kota’s Moqtopus ↔ imquic. Moqtopus↔imquic now exchanges objects: after imquic PR #28 merged June 10 21:24, Kota Yatagai June 11 04:07 CEST — “Successfully received object… SETUP, SUBSCRIBE, SUBSCRIBE_OK, REQUEST_ERROR and subgroup objects properly negotiated and handled.” afrind also enabled draft-18 over qmux-01 on the moxygen relay (June 11 09:51). No new Datatracker revision (transport-18 Day +31; dts4moq still unsubmitted); no new MoQ Monthly (still #2). - Implementations: moq Day-2/3 burst (June 11 19:42 → June 12 03:46 UTC, kixelated unless noted) — #1681 moq-lite-05 negotiate-by-default + per-frame timestamp+duration on the wire MERGED (+278/−84), #1685 (arielmol) moq-mux SCTE-35 export back to MPEG-TS MERGED (+1165/−42), #1690 AAC encode + #1689 canvas/encoded preview + #1674 (Qizot) moq-ffi dynamic tracks MERGED; new OPEN #1691 native per-platform H.264 + zero-copy capture (drop ffmpeg, +11213/−2893), #1682 overlay player UIs, #1686 Windows/winget, #1684 (Qizot). moq-rs #173 draft-18 MERGED + #176 dev branch + #177 docs. imquic Moqtopus interop confirmed. Moqtopus (kota-yata) direct pushes. moqx bot sync (#400). quiche moqt, moq-js (PR #72), moqtail, moqlivemock, warp-player, Eyevinn/moqtransport, quicr/moq-web quiet.
- Interop: 213 / 55 / 128 / 30 at 2026-06-12 00:52:26 UTC (draft-18 target; 25.8% pass) — matrix grows 202 → 213 cells (+11), pass 50 → 55 (+5), at-target triples 5 → 16 (· 0 ahead · 197 behind) as
moq-rs-draft-18registers. Extra intra-day run at 15:02 UTC during the session. 25-day cadence streak (new longest).
Formal London interim opens — Day-1 outcomes land as GitHub triage
The June 9-10 hackathon rolls into the formal hybrid interim. Day-1 (interim-08, June 11) ran two Meetecho sessions — morning session 35333 (Mike English posted the link at 10:37 CEST: “Please log in to Meetecho even if in person for bluesheet and queuing purposes”) and afternoon session 35334 (Magnus Westerlund, 14:10 CEST). The agenda’s MOQT-blocker focus (Concurrent Subscribe, Object Range Filters, Joining FETCH, Request Blocking, two “Other MOQT Issues” blocks, SWITCH/DTS lessons) shows up in the repo as a triage wave that evening (~20:55-21:21 UTC):
- Issue #1650 (afrind, “Forward Handling SHOULD set Forward=1 upstream is too strong”) — afrind 20:57 UTC: “Discussed in London — agree to remove the SHOULD in favor of giving relays more discretion.” The over-strong normative SHOULD is softened to relay discretion.
- Issue #1489 (“Reconnect Timeout?“) + Issue #1507 (“get sender’s bitrate”) — CLOSED during the pass.
- Issue #1660 OPEN June 11 15:05 UTC (martinduke, “SUBSCRIBE_TRACKS should contain SUBSCRIBE parameters”) — captures a London-consensus item: SUBSCRIBE_TRACKS may carry SUBSCRIBE-only parameters, and the resulting PUBLISH messages should behave as if those parameters were on a SUBSCRIBE.
Day-2 (June 12) runs the morning interim-10 (Interop Report by Mike, DOS design-team readout, conditional SWITCH/DTS issues) + afternoon interim-11 (Top-N DDoS/issues/impl, MSF/CMSF, Privacy Pass, Secure Objects, LOC) — in progress at check time; slide decks + recordings posted, formal written minutes not yet finalized. See interim-meetings.
cloudflare/moq-rs lands draft-18 and deploys a draft-18-interop relay
The June-11 wiki entry’s standing caveat was that cloudflare/moq-rs — the version-axis laggard, main still draft-14 — had not landed draft-18 on the hackathon floor (PR #173 OPEN). That closes June 11: Mike English merges PR #173 “Start work on draft-18” at 10:52 UTC (+5638/−3477), and immediately opens PR #176 (Draft) “Support draft-18” as the rolling dev vehicle — all draft-18 bugfixes target a draft-18-dev branch (not main), auto-deployed to moqt://draft-18-interop.cloudflare.mediaoverquic.com:443. By the June 12 00:52 UTC report the runner lists moq-rs-draft-18 as a registered endpoint — a third draft-18 endpoint after Nokia’s moqt-nr and imquic, lifting the matrix’s at-target count 5 → 16. moq-rs thus catches the draft-18 train one day after the wiki named it the holdout; see moq-rs, interop-runner, interop-endpoints.
Mike English’s ad-hoc-interop-reports page — formalizing the floor vs the matrix
For two weeks the interop story has had two tracks: the automated interop-runner (cross-version matrix run against each impl’s main) and the hackathon floor (manually-stood-up draft-18 relays, live media flow the runner can’t see). June 11 13:19 CEST, Mike English institutionalizes the gap with a new GitHub-wiki page, ad-hoc-interop-reports: “capture anecdotal reports of interop that various implementations have achieved… [the runner] is still the priority, but it’d be helpful for my interop report if people can fill in more info about anything not represented in the interop runner yet.” The page already records Suhas Nandakumar’s moq-web (draft-18) ↔ Lorenzo’s / Nokia Research / mvfst relays and Kota Yatagai’s Moqtopus ↔ imquic. It feeds directly into Mike’s June-12 Day-2 Interop Report slot. The Moqtopus↔imquic pairing also completes on Day 2: after imquic PR #28 (kota-yata’s publisher-priority-bit fix) merged June 10 21:24, Kota reports June 11 04:07 CEST — “Successfully received object… SETUP, SUBSCRIBE, SUBSCRIBE_OK, REQUEST_ERROR and subgroup objects properly negotiated and handled between Moqtopus and imquic” — turning the prior day’s “invalid subgroup object status” failure into working object flow. See imquic.
Activity (June 10 06:00 UTC → June 11 06:00 UTC) — London hackathon Day 2: cross-implementation draft-18 interop lands and the interop runner breaks the 0-at-target floor — Suhas’s quicr/moq-web (draft-18) interoperates with four relays (moxygen, Nokia Research, imquic, Luke’s); the runner registers its first draft-18 endpoints (moqt-nr + imquic-18); DTS consensus call resolved as a WG extension (Martin Duke explains to Cullen); afrind queues 31 issues for the London “Other MOQT Issues” blocks
TL;DR:
- Day 2 turns the previous day’s failed SETUP exchanges into working cross-implementation draft-18 interop. Suhas Nandakumar’s quicr/moq-web draft-18 client (
quicr.github.io/moq-web/branches/draft-18/) reports working publish/subscribe interop against three relays in one afternoon: Lorenzo’s imquic (lminiero.it:9000— “publish/subscribe flow working. Something with sub-namespace flow is not working yet”), the Nokia Research relay (moqt.nokiaresearch.com:4443/moq), and afrind’s moxygen relay (fb.mvfst.net:9448/moq-relay). Kota Yatagai’s Moqtopus subscriber negotiated SETUP + SUBSCRIBE/SUBSCRIBE_OK against imquic, with object reception still failing on “invalid subgroup object status”. afrind tallies four draft-18 relays available for testing — “Luke, Yu, Lorenzo and us” (Luke’scdn.moq.dev, Yu You/Nokia, Lorenzo/imquic, afrind/moxygen). This is the first day the wiki records successful draft-18 cross-impl media flow, not just bring-up failures. - The interop runner registers its first draft-18 endpoints — the 0-at-target floor the wiki has flagged for ~10 days finally breaks. The June 11 00:49 UTC report shows the matrix grow 176 → 202 cells with
moqt-nr(Nokia Research, draft-18) newly registered andimquicnow advertising draft-18/17/16 — version breakdown shifts from 0 at target to 5 at target · 0 ahead · 197 behind (the 26 new cells are all skips). Mike English’s stated Day-1 goal — “run some draft-18 interop through the interop runner and show tests passing” — is now structurally in reach (he revived moq-interop-runner PR #57 to land imquic-18). See interop-runner, interop-endpoints. - The DTS/SWITCH consensus call resolves: DTS proceeds as a separate WG extension, and Martin Duke explains the reasoning to Cullen. On the “Consensus Call: DTS and SWITCH” thread (opened June 5), Martin Duke answers Cullen Jennings’s June-6 process challenge June 10: “the show of hands in the interim was roughly even between for and against… that is not rough consensus” (for base-spec integration), “there were no objections to adopting as an extension” — so Will Law proceeds with
draft-ietf-moq-dts4moq, with later integration into MOQT left open. Separately afrind posts the “MOQT London Issues” deck queuing 31 non-editorial issues for the two interim “Other MOQT Issues” blocks (plus any draft-18 issues filed June 10-11), and opens PR #1657 (clarify PROPERTIES bit) while suhasHere opens PR #1656 (PubNs/SubNs authz). Mo Zanaty replies June 11 on the Joining FETCH thread. No new Datatracker revision (transport-18 Day +30; dts4moq still unsubmitted); no new MoQ Monthly (still #2). - Implementations: moq continues its hackathon burst (kixelated) — #1669 webcam capture+publish MERGED (+2109/−422), #1675
moq-benchrelay load-generator CLI MERGED (+1343/−0), #1677 command-focused interop quickstart + #1678 favicon MERGED; new OPEN #1681 (moq-lite-05 negotiate-by-default + per-frame timestamp/duration on the wire), #1680 static-ffmpeg capture binaries, #1679<moq-publish>simulcast (YogiSotho), #1674 moq-ffi dynamic track requests (Qizot). moq-rs PR #174 MERGED (renandincer,socket_wrapperhook, +100/−3) + #175 release. imquic PR #28 MERGED (kota-yata, fix publisher priority-bit handling, +3/−3 — Moqtopus author fixing an interop bug in imquic). Moqtopus (kota-yata) active via direct pushes (RequestError/ErrorCode enum, transport adapter, “Update interop client”). moqx housekeeping (#399 sync, #396 remove CODEOWNERS). quiche moqt, moq-js (PR #72), moqtail, moqlivemock, warp-player, Eyevinn/moqtransport quiet. - Interop: 202 / 50 / 126 / 26 at 2026-06-11 00:49:24 UTC (draft-18 target) — matrix grows 176 → 202 cells (+26, all new cells skip); pass 51 → 50 (−1) but the version breakdown flips to 5 at target · 0 ahead · 197 behind (was 0 at target for 9 days). First draft-18 endpoints registered (
moqt-nr/Nokia +imquicdraft-18). 24-day cadence streak (new longest). The automated matrix and the floor interop now finally point the same way: draft-18 is live.
London hackathon Day 2 — cross-implementation draft-18 interop works
The June 9-10 hackathon’s second day delivers what Day 1 was bringing up: successful draft-18 interop across independent implementations. Suhas Nandakumar’s quicr/moq-web draft-18 client (a deploy-branch build at quicr.github.io/moq-web/branches/draft-18/) drives the floor, reporting working publish/subscribe flow against three separate relays over June 10:
- Lorenzo’s imquic
lminiero.it:9000— 14:51 CEST: “I get publish/subscribe flow working. Something with sub-namespace flow is not working yet.” (The SUBSCRIBE_NAMESPACE / announce path remains the rough edge — the same surface moq PR #1668 fixed on Day 1.) - Nokia Research relay
moqt.nokiaresearch.com:4443/moq— 17:13 CEST, the v17/v18 relay Yu You pre-announced June 2 now live and reachable. - afrind’s moxygen relay
fb.mvfst.net:9448/moq-relay— 23:56 CEST, against the mvfst relay afrind stood up Day 1.
Earlier in the day afrind takes stock (11:00 CEST): “So the 18 relays available for testing so far are Luke, Yu, Lorenzo and us?” — confirming four draft-18 relays on the floor (Luke Curley’s hop-routed cdn.moq.dev, Nokia, imquic, moxygen), with Mike English adding he’d have a moq-rs draft-18 relay up “today, too, but probably with a lot of gaps still.” Kota Yatagai’s Moqtopus (C++/MsQuic Unreal Engine client) 17:35 CEST: “Moqtopus subscriber successfully negotiated SETUP and SUBSCRIBE/SUBSCRIBE_OK with imquic. Object reception fails with invalid subgroup object status” — and kota-yata fixes a reciprocal interop bug in imquic the same evening (imquic PR #28, publisher priority-bit handling). Luke Curley June 11 03:06 CEST closes the day pointing newcomers at the moq.dev clients (doc.moq.dev interop guide). This is the first day the wiki records draft-18 media actually flowing between independent stacks, not just SETUP-exchange debugging.
The interop runner registers draft-18 — the 0-at-target floor breaks
The floor work feeds straight into the automated matrix. The June 11 00:49 UTC report is the first to register draft-18 endpoints: moqt-nr (Nokia Research, draft-18) appears as a new implementation entry, and imquic now advertises draft-18/17/16 (Mike English revived moq-interop-runner PR #57 to land it). The matrix grows 176 → 202 cells and the version breakdown shifts from the 0 at target it held for nine consecutive days (June 2-10) to 5 at target · 0 ahead · 197 behind; the 26 new cells are all skips (draft-18 endpoints with few defined draft-18 peers yet), and pass dips one to 50. The point is not the pass count — it is that the structural lever the wiki has flagged since June 1 (matrix-on-draft-18 vs no-impl-registered-at-draft-18) is finally pulled: Mike English’s Day-1 goal of “run some draft-18 interop through the interop runner and show tests passing” now has the endpoints in place to be exercised. See interop-runner, interop-endpoints.
DTS/SWITCH consensus call resolves; Martin Duke explains the reasoning
The “Consensus Call: DTS and SWITCH” thread (Martin Duke, June 5) reaches its conclusion June 10 — and resolves the process dispute Cullen Jennings raised June 6 (“How did you reach the conclusion that there is consensus this should be an extension?”). Martin Duke (chair) replies: “Beyond the feedback on the list, the show of hands in the interim was roughly even between for and against, and many (but not all) list responders were in the interim as well. In our view, that is not rough consensus” — i.e. base-spec integration lacked rough consensus — “there were no objections to adopting as an extension.” So the path forward stands: Will Law publishes his wilaw/dts4moq work as draft-ietf-moq-dts4moq (not yet submitted as of June 11), with the door left open to “later [reach] a state where it could be merged into MOQT.” This closes the back-and-forth the wiki tracked June 4-8 (June-4 readout → Cullen contests June 6 → Gwendal’s June-8 (D)DoS review on the base-spec PR #1638). DTS now feeds the conditional June-12 Day-2 slot as extension work, with Ali Begen’s “SWITCH/DTS Implementation Lessons” in the June-11 Day-1 tail. See moq-transport, interim-meetings.
moq-transport: afrind’s 31-issue London deck + two new authz/editorial PRs (no new revision)
With formal sessions starting June 11, afrind posts the “MOQT London Issues” deck to the list (June 10, posted as -01 incorporating Ian’s updates) covering “All non-editorial issues that are not trivial and do not have another agenda slot assigned” — currently 31 such issues, with plans to fold in any draft-18 issues filed June 10-11. This is the agenda input for the two hour-long “Other MOQT Issues” blocks (Alan + Ian) on the Day-1 interim-08 agenda. Two new PRs open the same day: PR #1657 OPEN June 10 (afrind, “Clarify PROPERTIES bit description”, +2/−2) and PR #1656 OPEN June 10 (suhasHere, “Address concerns around PubNs and SubNs Authz”, +40/−0). On the list, Mo Zanaty replies June 11 on afrind’s “Joining FETCH Replacement Proposal” thread (the design behind PR #1642, the Day-1 1045-1145 agenda item). No new Datatracker revision (transport-18 Day +30); the DTS PR #1638 and Fill PR #1642 remain OPEN into the formal sessions. See moq-transport.
Activity (June 9 06:00 UTC → June 10 06:00 UTC) — London hackathon Day 1: first hands-on draft-18 interop — afrind’s moxygen relay (14/16/18) goes live, Lorenzo’s imquic + Luke’s hop-routed relay join; SETUP exchanges fail then recover; afrind ships a draft-18 wire decoder; LOC private-properties ambiguity surfaces; Will Law proposes dual Track+Object initData; gwendalsimon reviews the Joining-FETCH/Fill PR; interop +3 to 51
TL;DR:
- The hackathon’s first day is live cross-implementation draft-18 bring-up, not spec work. Mike English opens a Google Meet for remote participants, framing the day’s goal: “get to the point where we can run some draft-18 interop through the interop runner and show tests passing.” afrind’s moxygen relay goes live at
fb.mvfst.net:9448(QUIC + WebTransport, versions 14/16/18 — first announced draft-18 relay endpoint; known gaps: no REDIRECT errors, no GOAWAY-on-request-stream, no PUBLISH_BLOCKED), joining Lorenzo Miniero’s imquic relay (lminiero.it:9000) and Luke Curley’s hop-routedcdn.moq.dev. The predictable early-bring-up failures dominate the floor: afrind’s “first (failed) SETUP exchange on draft-18”, Suhas Nandakumar “connected and it failed for not getting server setup” against Lorenzo’s relay, afrind’s connection “silently closed after setup” by Luke’s relay plus anObject Status = 19anomaly. afrind ships a draft-18 wire decoder (moqx/tools/moq_decode.py, PR #398 MERGED) “that can help show you where you went wrong.” - A LOC private-properties ambiguity is exposed by live A/V interop. Building LOC+catalog publish/subscribe demos, Lorenzo asks how LOC private properties are framed — always present with a
00count when empty, or is the whole MoQ payload the media frame when there are none? Suhas: “if there are no private properties, then you basically write nothing.” Lorenzo: “but writing nothing still means writing at least00to say ‘no parameters’, right? Since you need the number of parameters first.” — an under-specified LOC encoding gap that only surfaces when two independent impls try to interop media (see moq-loc). - Will Law resolves the initData-carriage design space toward dual Track+Object properties. Under Tobbe’s LOCMAF thread, wilaw June 9 16:07 CEST: “In the CMSF slides for London, I propose that we create both Track and Object properties to carry Init Data. This would solve the two problems of mid-track changes and synchronization.” — converging the June-3/4 three-way space (catalog-referenced / track property / per-group subgroup) onto a both-Track-and-Object answer he’ll present in the London CMSF slot (see moq-cmsf, moq-locmaf).
- Implementations: moq hackathon burst (kixelated + externals) — #1668 MERGED “draft-18 SUBSCRIBE_NAMESPACE, subgroup headers, announce race” (+452/−68, concrete draft-18 wire work), #1673 MERGED moq-wasm browser/WASM bindings (+747/−48), #1658 MERGED generic catalog w/ app extensions (+823/−1234), #1663 MERGED mTLS fail-closed; #1652 (Karolk99) MERGED, #1667 (arielmol) MERGED; #1609 CLOSED (superseded by #1648); 5 new OPEN PRs (#1669 webcam capture, #1670 auto-reconnect, #1671 per-track stats, #1672 viewer count, #1666); new external Star-ho Issue #1664 relay viewer-metrics. imquic PR #27 MERGED (+3731/−519, LOC live capture/playback demos). moq-rs PR #173 OPEN “Start work on draft-18” (englishm). moqx #398 MERGED (afrind draft-18 decoder); suhasHere Issue #394 Top-N N+X filtering. quiche moqt, moq-js (PR #72), moqtail, moqlivemock, mondain quiet.
- Interop: 176 / 51 / 125 / 0 at 2026-06-10 00:49:57 UTC (draft-18 target) — +3 pass vs June 9 (48 → 51, 29.0%), recovering toward the early-June baseline (sequence 54 → 41 → 37 → 38 → 49 → 48 → 51). Still 0 at target · 0 ahead · 176 behind — the automated matrix has not yet registered any draft-18 endpoint, so the live hackathon-floor interop (against moxygen 18, imquic 18) is where the real draft-18 signal lands. 23-day cadence streak (new longest).
London hackathon Day 1 — first hands-on draft-18 interop
The June 9-10 in-person hackathon/interop at Cloudflare’s London office runs its first day as live cross-implementation draft-18 bring-up. Mike English opens a Google Meet for remote participants and sets the bar plainly: “We’re all kind of quietly hacking away on draft-18 support… Main goal is to get to the point where we can run some draft-18 interop through the interop runner and show tests passing.”
Three relay endpoints come up for the floor:
- moxygen
fb.mvfst.net:9448— afrind 16:35 CEST: “The moxygen relay should be ready… both quic/webtransport, supporting versions 14, 16 and 18.” with known exceptions: “don’t send REDIRECT errors, GOAWAY on a request stream or PUBLISH_BLOCKED.” This is the first publicly-announced draft-18 relay endpoint (the interop-endpoints page now records moxygen at 14/16/18). - imquic
lminiero.it:9000— Lorenzo Miniero (attending CommCon remotely) keeps his relay up; 15:03 CEST he merges his latest LOC work to imquicmain(PR #27) and offers to refresh the runner’s docker image, with Mike replying he’ll “dust off [moq-interop-runner PR #57] and we can land it with draft-18.” - Luke Curley’s
cdn.moq.dev— hop-based-routed (14 edge nodes); afrind tested against it and found his “connection silently closed after setup”, with Luke noting his side’s “cert expired” (not a blocker).
The day is dominated by the expected early-bring-up failures, which is exactly the point of the hackathon: afrind reports his “first (failed) SETUP exchange on draft-18” (Mike, 12:45 CEST); against Lorenzo’s relay, Suhas Nandakumar saw streams begin to flow (conference-room…media…timing) then “connected and it failed for not getting server setup”; afrind against Luke’s relay got an Object Status = 19 and “most of the time I get no data streams at all”, prompting Lorenzo’s “Does OBJECT_DATAGRAM work?“. To accelerate this debugging, afrind ships a draft-18 wire decoder — moqx/tools/moq_decode.py (PR #398 MERGED, +413/−181) — posting example field-by-field output that “can help show you where you went wrong” (the example decodes a REQUEST_ERROR and flags an off-by underflow reading a string length). The June-10 00:50 UTC runner shows +3 pass to 51 (the automated matrix can’t see any of this floor work — no impl has registered a draft-18 endpoint with the runner — so the live interop against moxygen-18 and imquic-18 is the day’s real draft-18 progress signal).
LOC private properties: an encoding gap surfaced by live media interop
Lorenzo Miniero, having built LOC+catalog publish/subscribe demos (the imquic PR #27 imquic-moq-loc-send/-recv live capture/playback pair), raises a concrete LOC under-specification 12:38 CEST: “The LOC draft mentions public properties and private properties, but doesn’t say much about how those private properties work. Are they always there, with just a 00 when there are none, or is the whole MoQ payload the media frame when there are none?” He’s currently “not writing any private properties block at all… I simply set the whole payload to the audio/video frame.” Suhas answers from his C++ impl: “if there are no private properties, then you basically write nothing… this is same as how you encode other properties.” Lorenzo presses the ambiguity: “but writing nothing still means writing at least 00 to say ‘no parameters’, right? Since you need the number of parameters first.” The disagreement — omit the block entirely vs write a zero-count varint — is a real wire-format gap that only two-impl interop exposes; it joins the LOC property-ID coordination issues already tracked (moq-wg/loc Issue #20) as a London-floor item. See moq-loc.
Will Law converges initData carriage on dual Track+Object properties
The LOCMAF Slack thread (under Tobbe’s June-3 announcement) gets a substantive June-9 16:07 CEST update from Will Law that resolves the three-way initData-carriage design space the June-3/4 thread opened (catalog-referenced / track property / per-group subgroup): “In the CMSF slides for London, I propose that we create both Track and Object properties to carry Init Data. This would solve the two problems of mid-track changes and synchronization.” The dual-property answer addresses wilaw’s own earlier objection (“Currently we do not allow track init properties to change once publish has begun”) and Tobbe’s DASH-period/DRM-rotation concern (“it may be a bit too strict to never allow updating it”) by keeping a stable Track property for steady-state init plus an Object property for synchronized mid-track changes. This is now a London CMSF agenda input rather than a stale moq-msf Issue #153; it bears directly on CMSF (full CMAF chunks), LOCMAF (delta-compressed CMAF metadata), and MSF’s catalog initData type.
moq-transport: Joining-FETCH/Fill review + two new draft-18 items (no new revision)
Spec work is light on the hackathon floor but two threads advance the London Day-1 agenda:
- PR #1642 “Replace Joining Fetch with Subscription Fill” (the 1045-1145 Day-1 agenda item) draws its first substantive review — Gwendal Simon posts 5 comments June 9 19:44-19:53 UTC working through a full relay-behavior mermaid diagram for a SUBSCRIBE with a fill filter, raising four non-blocking precision points: (1) the fill filter is not forwarded upstream — why?; (2) FETCH→subgroup-stream reassembly is undescribed; (3) confirm a fill-fetch
REQUEST_ERRORdoes not tear down the subscription (fill shares the subscription’s Request ID); (4) the composite case whereCURRENT_GROUP_UNAVAILABLE+ a fillREQUEST_ERRORcoexist while live objects still flow. This is exactly the pre-London exercising afrind’s Fill redesign needs. - Issue #1655 OPEN June 9 (sharmafb) “Tighter language around GOAWAYs on a request stream” — proposes restricting who may send GOAWAY on a request stream; directly mirrors afrind’s moxygen-relay limitation (“don’t send… GOAWAY on a request stream”), a case of implementation experience feeding straight back into spec wording. Plus PR #1654 OPEN (michalhosna) a pure editorial relocation of the generic URI-scheme prose + Fragment Identifiers reorder (+23/−23). No new Datatracker revision (transport-18 Day +29);
draft-ietf-moq-dts4moqstill invited-but-unsubmitted; DTS PR #1638 quiet. See moq-transport.
The mailing list adds only London-interim follow-ups (June 9 replies on “New Agenda for London” from Duke/Cullen/Gwendal, “Request Synchronization Use Case” from Ali Begen/Gwendal/afrind, and a “London interim details” reply from Mike English); no new MoQ Monthly issue (still #2).
Activity (June 8 19:00 UTC → June 9 06:00 UTC) — London hackathon begins (June 9-10): moq-dev/moq clears its catalog/wire backlog (moq-lite-05 TRACK-stream merge, generic catalog re-opened as #1658, mTLS fail-closed relay fix); Eyevinn hardens moqtransport + moqlivemock (v0.11.1) for the hackathon; Issue #1652 SETUP extensions-negotiation thread (kvasilye ↔ afrind); interop −1 to 48
TL;DR:
- The London interop hackathon starts today (June 9-10; formal sessions June 11-12), and the ecosystem spends the eve clearing implementation backlog rather than spec work. No new Datatracker revisions, no new mailing-list traffic since June 7, no new MoQ Monthly issue,
#moqSlack quiet since the June-8 #1653 micro-thread. The only live spec discussion is GitHub Issue #1652 “SETUP - extensions negotiation” (Kostya Vasilyev ↔ afrind) — afrind points to his individual [[moq-moqpack|draft-frindell-moq-moqpack-00]] for the extension mechanism; kvasilye follows up June 8 20:22 UTC asking whether SETUP carries numeric extension IDs or collision-resistant string keys (unanswered). On #1653, martinduke agrees “it’d be great to get rid of request ID” if cross-dependencies can be handled another way. - Implementations: moq clears its pre-hackathon backlog — PR #1648 MERGED (moq-lite-05 TRACK stream, drops SUBSCRIBE_OK/FETCH_OK, +1723/−795), #1651 anyhow→thiserror + #1656/#1657 encoder config MERGED; #1654 CLOSED → re-opened as #1658 (generic catalog with lock-based section extensions, +765/−1065); new #1663 moq-relay fail-closed on mTLS alias-resolution API error; #1660 cargo-semver-checks CI MERGED then reverted 27 min later (#1662). moqlivemock PR #92/#93/#94 MERGED → v0.11.1 (interop SETUP deadline + draft-14 downgrade refusal); moqtransport #11/#12/#13 MERGED (same SETUP hardening in the Go lib +
golang.org/x/netv0.55.0 security bump + draft-16 PUBLISH_NAMESPACE-rejection fix). quiche moqt, moq-rs, moq-js (PR #72), moqtail, imquic (PR #27), openmoq (sync-bot only), mondain quiet. - Interop: 176 / 48 / 128 / 0 at 2026-06-09 00:43:54 UTC (draft-18 target) — −1 pass vs June 8 (49 → 48, 27.3%); the skip (1 → 0) and one pass both became fails. Still 0 at target · 0 ahead · 176 behind (no impl registered at draft-18). 22-day cadence streak (new longest). The runner’s automated matrix is now a sidelight — the manual cross-version interop in London (14/16/17/18) is where the hackathon’s interop value lands.
London hackathon begins; the eve is implementation hardening, not spec churn
The June 9-10 in-person hackathon/interop at Cloudflare’s London office opens today (formal sessions June 11-12). With participants travelling, the spec surface is quiet: no Datatracker revision (draft-ietf-moq-dts4moq still invited-but-unsubmitted; transport-18 Day +28), no mailing-list traffic since June 7, no new MoQ Monthly since #2 (May 31), and #moq Slack quiet since afrind’s June-8 “No one else ran into #1653?” micro-thread. The day’s substance is on GitHub, and it is interop/wire hardening across two stacks.
The one live spec thread is moq-transport Issue #1652 “SETUP - extensions negotiation” (opened June 6 by Kostya Vasilyev, building a MoQ stack), which §3.2 references but §10.3 SETUP does not fully define. afrind points to his individual [[moq-moqpack|draft-frindell-moq-moqpack-00]] extension draft and explains the SETUP-declaration handshake plus the un-negotiated Track/Object-Properties extensibility point; June 8 20:22 UTC kvasilye narrows the question — does SETUP advertise numeric extension IDs or collision-resistant string keys (domain-derived)? — and afrind has not yet answered. This is the kind of under-specified-extensibility gap the London “Other MOQT Issues” blocks are sized for. Separately on #1653 (REQUEST_OK-to-REQUEST_UPDATE lacks a Request ID), martinduke agrees June 8 15:35 UTC: “If we can handle all the cross-dependencies some other way, it’d be great to get rid of request ID.” — a second voice toward simplifying draft-18’s request/response correlation.
moq-dev/moq clears the catalog/wire backlog before the hackathon
The June-7/8 catalog/moq-json work lands as a batch (June 8 evening → June 9 early UTC, all kixelated):
- PR #1648 MERGED June 8 23:19 UTC (+1723/−795) — “moq-lite-05: add TRACK stream, drop SUBSCRIBE_OK/FETCH_OK”, the wire change that had grown across June 7-8 now merged: immutable track properties move onto the dedicated TRACK stream
0x6and SUBSCRIBE_OK/FETCH_OK are removed entirely (the moq-lite-05 answer to the same “duplicate Track Properties” gap kixelated raised on the spec side as transport Issue #1644). - PR #1654 CLOSED June 8 19:42 UTC → re-opened as PR #1658 “feat(hang,json): generic catalog with lock-based section extensions” (+765/−1065, OPEN) — generalizes the
hangcatalog so apps add root sections via an extension lock (e.g. an upcoming TSscte35section) without touching the hang/wire format; builds on the merged moq-json JSON-Merge-Patch helper #1655. - #1651 MERGED (moq-native anyhow→thiserror, +1163/−625), #1656 MERGED (enforce
EncoderConfig.frameRatefor video), #1657 MERGED (configurable audio codec settings). - PR #1663 OPEN June 9 01:37 UTC “fix(moq-relay): fail closed when mTLS alias resolution hits an API error” (+44/−23) — fixes a zombie-session bug where an mTLS peer dialing a vanity URL hung if the auth API was briefly unreachable (previously failed open with an unresolved vanity path); #1661 MERGED keeps the catalog
ConsumerClone+ stabilizesFramedFormatdiscriminants. - CI wobble: #1660 MERGED June 9 01:00 UTC added
cargo-semver-checkson PRs targetingmain, then reverted 27 minutes later by #1662 — a brief failed experiment, not a durable change.
External PRs #1652 (Karolk99, shared-epoch A/V timestamps) and #1649 (Qizot, terminal auth connect errors) remain OPEN — no new external contributor names. The net effect: kixelated walks into the hackathon with the moq-lite-05 TRACK-stream wire change merged and the catalog extension model reframed around section locks.
Eyevinn hardens moqtransport + moqlivemock for the hackathon
Torbjörn Einarsson lands the interop-robustness work across both Eyevinn stacks:
- moqlivemock: PR #92 MERGED (the eve’s OPEN PR — bound interop SETUP by the per-test deadline so a relay that completes the QUIC/ALPN handshake but never sends a usable
SERVER_SETUPcan’t hang the sequential matrix; refuse silent WebTransport draft-14 downgrade), #93 (changelog) + #94 (release) → v0.11.1. - Eyevinn/moqtransport (the Go transport library): PR #11 MERGED mirrors the SETUP-deadline + draft-14-downgrade-refusal fix into the library itself (+97/−2); #12 MERGED bumps
golang.org/x/netto v0.55.0 for security advisory GO-2026-5026; #13 MERGED “Bug fixes: draft-16 PUBLISH_NAMESPACE rejection + request hang-proofing” (+200/−41).
This is the first time in the June cycle the wiki has tracked Eyevinn pushing fixes into moqtransport (the underlying Go lib) rather than only the moqlivemock test app — pushing the SETUP-hardening down a layer so any consumer of the library benefits, directly serving Martin Duke’s June-2 draft-16 interop push as the hackathon’s manual cross-version interop begins.
Activity (June 7 19:00 UTC → June 8 19:00 UTC) — hackathon eve: Gwendal Simon (D)DoS review on DTS PR #1638; afrind opens draft-18 errata #1653; kixelated catalog/moq-json burst; Tobbe hardens mlmtest interop; interop recovers +11 to 49
TL;DR:
- Gwendal Simon reviews the still-OPEN DTS base-spec PR #1638 on the eve of the hackathon — three June-8 comments raising a §9.2 Forward-flag interaction (with #1650) and two independent (D)DoS concerns:
MAX_DTS_CONCURRENT_TRACKSbounds the track count but not aggregate throughput, and is scoped per switching-set, so “multiple WebTransport sessions … over a single QUIC connection” sidestep it. wilaw pushes back — “is this a DTS issue or a MOQT issue?“. First substantive design review on DTS #1638 since it opened, feeding the still-contested extension-vs-base-spec readout. Separately afrind opens Issue #1653 “[draft-18] REQUEST_OK in response to REQUEST_UPDATE lacks Request ID” (“This smells of HTTP/1.1”); asks on Slack “No one else ran into #1653?”, Mike English: “yet”. - No new Datatracker revisions, no new WG-draft submissions —
draft-ietf-moq-dts4moqstill invited-but-unsubmitted; transport-18 Day +27; MSF/CMSF errata PRs (msf #177 + cmsf #23, Tobbe) and privacy-pass issues #14/#15 (thibmeu) still OPEN. Mailing list: only afrind’s June-7 “Re: Joining FETCH Replacement Proposal” reply + the weekly GitHub digest. - Implementations: moq kixelated burst (June 7→8) — moq-json JSON Merge Patch delta helper PR #1655 MERGED (+1403/−62), PR #1654 generic base
hangcatalog + app-layer extensions (+174/−1077) OPEN, moq-lite-05 TRACK-stream PR #1648 (drop SUBSCRIBE_OK/FETCH_OK, +1697/−795) OPEN, anyhow→thiserror #1651, encoder-config knobs #1656/#1657; new contributor Karolk99 (#1652 shared-epoch A/V timestamps) + Qizot (#1649 auth connect errors). moqlivemock: Tobbe PR #92 hardens mlmtest interop (bound SETUP by deadline; refuse silent draft-14 downgrade). moqx sync-bot merges only; quiche moqt, moq-rs, moq-js (PR #72), moqtail, imquic (PR #27), mondain all quiet. - Interop: 176 / 49 / 126 / 1 at 2026-06-08 00:50:12 UTC — +11 pass vs June 7 (38 → 49, 27.8%), the best recovery since the June-5 drop; post-June-4 sequence 54 → 41 → 37 → 38 → 49 confirms the 37-38 floor was a transient trough from moq-dev/moq’s mid-day API reshape. Still 0 at target · 0 ahead · 176 behind. 21-day cadence streak (new longest). London hackathon starts tomorrow (June 9-10), formal sessions June 11-12.
DTS PR #1638 draws a (D)DoS review; afrind opens errata #1653
The day before the hackathon, the still-OPEN DTS base-spec PR #1638 (now +155/−0) gets its first substantive design review. Gwendal Simon posts three comments June 8:
- 09:27 UTC — a §9.2 interaction with #1650: in the relay-behavior section, all non-selected switching-set tracks carry
fwd=0downstream, but per §9.2 relays SHOULD set Forward=1 upstream regardless of the downstream state. - 10:07 UTC — (D)DoS concern #1:
MAX_DTS_CONCURRENT_TRACKSbounds the number of tracks in a switching set but not their aggregate throughput, so a malicious switching-set assignment can still exhaust relay bandwidth. - 10:51 UTC — (D)DoS concern #2 (independent):
MAX_DTS_CONCURRENT_TRACKSis scoped per switching-set, but “multiple WebTransport sessions can be established over a single QUIC connection, and the MOQT spec sets no limit on how many a client may open” — so a client can multiply the per-set limit across sessions.
wilaw replies 15:34 UTC questioning scope: “is this a DTS issue or a MOQT issue?” — i.e. whether unbounded WebTransport-sessions-per-QUIC-connection is a DTS-specific gap or a base-protocol one. This review lands while the extension-vs-base-spec disposition is still contested (the chairs’ June-4 readout invited a separate draft-ietf-moq-dts4moq; Cullen Jennings contested the process June 6) — the (D)DoS questions are exactly the kind of detail that the June-11 “SWITCH/DTS Implementation Lessons” slot (Ali, 1600-1700) and the June-12 conditional DTS-Issues slot (Will) would absorb.
Separately, afrind opens Issue #1653 (12:10 UTC): “If I send multiple REQUEST_UPDATE at once on the same bidi stream, there’s no correlator in the response. I suppose in draft-18 that means the updates MUST return in the order sent. This smells of HTTP/1.1.” He flags it on Slack (“No one else ran into #1653?”, 14:28 CEST); Mike English replies “yet” (15:06 CEST) — i.e. expecting the rest to hit it once they implement REQUEST_UPDATE. #1653 is a companion to sharmafb’s PR #1648 (soften the REQUEST_UPDATE response, MERGED June 4) and adds to the draft-18 errata backlog destined for London’s “Other MOQT Issues” blocks.
Activity (June 4 06:00 UTC → June 7 19:00 UTC) — London interim agenda PUBLISHED (Martin Duke June 5, “shifted more time to MOQT blockers”); DTS consensus readout flips to “separate WG extension document” (draft-ietf-moq-dts4moq) — Cullen Jennings contests June 6; Tobbe ships MSF/CMSF catalog validator (CUE) that finds draft-01 bugs → files MSF PR #177 + CMSF PR #23; Kota Yatagai debuts Moqtopus (C++/MsQuic Unreal Engine client); thibmeu opens 2 privacy-pass issues; moq-dev/moq adds moq-hls gateway + VP8/VP9 + moq-gst maturation; interop drops to 41 → 37 → 38 pass
TL;DR:
- London interim (June 11-12) agenda is now PUBLISHED on Datatracker. Martin Duke posts “New Agenda for London” June 5 — “The revised agenda is posted… shifted a bit more time to MOQT blockers” — and Mike English posts “London interim details” (logistics/remote). Day-1 (interim-08, June 11, 0900-1700 BST) is now almost entirely MOQT-blocker time: Concurrent Subscribe (Ian, #1633), Object Range Filters (Mo, PR #1518), Joining FETCH (Alan+Mo, PR #1642), Request Blocking (Alan, #1519), two “Other MOQT Issues” blocks (Alan+Ian, 1330-1430 + 1500-1600), and SWITCH/DTS Implementation Lessons (Ali, 1600-1700) demoted to the day’s tail. Day-2 (interim-10/-11, June 12) is still conditional on the SWITCH/DTS outcome — both branches keep MSF/CMSF (Will), Privacy Pass (Suhas), Secure Objects (Cullen), LOC (Mo); the not-incorporated branch adds CDN Provisioning (Mike) + MSFTS (Gwendal). LOCMAF and catalog-format are not on either agenda.
- DTS consensus readout flips to “separate WG extension document” — and Cullen Jennings contests it. The chairs’ readout of the June-4-close DTS/SWITCH consensus call concludes there is “strong consensus for DTS to be adopted as an extension described by a WG document” — not integrated into the base moq-transport draft — and invites Will Law to publish his
wilaw/dts4moqrepo as a new WG documentdraft-ietf-moq-dts4moqat his earliest opportunity (“it is possible that the document later reaches a state where it could be merged into MOQT”). Cullen Jennings June 6 pushes back: “How did you reach the conclusion that there is consensus this should be an extension instead of in the MoQT draft?” — a reversal of the trajectory the wiki tracked (Cullen’s May 27 base-spec-PR preference + wilaw’s PR #1638 base-spec integration, still OPEN). The readout lands closer to Magnus Westerlund’s original separate-draft proposal; Cullen, who argued against a separate draft, is now the dissenting voice on the process question. - Implementations: moq ~20 merges + several OPEN (June 4→7, all kixelated) — new PR #1626 “Add moq-hls: HLS / LL-HLS gateway” (+1695/−49, OPEN), VP8/VP9 codecs (PR #1625 moq-mux + PR #1632 gstreamer), moq-gst maturation (#1627 dynamic catalog follow, #1633 pad-pump refactor, #1646 backwards-timestamp fix), moq-net reshape (#1631 Track→TrackInfo+async TrackConsumer, #1634 one subscription + N concurrent fetches, #1640 RAII announcements), PR #1637 moq-json JSON Merge Patch for catalog snapshot/delta, moq-lite-05 PR #1648 (add TRACK stream, drop SUBSCRIBE_OK/FETCH_OK — supersedes #1609) + PR #1601 MERGED (FETCH past groups), relay #1628 GOAWAY drain + #1630 TLS cert reload OPEN. moqx: afrind PR #386 MERGED (per-session auth filters replace session-keyed grants map) + multithread stack 363 still OPEN; gmarzot+TimEvens static-Boost build fixes; peterchave auto-regression-test CI #379 MERGED. quiche moqt: 3 vasilvv commits June 5-6 (MoqtControlMessageQueue factoring + “has first object in subgroup” header bit). moqlivemock v0.11.0 + warp-player v0.11.0 ship MSF/CMSF draft-01 catalogs (+ LOCMAF 0.2 in mlm). NEW msf-catalog-validator (Tobbe). moqtail, moq-rs (PR 171 untouched), moq-js (PR #72 OPEN), imquic (PR #27 updated June 5), mondain/moqxr (TilsonJoji SRT PR #14 OPEN), mondain/moq2ts quiet.
- Interop: 38 / 137 pass/fail at 2026-06-07 00:49:07 UTC (draft-18 target) — sequence June 5 41 → June 6 37 → June 7 38, a −13 to −16 drop from June 4’s 54; total slips 177 → 176. Version breakdown still 0 at target · 0 ahead · 176 behind — no impl has registered draft-18 (Nokia’s announced v17/v18 relay not yet registered; moqlivemock now shows draft-16/14). 20 consecutive daily reports (May 19-Jun 7) = new longest cadence streak. London interim 4 days away (hackathon/interop June 9-10, formal sessions June 11-12).
London interim agenda PUBLISHED — Day-1 is MOQT-blocker time, DTS/SWITCH demoted
Martin Duke’s June 5 “New Agenda for London” message (“The revised agenda is posted… I shifted a bit more time to MOQT blockers”) and Mike English’s June 5 “London interim details” (arrival/remote logistics) finalize the structure for the June 11-12 in-person interim at Cloudflare’s London office. The Datatracker agendas:
Day-1 — interim-2026-moq-08 (June 11, 0900-1700 BST):
| Time (BST) | Item | Presenter | Ref |
|---|---|---|---|
| 0930-0945 | Administrivia | — | |
| 0945-1015 | Concurrent Subscribe | Ian | #1633 |
| 1030-1045 | Object Range Filters | Mo | PR #1518 |
| 1045-1145 | Joining FETCH | Alan + Mo | PR #1642 |
| 1145-1230 | Lunch (Tongyu demo) | — | |
| 1230-1330 | Request Blocking | Alan | #1519 |
| 1330-1430 | Other MOQT Issues | Alan + Ian | |
| 1430-1445 | Next Interim Planning | Martin | |
| 1500-1600 | Other MOQT Issues (cont.) | Alan + Ian | |
| 1600-1700 | SWITCH/DTS Implementation Lessons | Ali |
Day-2 — interim-10 (morning) + interim-11 (afternoon), June 12 — still flagged “dependent on the outcome of the SWITCH consensus call”. Morning: Interop Report (Mike) + DOS Design-team readout (Mike, draft-englishm-moq-relay-dos) + conditional SWITCH Issues (Gwendal) / DTS Issues (Will). Afternoon has two branches; both keep MSF/CMSF (Will), Privacy Pass (Suhas), Secure Objects (Cullen), LOC update (Mo); the incorporated branch adds Top-N DDOS (Cullen) + Top-N issues (Mo) + Top-N Implementation (Suhas); the not-incorporated branch adds CDN Provisioning (Mike) + MSFTS (Gwendal).
Structural read: Martin’s “shifted more time to MOQT blockers” is visible — Day-1 gives Alan+Ian two hour-long “Other MOQT Issues” blocks to triage the 14-item draft-18 errata/design backlog, while SWITCH/DTS is reduced to a 1-hour Ali “Implementation Lessons” report at the very end of Day-1, no longer the centerpiece it was at the May 26 interim. LOCMAF (Tobbe) and catalog-format do not appear on either agenda — the LOCMAF initData-carriage discussion would surface, if at all, under Will’s MSF/CMSF slot.
DTS consensus readout — “extension WG document”, and the Cullen reversal
The chairs’ readout of the DTS/SWITCH consensus call (opened May 21, closed June 4) concludes:
- DTS: adopt as an extension described by a WG document — “strong consensus for DTS to be adopted as an extension described by a WG document”, not integrated into the base moq-transport draft. Will Law is invited to publish his
wilaw/dts4moqrepo as the new WG documentdraft-ietf-moq-dts4moqat his earliest opportunity; the readout leaves the door open: “it is possible that the document later reaches a state where it could be merged into MOQT.”
Cullen Jennings June 6 challenges the readout: “How did you reach the conclusion that there is consensus this should be an extension instead of in the MoQT draft?” This is a 180° turn from the trajectory the wiki tracked: through late May the on-list votes (Will Law, Gwendal, Nokia, Ali Begen) favored integration into MOQT, and Cullen explicitly argued against a separate draft (May 27: “I disagree it should be done as a separate draft… it should be worked as a PR that can be discussed in context”), prompting wilaw’s base-spec PR #1638. The chairs’ readout instead lands on a separate document (closer to Magnus Westerlund’s original proposal), leaving PR #1638’s base-spec integration path superseded-in-direction and Cullen as the dissenting voice on the process question. Carry-forward: draft-ietf-moq-dts4moq is invited but not yet submitted to Datatracker as of June 7; the June-12 “DTS Issues (Will)” slot is conditional on this outcome and may now reopen the extension-vs-base-spec question on the floor. (See interim-meetings for the full vote-tally history.)
Tobbe ships MSF/CMSF catalog validator (CUE) — finds draft-01 bugs
Torbjörn Einarsson announces on #moq (June 5 10:44 CEST) a catalog validator for MSF/CMSF draft-01: “I made a validator for MSF/CMSF catalogs based on the new draft-01. It found a number of issues in the drafts, but should be generally useful. Based on a schema in CUE with some extra code to generate user-friendly error messages.” — live at moqlivemock.demo.osaas.io/msf-catalog-validator, source at Eyevinn/msf-catalog-validator. The validator was built fast (4 PRs merged June 4-5: LOCMAF packaging + bitrate-not-required-for-non-A/V fix, web UI with examples + schema view + Prism highlighting, strict validation against draft-01 definitions rather than examples).
The validator immediately produced spec errata: Tobbe files moq-wg/msf PR #177 “Fix version in examples and minor typos in draft-01” (+24/−24) and moq-wg/cmsf PR #23 “Fix version examples and minor typos in draft-01” (+5/−5), both OPEN June 4. Significance: this is the first time a wiki-maintainer-built tool feeds errata directly back into the WG specs it validates — and it confirms the June-4 thesis that draft-01/draft-18 examples are carrying machine-detectable inconsistencies that an unhurried review would have caught. Tobbe’s moqlivemock v0.11.0 + warp-player v0.11.0 (both released June 4) move Eyevinn’s stack onto MSF/CMSF draft-01 catalogs, with LOCMAF 0.2 implemented alongside 0.1 in moqlivemock.
Kota Yatagai debuts Moqtopus; interop spreadsheet → automated runner
On #moq June 4 16:44 CEST, Kota Yatagai announces Moqtopus — “a C++ client based on MsQuic for use in Unreal Engine. I’ll finish the work needed to support draft-18 in time for the interop.” — a new game-engine-targeted MoQ client (Kota also authored the Moqintosh iOS client). Kota also asks whether the MoQ interop spreadsheet is still maintained (“kota’s moqtail is no longer chasing new drafts so I’ll delete the record”). Mike English confirms the automated interop-runner is intended to replace the spreadsheet (“we can be more precise and accurate about… exactly which versions of each implementation support what features”), notes the initial test set was “intentionally small” and more test cases are coming next week (open to ordering suggestions), and points to a new #moq-interop-runner channel. Alan Frindell asks “Are there new test cases coming?” — the answer being yes. This is the first explicit statement that the spreadsheet is being retired in favor of the runner, and that the runner’s coverage will broaden right after London.
thibmeu opens privacy-pass design issues
Thibault Meunier (Cloudflare; privacy-pass author) opens 2 issues on moq-wg/privacy-pass June 5: #14 “MOqTokenChallenge should be base64 encoded” and #15 “Find how to pass MoQTokenChallenge in reply to a SETUP closure without using ReasonPhrase”. These are the issuer-aware challenge-reply concerns thibmeu raised in his May 30 review of cloudflare/moq-rs PR #169, now filed against the privacy-pass-auth draft itself — moving the challenge-reply wire question from cross-impl review into the WG draft’s own issue tracker ahead of the June-12 Privacy Pass slot.
moq-transport: EXPIRES + sharmafb editorial PRs merge; 3 new design issues
The June-2/3 normative work largely lands: PR #1640 EXPIRES (martinduke) MERGED June 4, sharmafb PR #1645/#1648/#1649 all MERGED June 4, PR #1476 “Delivery timeouts are both Track and Object Properties” (afrind) MERGED June 5 (closes #606). Tim Evens’s #1641 (PUBLISH_DONE wording) + martinduke’s #1639 (EXPIRES) auto-CLOSE; ianswett’s PR #1451 “Allow multiple Subscriptions to a Track” CLOSED June 6 (folded into the Concurrent Subscribe discussion). 3 new design issues OPEN: #1650 (afrind, “Forward Handling SHOULD set Forward=1 upstream is too strong”), #1651 (martinduke, “How does GROUP_ORDER interact with PUBLISH?”), #1652 (Kostya Vasilyev, “SETUP - extensions negotiation”). The fill-replacement PR #1642 + DTS PR #1638 remain OPEN into the Day-1 Joining-FETCH and SWITCH/DTS slots. quiche moqt continues structural refactor June 5-6 (8a11928a + 6b6a9b74 factoring control-message queueing into a MoqtControlMessageQueue class; f3ce1892 “Support the ‘has first object in the subgroup’ bit in the subgroup header”).
Activity (June 3 06:00 UTC → June 4 06:00 UTC) — draft-ietf-moq-cmsf-01 PUBLISHED on Datatracker June 3 (2nd WG draft to land in 2 days); LOCMAF Slack thread engages afrind + wilaw on initData carriage; sharmafb editorial sprint files 5 draft-18 issues/PRs in 18 min; openmoq/moqx paul-mondain CAT token PR #264 MERGES after 33 days; google/quiche moqt starts draft-19 wire prep (new varint, CLIENT/SERVER SETUP merge); moq-dev/moq ~12 merges incl. voice-AI latency range; 2 new external contribs (arielmol SCTE-35, vipyne AI-voice flush); interop 177/54/122/0 (−3 pass)
TL;DR:
- draft-ietf-moq-cmsf-01 PUBLISHED on Datatracker June 3 by Will Law (Akamai) — 2nd MoQ WG draft revision in 2 days (MSF -01 June 2 → CMSF -01 June 3). Final pre-submission clean-up was moq-wg/cmsf PR #22 MERGED June 3 11:32 UTC “Fix I-D nits” (+7/−6). wilaw also posts “MSF updates” + “CMSF updates” announcement messages to the IETF MoQ mailing list — first per-spec author-led list updates from wilaw the wiki has tracked.
- LOCMAF Slack thread engages afrind + wilaw on initData carriage. Torbjörn Einarsson announces LOCMAF -00 at June 3 08:51 CEST citing msf draft-01’s new
initDatacatalog references + catalog compression as enablers; afrind 18:13 CEST asks “Have we considered init data as a track property?”, then 20:06 CEST “InitData as a separate subgroup?”, then 22:00 CEST “Only Publish the init subgroup in groups where it changed.”. wilaw 21:37 CEST responds “we have added the init structure in MSF as an extensible scheme. if the init is not going to change for the life of the track, then we could add indeed add it as a defined track property… Currently we do not allow track init properties to change once publish has begun.” 5-reply thread surfaces 3-way design space: catalog-referenced vs track-property vs per-group-subgroup. Promotes the stale moq-msf Issue #153 (“initTrack does not work”) to active design engagement within 12h of LOCMAF announcement. - moq-transport: sharmafb (Cisco) 5-item editorial sprint June 3 21:09-21:27 UTC (18-minute window): PR #1645 “Change PUBLISH_OK = 0x1E in table” (PUBLISH_OK was removed); Issue #1646 “Application-specific property codepoints conflict” (§2.5 reserves 0x38-0x3F vs §15.8 reserves 0x78-0x7F); Issue #1647 “TIMESTAMP and SUBGROUP_DELIVERY_TIMEOUT have same value”; PR #1648 “Soften one mandatory response for a REQUEST_UPDATE”; PR #1649 “Modify text about PUBLISH_DONE on a control stream” (companion to Tim Evens’s #1641). Plus Issue #1644 by kixelated “Duplicate Track Properties on repeated SUBSCRIBE_OK / FETCH_OK” — same gap that moq-lite-05 PR #1609 already addresses via TRACK_INFO Track Stream. draft-18 errata-style issues now outpace design-issue resolution: 5 of 5 sharmafb items are wire-table-vs-text/codepoint-collision-style. quiche moqt starts draft-19 wire prep: vasilvv 3 commits June 3 —
4096d2e3“Switch MOQT to using new varint format”,8427f949“Use delta encoding for Subscribe Filters of type Absolute Range”,96c9a9c0“Merge CLIENT_SETUP and SERVER_SETUP into a single control message”. First sustained draft-19 wire-prep work the wiki has tracked from any impl. - Implementations: moq ~12 merges + 7 OPEN cycle (June 3 ~05:00 → June 4 ~05:00 UTC, all kixelated unless noted). Highlights: PR #1620 OPEN “feat(watch): latency range with buffered playback” — reframes playback latency as a range
[min, max]unifying live and buffered playback into one mechanism, unblocks voice-AI/TTS use cases (pipecat-ai/pipecat#4629) where the response is written faster than real-time. 2 new external contributors in 24h: arielmol PR #1617 OPEN SCTE-35 from MPEG-TS into a newdatacatalog track (first broadcast-ad-marker plumbing in moq-dev/moq); vipyne Issue #1614 + PR #1615 OPEN AudioProducer Python flush/cancel for AI voice agent interruption use cases. Together PR #1620 + #1615 + #1617 = 3 PRs adding new use-case verticals in 24h: AI-voice playback, AI-voice ingest, broadcast-ad-marker carriage. Plus watch refactor (PR #1591 Computed signals MERGED, PR #1592 inputs-vs-outputs MERGED, PR #1588 stop downloads when muted/paused/off-screen), CI release pipeline shakedown (PR 1623), moq-net per-control-stream task (PR #1621), apt keyring rename (PR #1611). moqx: paul-mondain CAT token PR #264 MERGED June 3 22:57 UTC after 33 days OPEN (+1807/−13, 20f) — first openmoq/moqx external-contrib-driven auth path now landed inmain. Plus Tim Evens PR #376 + PR #377 MERGED (Debian bookworm + macOS Apple Clang 21); gmarzot PR #370 MERGED folly XLOG. afrind opens 3 new issues: #380 standard token type values; #381 auth for MOQT peers; #382 Draft-18 updates for relay behavior (priority-ranked sub-issues = draft-18 catch-up backlog scoped). mondain/moqxr: PR #14 OPEN by TilsonJoji (new external contributor) “Add SRT MPEG-TS ingest with fMP4 repackaging and MoQ object publishing” — first MoQ-side SRT ingest path in the openmoq orbit. quiche moqt: vasilvv 3 draft-19 wire-prep commits (see above). moq-rs: PR #167 + PR #171 untouched. moqtail, moq-js (PR #72 OPEN), imquic (PR #27 OPEN, updated June 3 17:14 UTC), Moqintosh, moqlivemock (PR #90 dependabot quic-go bump), Eyevinn/warp-player, Eyevinn/moqtransport, quiche_moq, Quicr/cat-token all quiet. - Interop: 177 / 54 / 122 / 0 at 2026-06-04 00:55:39 UTC — −3 pass vs June 3 (57 → 54, 32.2% → 30.5%, −1.7pp), reverses Jun 3’s +6 jump symmetrically; skip drops 1 → 0; 17-day cadence streak (new longest the wiki has tracked). Version breakdown still 0 at target · 0 ahead · 177 behind — impl-registration drift unchanged. Slack signal June 2 09:18 UTC by Yu You (Nokia): “we are in the process to host a remote relay for the interop. we have the support of v17 and v18 (basic ones with current interop test cases) for testing” — first announced impl-side v18 endpoint, would close the 0-at-target gap if registered. London hackathon 5 days away.
draft-ietf-moq-cmsf-01 PUBLISHED — 2nd WG draft in 2 days
Will Law’s CMSF -01 lands on Datatracker June 3, 187 days after -00 (Dec 2025). The 2-day MSF→CMSF publication cluster aligns the two streaming-format specs for the London Day-2 35-min MSF/CMSF Will Law slot.
Mailing-list announcements June 3 by wilaw:
- “MSF updates” — companion narrative to MSF -01 (the 134-day-saga draft that landed June 2)
- “CMSF updates” — companion narrative to CMSF -01
First wilaw-authored per-spec mailing-list update tracked by the wiki — historically he announces draft revisions via Slack rather than email. The June 3 list posts pair CMSF -01 with MSF -01 as a coordinated London-cycle update.
LOCMAF Slack thread — initData carriage as 3-way design space
Under Tobbe’s LOCMAF -00 announcement on #moq June 3 08:51 CEST, 5 substantive replies through 22:00 CEST form the first cross-author engagement on the new individual draft:
| When | Author | Substance |
|---|---|---|
| 08:51 CEST | Torbjörn Einarsson | Announcement of LOCMAF -00; cites msf draft-01 initData references + catalog compression as enablers for the reduced-complexity v0.2 design |
| 18:13 CEST | afrind | ”Have we considered init data as a track property?“ |
| 19:14 CEST | Tobbe | Replies: msf -01 introduces initData type currently only "inline", but extensible to a track reference; links moq-msf Issue #153 |
| 20:06 CEST | afrind | ”InitData as a separate subgroup?“ |
| 21:37 CEST | wilaw | ”As Torbjorn mentioned, we have added the init structure in MSF as an extensible scheme. if the init is not going to change for the life of the track, then we could add indeed add it as a defined track property. Adding it as a subgroup would be wasteful, as you would have to continually re-send it. Currently we do not allow track init properties to change once publish has begun.” |
| 22:00 CEST | afrind | ”Only Publish the init subgroup in groups where it changed.” |
The thread surfaces 3-way design space for initData carriage:
- Catalog-referenced (msf -01’s
inlinetype extended to a track reference) — Tobbe’s interpretation - Track property (afrind suggestion, wilaw seconds for steady-state immutability)
- Per-group subgroup with only-when-changed delivery (afrind suggestion, key-rotation case)
Significance: First substantive cross-author engagement on LOCMAF, counter-signal to the “individual drafts sit with no engagement” pattern. Promotes the stale moq-msf Issue #153 (“initTrack does not work”) to active design engagement. Likely surfaces at the London Day-2 35-min MSF/CMSF Will Law slot as a structured design discussion of init carriage that also affects CMSF (full CMAF chunks) and LOC (self-initializing per-object).
sharmafb 5-item draft-18 editorial sprint
sharmafb (Cisco; not to be confused with Suhas Nandakumar) files 5 contributions in 18 minutes June 3 21:09-21:27 UTC, all draft-18 errata-style:
| Item | Subject |
|---|---|
| PR #1645 | ”Change PUBLISH_OK = 0x1E in table” — PUBLISH_OK message type was removed but its table row remained |
| Issue #1646 | ”Application-specific property codepoints conflict” — §2.5 reserves 0x38-0x3F + 0x3800-0x3FFF for application use, but §15.8 reserves 0x78-0x7F. Direct codepoint collision |
| Issue #1647 | ”TIMESTAMP and SUBGROUP_DELIVERY_TIMEOUT have same value” — §15.8 codepoint collision |
| PR #1648 | ”Soften one mandatory response for a REQUEST_UPDATE” — §10.9.1 already allows coalesced failed updates to produce only one REQUEST_ERROR |
| PR #1649 | ”Modify text about PUBLISH_DONE on a control stream” — companion to Tim Evens’s Issue #1641 |
Combined with Issue #1644 by kixelated June 3 15:55 UTC “Duplicate Track Properties on repeated SUBSCRIBE_OK / FETCH_OK” (the moq-transport-side surfacing of the same gap that moq-lite-05 PR #1609 already addresses with TRACK_INFO Track Stream 0x6), the draft-18 errata + design issue load now stands at 14 active items (6 normative PRs OPEN + 8 design issues OPEN) heading into London Day-1 0900-1045 “MOQT Issues” 180-min slot — infeasible to ship all 6 PRs on the floor; chairs will likely defer pure-editorial items (PUBLISH_OK code change #1645 + PUBLISH_DONE wording #1649) to editor discretion, leaving DTS + EXPIRES + Fill as the substantive merges-on-floor candidates.
google/quiche moqt starts draft-19 wire prep in earnest
3 vasilvv commits June 3 (03:08 — 10:58 UTC) all directly altering MOQT wire shape:
| SHA | When | Subject |
|---|---|---|
4096d2e3 | 03:08 UTC | ”Switch MOQT to using new varint format” — draft-19 wire bump |
8427f949 | 03:22 UTC | ”Use delta encoding for Subscribe Filters of type Absolute Range” — wire compaction |
96c9a9c0 | 10:58 UTC | ”Merge CLIENT_SETUP and SERVER_SETUP into a single control message” — handshake simplification |
Plus martinduke 52de014c June 2 22:45 UTC (MoqtResponseCallback MessageParameters in REQUEST_OK) + c25d5258 June 3 15:30 UTC (ASAN fix).
First sustained draft-19 wire-prep work the wiki has tracked from any impl — up until now quiche moqt commits since May 14 have been refactor work (stream-class factoring + subscription publisher extraction). With vasilvv pivoting to wire-format changes, the implementation track for draft-19 is now open — moq-transport spec text changes for these will likely surface at London.
openmoq/moqx — PR #264 paul-mondain CAT token MERGED after 33 days OPEN
paul-mondain PR #264 MERGED June 3 22:57 UTC — the largest single moqx merge so far (+1807/−13, 20 files). Adds opt-in CAT-style token authentication with per-service auth config block, internal signed CWT/HMAC token verifier for exp/moqt/moqt-reval claims, AUTHORIZATION_TOKEN credential validation, and authorization checks on PUBLISH_NAMESPACE/PUBLISH/SUBSCRIBE_NAMESPACE/SUBSCRIBE/FETCH/TRACK_STATUS. Preserves existing relay peering token behavior.
Cross-impl auth status June 4: 3 cross-impl auth-relay-path PRs were open in parallel — openmoq/moqx PR #264 (paul-mondain CAT, OPEN since May 1) + cloudflare/moq-rs PR #169 (englishm-cloudflare AuthHook design) + cloudflare/moq-rs PR #171 (suhasHere C4M implementation). PR #264 lands first; PRs 171 still OPEN and untouched June 3-4. Combined with PR #286 (paul-mondain Catapult submodule wiring, stacked on #264) still OPEN, the openmoq/moqx auth story still has one more stack-on-top to land before complete.
afrind opens 3 new issues June 3 23:09-23:43 UTC:
- Issue #380 “auth: use standard token type values” — “Now we support cat4moq, but allow the operator to configure the token type. We should use whatever the spec defines.” (filed ~10 min after PR #264 merge)
- Issue #381 “auth: how does it work for MOQT peers?” — relay-peer auth bypass / inter-relay token presentation question
- Issue #382 “Draft-18 updates for relay behavior” — priority-ranked sub-issues including NAMESPACE_TOO_LARGE error+reset enforcement, SUBSCRIBE_NAMESPACE stream closure semantics, plus “see what’s coming from upstream into moxygen/relay/MoQRelay and moxygen/relay/MoQCache — we likely need to port these over”. First openmoq/moqx draft-18 catch-up backlog scoped as a tracking issue.
TilsonJoji emerges at mondain/moqxr — SRT MPEG-TS ingest
mondain/moqxr PR #14 OPEN by TilsonJoji (new external contributor; OPEN June 1, last updated June 3 17:51 UTC) “Add SRT MPEG-TS ingest with fMP4 repackaging and MoQ object publishing” — first MoQ-side SRT ingest path in the openmoq orbit. Parallel to moq-dev/moq PR #1587 (MPEG-TS over MoQ via mpeg2ts crate) + mondain/moq2ts (MSFTS demonstrator). The mondain ecosystem now spans 3 MPEG-TS-adjacent paths: moqxr (SRT MPEG-TS ingest), moq2ts (MSFTS demonstrator), and the moqxr-as-SDK link target.
moq-dev/moq voice-AI / TTS use case lands at the player
PR #1620 OPEN by kixelated “feat(watch): latency range with buffered playback” (+726/−75, 14 files) reframes playback latency in @moq/watch as a range [min, max]. The PR body opens:
Reframes playback latency in
@moq/watchas a range[latency-min, latency-max], unifying live (minimize-latency) and buffered playback into a single mechanism. This unblocks voice-AI / TTS use cases (e.g. pipecat-ai/pipecat#4629) where a response is written faster than real-time with future timestamps and should be buffered and played at the encoded pace, rather than the player aggressively minimizing latency and skipping ahead.
Latency was never really a single point — it’s a range, and “minimize latency” is just the degenerate case where the range collapses (
max == min).
The sync reference (wall-clock anchor) is re-anchored (skipped forward) only when keeping it would push latency past the bounds. Pairs with PR #1615 by vipyne (new external contributor) addressing the ingest side: AudioProducer (Python) flush/cancel primitive for real-time interruption (AI voice agents). Together with PR #1617 by arielmol (new external contributor) “Ingest SCTE-35 from MPEG-TS into a data catalog track” (broadcast-ad-marker plumbing), moq-dev/moq adds 3 new use-case verticals in 24h: AI-voice playback (PR #1620), AI-voice ingest (PR #1615), broadcast-ad-marker carriage (PR #1617).
Yu You (Nokia) announces v17+v18 remote relay for interop
Yu You (Nokia) Slack #moq June 2 09:18 CEST: “we are in the process to host a remote relay for the interop. we have the support of v17 and v18 (basic ones with current interop test cases) for testing.” — first impl-side v18 endpoint announcement as pre-London infrastructure addition. If registered with the interop runner, this would be the first impl-registered v18 entry, finally closing the runner’s 0-at-target gap. Pairs with Yu You’s earlier May 29 mailing-list YES vote on DTS adoption (with measured Nokia implementation benefit numbers) as continued Nokia engagement across spec consensus + production deployment.
Activity (June 2 06:00 UTC → June 3 06:00 UTC) — draft-ietf-moq-msf-01 PUBLISHED on Datatracker June 2 (Day +134 saga closes); draft-einarsson-moq-locmaf-00 NEW individual draft by Tobbe + Hugo Björs; afrind opens transport PR #1642 replacing Joining Fetch with Subscription Fill; Tim Evens (Cisco) emerges as new cross-repo contributor (transport Issue #1641 + openmoq/moqx PRs 377); moq-dev/moq ~14 merges incl /health endpoint + moq-lite-05 wire-feature triple + MPEG-TS fMP4 close-out; interop 177/57/119/1 new May+June high 32.2% (+6 pass)
TL;DR:
- draft-ietf-moq-msf-01 PUBLISHED June 2 on Datatracker by Will Law (Akamai) + Suhas Nandakumar (Cisco) — first MSF revision in 134 days (since -00 Jan 19 2026); ends the 5-day slippage saga of wilaw’s May 27 Slack “Friday” pledge. Final pre-submission clean-up was moq-wg/msf PR #176 by wilaw (June 2 11:18 UTC, −7/1f, “Remove unused RFC references and SCTE35 entry”). Companion moq-wg/cmsf PR #21 (+69/−20, MERGED 13:54 UTC, closes #20) updates CMSF’s MSF reference from -00 → -01.
- draft-einarsson-moq-locmaf-00 NEW individual draft submitted June 2 by Torbjörn Einarsson (Eyevinn) + Hugo Björs (KTH) — “Low Overhead CMAF for Media over QUIC (LOCMAF)” — compact wire format carrying CMAF chunk metadata as tagged fields while preserving sample data unchanged; receiver reconstructs functionally equivalent CMAF chunks for MSE/EME playback. First IETF artifact from the wiki maintainer. Slots between LOC (strips fMP4 overhead but loses MSE/EME) and CMSF (keeps CMAF semantics at full chunk size) — compact-fMP4 carrier the player reconstructs to a CMAF chunk in browser memory before handing to MSE.
- moq-transport PR #1642 OPEN June 2 17:01 UTC by afrind “Replace Joining Fetch with Subscription Fill, add Current Group” (+188/−148, 1f) — structural redesign: Joining Fetch removed entirely; new subscription filter types AbsoluteStartFill (
0x5), AbsoluteRangeFill (0x6), CurrentGroup (0x7), RelativeStartFill (0x8); new FillDescending (0x3) group order; new Current Group Delivery + Fill Semantics sections; publisher opens single fill fetch stream (FETCH_HEADER reusing subscription Request ID) for past objects while delivering current/future via subscribe subgroups/datagrams. Replaces ianswett’s PR #1627 (OPEN since May 3, ianswett auto-CLOSES it June 3 00:16 UTC, 30 days OPEN). Plus 2 new draft-18 design issues — Issue #1641 by Tim Evens (Cisco) on PUBLISH_DONE control-stream-vs-request-stream wording (afrind reply “Request streams are considered ‘control’ streams in most of the text, but we can probably crisp this up”); Issue #1643 by afrind on bidi-stream FIN semantics. London Day-1 0900-1045 MOQT Issues 180-min slot now has 3 normative-text deliverables (DTS PR #1638 + EXPIRES PR #1640 + Fill PR #1642) + 4 design-issue threads — will require triage. - Implementations: moq another ~14-merge cycle (June 2 20:00 UTC → June 3 04:00 UTC, all kixelated): PR #1604
/healthload-shedding endpoint (+905/−5, 11f, first explicit production-CDN feature); moq-lite-05 wire-feature triple (PR #1595 MERGED Frame Start in FETCH + PR #1601 OPEN TrackConsumer::fetch + PR #1609 OPEN TRACK_INFO Track Stream0x6); MPEG-TS fMP4 export close-out (PR #1590 out-of-band avc1/hvc1 + PR #1593 AAC esds in fMP4); API ergonomics (PR #1606 ergonomicsubscribe(None)); release + dependency wave (PR #1607 0.12.7 + PR 1603). moq-lite-05 now has 5 wire features in 7 days (deflate + AnnounceOk + Frame Start + TrackConsumer::fetch + TRACK_INFO Track Stream) — the most active wire-protocol evolution venue in the ecosystem. moqx: Tim Evens (Cisco) emerges as new external contributor — PR #376 OPEN Debian bookworm + CPM (+92/−31, 5f); PR #377 OPEN macOS Apple Clang 21 fmt workaround (+21/−6, 2f). Same TimEvens filing transport Issue #1641 — cross-repo emergence Day +1 of activity. 3rd Cisco contributor reaching mainline moq-wg artifacts alongside Suhas Nandakumar + Mo Zanaty. moq-rs: PR #167 minor refresh June 3 05:37 UTC; 171 untouched. mondain, moqtail, moq-js (PR #72 OPEN), imquic (PR #27 OPEN), quiche moqt, quiche_moq, Moqintosh, moqlivemock, Eyevinn/warp-player, Eyevinn/moqtransport all quiet. - Interop: 177 / 57 / 119 / 1 at 2026-06-03 00:56:06 UTC — +6 pass vs June 2 (51 → 57, 28.8% → 32.2%, +3.4pp), first 32%+ pass rate since cadence recovery May 19, largest single-day pass-count jump since the May 19 cadence recovery; 16-day cadence (new longest streak the wiki has tracked). Version breakdown still 0 at target · 0 ahead · 177 behind — impl-registration drift unchanged; the +6 jump comes from better cross-version compatibility behavior not registration-side closure. London hackathon 6 days away.
draft-ietf-moq-msf-01 PUBLISHED — 134-day saga closes
Will Law’s May 27 Slack pledge “I plan to release a new draft this Friday ahead of the London interop” (May 29 UTC) finally lands on Datatracker June 2 after 4 days of slippage:
| Date | Status | Notes |
|---|---|---|
| 2026-05-27 12:30 UTC | Pledge | wilaw Slack: “this Friday” (May 29) |
| 2026-05-29 EOD | Day +130, slip 1 | No submission |
| 2026-05-30 EOD | Day +131, slip 2 | No submission |
| 2026-05-31 EOD | Day +132, slip 3 | No submission |
| 2026-06-01 EOD | Day +133, slip 4 | No submission |
| 2026-06-02 ~13:54 UTC | Day +134, submitted | -01 lands; CMSF reference bump merged shortly after |
The 5-day slippage was real but contained: only ~3 trailing editorial PRs landed between announced ETA (May 29) and actual submission (June 2): PR #173 normative refs (May 29), PR #174 timestamp rounding (May 29), PR #171 parent namespace (May 30), PR 175 (June 1 burst), PR #176 RFC refs clean-up (June 2). The longer cycle absorbed Issue #163 version-string fix (PR #175 June 1) + RFC reference clean-up (PR #176 June 2) that would otherwise have needed a -02.
MSF -01 cadence: 134 days from -00 (Jan 19) to -01 (June 2). Sets MSF’s publication tempo as ~4 months per revision — slower than moq-transport (-17 → -18 in 49 days) but consistent with MSF being a packaging-format spec rather than a wire-protocol spec.
18 wilaw events May 24-June 2 (largest single-contributor MSF push since draft adopted) all absorbed into -01:
- PR #157 (suhasHere group numbering)
- PR #159 (suhasHere catalog compression)
- PR #165 (wilaw bitrate properties + mandatory audio/video fields)
- PR #166 (wilaw typed-object initDataList; Tobbe’s design adopted)
- PR #167 (wilaw targetBuffer; closes kixelated’s Issue #150)
- PR #168 (wilaw catalog object specs + numbering)
- PR #171 (wilaw parent namespace for clone tracks)
- PR #173 (wilaw normative reference update)
- PR #174 (wilaw timestamp rounding)
- PR #175 (wilaw version-string)
- PR #176 (wilaw RFC refs + SCTE35 removal)
draft-einarsson-moq-locmaf-00 — First IETF artifact from the wiki maintainer
Torbjörn Einarsson (Eyevinn Technology) + Hugo Björs (KTH) submit draft-einarsson-moq-locmaf-00 “Low Overhead CMAF for Media over QUIC (LOCMAF)” June 2 on Datatracker. Per abstract: “LOCMAF defines a compact wire format that enables streaming low-latency CMAF media over MoQ Transport with significantly reduced per-object overhead. The format carries CMAF chunk metadata as tagged fields while preserving sample data unchanged, with the receiver reconstructing functionally equivalent CMAF chunks suitable for MSE/EME playback pipelines.”
Design position: slots between LOC (lean container, no MSE/EME compat) and CMSF (full CMAF chunks). LOCMAF’s distinguishing choice: carry CMAF chunk metadata as tagged fields, preserve sample data unchanged, reconstruct CMAF chunk receiver-side — transparent to MSE/EME consumers (the player still sees standard CMAF chunks) while removing redundant box headers from the wire.
Motivation: Eyevinn’s existing CMAF-based pipeline (HLS/DASH origins + low-latency CMAF chunked encoding) needs a MoQ wire shape that doesn’t force re-architecting the player-side MSE/EME glue. LOCMAF preserves that. Also resolves Tobbe’s May 23 moq-wg/msf Issue #153 Point 4 (“AVC3 doesn’t resolve the mid-stream-change question because Safari (notably for FairPlay DRM) requires avc1/hvc1 sample entries”) by allowing parameter sets out-of-band as tagged fields.
See the new wiki page for moq-locmaf for details.
afrind PR #1642 — Joining Fetch removed, Subscription Fill introduced
afrind’s PR #1642 (+188/−148, 1f) structurally redesigns MOQT’s past-object retrieval:
Removed:
- Joining Fetch types
- Joining Fetches section
- Joining Fetch Range Calculation
- Joining Location
- INVALID_JOINING_REQUEST_ID error code
Added (new subscription filter types):
- AbsoluteStartFill (
0x5) - AbsoluteRangeFill (
0x6) - CurrentGroup (
0x7) - RelativeStartFill (
0x8) - FillDescending (
0x3) group order (descending for fill, ascending for subscribe)
Added (new sections):
- Current Group Delivery — publisher subgroup ordering + relay object accounting requirements, applies to any filter covering current group
- Fill Semantics — defines fill fetch stream behavior
Modified:
- Standalone Fetch fields inlined directly into FETCH wire format
- LARGEST_OBJECT serves as fill boundary in SUBSCRIBE_OK
- FILL_TIMEOUT extended to apply in SUBSCRIBE messages with fill filter types
- REQUEST_UPDATE with a fill filter type opens a new fill fetch stream using the REQUEST_UPDATE’s Request ID
- Fill filter types + CurrentGroup disallowed in PUBLISH_OK (stale LARGEST_OBJECT); recommends
forward=0+ REQUEST_UPDATE pattern instead
Publisher behavior: opens a single fill fetch stream (FETCH_HEADER reusing the subscription’s Request ID) for past objects while delivering current/future via subscribe subgroups/datagrams.
Replaces ianswett’s PR #1627 “SUBSCRIBE with Joining Fetch” OPEN May 3 → CLOSED June 3 00:16 UTC (30 days OPEN). The architectural simplification (one filter dimension instead of two request types) and FillDescending group order directly answer ianswett’s Issue #1614 “(JOINING) FETCH + SUBSCRIBE prioritization”.
Tim Evens (Cisco) emerges as new cross-repo contributor
Tim Evens files 3 contributions across 2 repos within ~18h June 2 06:19 UTC → June 3 05:09 UTC:
| Repo | PR/Issue | When | Subject |
|---|---|---|---|
| moq-wg/moq-transport | Issue #1641 | June 2 06:19 UTC | ”Publish DONE, control stream or request stream?” (draft-18 wording inconsistency) |
| openmoq/moqx | PR #376 | June 2 23:42 UTC | ”Fix Debian bookworm builds and switch deps to CPM” (+92/−31, 5f) |
| openmoq/moqx | PR #377 | June 3 05:09 UTC | ”fix macOS deps build with Apple Clang 21+ and tidy sanitizer flags” (+21/−6, 2f) |
Cisco footprint across MoQ now spans 3 named individuals + 2 implementations + 4 specs:
| Contributor | Specs | Implementations |
|---|---|---|
| Suhas Nandakumar | cmsf, msf, secure-objects, privacy-pass | cloudflare/moq-rs (PR #167 + #171) |
| Mo Zanaty | loc (draft author), agenda | — |
| Tim Evens | moq-transport draft-18 design (#1641) | openmoq/moqx (#376, #377) |
Structurally the most distributed corporate presence in the MoQ ecosystem. Tim Evens’s emergence in the same week as the multi-thread sprint stack (PR 361-365 OPEN) + Suhas’s C4M AuthHook (PR #171 OPEN) means multi-author multi-corporation collaboration on openmoq/moqx is now visible in main-branch PR list — distinct from the kixelated-solo pattern at moq-dev/moq.
moq-dev/moq operational milestone — /health endpoint
PR #1604 (+905/−5, 11f) adds an unauthenticated GET /health to moq-relay’s existing web server:
- Returns:
200 okwhen every configured threshold passes;503 overloaded+ one plain-text line per breached threshold when any threshold breaches - No thresholds configured: pure liveness probe
- Metrics: cross-platform
sysinfocrate; load-average flag Unix-only - Config under
[web.health]with matching--web-health-*flags +MOQ_WEB_HEALTH_*env vars:cpu— global CPU usage (75or75%)ram— memory usage (80%of total or32GB/32GiBabsolute used)rx/tx— aggregate throughput (unit required; lowercaseb= bits, uppercaseB= bytes)
First explicit production-CDN load-shedding feature in any tracked MoQ implementation. Pairs with PR #1571 May 31 (externalized --cluster-connect-api peer list) + PR #1574 May 31 (per-auth-root presence-based billing). Together: moq-dev/moq is now structurally a production CDN substrate with load-balancer integration, peer-list externalization, presence billing, and the moq-pro pattern consolidated.
moq-lite-05 wire-feature triple — pace continues
Counting from PR #1518 (Lite05Wip variant May 27) the wire-feature additions in 7 days are:
- PR #1531 May 28 —
Compressioncodec field in SUBSCRIBE_OK (deflate compression) - PR #1573 June 1 —
AnnounceOkmessage (responder origin + initial active count) - PR #1595 June 3 —
Frame Start (i)field in FETCH (resume mid-group) - PR #1601 OPEN June 3 —
TrackConsumer::fetchfirst-class single-group FETCH - PR #1609 OPEN June 3 —
TRACK_INFOTrack Stream0x6(immutable props off SUBSCRIBE_OK)
All gated on Lite05Wip so default ALPN/Versions don’t advertise — opt-in for testing without disrupting Lite04 default negotiation.
moq-lite-05 is structurally the most active wire-protocol evolution venue in the MoQ ecosystem — 5 wire features in 7 days outpaces moq-transport’s draft-18 → draft-19 prep both in feature count and merge cadence.
Activity (June 1 06:00 UTC → June 2 06:00 UTC) — wilaw moq-transport PR #1638 DTS OPEN as PR-against-transport-18 (consensus-decided design lands as base-spec PR per Cullen’s preference); 3 MSF PRs MERGED (compression #159, bitrate #165, string-version #175) while MSF -01 still NOT submitted Day +134; moq-dev/moq 14 merges + 6 OPEN including MPEG-TS bridge PR #1587 (matches MSFTS/moq2ts) + moq-lite-05 AnnounceOk MERGED + per-track timescale (long-pending #1439) MERGED + qmux version mapping (long-pending #1513) MERGED + subscribe_track async (long-pending #1540) MERGED; cloudflare/moq-rs PR #171 AuthHook + C4M implementation OPEN by suhasHere (+2090/-15, implementation of design proposal #169); mondain/moq2ts MSFTS demonstrator publicly announced on Slack with cross-platform CI build workflow; Martin Duke asks moq if anyone wants draft-16 interop at London, Alan Frindell + Mike English confirm 14/16/18 multi-version support; google/quiche 2 commits (FETCH stream + RemoteTrack refactor); openmoq/moqx afrind multi-thread relay sprint continues with 5 OPEN PRs; interop 177/51/125/1 first draft-18 target run (-3 pass, 0 at target · 0 ahead · 177 behind reflects impl-registration vs draft-version drift)
TL;DR:
- moq-transport PR #1638 OPEN June 1 11:06 UTC by wilaw “Add Dynamic Track Switching (DTS)” (+147/−0, 1 file, fixes #259) — DTS lands as a PR-against-moq-transport-18 base spec, the integration path Cullen Jennings May 27 explicitly preferred (“I disagree it should be done as a separate draft. I think it should be worked as a PR that can be discussed in context”) against Magnus Westerlund’s separate-Internet-Draft proposal. The consensus-decided design from the May 26-Jun 4 mailing-list call (Will Law / Gwendal Simon / Yu You-Nokia / Ali Begen = 4 YES votes) now has concrete normative text staged for merge, adds a new
SWITCHING-SET-ASSIGNMENTparameter, details subscriber operations + relay behavior + bandwidth allocation algorithm. 8 days before London Day-1 0900-1045 “MOQT Issues” slot, the DTS thread shifts from list-debate to PR-review. - MSF 3 PRs MERGED June 1 (the trailing editorial work for -01 finally completes): PR #159 MERGED 09:42 UTC “Add catalog compression support via Track/Object Properties” by suhasHere (+114/−4, fixes #144 “Compression for the catalog” by vasilvv that was 21 days OPEN); PR #165 MERGED 09:33 UTC “Update bitrate and related properties in draft” by wilaw (+51/−25 — adds Maximum GOP Duration / Maximum Group Duration / Average Bitrate track properties, makes sample_rate+channels required for audio, codec+width+height required for video, redefines bitrate as maximum); PR #175 MERGED 13:28 UTC “Change version type from Number to String in MSF” by wilaw (+19/−16, fixes #163 “Version should carry draft info for interop until released”). With these merged, the last remaining MSF PR from wilaw’s May 24-27 sprint (PR #165) finally lands; only PR #156 (suhasHere “MOQT Object to Stream mapping implementation-specific”) + PR #169 (wilaw MOQT mapping clarification) remain OPEN. MSF -01 STILL NOT submitted to Datatracker — Day +134 since -00 (Jan 19 2026). 5th consecutive day of slippage on wilaw’s May 27 Slack “Friday” pledge.
- moq — kixelated 14-merge + 6-OPEN burst June 1-2 (clearing pre-London backlog including 3 long-pending PRs):
- PR #1587 OPEN Jun 2 02:25 UTC “moq-mux: add MPEG-TS (transport stream) import and export” (+1548/−2, 15f) — bridges MoQ ↔ MPEG-2 TS via new
container/tsdemux/mux, enablesffmpeg -f mpegts - | moq-cli publishandmoq-cli subscribe --format ts | ffplay -without transcode. Singlempeg2tscrate handles both directions, codecs H.264/H.265/AAC. Aligns with Paul Gregoire’s MSFTS draft + mondain/moq2ts C++ demonstrator announced same day. CLAUDE.md update: “prefer maintained third-party crate over hand-rolling non-core functionality” — first explicit codebase architectural note about scope discipline. - PR #1573 MERGED Jun 1 16:09 UTC moq-lite-05 AnnounceOk (was OPEN in June 1 entry; merged ~13h after open into
devbranch). - PR #1540 MERGED Jun 1 15:34 UTC “moq-net: make subscribe_track async, blocking on SUBSCRIBE_OK” (+1221/−632, 55f) — long-pending since May 29 (4 days OPEN); reshapes
subscribe_trackso subscription resolves once publisher confirms via SUBSCRIBE_OK, separatesSubscription(subscriber wire params) fromTrack(publisher immutable properties), concurrent subscribers coalesce. Picks up the idea started in PR #1439 MERGED 19:13 UTC “Add per-track timescale and frame timestamps to moq-lite” — even longer-pending PR that finally lands. - PR #1513 MERGED 19:03 UTC “moq-net: map MoQ versions to required qmux versions” — concrete code for the WG-decided qmux pinning table (moq-transport-18 must ride on qmux-01, 14-17 on qmux-00, moq-lite unconstrained). Long-pending since May 28.
- PR #1581 MERGED Jun 2 02:25 UTC “relay: unified —auth-api” (+576/−24, 6f) — one HTTP call returns key + public + alias, supports MoQ CDN dashboard (moq-dev/moq-pro#47) giving each project a stable id plus an editable vanity path. Continues moq-pro pattern: external API resolves
demo→x7k2qpserver-side; relay stays topology-agnostic. - Plus PR #1585 moq-net per-track cache age in SUBSCRIBE_OK + reconcile draft field order + port timescale to js/net; PR #1586 libmoq
moq_error()exposed; PR #1579 don’t advertise illegalqmux-00.moqt-18pair; PR #1580 WebSocket keep-alive on client path; PR #1582 re-export Hang from@moq/publish/@moq/watch; PR #1576 split TrackConsumer into track handle + TrackSubscriber; PR #1577 shrink moq-ffi + libmoq staticlibs with LTO; PR #1584 prefer esm.sh over jsDelivr for no-build CDN usage; PR #1589 moq-boy exit non-zero on reconnect give-up. - OPEN follow-ons: PR #1590 out-of-band avc1/hvc1 in MPEG-TS export; PR #1588 decouple download gating from Renderer; PR #1591 Computed derived signals; PR #1592
@moq/watchcomponent signals inputs vs outputs; PR #1583 OPEN by external contributor nuts-rice “js: add Opus dtx for voice WIP”.
- PR #1587 OPEN Jun 2 02:25 UTC “moq-mux: add MPEG-TS (transport stream) import and export” (+1548/−2, 15f) — bridges MoQ ↔ MPEG-2 TS via new
- moq-rs PR #171 OPEN June 1 18:40 UTC by suhasHere “Add pluggable AuthHook trait and C4M token authentication” (+2090/−15, 30 files) — implementation of PR #169 design proposal from May 28; adds 2 new crates (
moq-authAuthHook trait + AllowAll/KeyValue/Logging hooks + auth types;moq-auth-catC4M hook with signature verification, claims validation, MOQT scope matching), parses AUTHORIZATION TOKEN from CLIENT_SETUP, callson_setupat session establishment (fail-closed),on_requestbefore Publish/Subscribe/TrackStatus, CLI flags--auth-shared-secret+--auth-cat-public-key. First concrete cross-impl auth implementation engagement after May 30 thibmeu 8-comment review burst on PR #169 — Suhas advances from trait proposal to working implementation within ~4 days. PR #169 itself remains OPEN; PR #170 (Manish draft-16 rewrite) untouched Day +3. - Slack moq — London draft-version coordination breaks May 28-Jun 1 7-day silence:
- Paul Gregoire June 1 19:43 UTC: “Created a demonstrator for the msfts draft https://github.com/mondain/moq2ts — only works with one relay that I know of at this time, but no one should be surprised by that” — first publicly-announced reference implementation of draft-gregoire-moq-msfts-00 (the MSFTS individual draft Paul co-authored with Gwendal Simon, submitted May 6).
- Martin Duke June 1 22:43 UTC: “Is anyone coming to London interested in draft-16 interop? There is no way we’re going to be done with draft-18 migration, but if everyone else will be we might as well break -16.” — reactions: gb (1), face_with_monocle (1). First London-week multi-version-strategy question.
- Alan Frindell June 2 01:50 UTC: “moxygen will have support for 14 and 16, and hopefully enough 18 to get some interop” — 3-version simultaneous support (14, 16, 18) for openmoq/moqx-stack.
- Mike English June 2 02:28 UTC: “moq-rs will also have instances of 14, 16, and a small start on 18 for people to test against.” + “I’m also feeling like 18+ might be where we finally start on proper multi-version support” — first explicit framing of draft-18 as a multi-version-support inflection point for cloudflare/moq-rs.
- Carry-forward: 4 impl-team responses to Martin Duke’s call within 6 hours = London 2026 will exercise (14, 16, 17, 18) × N-impls cross-version matrix manually, beyond the automated runner; this is the first explicit pre-London coordination on how many drafts the hackathon should actually try to interop against, vs. unilateral “everyone’s on 18” assumption.
- Implementations: see TL;DR above for moq (14 merges + 6 OPEN), moq-rs (PR #171). moq2ts (created May 21, language: C++) — surge June 1-2 (~9 commits) on cross-platform CI build workflow (Linux/macOS/Windows via GitHub Actions, AppImage + macdeployqt + windeployqt packaging), ffmpeg 8 + Qt qsizetype build fixes, native AVCaptureSession publish on macOS (libav/avfoundation hangs); links against prebuilt moqxr publisher SDK (pinned
MOQXR_VERSION=v0.3.2) for relay-capable builds. moqxr 3 commits June 1 by Paul Gregoire packaging the publisher static library + bundling picoquic/picotls dependencies for the SDK consumer path (enables moq2ts above to link standalone). moqx afrind multi-thread relay sprint continues June 1 — PR #361relay_threadconfig + allow > 1 thread, PR #362 isolate relay state on dedicated executor for multiple I/O threads, PR #363 MultiThread relay test mode, PR #364 cache as passive subscriber of primary forwarder, PR #365 per-thread local forwarder data path (use_local_forwarders) — 5-PR stack OPEN simultaneously for thethreads > 1production-deployment milestone. Plus PR #371 bpf reuseport refinement MERGED, PR #370 by gmarzot folly XLOG init OPEN. quiche moqt breaks Day +5 silence — 2 commits June 1 by martinduke:3b9d545017:28 UTC “Move parameter handling from session to RemoteTrack” +0b92a8b417:34 UTC “Get rid of MoqtUpstreamFetch::LocationIsValid because FETCH streams are diff-encoded; Malformed Tracks are no longer possible to encode in a FETCH stream”. moqtail, moq-js (PR #72 still OPEN), imquic (PR #27 still OPEN, last update Jun 1 13:15), quiche_moq, Moqintosh, moqlivemock, Eyevinn/warp-player, Eyevinn/moqtransport all quiet. - Interop: 177 / 51 / 125 / 1 at 2026-06-02 00:50:22 UTC — first run at new draft-18 target following PR #68 merge June 1 05:21 UTC. −3 pass vs June 1 (54 → 51, 30.5% → 28.8%, −1.7pp); 15 consecutive days of daily reports (May 19-Jun 2), longest cadence streak the wiki has tracked. Version breakdown shifts to 0 at target · 0 ahead · 177 behind — NO impl is registered with the runner as advertising draft-18 even though moq, moqxr, and imquic have draft-18 code in main. Drift between runner-registered-version and impl-main-branch-version is now the visible structural gap (Martin Duke’s Slack question 4h later is the implementer-side response). London hackathon 7 days away.
moq-transport PR #1638 — Dynamic Track Switching lands as base-spec PR
Will Law opens DTS PR against moq-transport-18 June 1 11:06 UTC
PR #1638 “Add Dynamic Track Switching (DTS)” by wilaw — +147 / −0, 1 file, fixes Issue #259:
Adds the Dynamic Track Switching (DTS) feature, detailing subscriber operations, relay behavior, and bandwidth allocation algorithm. Adds a new SWITCHING-SET-ASSIGNMENT parameter.
Context — consensus call disposition:
- May 26: Will Law explicit YES on adoption + integration into moq-transport-18 (mailing list).
- May 27: Cullen Jennings explicit YES, prefers PR-against-moq-transport-18 over separate companion RFC: “I disagree it should be done as a separate draft. I think it should be worked as a PR that can be discussed in context”.
- May 27: Gwendal Simon (SWITCH co-author) 4-point structured rebuttal of Martin Duke’s “Thoughts on SWITCH” framing — down-switch is 4 messages not 3 with break-before-make hard-freeze; up-switch N+k group selection needs relay-side info; SWITCH is additive not replacive; 4 implementations exist.
- May 28: Gwendal Simon YES on adoption + YES on integration with DTS reservations.
- May 29: Yu You (Nokia) YES + YES with measured benefit numbers (“my team has already implemented both”).
- May 29: Ali Begen (MOQtail co-author) YES + YES with “if necessary” framing on separate-RFC fallback (“my team has already implemented both in MOQtail and plans to share implementation results”).
- June 4: consensus call formal close.
Tally heading into close: 4 YES + 0 NO with 3 of 4 SWITCH co-authors + Nokia implementation report = consensus call substantively decided 14 days before close. PR #1638’s structural choice (PR-against-transport-18 base spec instead of separate companion Internet-Draft) matches Cullen’s preference and the implementer pattern (MOQtail + Nokia both implemented DTS as integrated transport feature, not as separate spec) rather than Magnus Westerlund’s separate-Internet-Draft proposal that would have given the WG more rev-cycle flexibility.
Wider impact:
- London Day-1 0900-1045 “MOQT Issues” 180-min slot now structurally anchored around: bidi-stream-credit (Issue #1637 martinduke May 29) + request-blocking design (Issue #1519 vasilvv since Mar 2) + DTS PR #1638 (wilaw June 1) + EXPIRES extension (Issue #1639 + PR #1640 martinduke June 1 19:50/22:14 UTC).
- DTS PR #1638 + EXPIRES PR #1640 are the two normative-text deliverables for London Day-1; the others are issue-level discussion.
moq-rs PR #171 — AuthHook trait + C4M implementation lands
Suhas Nandakumar opens implementation PR June 1 18:40 UTC
PR #171 “Add pluggable AuthHook trait and C4M token authentication” by suhasHere — +2090 / −15, 30 files:
This PR is an implementation of #169. Adds intra-scope authorization to the relay via a pluggable AuthHook trait, with a C4M (CAT for MoQ) implementation using the cat-token crate.
New crates:
moq-auth— AuthHook trait, AllowAll/KeyValue/Logging hooks, auth typesmoq-auth-cat— C4M hook: signature verification, claims validation, MOQT scope matching
Relay integration:
- Parses AUTHORIZATION TOKEN from CLIENT_SETUP (USE_VALUE wire format)
- Calls
on_setupat session establishment (fail-closed) - Calls
on_requestbefore Publish/Subscribe/TrackStatus operations - CLI:
--auth-shared-secret(token type 0) and--auth-cat-public-key(C4M, requires--features auth-cat)
Why this matters:
- First concrete cross-impl auth implementation engagement after May 30 thibmeu 8-comment review burst on PR #169.
- The PR text includes end-to-end test plans for both shared-secret and C4M auth — Suhas demonstrates working code rather than gating on PR #169 design-discussion closure.
- The thibmeu review on PR #169 critiqued the trait surface for accommodating Privacy Pass challenge-reply (issuer-aware) — PR #171’s implementation does not yet address that pivot; Suhas chose to ship the verify-callback shape and let Privacy Pass adapt or extend later. Design vs implementation cleavage now visible: PR #169 stays open as design-discussion forum, PR #171 stays open as concrete implementation to test against.
- Cross-impl significance: openmoq/moqx has been driving CAT token auth via PR #264 (paul-mondain) + PR #286 (Catapult submodule) since May 1; cloudflare/moq-rs PR #171 is the second relay implementation of CAT auth under the C4M framing, structurally parallels rather than reuses openmoq/moqx’s pattern.
Carry-forward: London Day-1 PRIVACY_PASS slot (paired with moq-privacy-pass draft-02 advance) now has two concrete relay implementations (openmoq/moqx CAT + cloudflare/moq-rs C4M) plus thibmeu’s pending Privacy Pass critique on PR #169 — three vectors of auth-implementation experience to inform draft-19 design.
mondain/moq2ts — MSFTS demonstrator announced
Paul Gregoire publicly announces moq2ts on moq June 1 19:43 UTC
mondain/moq2ts (C++, created May 21 2026, “MOQ + M2TS”) — first publicly-announced reference implementation of draft-gregoire-moq-msfts-00:
Created a demonstrator for the msfts draft https://github.com/mondain/moq2ts — only works with one relay that I know of at this time, but no one should be surprised by that 😉
Surge May 31-Jun 2 (~9 commits):
- Cross-platform CI build workflow (
8306eee9June 1 19:50 UTC) — Linux/macOS/Windows via GitHub Actions, AppImage via linuxdeploy + macdeployqt + windeployqt+ldd packaging. - Real relay-capable binaries by linking moqxr SDK (
5721c914June 1 22:34 UTC) — links against prebuilt openmoq publisher SDK pinnedMOQXR_VERSION=v0.3.2, Linux wraps archives in--start-groupto resolve circular picohttp/picoquic deps. - ffmpeg 8 + Qt qsizetype build fixes (
7c14381722:56 UTC,aef64cd023:29 UTC) —avio_alloc_contextconst-buffer change for ffmpeg 8 + cross-version compat viaLIBAVFORMAT_VERSION_MAJORcheck. - Native AVCaptureSession publish on macOS (
8f281a43June 2 00:29 UTC) — libavdevice/avfoundation hangs inavformat_open_inputbecause it does not pump AVCaptureSession run loop from worker thread; uses native AVCaptureSession directly for preview + publish paths (uyvy422→BGRA in delegate, audio as packed/planar PCM). - README/DEVELOPER refresh for current MSF + MSFTS catalog (
06a17f7a+4e377e17June 1 19:31-19:34 UTC) — documentsmediatimelineMSF type for the timeline side-track + compact[mediaTimeMs,[groupId,objectId],wallclockMs]record array.
Synchronicity: same June 2 02:25 UTC window, moq PR #1587 opens MPEG-TS import/export support for moq-mux via single mpeg2ts crate — both moq2ts (C++/MSFTS draft-specific) and moq-dev/moq PR #1587 (Rust/codec-agnostic) advance MPEG-TS↔MoQ bridging within the same 24-hour window. First concrete cross-impl MPEG-TS interop substrate.
Carry-forward: with mondain/moqxr SDK packaging (a8ad5f9d/deea689f/d43d9804 June 1) + moq2ts CI builds linking against it + moq-dev/moq PR #1587 import/export, MSFTS as a streaming-format becomes the second concrete MoQ-side MPEG-2 TS path (after moqlivemock catalog work) — directly relevant to London Day-2 35-min MSF/CMSF/MSFTS slot.
Slack moq — Martin Duke draft-16-or-18 London poll
Martin Duke poses draft-version question June 1 22:43 UTC
Martin Duke Slack moq June 1 22:43 UTC:
Hi, is anyone coming to London interested in draft-16 interop? There is no way we’re going to be done with draft-18 migration, but if everyone else will be we might as well break -16.
Reactions: 🇬🇧 (1), 🧐 (1).
Responses (within ~6h):
- Alan Frindell June 2 01:50 UTC: “moxygen will have support for 14 and 16, and hopefully enough 18 to get some interop”.
- Mike English June 2 02:28 UTC: “moq-rs will also have instances of 14, 16, and a small start on 18 for people to test against.” + 02:29 UTC: “I’m also feeling like 18+ might be where we finally start on proper multi-version support”.
Cumulative London-week version inventory (from these 3 responses):
| Impl | -14 | -16 | -17 | -18 |
|---|---|---|---|---|
| moxygen (openmoq/moqx) | ✓ | ✓ | — | partial |
| moq-rs (cloudflare) | ✓ | ✓ | — | partial |
| moq-dev/moq | — | ✓ | ✓ | ✓ (main) |
| moqxr (mondain) | — | — | — | ✓ (main) |
| imquic (meetecho) | — | — | ✓ | partial |
| moqtail | ✓ | — | — | — |
Why this matters:
- Draft-18 was published May 12 — 21 days before London but no impl has full draft-18 conformance as of June 2; the partials are sufficient for some interop only.
- Martin Duke’s question reframes the matrix: not “everyone migrates to 18 by London” but “how many drafts do we actually run cross-impl interop against at London”. The default expectation appears to be 14 + 16 + partial 18 = 3-version matrix during London week.
- Mike English’s “multi-version support” comment is a structural signal: until now, MoQ impl strategy has been “track latest draft, migration is best-effort per-impl”; Mike is signaling that draft-18 may be the version where multi-version support becomes a deliberate impl feature, not just a side effect of slow migration. This would echo HTTP/2 multi-version support patterns where impls keep older draft codepaths intentionally to support stragglers.
Carry-forward: the interop runner is automated-version-locked (one target per matrix run); London Day-week interop is manual and operator-driven. Mike’s PR #68 draft-18 target bump landed June 1, but the matrix is now structurally ahead of every impl (0 at target · 0 ahead · 177 behind) — which gives the manual London interop work latitude to exercise 14/16/18 cross-version freely without contradicting the automated matrix.
Activity (May 31 06:00 UTC → June 1 06:00 UTC) — interop runner PR #68 MERGED draft-18 target bump (the matrix-shape lever the wiki has been tracking 14 days); MoQ Monthly #2 published ending Day-+31 silence with London framing + Dan Rayburn town hall + CacheFly/Red5 CDN beta; moq-dev/moq cluster-mesh infrastructure burst (5 merges + 1 OPEN in 12h, externalizes peer-list to operator-owned endpoint + deterministic FNV-1a route tie-break + per-auth-root billing); openmoq/moqx afrind PR #359 fixes relay shutdown hang; mondain/moqxr 2 cancellable-flush commits; moq-wg + mailing list + Slack all quiet; interop 177/54/122/0 (+2 pass, 30.5%, 14-day cadence longest streak, 5-day monotonic uptick to new May+June high, first 30%+ pass rate)
TL;DR:
- englishm-cloudflare merges interop runner PR #68 “Update interop target to draft-18” June 1 05:21:25 UTC — 14 days after OPEN (May 18 21:01 UTC). First matrix-shape change since PR #71 (moqx docker adapter, May 25) and first interop-target version bump since matrix inception. The June 1 00:49 UTC report still shows
draft-16as the target (PR merged ~4.5h after report cut), so the June 2 report will be the first run targeting draft-18. Three implementations (moq-dev/moq, mondain/moqxr, meetecho/imquic) have been on draft-18 main for 2-3 weeks; the matrix is finally catching up. London hackathon 8 days away — only structural matrix-shape lever the wiki had been tracking lands precisely in the pre-London window. - MoQ Monthly #2 published May 31 by Mike English — “A new draft, an industry town hall, and London next week”. Ends Day-+31 silence since #1 (Apr 30); cadence reasserted just before London. Coverage: Draft-18 publication May 12 (unified URI schemes, separated subscription messages, reserved namespaces for extensions); London interim June 9-12 at Cloudflare’s office; WGLC targeted after July Vienna plenary, IESG publication Dec 2026; Dan Rayburn town hall May 12 (commercial-interest signal); Streaming Tech Sweden May 21 featured Vindral + SVT production implementations; Luke Curley’s “MoQ Boy” Game Boy emulator demo; CDN signal: Fastly positioning Apr 15, CacheFly + Red5 announce MoQ beta for summer 2026, Cloudflare + Akamai existing initiatives; 3 ACM Multimedia Systems 2026 papers from Özyeğin University researchers; new MPEG-2 TS + neural video codec drafts; Jan Ozer comprehensive overview at Streaming Learning Center; upcoming FOKUS Media Web Symposium (June 16-17, Berlin), CommCon 2026 (June 9-11, Düsseldorf), RTC.ON 2026 (Sep 16-18, Kraków).
- moq-dev/moq — kixelated cluster-mesh infrastructure burst May 31 17:51 UTC → June 1 03:20 UTC. 5 merges + 1 OPEN in ~12 hours: PR #1569 MERGED 17:51 UTC “relay: dedup mesh dials with a URL-order tiebreaker” (+30/−2) — gossip-discovered peers only dialed by the lexicographically-smaller node, eliminates redundant outbound dial per pair. PR #1570 MERGED 19:26 UTC “moq-net: deterministic route tie-break for equal-length paths” (+83/−18) — FNV-1a
(hop_count, hash)lex compare so every node converges on the same winner across rolling deploys (DefaultHasher explicitly not stable across Rust versions). PR #1571 MERGED June 1 00:22 UTC “moq-relay: add--cluster-connect-apiand split cluster identity from gossip” (+874/−150, 10f) — externalizes peer-list source to anhttp(s)URL or local file returning bare JSON array of hostnames, polled withCache-Controlsemantics + ETag/Last-Modified conditional revalidation + fail-static on error. Re-adds--cluster-node <self-url>for identity;--cluster-meshbecomes boolean gossip toggle (breaking change to recent flag from PR #1504). Relay stays topology-agnostic: all routing decisions live in whatever service answers the endpoint (the/cluster/connectendpoint itself lives in moq-pro). PR #1572 MERGED 01:11 UTC “simplify cluster-connect-api polling onto the HTTP cache” (+38/−93) — rebases #1571 ontodev, delegates freshness to existinghttp-cache-reqwestmiddleware instead of hand-parsingCache-Control(net −58 LOC). PR #1574 MERGED 03:20 UTC “moq-relay: count connected sessions per auth root for billing” (+355/−43, 3f) — newsessions.json(external) +internal/sessions.json(internal) stats tracks mapping auth root →{sessions, sessions_closed}for presence-based billing regardless of data flow (idle authenticated session billable, derived from(broadcast, session)atomics is not). PR #1573 OPEN 02:47 UTC “moq-lite-05: add AnnounceOk message (responder origin + initial active count)” (+493/−36, 16f) targetingdev— second concrete moq-lite-05 wire feature after PR #1531 deflate compression May 28: publisher sendsAnnounceOkonce after readingAnnounceInterest, reports responder’s origin id once (replaces per-Announce trailing-hop redundancy) +active: Ncount followed byNinitialAnnounce::Active(discrete initial-set boundary, successor toAnnounceInit); enablesconnect()to block until initial set has landed via newSyncLatch, closes startup race where synchronousget_broadcast()post-connect could miss broadcasts live-but-not-yet-gossiped. JS mirror lands the same wire change. - Implementations: moq see above (5 merges + 1 OPEN; PR #1575 chore-release closes #1557; dependabot 1568 docker/setup-buildx/flake-checker bumps merged). moqx — afrind PR #359 MERGED May 31 22:08 UTC “relay: fix shutdown hang when sessions hold lingering server refs” (+31/−0, 5f) — main() now owns
IOThreadPoolExecutorviaunique_ptr, servers hold raw pointer; explicit stop + clear before joining IO pool to preventQuicServer::shutdownposting to dead worker EVBs (would hang shutdown until 10s watchdog fired).MoqxRelayServer::stop()+MoqxPicoRelayServer::stop()made idempotent viacontext_sentinel. Plus 2 sync-bot moxygen merges (PR #357b3fc36310:35 UTC + PR #358e282ba614:46 UTC). moqxr 2 commits June 1 by Paul Gregoire:ced45c8503:38 UTC “Make publish_live_objects cancellable via close() stop flag” +c18924cc03:44 UTC “Bound the publish_live_objects graceful flush on stop” — incremental shutdown/cancellation polish. moq-rs quiet Day +2 since 8-thibmeu review burst May 30; PR #169 AuthHook and PR #170 (Manish draft-16 rewrite) both untouched. quiche moqt Day +2 silent. moqtail, moq-js (PR #72 still OPEN), imquic (PR #27 still OPEN), quiche_moq, Moqintosh, moqlivemock, Eyevinn/warp-player, Eyevinn/moqtransport all quiet. - Interop: 177 / 54 / 122 / 0 at 2026-06-01 00:49:16 UTC — +2 pass vs May 31 (52 → 54, 29.4% → 30.5%, +1.1pp). First 30%+ pass rate since cadence recovery May 19. 14 consecutive days of daily reports (May 19-Jun 1), longest cadence streak the wiki has tracked. Rolling 5-day band 50-54, trajectory 49 → 50 → 52 → 54 = 5-day monotonic uptick continues (counting May 28→Jun 1: 46 → 49 → 50 → 52 → 54, +8 pass over 5 days). Target at report time still draft-16 but PR #68 MERGED ~4.5h after report cut — June 2 will be the first draft-18 run. London hackathon 8 days away.
Interop runner — PR #68 MERGED draft-18 target bump
Mike English (englishm-cloudflare) merges PR #68 June 1 05:21:25 UTC
PR #68 “Update interop target to draft-18” — 14 days OPEN → MERGED:
- OPENED: May 18 21:01 UTC (Slack announcement same day: “Working through some CI issues, and then I’ll be bumping the interop target in the automated interop test runner to draft-18, too”).
- MERGED: June 1 05:21:25 UTC by englishm-cloudflare (Mike English, Cloudflare/interop runner maintainer).
- Diff: 1 file, +1/−1 (the target version string in the config).
- Single commit:
f6db6cecMay 18 20:57 UTC — i.e. the actual change has been ready for 14 days; the merge was gated on CI infrastructure stabilization (May 19 PR #69 per-test timeout fix → matrix cadence resumes; May 25 PR #71 moqx docker adapter; subsequent 13 daily reports).
Why this matters:
- First matrix-shape change since PR #71 May 25 (moqx docker adapter): 7 days of “matrix shape unchanged at 177 tests” since the last lever moved.
- First interop-target version bump since matrix inception — the matrix has tracked draft-14, draft-15, draft-16 over the past months as implementations updated; this is the first time the matrix’s target version steps forward.
- Catches up to three implementations on draft-18 main: moq (PR #1418 May 18), moqxr (8 commits May 19-20), imquic (May 20 09:25 UTC). The structural gap (matrix-on-draft-16 vs three impls-on-draft-18) closes precisely 8 days before London.
- Expected June 2 matrix impact: Version breakdown of 177 tests was 97 at target (draft-16) · 8 ahead (draft-17) · 72 behind (draft-14) under the draft-16 target. Under a draft-18 target, the “at target” / “ahead” / “behind” decomposition will shift: implementations on draft-18 are now “at target” (previously “ahead”), draft-17 becomes “behind” (previously “ahead”), draft-16 becomes “behind” (previously “at target”). Whether this nets pass-count up or down depends on whether the matrix harness counts cross-version pairings as expected-fail or genuine-fail.
Carry-forward: with 14 consecutive days of daily cadence and a +8 pass count over 5 days under the old target, the matrix has clearly stabilized; the draft-18 bump introduces a one-time shape change whose impact will only show on June 2. No further structural levers remain in the matrix before London — only individual-impl draft-18-conformance fixes can move pass counts now.
Carry-forward (London Day-2 slot): Mike’s May 27 Slack request for streaming-format-level automated interop (MSF/CMSF/LOC matrix beyond wire-protocol matrix) is now the next structural feature request on the runner, downstream of the draft-18 target landing — Mike signaled interest, no implementation has started.
MoQ Monthly #2 — newsletter cadence reasserts before London
Mike English publishes MoQ Monthly #2 May 31
MoQ Monthly #2 — “A new draft, an industry town hall, and London next week”:
- Cadence: #0 (Mar 3) → #1 (Apr 30, Day +58) → #2 (May 31, Day +31) — cadence shortened from 58 days to 31 days, closing toward true monthly cadence.
- Timing relative to London: published 8 days before London hackathon (June 9), 9 days before interim Day-1.
Coverage:
- Draft-18 publication May 12 — unified URI schemes, separated subscription messages, reserved namespaces for extensions. WGLC after July Vienna plenary; IESG publication December 2026.
- London interim June 9-12 at Cloudflare’s office.
- Industry signal:
- Dan Rayburn town hall May 12 (commercial-interest indicator outside IETF).
- Streaming Tech Sweden May 21 featured production implementations by Vindral and SVT.
- Luke Curley’s “MoQ Boy” Game Boy emulator demo (low-latency capabilities + resource management showcase).
- CDN ecosystem growth:
- Fastly published positioning April 15.
- CacheFly + Red5 announced MoQ beta for summer 2026.
- Cloudflare + Akamai existing initiatives.
- Research & standards:
- Upcoming events:
- FOKUS Media Web Symposium (June 16-17, Berlin) — right after London week.
- CommCon 2026 (June 9-11, Düsseldorf) — overlaps London Day-1/2.
- RTC.ON 2026 (Sep 16-18, Kraków).
Significance for wiki: First MoQ Monthly issue covering the wiki-tracked May 2026 window in retrospective form — gives third-party validation of the activity the wiki recorded in 2026-05 discussions (the Dan Rayburn town hall, Luke’s MoQ Boy demo, the SVT/Vindral Streaming Tech Sweden coverage). The CacheFly + Red5 MoQ beta is new ecosystem signal the wiki had not yet captured.
Carry-forward: MoQ Monthly’s revived cadence positions it as a per-London-cycle external news source — #3 (June 30?) would cover the London interim outcomes in retrospective.
moq-dev/moq — cluster-mesh infrastructure burst May 31 → June 1
5 merges + 1 OPEN in ~12 hours by kixelated. Theme: externalize cluster topology to an operator-owned endpoint + deterministic route tie-break + per-auth-root billing + moq-lite-05 AnnounceOk wire feature.
Mesh-dial dedup + deterministic route tie-break
- PR #1569 MERGED May 31 17:51 UTC “relay: dedup mesh dials with a URL-order tiebreaker” (+30/−2). Gossip-discovered peers dialed only if URL sorts after self (
peer > self_url). Lexicographically-smaller node is client, larger is server. Inbound connection still arrives for the skipped side. Bidirectional cluster session means one connection suffices; eliminates redundant outbound dial per pair. Replaces oldpeer == self_urlself-skip. Scope: gossip only — explicit--cluster-connectalways dials, passive-rendezvous via static path. - PR #1570 MERGED 19:26 UTC “moq-net: deterministic route tie-break for equal-length paths” (+83/−18). When two announcements compete for the same broadcast path with equal hop counts, the old code kept whichever arrived most recently (arrival order differs per node → relays in a cluster could pick different routes and flap). New
route_key(name, hops) -> (usize, u64)returns(hop_count, FNV-1a hash over name + hop chain); lex compare, lowest hash wins on tie. FNV-1a instead ofDefaultHasherbecause std’s output is explicitly not stable across Rust versions — during rolling deploys, mismatched binaries must still agree on a route. Mixing the broadcast name in spreads equal-length routes across upstreams instead of funneling onto one. On exact key tie, incumbent stays (no churn).
Cluster-connect-api: externalize peer-list to operator endpoint
- PR #1571 MERGED June 1 00:22 UTC “moq-relay: add
--cluster-connect-apiand split cluster identity from gossip” (+874/−150, 10f). New--cluster-connect-apiflag accepts anhttp(s)URL or local file path returning bare JSON["a.pop.example", "b.pop.example"]. Reconciles dials at runtime: new peers dialed, dropped peers aborted. Composes with static--cluster-connect(never reconciled away) and gossip. HTTP polled withCache-Controlsemantics (max-age+stale-while-revalidate); conditional revalidation (ETag / Last-Modified); fail-static on error. File re-read when mtime changes. The relay’s--cluster-nodevalue is sent as?node=, the cluster mTLS client cert identifies the caller, so the endpoint can return per-node peer lists.- Re-adds
--cluster-node <url>as relay’s own identity (used for?node=query parameter and as the address gossip advertises). --cluster-meshbecomes boolean gossip toggle (was URL). Enabling without--cluster-nodeerrors at startup. Breaking change to a recently-added flag (originally added in PR #1504 May 24).- The
/cluster/connectendpoint itself (proprietary routing over node inventory) lives in moq-pro. moq-dev/moq stays topology-agnostic; all routing decisions move out to whatever service answers the endpoint.
- Re-adds
- PR #1572 MERGED June 1 01:11 UTC “simplify cluster-connect-api polling onto the HTTP cache” (+38/−93). PR #1571 hand-rolled
stale-while-revalidateparsing; #1572 rebases ontodevand delegates to existinghttp-cache-reqwestmiddleware. Net −58 LOC. PR body documents the crate landscape check (http-cache0.21.0 = RFC 7234 only;http-cache1.0.0 alpha-only;mokadropped background threads in 0.12). Re-checks endpoint on fixed 30s cadence; cached list served with no network round-trip while fresh; conditional GET when stale; serves stale on revalidation failure.
Per-auth-root billing
- PR #1574 MERGED 03:20 UTC “moq-relay: count connected sessions per auth root for billing” (+355/−43, 3f). Presence-based billing needs to know how many sessions are connected to a node keyed by auth root. Existing per-broadcast stats only tracked subscriptions + per-
(broadcast, session)sentinel; node-level session count not derivable. Two new stats tracks:sessions.json(external) +internal/sessions.json(internal), each a JSON object mapping auth root →{sessions, sessions_closed}. Counts presence regardless of data flow — guard created in relay’s connection handler wheretoken.rootis known, held for whole connection. RAIISessionStatsguard via newStatsHandle::session(root). Example:{"acme": {"sessions": 3, "sessions_closed": 1}, "globex": {"sessions": 1, "sessions_closed": 0}}.
moq-lite-05 AnnounceOk wire feature
- PR #1573 OPEN June 1 02:47 UTC “moq-lite-05: add AnnounceOk message (responder origin + initial active count)” (+493/−36, 16f) targeting
dev. NewAnnounceOkmessage on the announce stream, sent once by publisher right after readingAnnounceInterestand before anyAnnounce. Two purposes:- Reports responder’s origin id once instead of stamping it onto trailing hop of every
Announce. In Lite05, node no longer stamps its own origin; receiver stamps the remote sender’s origin (fromAnnounceOk) on receipt. Stored hop chain byte-identical to Lite04 (loop detection / shortest-path selection unchanged). - Reports
active: Ncount of currently-active broadcasts, followed by exactlyNinitialAnnounce::Active. Gives announce stream a discrete initial-set boundary (the successor toAnnounceInit).
- Reports responder’s origin id once instead of stamping it onto trailing hop of every
- Enables connect-blocking: lets
connect()block until initial set has landed via newSyncLatch(fires once every announce-prefix stream has its initial set; generalized acrossAnnounceInitLite01/02 +AnnounceOk + NLite05; Lite03/04 have no boundary and resolve immediately). Closes startup race where synchronousget_broadcast()post-connect could miss broadcasts live-but-not-yet-gossiped. - Opt-in:
Lite05Wipis not advertised over ALPN or default version set; nothing negotiates by default. Second concrete moq-lite-05 wire feature after PR #1531 deflate compression (May 28). - JS mirror:
@moq/netmirrors the wire, but does NOT add connect-blocking — JSConnectionis pull-based (announced()opens stream lazily,consume(path)subscribes directly without consulting announcements), so synchronousget_broadcast()race doesn’t exist there. - IETF draft / spec being updated separately.
Pattern: PR #1573 demonstrates the PR #1518 Lite05Wip unadvertised version variant working exactly as intended: features can land gated without wire exposure (no peer negotiates Lite05Wip yet because it’s omitted from ALPNS and Versions::all()). Same gating model as PR #1531 deflate.
openmoq/moqx — afrind PR #359 relay shutdown hang fix
PR #359 MERGED May 31 22:08 UTC by afrind “relay: fix shutdown hang when sessions hold lingering server refs” (+31/−0, 5f):
“main() now owns the IOThreadPoolExecutor via unique_ptr (servers hold a raw pointer) and explicitly stops + clears servers before joining the IO pool. Previously, lingering shared_ptr
refs from in-flight sessions or coroutines could delay ~MoqxRelayServer past the executor’s destruction, leaving QuicServer::shutdown to post to dead worker EVBs and hang shutdown until the 10s watchdog fired.”
MoqxRelayServer::stop()+MoqxPicoRelayServer::stop()made idempotent usingcontext_as sentinel —~MoqxRelayServerno-op once main has already stopped the server.- Follows the May 28 PR #351 “relay: IOThreadPoolExecutor owned exclusively by main” (multi-thread sprint Day 2) — completes the ownership model with explicit shutdown ordering.
- Plus 2 automated moxygen submodule sync merges: PR #357
b3fc363MERGED May 31 10:35 UTC + PR #358e282ba6MERGED 14:46 UTC.
Carry-forward: afrind’s multi-thread sprint Days 1-3 was May 27-29 (22 events). May 30-31 was quieter (2 sync-bot merges May 30 + this PR #359 + 2 sync-bot merges May 31). With London hackathon 8 days away, PR #331 (relay_thread config + allow > 1 thread) remains the only PR-merge-away gate from threads > 1 being usable in production.
mondain/moqxr — Paul Gregoire cancellable graceful flush
2 commits June 1 by Paul Gregoire:
ced45c85June 1 03:38:17 UTC “Make publish_live_objects cancellable via close() stop flag”.c18924ccJune 1 03:44:35 UTC “Bound the publish_live_objects graceful flush on stop”.
Continues the May 30 21b791a8 “Fix live object catalog ordering and stop wakeup” (+53/−7) shutdown-polish theme. Incremental hardening of mondain/moqxr’s live-object publishing path for clean shutdown.
Mailing list — weekly digest only, weekend silence
Single message May 31 03:01:31 UTC: Weekly github digest (Media Over QUIC Activity Summary) from Repository Activity Summary Bot. Auto-summary of moq-wg repo activity:
- moq-transport: 1 new issue (Issue #1637 “What does MOQT do without bidi stream credit?” + 4 ianswett/martinduke comments; 2 other issues received commentary).
- moq-wg/msf: 1 new issue (“Reference the latest version of LOC”) + 17 new comments across 10 existing issues + 8 issues closed + 9 new PRs (timestamp rounding, buffer properties, init data, bitrate, compression).
No substantive on-list MoQ discussion May 31 or June 1. Weekend mailing-list silence persists into a 3rd day (May 30 / 31 / Jun 1). Ali Begen’s May 29 YES vote on SWITCH/DTS remains the latest substantive thread.
IETF Datatracker — no new revisions
No new drafts published May 31 or June 1. WG document state unchanged from May 31:
- draft-ietf-moq-transport-18 (Day +20 since May 12)
- draft-ietf-moq-msf-00 (Day +133 since Jan 19; wilaw’s May 27 Slack “Friday” pledge for -01 still unfulfilled into 4th consecutive day; editorial work on
maincomplete — PR #166/167/168/171/173/174 all MERGED — onlyxml2rfcsubmission remains) - draft-ietf-moq-loc-02
- draft-ietf-moq-secure-objects-00 (PR #88 still OPEN staging test vectors for -01)
- draft-ietf-moq-privacy-pass-auth-02
- draft-ietf-moq-cmsf-00 (Issue #122 “initial text on zapping” Gwendal-vs-Suhas editorial debate from May 30 unresolved)
Individual drafts also unchanged.
Slack — all quiet
No new messages May 31 or June 1 across #moq, #moq-rs, #moq-js, #libquicr, #moq-interop-runner. The afrind self-fetch thread (May 28) and Lorenzo moq-mi/LOC thread (May 27) remain the latest substantive Slack discussion.