Skip to content

Latest commit

 

History

History
79 lines (59 loc) · 2.7 KB

README.md

File metadata and controls

79 lines (59 loc) · 2.7 KB


Nim language 👑 bindings for Libdatachannel
A standalone WebRTC Data Channels, WebRTC Media Transport, and WebSockets

nimble install libdatachannel

API reference
Github Actions Github Actions

😍 Key Features

  • Lightweight WebRTC Data Channel/Media Transport

  • Fast Server/Client WebSockets

  • High-level API in Nim style!

  • Low-level bindings libdatachannel

Build the library

First, you will need to build libdatachannel from GitHub source. See Building instructions

Examples

WebSocket Example

WebSocket Server This is a simple WebSocket server that listens for incoming connections and echoes back any messages it receives.

from std/os implement sleep
import libdatachannel/websockets

proc connectionCallback(wsserver: cint, ws: cint, userPtr: pointer) {.cdecl.} =

  proc wsMessageCallback(ws: cint, msg: cstring, size: cint, userPtr: pointer) =
    echo "Message from client ", $msg    
    ws.message(msg) # echo the message back

  discard rtcSetMessageCallback(ws, wsMessageCallback)

  # send a welcome message
  ws.message("Welcome to WebSocket Server!")

let wss = newWebSocketServer(port = Port(1234))
wss.startServer(connectionCallback)

while true:
  sleep(1000)

WebSocket Client

from std/os implement sleep
import libdatachannel/websockets

let client = newWebSocketClient("ws://127.0.0.1:1234")
client.listen(onMessage) do(ws: cint, message: cstring, size: cint, userPtr: pointer):
  echo $message

sleep(500)
while true:
  wsclient.send("Hello from client!")
  sleep(1000)

Peer Connection

todo

❤ Contributions & Support

🎩 License

MIT license. Made by Humans from OpenPeeps.
Copyright © 2025 OpenPeeps & Contributors — All rights reserved.