A Python-based WebRTC signaling and data channel library
Project description
PeerPyRTC
A serverless, Socket.io-compatible WebRTC library for building real-time peer-to-peer applications.
PeerPyRTC is a revolutionary WebRTC DataChannel library that replaces WebSockets with true peer-to-peer communication. Build chat apps, games, collaborative tools, and real-time dashboards without persistent server connections.
🚀 Key Features
- 🔄 Socket.io Replacement: Drop-in replacement with
emit(),broadcast(), and event-driven architecture - ⚡ Serverless Architecture: True P2P after initial signaling - no persistent server needed
- 🎯 Real-time Peer Management: Automatic join/leave detection, host election, room state sync
- 🛡️ Production Ready: Built-in TURN servers, reconnection, error handling, and failover
- 🔧 Framework Agnostic: Works with Flask, FastAPI, Django, Express.js, or any web framework
- 📡 Event-Driven: Comprehensive callback system for peer events and room management
- 🎮 Multi-Purpose: Perfect for chat, gaming, collaboration, IoT, trading, video conferencing
📦 Installation
pip install peerpyrtc
🚀 Quick Start
from flask import Flask, request, jsonify
from peerpyrtc import SignalingManager
app = Flask(__name__)
signaling_manager = SignalingManager(debug=True)
# Handle all messages
@signaling_manager.message_handler
async def on_message(room: str, peer_id: str, message: str):
print(f"Message in {room} from {peer_id}: {message}")
# Handle peer events
@signaling_manager.peer_joined_handler
async def on_peer_joined(room: str, peer_id: str, peer_info: dict):
print(f"🟢 {peer_id} joined {room}")
@signaling_manager.peer_left_handler
async def on_peer_left(room: str, peer_id: str, peer_info: dict):
print(f"🔴 {peer_id} left {room}")
# Standard WebRTC signaling endpoints
@app.route("/offer", methods=["POST"])
def offer():
return jsonify(signaling_manager.offer(**request.json))
@app.route("/candidate", methods=["POST"])
def candidate():
signaling_manager.candidate(**request.json)
return jsonify({"status": "ok"})
@app.route("/leave", methods=["POST"])
def leave():
signaling_manager.leave(**request.json)
return jsonify({"status": "ok"})
if __name__ == "__main__":
app.run(host="0.0.0.0", port=5000)
📚 API Reference
SignalingManager
from peerpyrtc import SignalingManager
# Initialize
signaling_manager = SignalingManager(debug=True)
# Core signaling methods
signaling_manager.offer(room, peer_id, offer) # Handle WebRTC offer
signaling_manager.candidate(room, peer_id, candidate) # Handle ICE candidate
signaling_manager.leave(room, peer_id) # Handle peer leaving
# Room information
signaling_manager.rooms_info() # Get all rooms info
signaling_manager.get_room_peers(room_name) # Get peers in specific room
Event Handlers (Decorators)
# Message handling
@signaling_manager.message_handler
async def on_message(room_name: str, sender_id: str, message: str):
# Process every message sent in any room
await database.save_message(room_name, sender_id, message)
# Peer lifecycle events
@signaling_manager.peer_joined_handler
async def on_peer_joined(room_name: str, peer_id: str, peer_info: dict):
# Handle peer joining (real-time, no polling needed)
print(f"New peer {peer_id} joined {room_name}")
await notify_other_services(peer_id, 'joined')
@signaling_manager.peer_left_handler
async def on_peer_left(room_name: str, peer_id: str, peer_info: dict):
# Handle peer leaving (automatic detection)
print(f"Peer {peer_id} left {room_name}")
await cleanup_user_data(peer_id)
Requirements
- Python 3.10+
- aiortc>=1.5.0
License
MIT License - see LICENSE file for details.
Links
- Frontend Client:
npm install peerpyrtc-client - Documentation: See main repository for full examples and documentation
- GitHub: https://github.com/yourusername/peerpyrtc
Built with ❤️ for developers who want WebSocket performance without WebSocket complexity.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file peerpyrtc-0.2.2.tar.gz.
File metadata
- Download URL: peerpyrtc-0.2.2.tar.gz
- Upload date:
- Size: 10.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c27b242fd94620669cf83404279189a7bf5f3384011e8a1d6f21e71b8706b5f1
|
|
| MD5 |
b5b997d8b75621c965b9e609961067d5
|
|
| BLAKE2b-256 |
40ef7985bd2b8cb3d61574a7535f85a8f0254033ba937155529f8bea1235a707
|
File details
Details for the file peerpyrtc-0.2.2-py3-none-any.whl.
File metadata
- Download URL: peerpyrtc-0.2.2-py3-none-any.whl
- Upload date:
- Size: 9.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f3e689b5cffa059e07900ad54131b54f2613d51566c6355987bb5acbff2ba92b
|
|
| MD5 |
02354be63eb27c2eecc78f9a56b1baab
|
|
| BLAKE2b-256 |
257afdfb27035fa31bf41f7e43f7252c210747d897badec39d55851cfa2a1260
|