The Poki Networking Library 

The Poki Networking Library is a peer-to-peer networking library for web games, leveraging WebRTC datachannels to enable direct UDP connections between players. Think of it as the Steam Networking Library for the web, designed to make WebRTC as simple to use as WebSockets for game development.
[!WARNING]
This library is still under development and considered a beta. While it's being actively used in production by some games, the API can change. Make sure to get in touch if you want to go live with this so we can keep you up-to-date about changes.
Features
Quick Start
- Install the package:
yarn add @poki/netlib
# or
npm install @poki/netlib
- Create a network instance:
import { Network } from '@poki/netlib'
const network = new Network('<your-game-id>')
- Create or join a lobby:
// Create a new lobby
network.on('ready', () => {
network.create()
})
// Or join an existing one
network.on('ready', () => {
network.join('ed84')
})
- Start communicating:
// Send messages
network.broadcast('unreliable', { x: 100, y: 200 })
// Receive messages
network.on('message', (peer, channel, data) => {
console.log(`Received from ${peer.id}:`, data)
})
For more detailed examples and API documentation:
Roadmap
- Basic P2P connectivity
- Lobby system
- Lobby discovery and filtering
- WebRTC data compression
- Connection statistics and debugging tools
- More extensive documentation
- API stability
Architecture
Network Stack
Your Game
↓
Netlib API
↓
WebRTC DataChannels
↓
(STUN/TURN if needed)
↓
UDP Transport
Infrastructure Components
1. Signaling Server
- Handles initial peer discovery
- Manages lobby creation and joining
- Facilitates WebRTC connection establishment
2. STUN/TURN Servers
- STUN: Helps peers discover their public IP (by default Google STUN servers)
- TURN: Provides fallback relay when direct P2P fails (when using the Poki hosted version, Cloudflare TURN servers are used)
Self-Hosting
While Poki provides hosted STUN/TURN and signaling services for free, you can also self-host these components:
- Set up your own signaling server using the provided Docker image
- Configure your own STUN/TURN servers
- Initialize the network with custom endpoints:
const network = new Network('<game-id>', {
signalingServer: 'wss://your-server.com',
stunServer: 'stun:your-stun.com:3478',
turnServer: 'turn:your-turn.com:3478'
})
Contributing
We welcome contributions! Please see our Contributing Guide for details. This project adheres to the Poki Vulnerability Disclosure Policy.
License
This project is licensed under the MIT License - see the LICENSE file for details.
Main Contributors