Entavi is a small peer-to-peer voice app for quick calls. Open it, get a live call code, share that code with someone else, and talk.
There are no accounts to create and no central media server carrying the call. Entavi uses a signaling server only long enough for peers to find each other. After that, audio is sent directly between participants over WebRTC.
Most voice tools assume a workspace, contact list, invite flow, or meeting link. Entavi is meant to feel closer to handing someone a temporary code:
- launch the app
- share the code or QR link
- start talking when the other person joins
- leave without keeping a room around
The app is built for short-lived calls where the code is the invitation.
The repository is split across these main pieces:
src/- the Vue frontend used by the desktop appsrc-tauri/- the Rust/Tauri desktop runtime, audio engine, tray integration, updater wiring, and WebRTC connection handlingweb/- a browser version that reuses the shared Vue components and swaps the Tauri IPC layer for browser-native WebRTC codesignaling-server/- a Cloudflare Worker and Durable Object WebSocket relaywebsite/- the public marketing site
- The app creates or joins a room through the Cloudflare signaling worker.
- The signaling worker relays WebRTC offer/answer and ICE messages between peers.
- Once the peer connection is established, audio flows directly between the participants.
- The signaling worker keeps relaying lightweight room events, such as joins, leaves, reconnects, and mute state.
The worker does not receive decoded call audio. It only handles connection setup and room coordination.
- Live call codes and QR-style invite links
- Desktop app built with Tauri 2
- Browser-hosted web app that shares most of the UI
- Peer-to-peer audio over WebRTC
- Opus audio encoding in the desktop app
- Microphone input selection and mic testing
- Output device selection in the desktop app
- RNNoise-based noise suppression through
nnnoiseless - System tray controls for opening the app, muting, and quitting
- Reconnect handling for short signaling drops
- Cloudflare Durable Object signaling backend
Install the JavaScript dependencies first:
npm installThen start the Tauri app:
npm run tauri devThe Tauri dev server uses Vite on http://localhost:1420.
To create a production desktop build:
npm run tauri buildThe browser app lives in web/:
cd web
npm install
npm run devBy default, it runs on http://localhost:5173.
The signaling worker lives in signaling-server/:
cd signaling-server
npm install
npm run devDeploy it to Cloudflare Workers with:
npm run deployThe desktop and web clients default to:
wss://entavi-signaling.avdo.workers.dev/ws
For local signaling tests, point the client engine at your Worker URL before
creating or joining a room. Both the desktop and browser engines expose a
setSignalingUrl hook for that.
- Tauri 2 and Rust for the desktop shell
- Vue 3, TypeScript, and Vite for the frontend
- WebRTC for peer connections
- CPAL for desktop audio input/output
- Opus for desktop audio encoding
nnnoiselessfor RNNoise-style noise suppression- Cloudflare Workers and Durable Objects for signaling
Entavi is still a work in progress. The basics are in place: temporary room codes, peer discovery, direct audio, mute state, mic testing, and reconnect handling. Expect rough edges while the desktop app, browser app, and signaling service continue to evolve together.