Skip to main content

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


Built with ❤️ for developers who want WebSocket performance without WebSocket complexity.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

peerpyrtc-0.2.2.tar.gz (10.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

peerpyrtc-0.2.2-py3-none-any.whl (9.5 kB view details)

Uploaded Python 3

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

Hashes for peerpyrtc-0.2.2.tar.gz
Algorithm Hash digest
SHA256 c27b242fd94620669cf83404279189a7bf5f3384011e8a1d6f21e71b8706b5f1
MD5 b5b997d8b75621c965b9e609961067d5
BLAKE2b-256 40ef7985bd2b8cb3d61574a7535f85a8f0254033ba937155529f8bea1235a707

See more details on using hashes here.

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

Hashes for peerpyrtc-0.2.2-py3-none-any.whl
Algorithm Hash digest
SHA256 f3e689b5cffa059e07900ad54131b54f2613d51566c6355987bb5acbff2ba92b
MD5 02354be63eb27c2eecc78f9a56b1baab
BLAKE2b-256 257afdfb27035fa31bf41f7e43f7252c210747d897badec39d55851cfa2a1260

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page