moq-go

Go implementation of MoQ Transport at draft-20, with a transport-agnostic session library, a reference relay that runs standalone or as several routing instances, and LOC/MSF/CMSF media packaging.

Category

Libraries & SDKs

License

Open Source

Status

Active

Languages

Go

MoQT Draft Support

draft-20

Media Formats

LOCMSFCMSF

moq-go is a Go implementation of the Media over QUIC drafts by floatdrop: a transport-agnostic session library, a reference relay, media packaging libraries, and demo publisher and subscriber CLIs. It is library and relay code rather than a player — payloads stay opaque to every layer, and an application plugs its own codec stack in at the LOC boundary.

The repository’s default branch is draft-20, and it is the only entry in this directory that targets that draft alone.

Specifications tracked

  • MoQ Transport — draft-ietf-moq-transport-20
  • Low Overhead Media Container (LOC) — draft-ietf-moq-loc-04
  • MoQ Streaming Format (MSF) — draft-ietf-moq-msf-01
  • CMAF-compliant MSF (CMSF) — draft-ietf-moq-cmsf-01

Key features

  • Session API over any transport Conn, client or server, after the SETUP handshake
  • Reference relay (cmd/relay), single instance out of the box
  • Several relay instances routing across each other through a DiscoveryStore; the interface and an in-memory backend ship in-tree, a distributed backend deliberately does not, so the module never pulls in its dependency weight
  • MSF catalogues with CMAF-packaged media, and a raw-MOQT path with no MSF or CMSF at all
  • Demo CLIs: cmd/video for packaged media, cmd/clock for the simpler case

Install

Terminal window
go get github.com/floatdrop/moq-go

Requires Go 1.27 or newer. Dual licensed, Apache-2.0 or MIT.

Interop

Registered in the MoQ interop runner in both the relay and client roles, with images published to GHCR. It advertises the moqt-20 ALPN only, so it negotiates with draft-20 peers and nothing else.

Note

The API is pre-1.0 and the wire format follows drafts that are still moving, so both change as the specifications do.

Not the only Go implementation here: moqtransport by Mathis Engelbart is the other, targeting earlier drafts.