Libraries
MoQ ships libraries in a handful of languages. Rust (native) and TypeScript (web) are the primary implementations; everything else wraps the Rust core under the hood.
Primary
Rust native
The reference implementation. Used by every server-side tool and by the FFI core that the other language bindings link against.
moq-net- Real-time pub/subhang- Media catalog and containermoq-mux- fMP4/CMAF/HLS importmoq-native- QUIC endpoint helpers- ...and more
TypeScript web
The browser implementation. Uses WebTransport, WebCodecs, and WebAudio to run MoQ natively in the browser without polyfills (in supported browsers).
@moq/net- Real-time pub/sub@moq/hang- Media library@moq/watch- Subscribe + render@moq/publish- Capture + publish- ...and more
FFI bindings
These all link against the same Rust core (via libmoq + UniFFI) and present an idiomatic API in their host language.
C
Raw C bindings via libmoq. The lowest-level entry point and the foundation for every other binding listed below.
Python
Async/await with asyncio. Published as moq-net on PyPI.
Kotlin
Coroutines and Flow for Android and the JVM. Published as dev.moq:moq on Maven Central.
Swift
Async sequences and structured concurrency for iOS, iPadOS, and macOS. Distributed via Swift Package Manager.
Go
cgo bindings with prebuilt static libraries per platform. Resolved via go get github.com/moq-dev/moq-go.
Picking a language
- Server, CLI, or anything native → Rust
- Web browser or Node/Bun/Deno → TypeScript
- iOS / macOS app → Swift
- Android app or JVM service → Kotlin
- Scripts, ML pipelines, prototypes → Python
- Go service or tooling → Go
- Anything else with a C ABI → C
All FFI bindings expose the same protocol surface as the Rust core, so a publisher in Python can be consumed by a Swift subscriber, etc.