# ECP-0063: Cloudflare MoQ Relay + WebTransport-Only Web Watch Status: Draft ## Decision Adopt Cloudflare's MoQ relay preview as the default "global" distribution layer and make the web watcher path WebTransport-only. Concrete changes: 1. `ec-node` gains a WebTransport MoQ publisher path that can publish a live CMAF (fMP4) stream to a relay URL (default: `https://relay.cloudflare.mediaoverquic.com/`). 2. `every.channel` (the deployed static site) becomes a real web watcher by embedding a WebTransport-capable MoQ player component (``). 3. The existing WebRTC/WS bootstrap directory/relay remains temporarily for compatibility, but is treated as deprecated once MoQ/WebTransport is stable. ## Motivation The project goal is one-to-many live streaming at global scale without rebuilding a bespoke stateful SFU stack. MoQ over WebTransport moves the core system boundary to: - publisher produces timed objects (CMAF fragments), - relays cache/fanout, - subscribers fetch via a single WebTransport session. This aligns the "global watcher" story with an infrastructure-native model rather than point-to-point rendezvous. ## Scope In scope for this ECP: - "Watch from the web" using WebTransport to a MoQ relay. - "Publish from a node" to the relay, using ffmpeg to create fMP4 fragments. - A shareable link format for `every.channel` to open a specific relay + broadcast name. Out of scope (explicitly deferred): - Global discovery/index of broadcasts. - Manifest signing / Merkle availability / anti-junk (separate ECPs already exist). - Safari support guarantees (implement anyway; provide guidance/flag notes). - Multi-variant ladders and ABR (follow-on ECP once single-variant publish/watch works end-to-end). ## Technical Notes ### Relay default Default relay endpoint is: - `https://relay.cloudflare.mediaoverquic.com/` Nodes may override via CLI flags for self-hosted relays or future Cloudflare relay endpoints. ### Web player Use the `@kixelated/hang` web component: - `` This is WebTransport + WebCodecs based, and is expected to interoperate with Cloudflare's current relay preview. ### Transport compatibility Cloudflare's public relay currently implements a subset of the IETF MoQ Transport draft-07 and may not interoperate with newer draft implementations. Implementation choice: - `ec-node wt-publish` uses `moq-native-ietf` + `moq-transport` + `moq-pub` (fMP4 ingestion) for Cloudflare relay compatibility. ### Share link Web share link: - `https://every.channel/watch?url=&name=` ## Rollout / Reversibility - Keep existing `/api/*` bootstrap endpoints during migration. - Make the web site prefer MoQ/WebTransport; keep legacy paths hidden behind "advanced" until removed. - Reversible by switching the deployed assets back to the previous UI build, and/or pointing users at the legacy paths.