btw: MoQ is under active development. The APIs and protocols are still evolving and will change. Most of this documentation is AI generated until things get more stable.

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.

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.
  • web - A web component you can slap on your website to watch and publish MoQ broadcasts.
  • ...and more

Rust Crates 🦀

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

Some highlights:

  • moq-net - Real-time pub/sub with built-in caching, fan-out, and prioritization.
  • moq-mux - Media muxers/demuxers for fMP4, CMAF, MPEG-TS, and FLV.
  • libmoq - C bindings for the above, no finagling Rust into your build system.
  • web-transport - A suite of crates required to get QUIC access in the browser, plus some polyfills.
  • ...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.
  • @moq/publish - Publish media to MoQ broadcasts.
  • ...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.

Licensed under MIT or Apache-2.0