MoQ is under active development. APIs and protocols may change between releases.

Skip to content

What is MoQ? ​

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.

What you can build ​

Use caseReach for
Live streamingIngest 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 AIServer-side media in Rust or Python, faster-than-real-time playback in the browser. See MoQ for AI.
Real-time dataChat, game state, telemetry, and control channels over the same relays with moq-net or @moq/net.
Interactive streamsMedia down, input up. MoQ Boy is a crowd-controlled Game Boy built this way.

Setup ​

Get up and running in seconds with Nix (+Flakes), or be lame and install stuff manually:

bash
# Runs a relay, media publisher, and the web server
nix develop -c just

If everything works, a browser window will pop up demoing how to both publish and watch content via the web.

Applications ​

There are a bunch of MoQ binaries and plugins.

Some highlights:

  • moq-relay - A server connecting publishers to subscribers, able to form a self-hosted CDN cluster.
  • moq-cli - A CLI that can import and publish MoQ broadcasts from a variety of formats (fMP4, HLS, MPEG-TS, FLV, etc), including via ffmpeg.
  • obs - An OBS plugin, able to publish a MoQ broadcast and/or use MoQ broadcasts as sources.
  • gstreamer - A gstreamer plugin, split into a source and a sink.
  • rtmp, srt, rtc, hls - Gateways to and from the protocols your existing tools speak.
  • ...and more

Rust Crates 🦀 ​

Integrate MoQ into your application without fear. Focused on native but with WASM support.

Some highlights:

  • moq-net - Real-time pub/sub with built-in caching, fan-out, and prioritization.
  • hang - The media catalog and container on top of moq-net.
  • moq-mux - Media muxers/demuxers for fMP4, CMAF, MPEG-TS, and FLV.
  • moq-video and moq-audio - Native capture, encode, decode, and render with hardware codecs.
  • ...and more

TypeScript Packages ​

Run MoQ in a web browser utilizing the latest Web tech. Or run on native with polyfills via Node/Bun/Deno.

Some highlights:

  • @moq/net - Real-time pub/sub with built-in caching, fan-out, and prioritization.
  • @moq/hang - Performs any media stuff: capture, encode, transmux, decode, render.
  • @moq/watch - Subscribe to and render MoQ broadcasts, with an optional <moq-watch> UI.
  • @moq/publish - Publish media to MoQ broadcasts, with an optional <moq-publish> UI.
  • ...and more

Other Languages ​

FFI bindings around the Rust core, with idiomatic APIs in each language:

  • C - libmoq static + shared library with an auto-generated header.
  • Python - asyncio-friendly bindings, published to PyPI.
  • Kotlin - Coroutines and Flow for Android and the JVM.
  • Swift - Async sequences for iOS, iPadOS, and macOS.
  • Go - cgo bindings resolved via go get.
  • Dart - Futures and streams for Flutter and the Dart VM.

Licensed under MIT or Apache-2.0