@moq/net
v0.1.5
Published
The networking layer for Media over QUIC: real-time pub/sub with built-in caching, fan-out, and prioritization.
Readme
@moq/net
A TypeScript Media over QUIC (MoQ) client for both browsers and server JS/TS environments.
@moq/net is the networking layer: real-time pub/sub with built-in caching, fan-out, and prioritization, on top of QUIC. At session setup it negotiates one of two wire protocols, either the simplified moq-lite protocol or the full IETF moq-transport draft.
Check out hang for a higher-level media library that uses this package.
Note: moq-lite is a subset of moq-transport and is forwards compatible with it, so this client works with any moq-transport CDN (ex. Cloudflare). See the compatibility docs for details.
Quick Start
npm add @moq/net
# or
pnpm add @moq/net
bun add @moq/net
yarn add @moq/net
# etcServer-side usage
@moq/net works on both browsers and servers, however in JS/TS server environments (Node, Bun) WebTransport is not yet available, so @moq/net will default to WebSockets communication with the relay.
Bun and Node v21+ have WebSockets built in, but older versions of Node do not, so for older versions of Node you will need the WebSockets polyfill to use @moq/net
import WebSocket from 'ws';
import * as Moq from '@moq/net';
// Polyfill WebSocket for MoQ
globalThis.WebSocket = WebSocket;You can optionally enable WebTransport and full HTTP3/Quic on server environments with the following (experimental) polyfill
npm install @fails-components/webtransport
npm install @fails-components/webtransport-transport-http3-quicheWhich you would load as follows
import { WebTransport, quicheLoaded } from '@fails-components/webtransport';
global.WebTransport = WebTransport;
import * as Moq from '@moq/net'
await quicheLoaded; //This is a promise, connect after it resolvesExamples
- Connection - Connect to a MoQ relay server
- Publishing - Publish data to a broadcast
- Subscribing - Subscribe to and receive broadcast data
- Discovery - Discover broadcasts announced by the server
- Server side usage - Publish from browser to a server
License
Licensed under either:
- Apache License, Version 2.0 (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0)
- MIT license (LICENSE-MIT or http://opensource.org/licenses/MIT)
