Skip to Content

Viora

Viora is a self-hosted, peer-to-peer video calling app for Android. Media never touches a server - audio and video flow directly between the two phones over an encrypted WebRTC connection. The only backend is a tiny Rust process whose job is to introduce the two peers and then get out of the way.

What it does

CapabilityNotes
1:1 video callsFull-bleed remote video, draggable self-view, tap-to-hide chrome
Up to 4K / 60 fps camera videoH.264 / H.265 / AV1, hardware encode where available
Screen sharingDedicated screencast source, device-audio capture, orientation follow
In-call text chatRelayed over the same WebSocket as signaling
Adaptive audioOpus stereo @ up to 256 kbps VBR, in-band FEC, three capture modes
Noise suppressionOn-device RNNoise  as a capture post-processor
Picture-in-PictureRemote video floats when you leave the app mid-call
Live connection statsBitrate, resolution, FPS, RTT, packet loss, codec, CPU, battery temperature, power draw
Custom identityDisplay name + avatar (monogram, preset, or cropped photo)
Light / dark themeThe call UI follows the system theme; video backdrop stays black

Design pillars

Private by constructionPeer-to-peer media. The server sees room codes, display names, and the signaling handshake - never a video frame or an audio sample.
Self-hostableThe entire backend is one statically-linked Rust binary with no database, no persistence, and no external services beyond public STUN.
Honest about the hardwareThe debug panel surfaces exactly what the encoder, decoder, and radio are doing. Quality settings map to real capture formats and bitrate caps, not vague “HD / SD” labels.
Built for real devicesTested on a 2018 Galaxy S9+ and a 2025 Pixel - camera recovery, thermal awareness, and lifecycle handling are first-class concerns, not afterthoughts.

The 30-second mental model

  1. Both phones open a WebSocket to the signaling server and join the same room code.
  2. The server tells each phone who else is in the room.
  3. The phones exchange an SDP offer / answer and a handful of ICE candidates through the server.
  4. A direct, encrypted DTLS-SRTP channel forms between the two phones. All audio, video, and chat now flow over that channel.
  5. The server keeps the WebSocket open only to relay late ICE candidates, chat, and presence changes.

Continue to Why Viora exists →