Adaptive
MoQ supports the entire latency spectrum. Simultaneously support real-time, interactive, or lean-back experiences with a unified stack.
Media over QUIC (MoQ) is a next-generation live media protocol. As the name implies, we use QUIC to concurrently transmit media and avoid latency build-up during congestion. The protocol is being standardized by the IETF and backed by some of the largest tech companies: Google, Cisco, Akamai, Cloudflare, etc.
moq.dev is an open source implementation written in Rust (native) and TypeScript (web). We support compatibility with the official IETF drafts, but the main focus is a subset called moq-lite and hang. The idea is to build first, argue later.
See the concepts page for a breakdown of the layering, rationale, and comparison to other protocols.
| Use case | Reach for |
|---|---|
| Live streaming | Ingest with OBS, RTMP, or SRT; distribute with moq-relay; watch with <moq-watch>; keep legacy players via HLS. |
| Conferencing | @moq/room / moq-room for the roster, <moq-publish> and <moq-watch> in the browser, plus WebRTC for WHIP/WHEP clients. |
| Voice and video AI | Server-side media in Rust or Python, faster-than-real-time playback in the browser. See MoQ for AI. |
| Real-time data | Chat, game state, telemetry, and control channels over the same relays with moq-net or @moq/net. |
| Interactive streams | Media down, input up. MoQ Boy is a crowd-controlled Game Boy built this way. |
Get up and running in seconds with Nix (+Flakes), or be lame and install stuff manually:
# Runs a relay, media publisher, and the web server
nix develop -c justIf everything works, a browser window will pop up demoing how to both publish and watch content via the web.
There are a bunch of MoQ binaries and plugins.
Some highlights:
Integrate MoQ into your application without fear. Focused on native but with WASM support.
Some highlights:
Run MoQ in a web browser utilizing the latest Web tech. Or run on native with polyfills via Node/Bun/Deno.
Some highlights:
<moq-watch> UI.<moq-publish> UI.FFI bindings around the Rust core, with idiomatic APIs in each language:
libmoq static + shared library with an auto-generated header.asyncio-friendly bindings, published to PyPI.Flow for Android and the JVM.go get.