Important: This documentation covers Yarn 1 (Classic).
For Yarn 2+ docs and migration guide, see yarnpkg.com.

Package detail

@bcjordan/node-datachannel

murat-dogan105LGPL0.4.5TypeScript support: included

libdatachannel node bindings

libdatachannel, webrtc, p2p, peer-to-peer, datachannel, data channel

readme

Easy to use WebRTC data channels and media transport

Build CI

  • Easy to use
  • Lightweight
    • No need to deal with WebRTC stack!
    • Small binary sizes
  • Type infos for Typescript

This project is NodeJS bindings for libdatachannel library.

Please check libdatachannel for Compatibility & WebRTC details.

Install

npm install node-datachannel

Supported Platforms

| | Linux-x64 | Linux-armv7 | Linux-arm64(1) | Windows-x86 | Windows-x64 | Mac (M1 + x64) | |----------|:---------:|:-----------:|:----------------:|:-----------:|:-----------:|:--------------:| | Node V10 | + | + | + | + | + | + | | Node V11 | + | + | + | + | + | + | | Node V12 | + | + | + | + | + | + | | Node V13 | + | + | + | + | + | + | | Node V14 | + | + | + | + | + | + | | Node V15 | + | + | + | + | + | + | | Node V16 | + | + | + | + | + | + | | Node V17 | + | + | + | + | + | + | | Node V18 | + | + | + | + | + | + |

1) Please note that; For Linux-arm64 platform we need OpenSSL to be installed locally.

Example Usage

const nodeDataChannel = require('node-datachannel');

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

let dc1 = null;
let dc2 = null;

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

// Set Callbacks
peer1.onLocalDescription((sdp, type) => {
    console.log("Peer1 SDP:", sdp, " Type:", type);
    peer2.setRemoteDescription(sdp, type);
});
peer1.onLocalCandidate((candidate, mid) => {
    console.log("Peer1 Candidate:", candidate);
    peer2.addRemoteCandidate(candidate, mid);
});

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

// Set Callbacks
peer2.onLocalDescription((sdp, type) => {
    console.log("Peer2 SDP:", sdp, " Type:", type);
    peer1.setRemoteDescription(sdp, type);
});
peer2.onLocalCandidate((candidate, mid) => {
    console.log("Peer2 Candidate:", candidate);
    peer1.addRemoteCandidate(candidate, mid);
});
peer2.onDataChannel((dc) => {
    console.log("Peer2 Got DataChannel: ", dc.getLabel());
    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);
});

setTimeout(() => {
    dc1.close();
    dc2.close();
    peer1.close();
    peer2.close();
    nodeDataChannel.cleanup();
}, 10 * 1000);

Test

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

Build

Please check here

Examples

Please check examples folder

API Docs

Please check docs page

Thanks

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

changelog

Changelog

v0.6.0

  • Updated "devDependencies" versions to fix vulnerability alerts
  • Dropped support of io.js and node.js v0.12.x and lower since new versions of "devDependencies" couldn't work with those old node.js versions (minimal supported version of node.js now is v4.0.0)

v0.5.1

  • Fix prototype pollution vulnerability (thanks to @mwakerman for the PR)
  • Avoid using deprecated Buffer API (thanks to @ChALkeR for the PR)

v0.5.0

  • Auto-testing provided by Travis CI;
  • Support older Node.JS versions (v0.11.x and v0.10.x);
  • Removed tests files from npm package.

v0.4.2

  • Fix for null as an argument.

v0.4.1

  • Removed test code from npm package (see pull request #21);
  • Increased minimal version of Node from 0.4.0 to 0.12.0 (because can't run tests on lesser version anyway).

v0.4.0

  • WARNING! Broken backward compatibility with v0.3.x;
  • Fixed bug with extending arrays instead of cloning;
  • Deep cloning for arrays;
  • Check for own property;
  • Fixed some documentation issues;
  • Strict JS mode.