A browser-based implementation of Media over QUIC Transport (MOQT) for real-time media streaming. Built on WebTransport and WebCodecs for low-latency video/audio delivery.
-
Install pnpm (if not installed):
corepack enable && corepack prepare pnpm@9 --activate
-
Install dependencies:
pnpm install
-
Generate certificates for local WebTransport:
./scripts/create_server_cert.sh
-
Build and run:
pnpm run build pnpm run dev
Note: You need a MOQT relay server to connect to. Enable "Local Development" in settings to use self-signed certificates.
| Draft | Status | Notes |
|---|---|---|
| Draft-16 | Default | Full support |
| Draft-15 | Included with Draft-16 | ALPN negotiation |
| Draft-14 | Build-time flag | Full support |
Build for draft-14:
pnpm run build:draft-14
pnpm run dev:draft-14┌─────────────────────────────────────────┐
│ Browser │
│ ┌───────────────────────────────────┐ │
│ │ @web-moq/client │ │
│ │ (React UI App) │ │
│ └─────────────┬─────────────────────┘ │
│ │ │
│ ┌─────────────▼─────────────────────┐ │
│ │ @web-moq/media │ │
│ │ (WebCodecs, LOC, Pipelines) │ │
│ └─────────────┬─────────────────────┘ │
│ │ │
│ ┌─────────────▼─────────────────────┐ │
│ │ @web-moq/session │ │
│ │ (Protocol, Subscriptions) │ │
│ └─────────────┬─────────────────────┘ │
│ │ │
│ ┌─────────────▼─────────────────────┐ │
│ │ @web-moq/core │ │
│ │ (Types, Codecs, Transport) │ │
│ └───────────────────────────────────┘ │
└──────────────────┬──────────────────────┘
│ WebTransport
▼
┌────────────┐
│ MOQT Relay │
└────────────┘
For detailed design documentation, see docs/design.md.
packages/
├── core # Protocol types, encoding, state machines, transport
├── session # MOQT session management, subscriptions, publications
├── media # WebCodecs, LOC container, media pipelines
└── client # React web application
- Node.js 20+
- pnpm 9+ (
corepack enable && corepack prepare pnpm@9 --activate)
If you prefer bun over pnpm, use the bun: prefixed scripts:
bun install
bun run bun:build
bun run bun:dev
bun run bun:testTo completely clean and rebuild from scratch:
# Remove all node_modules and build artifacts
rm -rf node_modules packages/*/node_modules packages/*/dist packages/*/.tsbuildinfo
# Clear pnpm cache
pnpm store prune
# Fresh install and build
pnpm install
pnpm run buildOne-liner:
rm -rf node_modules packages/*/node_modules packages/*/dist packages/*/.tsbuildinfo && pnpm store prune && pnpm install && pnpm run buildIf using bun:
rm -rf node_modules packages/*/node_modules packages/*/dist packages/*/.tsbuildinfo && bun pm cache rm && bun install && bun run bun:buildpnpm run test # Run all tests
pnpm run test:draft-14 # Test with draft-14This project is licensed under BSD-2-Clause.