Architecture
Voca is built as a lightweight, self-hostable WebRTC signaling server with framework-agnostic SDKs.
System Overview
┌─────────────┐ WebSocket ┌──────────────────┐
│ Browser │◄───────────────────►│ Signaling │
│ (SDK) │ │ Server (Rust) │
└─────────────┘ └──────────────────┘
│ │
│ WebRTC (P2P) │ In-Memory
│ │ Room State
▼ ▼
┌─────────────┐ ┌──────────────────┐
│ Browser │ │ DashMap │
│ (SDK) │ │ (Rooms/Peers) │
└─────────────┘ └──────────────────┘Components
Signaling Server (Rust)
- WebSocket server for signaling
- Room management & peer coordination
- Optional API key authentication
- In-memory state (no database required)
SDK Packages
- @treyorr/voca-client - Core TypeScript SDK
- @treyorr/voca-svelte - Svelte 5 runes wrapper
- @treyorr/voca-react - React hooks wrapper
WebRTC Connection
- Peer-to-peer audio streams
- Uses public STUN servers (Google)
- No media server required
- Works for 90%+ of networks without TURN
Scalability
Per Server Instance:
- 10000 concurrent rooms by default (configurable)
- 6 peers per room by default (configurable)
- Minimal CPU/memory (Rust + no media processing)
Scaling Strategy:
- Horizontal: Run multiple signaling servers
- Load balance by room ID (consistent hashing)
- No shared state needed between servers