# node-datachannel

> WebRTC For Node.js and Electron. libdatachannel node bindings.

Latest version **0.33.4** (published 2026-09-12) · MPL 2.0 license · 0 weekly downloads

## Install

```sh
npm install node-datachannel
pnpm add node-datachannel
yarn add node-datachannel
bun add node-datachannel
```

## Health

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

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

Warnings: low downloads; pre 1.0.

## Facts

| | |
|---|---|
| Version | 0.33.4 |
| Published | 2026-09-12 |
| First published | 2020-07-29 |
| Weekly downloads | 0 |
| License | MPL 2.0 |
| TypeScript types | bundled |
| Module format | ESM + CommonJS |
| Node | >=18.20.0 |
| Dependencies | 1 |
| Unpacked size | 667.1 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 419 |
| Maintainers | murat-dogan |
| Keywords | libdatachannel, webrtc, p2p, peer-to-peer, datachannel, data channel, websocket |

## Links

- npm: https://www.npmjs.com/package/node-datachannel
- Repository: https://github.com/murat-dogan/node-datachannel
- Homepage: https://github.com/murat-dogan/node-datachannel#readme
- Issues: https://github.com/murat-dogan/node-datachannel/issues
- npm.io page: https://npm.io/package/node-datachannel

## Dependencies (1)

- [detect-libc](https://npm.io/package/detect-libc.md) ^2.0.4

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

- 0.33.4 (latest) — 2026-09-12
- 0.33.3 — 2026-09-09
- 0.33.2 — 2026-08-29
- 0.33.1 — 2026-08-17
- 0.33.0 — 2026-08-15
- 0.32.3 — 2026-04-26
- 0.32.2 — 2026-04-05
- 0.32.1 — 2026-02-08
- 0.32.0 — 2026-01-11
- 0.31.0 — 2025-12-08
- 0.30.0 — 2025-10-01
- 0.29.0 — 2025-08-01
- 0.28.0 — 2025-06-09
- 0.27.0 — 2025-05-02
- 0.26.0 — 2025-03-01
- … 77 more at https://npm.io/package/node-datachannel/versions

## README

# WebRTC For Node.js and Electron ( with WebSocket)

![Linux CI Build](https://github.com/murat-dogan/node-datachannel/workflows/Build%20-%20Linux/badge.svg) ![Windows CI Build](https://github.com/murat-dogan/node-datachannel/workflows/Build%20-%20Win/badge.svg) ![Mac x64 CI Build](https://github.com/murat-dogan/node-datachannel/workflows/Build%20-%20Mac%20x64/badge.svg) ![Mac M1 CI Build](https://github.com/murat-dogan/node-datachannel/workflows/Build%20-%20Mac%20M1/badge.svg)

- Lightweight
  - No need to deal with WebRTC stack!
  - Small binary sizes (~8MB for Linux x64)
- Type infos for Typescript
- Integrated WebSocket Client & Server Implementation

This project is Node.js bindings for [libdatachannel](https://github.com/paullouisageneau/libdatachannel) library.

## Install

```sh
npm install node-datachannel
```

## Supported Platforms

`node-datachannel` targets N-API version 8 and supports Node.js **v18.20 and above** (including Node.js 20, 22, and 24+). Prebuilt binaries are distributed automatically via platform-specific npm packages (`optionalDependencies`).

| Architecture | Linux (glibc) | Linux (musl / Alpine) | macOS (Apple Silicon / Intel) | Windows | Android (Termux / Bionic) |
| :--- | :---: | :---: | :---: | :---: | :---: |
| **x64** | `@node-datachannel/linux-x64-gnu` | `@node-datachannel/linux-x64-musl` | `@node-datachannel/darwin-x64` | `@node-datachannel/win32-x64-msvc` | - |
| **arm64** | `@node-datachannel/linux-arm64-gnu` | `@node-datachannel/linux-arm64-musl` | `@node-datachannel/darwin-arm64` | `@node-datachannel/win32-arm64-msvc` | `@node-datachannel/android-arm64` |

## Electron

`node-datachannel` supports Electron.

Please check [electron demo](/examples/electron-demo)

## WebRTC Polyfills

WebRTC polyfills to be used for libraries like `simple-peer`.

Please check [here for more](/src/polyfill)

### web-platform-tests

Please check actual situation [here](/test/wpt-tests/)

## WebSocket Client & Server

Integrated WebSocket Client & Server is available, which can be used separately or for signaling.

For an example usage, [check here](/examples/websocket)

## Example Usage

```js
import nodeDataChannel from 'node-datachannel';

// Log Level
nodeDataChannel.initLogger('Debug');

// Integrated WebSocket available and can be used for signaling etc
// const ws = new nodeDataChannel.WebSocket();

let dc1 = null;
let dc2 = null;

let peer1 = new nodeDataChannel.PeerConnection('Peer1', {
  iceServers: ['stun:stun.l.google.com:19302'],
});

peer1.onLocalDescription((sdp, type) => {
  peer2.setRemoteDescription(sdp, type);
});
peer1.onLocalCandidate((candidate, mid) => {
  peer2.addRemoteCandidate(candidate, mid);
});

let peer2 = new nodeDataChannel.PeerConnection('Peer2', {
  iceServers: ['stun:stun.l.google.com:19302'],
});

peer2.onLocalDescription((sdp, type) => {
  peer1.setRemoteDescription(sdp, type);
});
peer2.onLocalCandidate((candidate, mid) => {
  peer1.addRemoteCandidate(candidate, mid);
});
peer2.onDataChannel((dc) => {
  dc2 = dc;
  dc2.onMessage((msg) => {
    console.log('Peer2 Received Msg:', msg);
  });
  dc2.sendMessage('Hello From Peer2');
});

dc1 = peer1.createDataChannel('test');

dc1.onOpen(() => {
  dc1.sendMessage('Hello from Peer1');
});

dc1.onMessage((msg) => {
  console.log('Peer1 Received Msg:', msg);
});
```

## Examples

Please check [examples](/examples/) folder

## Test

```sh
npm run test                  # Unit tests
node test/connectivity.js     # Connectivity
```

## Build

Please check [here](/BULDING.md)

## API Docs

Please check [docs](/API.md) page

## Contributing

Contributions are welcome!

## Thanks

Thanks to [Streamr](https://streamr.network/) for supporting this project by being a Sponsor!

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