Media over QUIC (MoQ) Transport implementation in MoonBit
src/
├── protocol/ # Wire format, vi64 integer codec, control and data messages
├── session/ # Sans-I/O session state machine (tracks, requests, streams)
├── transport/ # Native MsQuic QUIC transport adapter
├── test_support/ # Scripted in-memory transport for session tests
├── js_adapter/ # Browser WebTransport adapter
├── cmd/
│ ├── setup_probe # CLI: SETUP handshake verification
│ ├── track_probe # CLI: Publish, Subscribe, Fetch, and Namespace probe
│ └── web_interop_probe # WebTransport probe for browser
└── examples/
└── browser/ # Browser publish and subscribe sample| Package | Description | Target |
|---|---|---|
| OJII3/moq-mbt/protocol | Framing, message serialization, and deserialization | Native, JS |
| OJII3/moq-mbt/session | Session state machine and request lifecycles | Native, JS |
| OJII3/moq-mbt/transport | Native QUIC client using libmsquic | Native |
| OJII3/moq-mbt/test_support | Scripted transport for tests using SessionDriver | Native, JS |
| OJII3/moq-mbt/js_adapter | WebTransport client adapter and browser session facade | JS (Browser) |
nix developmoon build --target native src/cmd/setup_probe
moon build --target native src/cmd/track_probemoon run src/cmd/setup_probe -- <HOST> <PORT> <PATH> [--insecure]
# Example
moon run src/cmd/setup_probe -- 127.0.0.1 4443 /interop --insecure# Publish tracks (HOST PORT PATH NAMESPACE TRACK GROUPS OBJECTS_PER_GROUP)
moon run src/cmd/track_probe -- publish 127.0.0.1 4443 /interop my-namespace track0 2 5 --insecure
# Subscribe to tracks
moon run src/cmd/track_probe -- subscribe 127.0.0.1 4443 /interop my-namespace track0 2 5 --insecure
# Other commands
moon run src/cmd/track_probe -- lifecycle 127.0.0.1 4443 /interop --insecure
moon run src/cmd/track_probe -- namespace 127.0.0.1 4443 /interop --insecure
moon run src/cmd/track_probe -- fetch 127.0.0.1 4443 /interop my-namespace track0 0 2 --insecure
moon run src/cmd/track_probe -- joining-fetch 127.0.0.1 4443 /interop --insecure
moon run src/cmd/track_probe -- datagram-smoke 127.0.0.1 4443 /interop --insecurenix develop -c scripts/serve-moqtail.shcd src/examples/browser
npm install
npm run dev{
"import": {
"OJII3/moq-mbt": "0.3.1"
}
}let setup : @protocol.Setup = { options: [] }
let client_result = @js_adapter.browser_connect(
"https://relay.example/interop",
setup,
)# Unit tests
moon test
# Protocol and relay interoperability checks (requires Nix devShell)
bash scripts/check-interop.sh
# Native ↔ Browser dual interop check
bash scripts/check-moqtail-dual.shInstall
Download zipMedia over QUIC (MoQ) Transport implementation in MoonBit