Current state of cross-implementation interoperability testing.
Latest Interop Results
Draft-17
- moq-dev ←> lorenzo-miniero’s imquic: First v17 interop working (2026-04-01). Rust publisher, JS subscriber. “Still a few things to iron out.”
- Daiki Matsui’s impl ←> moq-dev (
cdn.moq.dev): Working (2026-03-23). Browser pub → relay → browser sub.
Draft-16
- moq-rs: PR #131 branch
- moxygen: Supported
- libquicr / quicr-go: Draft-16 compatible
- Cloudflare interop relay:
draft-16-manish.cloudflare.mediaoverquic.com:443(WIP)
Draft-14
- Most mature interop, widest support
- xquic-moq: Passed all interop runner tests
- moq-rs: Main branch
- moxygen: Supported
- moqlivemock: Go transport + JS CMSF player (draft-14 and draft-16)
- Cloudflare edge relays: Anycast at
draft-14.cloudflare.mediaoverquic.com:443
Interop Runner Matrix
The interop-runner at englishm.github.io/moq-interop-runner runs automated tests. Latest report (2026-05-09 00:39 UTC): 20 passed / 71 failed / 14 skipped out of 105 total — +1 pass / −1 fail vs May 8’s 19/72/14. Partial recovery back to the May 4–7 floor (also the post-PR #145 floor since the May 4 wholesale draft-14→16 migration). moqtail PR #193 (sharmafb upstream FETCH on cache miss, +248/−132, OPEN since late May 6) is still open Day +3, so the bounce isn’t a moqtail-relay rebuild effect; moq-dev/moq main is quiet (no commits since May 7 18:17 UTC). Most plausible cause: natural per-run variance / single image rebuild for one of the matrix entries (moq-rs, moq-rs-draft-16, moqx, quiche-moq, libquicr, xquic, imquic) flipping a single test back to pass. Two-day net effect (May 7 20 → May 8 19 → May 9 20) is zero — the May 8 reading was statistical noise, not a regression. moq-dev/moq PR #1388 (LOC frame format, OPEN +799/−17), PR #1389 (stats aggregation, OPEN +1168/−39), and PR #1374 (DATAGRAMS Lite05, OPEN +1615/−7) all remain unmerged Day +1/+1/+4. Walking arc since the Apr 17 floor: 18 → 18 → 18 → 20 → 22 → 22 → 23 → 24 → 22 → 23 → 22 → 23 → 23 → 23 → 24 → 25 → 24 → 24 → 20 → 20 → 20 → 20 → 19 → 20.
Implementations in the matrix (11):
- moq-dev-js (client)
- moq-dev-rs (client + relay)
- moq-rs (client + relay, draft-14)
- moq-rs-draft-16 (client + relay)
- moxygen (client + relay)
- xquic (client + relay)
- imquic (relay, lorenzo-miniero)
- libquicr (relay)
- moqtail (relay)
- quiche-moq (relay, Google QUICHE C++ — martin-duke, Victor Vasiliev)
- moqx (relay, OpenMOQ’s moxygen fork) — new since Apr 10
Target version is draft-16. Version distribution: 48 tests at draft-16, 8 at draft-17, 49 at draft-14.
Best results: moq-rs-draft-16 self-test (all pass), moq-dev-js ←> moqx (6/6), moq-rs-draft-16 ←> moqx (5-6/6), moq-rs-draft-16 ←> moxygen (5-6/6), moq-rs-draft-16 ←> imquic (5-6/6), moq-rs self-test (all pass), moq-rs ←> moqx (all pass).
Individual run reports: https://englishm.github.io/moq-interop-runner/results/<DATE>_<TIME>/report.html
Known Interop Issues
- Properties Type collision (#1550 in moq-transport, #10 in LOC) - Property type IDs conflict between moq-transport-17 and loc-01
- Track Properties parsing - Different implementations handle the length prefix differently (see track-properties)
- PUBLISH_NAMESPACE behavior - Relay behavior around namespace announcements confuses some implementations (Daiki Matsui’s report, 2026-03-23)
Media Wire Format Interop
moq-media-interop (draft-cenzano-moq-media-interop-03) defines the concrete media wire format used for LOC-based media interop. It specifies how H.264 video, Opus/AAC-LC audio, and text are packaged into MOQT objects with extension headers. This is the format used by Meta’s moxygen relay and is relevant for any LOC-based interop testing. The draft expired 2026-04-23 with no -04 published — check datatracker for any renewal. LOC media-interop testing currently relies on what’s already implemented.
Related
- interop-endpoints - Public relay endpoints
- interop-runner - Automated test framework
- moq-media-interop - Media wire format specification for LOC interop