Voca
High-performance WebRTC signaling server in Rust with frontend SDKs. Self-hostable, stateless, and fast.
Install / Use
/learn @treyorr/VocaREADME
voca.vc
Open-source WebRTC voice chat. Ephemeral rooms. No auth. Pure P2P.
Features
- 🔒 Zero Persistence — No data stored, no accounts
- 🌐 Pure P2P — Audio never touches the server (WebRTC mesh)
- ⚡ Instant — One-click room creation
- 🔐 Encrypted — DTLS-SRTP for all audio
- 🔑 Optional Passwords — Protect rooms with alphanumeric passwords
- 📱 Responsive — Works on desktop and mobile
SDK Packages
| Package | Description | |---------|-------------| | @treyorr/voca-client | Core TypeScript SDK | | @treyorr/voca-react | React hooks | | @treyorr/voca-svelte | Svelte 5 runes wrapper |
Quick Install
bun install @treyorr/voca-client
# or for frameworks:
bun install @treyorr/voca-react # React
bun install @treyorr/voca-svelte # Svelte 5
Usage Example (React)
import { useVocaRoom } from '@treyorr/voca-react';
function VoiceRoom({ roomId }) {
const { status, peers, toggleMute, isMuted } = useVocaRoom(roomId, {
password: 'secret123' // Optional: protect room with password
});
return (
<button onClick={toggleMute}>{isMuted ? 'Unmute' : 'Mute'}</button>
);
}
Self-Hosting
Voca is designed for easy self-hosting with Docker. No database or external dependencies required.
Development
With mise (recommended)
mise run dev
Manual
# Terminal 1: Signaling server
cd services/signaling && RUST_LOG=info cargo run
# Terminal 2: Web frontend
cd apps/web && bun install && bun run dev
Open http://localhost:5173
API
| Endpoint | Auth | Description |
|----------|------|-------------|
| POST /api/room?password=<pwd> | - | Create room (optional password) → {"room": "abc123", "password": "pwd"} |
| GET /api/room/{id} | - | Check if room exists → {"exists": true, "password_required": false} |
| GET /ws/{id}?password=<pwd> | - | WebSocket signaling (password required if room protected) |
| GET /api/admin/rooms | Bearer | List all rooms |
| GET /api/admin/metrics | Bearer | Usage metrics |
Contributing
- Fork the repo
- Create a branch:
git checkout -b my-feature - Make your changes and run
mise run lint - Submit a PR
Please read our Code of Conduct first.
Documentation
- voca.vc/docs — Full SDK and Self-Hosting documentation
