JSPM

@ipshipyard/node-datachannel

0.26.5
  • ESM via JSPM
  • ES Module Entrypoint
  • Export Map
  • Keywords
  • License
  • Repository URL
  • TypeScript Types
  • README
  • Created
  • Published
  • Downloads 8551
  • Score
    100M100P100Q145537F
  • License MPL 2.0

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

Package Exports

    Readme

    This is a fork of node-datachannel with the changes from #256 applied

    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!