npm.io
0.1.9 • Published 6d ago

@moq/net

Licence
(MIT OR Apache-2.0)
Version
0.1.9
Deps
3
Size
1.3 MB
Vulns
0
Weekly
0
Stars
1.4K

Media over QUIC

@moq/net

npm version TypeScript

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
# etc

Server-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-quiche

Which 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 resolves

Examples

License

Licensed under either: