An implementation of the Media over QUIC Transport (MoQT) protocol for live media delivery over QUIC, as specified by the IETF MoQ working group.
This codebase was originally created by Luke Curley (@kixelated). Mike English (@englishm) contributed to early design and has maintained this IETF-aligned fork. The project is now maintained by Cloudflare. The implementation targets draft-ietf-moq-transport-14.
The main branch targets draft-14 of the MoQT specification. For draft-07 compatibility (used in Cloudflare's current production deployment), see the draft-ietf-moq-transport-07 branch.
This repository provides:
- moq-transport: A complete MoQT protocol library implementation
- moq-relay-ietf: A production-ready relay server
- Sample clients: An fMP4 publisher (moq-pub) and a demonstration clock application (moq-clock-ietf)
Supported:
- CLIENT_SETUP / SERVER_SETUP
- PUBLISH_NAMESPACE
- SUBSCRIBE
- WebTransport and raw QUIC transport layers
- Both stream ("subgroup") and datagram delivery modes
Not Supported:
- SUBSCRIBE_NAMESPACE (Soon)
- FETCH (Not Soon)
A public relay instance running the latest main branch is available for interop testing at:
https://interop-relay.cloudflare.mediaoverquic.com:443
As an implementation targeting the IETF specification, this codebase should be compatible with other implementations targeting the same draft version. See the moq-wg/moq-transport wiki for a list of other implementations.
For streaming format compatibility:
- video-dev/moq-js: A TypeScript player implementation compatible with moq-pub's fMP4 output. Check draft version compatibility when selecting branches.
- gst-moq-pub: A GStreamer publisher plugin built on moq-pub, also compatible with moq-js.
This repository contains several crates:
- moq-transport: A media-agnostic library implementing the core MoQT protocol.
- moq-native-ietf: QUIC and TLS utilities for native transport.
- moq-relay-ietf: A relay server that forwards content from publishers to subscribers, with caching and deduplication.
- moq-api: An HTTP API server for origin discovery and relay coordination, backed by Redis.
- moq-pub: A publisher client that broadcasts fMP4 streams over MoQT.
- moq-catalog: Catalog format handling.
- moq-sub: A subscriber client for consuming MoQT streams.
- moq-clock-ietf: A simple time publisher/subscriber demonstrating non-media use cases.
Typical development workflow:
-
Start a local relay in one terminal:
./dev/relay
-
Start a publisher in another terminal:
./dev/pub
Add
--tls-disable-verifyif you prefer not to install local certificates. -
For playback, clone and run moq-js locally, then open it in a browser pointed at your local relay.
See the dev helper scripts for more options and workflows.
For detailed usage information, see the README in each crate directory:
- moq-transport - Protocol library documentation
- moq-relay-ietf - Relay server configuration
- moq-pub - Publisher client usage
The moq-transport crate is also published on crates.io with API documentation.
Licensed under either:
- Apache License, Version 2.0 (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0)
- MIT license (LICENSE-MIT or http://opensource.org/licenses/MIT)