Your server. Your rules.
Your conversations.

SonicRelay is a fully self-hosted, open source communication platform. Text chat, voice calls, webcams, screen sharing — all running on hardware you control.

Everything you need, nothing you don't

Built from scratch with a focus on simplicity and reliability. No bloat, no telemetry, no surprises.

Text Channels
Real-time messaging with file attachments, link previews, and message deletion. Messages are broadcast instantly over WebSocket to everyone in the channel.
Voice Chat
Crystal-clear voice powered by mediasoup SFU. No peer-to-peer NAT headaches — every client connects through the server for reliable audio every time.
Webcam Video
Turn on your camera and see your friends. Video feeds can be popped out into a focused view. Toggle on and off at any time during a voice session.
Screen Sharing
Share your entire screen or a specific window — with audio support. Perfect for watching videos together, pair programming, or showing off your gameplay.
Per-User Volume Control
Adjust the volume of each person in voice independently, or mute them entirely. Your settings are saved server-side so they persist across sessions.
Live Presence
See who's online in real time. The user list updates instantly as people connect and disconnect. Speaking indicators show who's talking in voice.
Self-Hosted & Private
Your server runs on your hardware. No third-party data collection, no Terms of Service changes, no ads. Your data never leaves your machine.
Secure by Default
Passwords are hashed with bcrypt. Sessions use signed JWT tokens. All traffic can run over HTTPS/WSS. The codebase is open for anyone to audit.
Dead Simple to Run
One Node.js process handles everything — REST API, WebSocket, and media routing. Install dependencies, set a few environment variables, and you're live.

How it works

A single server process. A React client. That's it.

Server

One Node.js process running Express for the REST API, ws for WebSocket real-time communication, and mediasoup as an SFU for voice and video routing.

Everything — authentication, text messaging, voice signaling, and media transport — runs on a single port. No microservices, no external dependencies beyond Node.js.

Client

A React app built with Vite and React Router. Styled with Tailwind CSS and shadcn/ui components. Each component has a single responsibility — easy to read, easy to modify.

Voice logic is isolated in a dedicated VoiceClient class that wraps mediasoup-client, keeping the UI layer clean and the media layer testable.

Philosophy

SonicRelay is built by people who care about software quality. No vibecoding. Every line is reviewed and understood.

Small and simple

Every component, every function, every file should be as small and purpose-built as possible. No abstractions until they're needed.

Human readable

Code should read like a description of what it does. Anyone should be able to open a file and understand it immediately.

Minimal dependencies

Only add a library when building it yourself would be unreasonable. If useState works, we don't need a state management library.

Robust and maintainable

Optimized code that can be easily maintained in the future. No over-engineering, no clever tricks.

Tech Stack

Modern, minimal, and intentional.

FrontendReact 19, React Router v7, Vite
UITailwind CSS, shadcn/ui, Lucide icons
BackendExpress.js 5, TypeScript
Real-timeWebSocket (ws)
Voice & Videomediasoup SFU + mediasoup-client
Databasesimpl.db (JSON file-based)
Authbcrypt + JWT

Ready to own your communication?

Clone the repo, spin up the server, and invite your friends. No sign-ups, no subscriptions, no catch.