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)

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.1.tar.gz (10.1 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.1-py3-none-any.whl (9.3 kB view details)

Uploaded Python 3

File details

Details for the file peerpyrtc-0.2.1.tar.gz.

File metadata

  • Download URL: peerpyrtc-0.2.1.tar.gz
  • Upload date:
  • Size: 10.1 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.1.tar.gz
Algorithm Hash digest
SHA256 23ffc0e96addc33475b86d879ab68b8b121e0764a5e07561e44e6035f3bcb348
MD5 ecb02ddf329d42336e9c6c699ef8fc68
BLAKE2b-256 124a7197f197d000df930dbb7f02e8621bb41e7f5d35416b4e2d40ab40eecab5

See more details on using hashes here.

File details

Details for the file peerpyrtc-0.2.1-py3-none-any.whl.

File metadata

  • Download URL: peerpyrtc-0.2.1-py3-none-any.whl
  • Upload date:
  • Size: 9.3 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.1-py3-none-any.whl
Algorithm Hash digest
SHA256 e401bbfdec582f23ee40c4d03566949231d3d3663d9f8ee7f5821a0269a8828e
MD5 65a89f6eff087ef58f8680c592a07753
BLAKE2b-256 cf6ff25246efef77b0b9901f5f59b4973c5098c0b583f667c7fd3d5b99c2e7e4

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