How Viora compares
Framing
Viora is a self-hosted 1:1 client, so the honest comparison set is other ways two people can have a private video call, not “Zoom alternatives.” The table below is about architecture and control, not feature count - Viora loses a feature-count contest to every commercial product and doesn’t care.
At a glance
| Viora | Zoom / Meet / Teams | Signal / WhatsApp calls | Jitsi Meet (self-hosted) | FaceTime | |
|---|---|---|---|---|---|
| Media path (1:1) | P2P, always | Server SFU | P2P, TURN-relayed when needed | SFU (P2P only in tiny calls) | P2P, Apple TURN relay |
| Who runs the media server | No media server | Vendor | Vendor relays | You | Apple |
| Backend you self-host | 1 static binary, no DB | - | - | Full stack (Prosody, Jicofo, JVB, web) | - |
| Persistence / accounts | None | Account required | Phone number | Optional | Apple ID |
| Server sees | Room code, name, SDP/ICE, chat relay | Everything (media transits) | Metadata; media E2E encrypted | Media transits the JVB | Metadata; media E2E encrypted |
| Encryption | DTLS-SRTP (WebRTC standard) | SRTP; optional E2EE add-on | E2E encrypted | DTLS-SRTP hop-by-hop | E2E encrypted |
| Client source you can read | Whole app, ~11k LoC | Closed | Client open, servers not | Open | Closed |
| Codec transparency | Exposed & selectable (H.264/H.265/AV1) | Hidden | Hidden | Partly | Hidden |
| Max participants | 2 (mesh 3–5 planned) | 100–1000+ | 8–32 | 50–75 | 32 |
| Platforms | Android | Everything | Everything | Everything | Apple only |
The trade Viora makes
You give up: large meetings, a hosted option, cross-platform clients, calendar integration, recording, breakout rooms, and the reliability that a global relay network buys on hostile networks.
You get:
- A media path with no middle. For a 1:1 call there is literally no server that could be compelled, breached, or monetised into your call. Signal and FaceTime achieve confidentiality with end-to-end encryption over a relay; Viora achieves it by not having the relay.
- A backend you can actually host. Jitsi is the standard “self-hosted calls” answer, but a real Jitsi deployment is Prosody + Jicofo + a JVB + a web frontend + TURN, and the JVB is a media server that sees your streams. Viora’s backend is one binary that never sees media.
- A client you can read in an afternoon. The entire app is in this repo. The
interesting 80% is four files
(
WebRtcClient.kt,MainActivity.kt,CallScreen.kt, andsignaling.rs). - Settings that mean something. “4K” is
3840×2160@30with a 20 Mbps cap, not a marketing tier. The stats panel shows whether the encoder is hardware or software, the real send/receive bitrate, and the battery temperature so you can see the SoC heating up.
When not to use Viora
- You need more than two people today (mesh multi-party is on the roadmap, not shipped).
- You need an iPhone, desktop, or web participant (the web client is a 2-person testing tool, not a product).
- You’re on a network where both peers are behind symmetric NAT and there’s no shared local network - Viora has no TURN server, so the call won’t connect.
- You want zero operational responsibility. Someone has to run the server.
When Viora is exactly right
- Two people who want a private call and control at least one small server (a $5/mo VPS is plenty).
- Anyone who wants a legible, hackable WebRTC client to learn from or fork.
- A privacy-conscious pair who trust “the packets go straight between our phones” more than “the vendor says they don’t look.”