Nim language 👑 bindings for Libdatachannel
A standalone WebRTC Data Channels, WebRTC Media Transport, and WebSockets
nimble install libdatachannel
-
Lightweight WebRTC Data Channel/Media Transport
-
Fast Server/Client WebSockets
-
High-level API in Nim style!
-
Low-level bindings
libdatachannel
First, you will need to build libdatachannel from GitHub source. See Building instructions
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)
todo
- 🐛 Found a bug? Create a new Issue
- 👋 Wanna help? Fork it!
- 😎 Get €20 in cloud credits from Hetzner
- 🥰 Donate via PayPal address
MIT license. Made by Humans from OpenPeeps.
Copyright © 2025 OpenPeeps & Contributors — All rights reserved.