Skip to content

WebRTC For Node.js and Electron (including WebSocket Client & Server). libdatachannel node bindings.

License

Notifications You must be signed in to change notification settings

murat-dogan/node-datachannel

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Jan 12, 2025
fdcb245 · Jan 12, 2025
Dec 1, 2024
Nov 24, 2024
Aug 28, 2024
Sep 22, 2024
Jan 12, 2025
Dec 1, 2024
Apr 6, 2022
Nov 12, 2024
Jul 27, 2024
Jul 27, 2024
Jul 14, 2024
Jul 30, 2024
Jul 27, 2024
Nov 18, 2024
Jul 15, 2023
Dec 1, 2024
Dec 10, 2022
Dec 1, 2024
Jul 27, 2024
Dec 7, 2024
Dec 7, 2024
Dec 7, 2024
Jul 30, 2024

Repository files navigation

WebRTC For Node.js and Electron ( with WebSocket)

Linux CI Build Windows CI Build Mac x64 CI Build Mac M1 CI Build

  • 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 library.

Install

npm install node-datachannel

Supported Platforms

node-datachannel targets N-API version 8 and supports Node.js v18.20 and above. It is tested on Linux, Windows and MacOS. For N-API compatibility please check here.

Linux [x64,armv7,arm64] (1) Windows [x86,x64] Mac [M1,x64]
N-API v8 (>= Node.js v18) + + +

(1) For Linux musl + libc

Electron

node-datachannel supports Electron.

Please check electron demo

WebRTC Polyfills

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

Please check here for more

web-platform-tests

Please check actual situation here

WebSocket Client & Server

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

For an example usage, check here

Example Usage

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 folder

Test

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

Build

Please check here

API Docs

Please check docs page

Contributing

Contributions are welcome!

Thanks

Thanks to Streamr for supporting this project by being a Sponsor!