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