Easy to use WebRTC data channels and media transport
- 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
node-datachannel
targets N-API version 8 and supports NodeJS v16 and above. It is tested on Linux, Windows and MacOS. For N-API compatibility please check here.
| Linux-x64 | Linux-armv7 | Linux-arm64(1) | Windows-x86 | Windows-x64 | Mac (M1 + x64) |
---|
Node V16 | + | + | + | + | + | + |
Node V17 | + | + | + | + | + | + |
Node V18 | + | + | + | + | + | + |
Node V19 | + | + | + | + | + | + |
Node V20 | + | + | + | + | + | + |
- Please note that; For Linux-arm64 platform we need OpenSSL to be installed locally.
Electron
node-datachannel
supports Electron.
Please check electron demo
Example Usage
import nodeDataChannel from 'node-datachannel';
nodeDataChannel.initLogger('Debug');
let dc1 = null;
let dc2 = null;
let peer1 = new nodeDataChannel.PeerConnection('Peer1', { iceServers: ['stun:stun.l.google.com:19302'] });
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'] });
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);
WebRTC Polyfills
Please check here
Test
npm run test
node test/connectivity.js
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!