SkillAgentSearch skills...

Voca

High-performance WebRTC signaling server in Rust with frontend SDKs. Self-hostable, stateless, and fast.

Install / Use

/learn @treyorr/Voca
About this skill

Quality Score

0/100

Supported Platforms

Universal

README

voca.vc

Open-source WebRTC voice chat. Ephemeral rooms. No auth. Pure P2P.

CI npm @treyorr/voca-client npm @treyorr/voca-svelte npm @treyorr/voca-react License: MIT

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>
  );
}

📖 Full Documentation →


Self-Hosting

Voca is designed for easy self-hosting with Docker. No database or external dependencies required.

📖 Self-Hosting Guide →


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

  1. Fork the repo
  2. Create a branch: git checkout -b my-feature
  3. Make your changes and run mise run lint
  4. Submit a PR

Please read our Code of Conduct first.


Documentation


License

MIT

View on GitHub
GitHub Stars66
CategoryDevelopment
Updated18d ago
Forks4

Languages

Svelte

Security Score

100/100

Audited on Mar 15, 2026

No findings