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
MIT license. Made by Humans from OpenPeeps.
Copyright © 2025 OpenPeeps & Contributors — All rights reserved.