# mediasoup-client

> mediasoup client side TypeScript library

Latest version **3.24.4** (published 2026-10-01) · ISC license · 0 weekly downloads

## Install

```sh
npm install mediasoup-client
pnpm add mediasoup-client
yarn add mediasoup-client
bun add mediasoup-client
```

## Health

**Score 75/100 (B)** — status: active.

Positive: has types; esm support; no vulnerabilities; has provenance; recently updated; high maintenance score; high quality score.

Warnings: low downloads.

## Facts

| | |
|---|---|
| Version | 3.24.4 |
| Published | 2026-10-01 |
| First published | 2017-07-18 |
| Weekly downloads | 0 |
| License | ISC |
| TypeScript types | bundled |
| Module format | ESM + CommonJS |
| Node | >=22 |
| Dependencies | 9 |
| Unpacked size | 634.3 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| Provenance | attested (GitHub Actions) |
| GitHub stars | 669 |
| Maintainers | ibc, jmillan |
| Keywords | webrtc, ortc, browser, nodejs |

## Links

- npm: https://www.npmjs.com/package/mediasoup-client
- Repository: https://github.com/versatica/mediasoup-client
- Homepage: https://mediasoup.org
- Issues: https://github.com/versatica/mediasoup-client/issues
- Funding: https://opencollective.com/mediasoup
- npm.io page: https://npm.io/package/mediasoup-client

## Dependencies (9)

- [debug](https://npm.io/package/debug.md) ^4.4.3
- [awaitqueue](https://npm.io/package/awaitqueue.md) ^3.3.1
- [@types/debug](https://npm.io/package/@types/debug.md) ^4.1.13
- [events-alias](https://npm.io/package/events-alias.md) npm:events@^3.3.0
- [sdp-transform](https://npm.io/package/sdp-transform.md) ^3.0.0
- [supports-color](https://npm.io/package/supports-color.md) ^11.0.0
- [@types/events-alias](https://npm.io/package/@types/events-alias.md) npm:@types/events@^3.0.3
- [fake-mediastreamtrack](https://npm.io/package/fake-mediastreamtrack.md) ^2.2.1
- [h264-profile-level-id](https://npm.io/package/h264-profile-level-id.md) ^2.3.3

## Alternatives

- [@opentelemetry/exporter-zipkin](https://npm.io/package/@opentelemetry/exporter-zipkin.md) — 14.8M weekly downloads
- [pusher-js](https://npm.io/package/pusher-js.md) — 2.0M weekly downloads
- [browserify](https://npm.io/package/browserify.md) — 1.7M weekly downloads
- [sqs-consumer](https://npm.io/package/sqs-consumer.md) — 1.7M weekly downloads
- [@sanity/eventsource](https://npm.io/package/@sanity/eventsource.md) — 930.8K weekly downloads

## Recent versions

- 3.24.4 (latest) — 2026-10-01
- 3.24.3 — 2026-09-30
- 3.24.1 — 2026-09-24
- 3.24.0 — 2026-09-24
- 3.23.2 — 2026-09-10
- 3.23.1 — 2026-08-27
- 3.23.0 — 2026-08-27
- 3.22.0 — 2026-08-14
- 3.21.0 — 2026-06-16
- 3.20.0 — 2026-04-30
- 3.19.0 — 2026-04-17
- 3.18.8 — 2026-04-15
- 3.18.7 — 2026-02-17
- 3.18.6 — 2026-01-30
- 3.18.5 — 2026-01-29
- … 289 more at https://npm.io/package/mediasoup-client/versions

## README

# mediasoup-client v3

[![][npm-shield-mediasoup-client]][npm-mediasoup-client]
[![][github-actions-shield-mediasoup-client]][github-actions-mediasoup-client]
[![][github-actions-shield-mediasoup-client-npm-publish]][github-actions-mediasoup-client-npm-publish]
[![][github-actions-shield-mediasoup-website-update]][github-actions-mediasoup-website-update]
[![][github-actions-shield-mediasoup-demo-update]][github-actions-mediasoup-demo-update]
[![][opencollective-shield-mediasoup]][opencollective-mediasoup]

TypeScript client side library for building [mediasoup][mediasoup-website] based applications.

## Website and Documentation

- [mediasoup.org][mediasoup-website]

## Support Forum

- [mediasoup.discourse.group][mediasoup-discourse]

## Usage Example

```ts
import { Device } from 'mediasoup-client';
import mySignaling from './my-signaling'; // Our own signaling stuff.

// Create a device (use browser auto-detection).
const device = new Device();

// Communicate with our server app to retrieve router RTP capabilities.
const routerRtpCapabilities = await mySignaling.request(
	'getRouterCapabilities'
);

// Load the device with the router RTP capabilities.
await device.load({ routerRtpCapabilities });

// Check whether we can produce video to the router.
if (!device.canProduce('video')) {
	console.warn('cannot produce video');

	// Abort next steps.
}

// Create a transport in the server for sending our media through it.
const { id, iceParameters, iceCandidates, dtlsParameters, sctpParameters } =
	await mySignaling.request('createTransport', {
		sctpCapabilities: device.sctpCapabilities,
	});

// Create the local representation of our server-side transport.
const sendTransport = device.createSendTransport({
	id,
	iceParameters,
	iceCandidates,
	dtlsParameters,
	sctpParameters,
});

// Set transport "connect" event handler.
sendTransport.on('connect', async ({ dtlsParameters }, callback, errback) => {
	// Here we must communicate our local parameters to our remote transport.
	try {
		await mySignaling.request('transport-connect', {
			transportId: sendTransport.id,
			dtlsParameters,
		});

		// Done in the server, tell our transport.
		callback();
	} catch (error) {
		// Something was wrong in server side.
		errback(error);
	}
});

// Set transport "produce" event handler.
sendTransport.on(
	'produce',
	async ({ kind, rtpParameters, appData }, callback, errback) => {
		// Here we must communicate our local parameters to our remote transport.
		try {
			const { id } = await mySignaling.request('produce', {
				transportId: sendTransport.id,
				kind,
				rtpParameters,
				appData,
			});

			// Done in the server, pass the response to our transport.
			callback({ id });
		} catch (error) {
			// Something was wrong in server side.
			errback(error);
		}
	}
);

// Set transport "producedata" event handler.
sendTransport.on(
	'producedata',
	async (
		{ sctpStreamParameters, label, protocol, appData },
		callback,
		errback
	) => {
		// Here we must communicate our local parameters to our remote transport.
		try {
			const { id } = await mySignaling.request('produceData', {
				transportId: sendTransport.id,
				sctpStreamParameters,
				label,
				protocol,
				appData,
			});

			// Done in the server, pass the response to our transport.
			callback({ id });
		} catch (error) {
			// Something was wrong in server side.
			errback(error);
		}
	}
);

// Produce our webcam video.
const stream = await navigator.mediaDevices.getUserMedia({ video: true });
const webcamTrack = stream.getVideoTracks()[0];
const webcamProducer = await sendTransport.produce({ track: webcamTrack });

// Produce data (DataChannel).
const dataProducer = await sendTransport.produceData({
	ordered: true,
	label: 'foo',
});
```

## Authors

- Iñaki Baz Castillo [[website](https://inakibaz.me)|[github](https://github.com/ibc/)]
- José Luis Millán [[github](https://github.com/jmillan/)]

## Social

- Bluesky: [@mediasoup-sfu.bsky.social](https://bsky.app/profile/mediasoup-sfu.bsky.social)

## Sponsor

You can support mediasoup by [sponsoring][sponsor] it. Thanks!

## License

[ISC](./LICENSE)

[mediasoup-website]: https://mediasoup.org
[mediasoup-discourse]: https://mediasoup.discourse.group
[npm-shield-mediasoup-client]: https://img.shields.io/npm/v/mediasoup-client.svg
[npm-mediasoup-client]: https://npmjs.org/package/mediasoup-client
[github-actions-shield-mediasoup-client]: https://github.com/versatica/mediasoup-client/actions/workflows/mediasoup-client.yaml/badge.svg?branch=v3
[github-actions-mediasoup-client]: https://github.com/versatica/mediasoup-client/actions/workflows/mediasoup-client.yaml?query=branch%3Av3
[github-actions-shield-mediasoup-client-npm-publish]: https://github.com/versatica/mediasoup-client/actions/workflows/mediasoup-client-npm-publish.yaml/badge.svg
[github-actions-mediasoup-client-npm-publish]: https://github.com/versatica/mediasoup-client/actions/workflows/mediasoup-client-npm-publish.yaml
[github-actions-shield-mediasoup-website-update]: https://github.com/versatica/mediasoup-client/actions/workflows/mediasoup-website-update.yaml/badge.svg
[github-actions-mediasoup-website-update]: https://github.com/versatica/mediasoup-client/actions/workflows/mediasoup-website-update.yaml
[github-actions-shield-mediasoup-demo-update]: https://github.com/versatica/mediasoup-client/actions/workflows/mediasoup-demo-update.yaml/badge.svg
[github-actions-mediasoup-demo-update]: https://github.com/versatica/mediasoup-client/actions/workflows/mediasoup-demo-update.yaml
[opencollective-shield-mediasoup]: https://img.shields.io/opencollective/all/mediasoup.svg
[opencollective-mediasoup]: https://opencollective.com/mediasoup/
[sponsor]: https://mediasoup.org/sponsor/

---
_Source: https://npm.io/package/mediasoup-client · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
