https://github.com/cloudflare/moq-rs
Rust implementation of the IETF MoQ Transport protocol
https://github.com/cloudflare/moq-rs
livestreaming lowlatency mediaoverquic moq quic
Last synced: 28 days ago
JSON representation
Rust implementation of the IETF MoQ Transport protocol
- Host: GitHub
- URL: https://github.com/cloudflare/moq-rs
- Owner: cloudflare
- License: apache-2.0
- Created: 2024-10-15T16:27:12.000Z (about 1 year ago)
- Default Branch: main
- Last Pushed: 2025-11-07T23:50:02.000Z (2 months ago)
- Last Synced: 2025-12-08T23:28:03.248Z (about 1 month ago)
- Topics: livestreaming, lowlatency, mediaoverquic, moq, quic
- Language: Rust
- Homepage:
- Size: 1.77 MB
- Stars: 61
- Watchers: 4
- Forks: 28
- Open Issues: 32
-
Metadata Files:
- Readme: README.md
- License: LICENSE-APACHE
Awesome Lists containing this project
README
# moq-rs
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)](https://github.com/kixelated). [Mike English (@englishm)](https://github.com/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](https://datatracker.ietf.org/doc/draft-ietf-moq-transport/14/).
## Protocol Support
The `main` branch targets **draft-14** of the MoQT specification. For draft-07 compatibility (used in [Cloudflare's current production deployment](https://developers.cloudflare.com/moq/)), see the [`draft-ietf-moq-transport-07`](https://github.com/cloudflare/moq-rs/tree/draft-ietf-moq-transport-07) branch.
### What's Included
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)
### Protocol Feature Support
**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)
## Interoperability
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](https://github.com/moq-wg/moq-transport/wiki/Interop) for a list of other implementations.
For streaming format compatibility:
- **[video-dev/moq-js](https://github.com/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](https://github.com/rafaelcaricio/gst-moq-pub)**: A GStreamer publisher plugin built on moq-pub, also compatible with moq-js.
## Components
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.
## Development
Typical development workflow:
1. Start a local relay in one terminal:
```bash
./dev/relay
```
2. Start a publisher in another terminal:
```bash
./dev/pub
```
Add `--tls-disable-verify` if you prefer not to install local certificates.
3. For playback, clone and run [moq-js](https://github.com/video-dev/moq-js) locally, then open it in a browser pointed at your local relay.
See the [dev helper scripts](dev/README.md) for more options and workflows.
## Usage
For detailed usage information, see the README in each crate directory:
- [moq-transport](moq-transport/README.md) - Protocol library documentation
- [moq-relay-ietf](moq-relay-ietf/README.md) - Relay server configuration
- [moq-pub](moq-pub/README.md) - Publisher client usage
The moq-transport crate is also published on [crates.io](https://crates.io/crates/moq-transport) with [API documentation](https://docs.rs/moq-transport/latest/moq_transport/).
## License
Licensed under either:
- Apache License, Version 2.0 ([LICENSE-APACHE](LICENSE-APACHE) or http://www.apache.org/licenses/LICENSE-2.0)
- MIT license ([LICENSE-MIT](LICENSE-MIT) or http://opensource.org/licenses/MIT)