Join the Agent Deck Discord Server!
Check out the Agent Deck community on Discord – hang out with 357 other members and enjoy free voice and text chat.
Sotto: end-to-end encrypted voice and video calls for professionals and their clients. Clients join from a browser link. No accounts, no phone numbers, nothing stored on the server.
SocialDart · JavaScriptGitHub @rbr48OnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
Privacy-first, end-to-end encrypted calling and messaging for professionals and their clients. Zero server storage, instant web guest links, WebRTC, and self-hostable.
Taken from the repository README
Loading the full README. The saved excerpt is shown below.
Speak freely. Nothing about you is kept on the server.
Sotto is a privacy-first calling and messaging app for professionals and their clients: lawyers, therapists, doctors, accountants, journalists and small organisations.Read the full README ↗Speak freely. Nothing about you is kept on the server.
Sotto is a privacy-first calling and messaging app for professionals and their clients: lawyers, therapists, doctors, accountants, journalists and small organisations.
call.sottocall.comThe name comes from sotto voce: speaking quietly so that only the listener hears.
Status: v0.5.0, the latest release. Built so far: guest links, one-command self-hosting, the Windows, Linux and Android apps, and text messages between contacts. What is still open is in docs/ROADMAP.md.
Package name / application ID: com.izhaanintellect.sotto on Android (publisher: Izhaan Intellect)
| Platform | Get it | Notes |
|---|---|---|
| Android | sotto-android.apk | Install the APK directly. Google Play and F-Droid: see docs/APP_STORES.md. |
| Windows | sotto-windows-x64-setup.exe, or the portable zip | Not code-signed yet, so SmartScreen may warn about an unknown publisher: choose More info, then Run anyway. |
| Linux | AppImage, .deb or tar.gz | The AppImage and .deb are built on Ubuntu 22.04, the oldest release supported; Ubuntu 22.04 or newer and Debian 12 or newer are expected to run them. The app needs a keyring (GNOME Keyring or KWallet) to keep its keys. |
| Browser | A guest link, or call.sottocall.com | Chrome, Edge, Firefox or Safari. Guests keep nothing after the tab closes. |
SHA256SUMS.txt, with each file's SHA-256 checksum, and the Android release notes give the signing certificate's fingerprint. See Building and publishing releases for the certificate check.Online: open call.sottocall.com, press Start, and enter a name. A browser session keeps nothing after the tab closes or reloads, unless you choose Remember me on this browser on your own computer. Share a guest link with a "client" on another device, or your contact link (Contacts → Share my contact) with a "colleague". Compare the safety numbers. ?selftest=1 runs the crypto self-test in the browser.
Locally: you need Node.js 20 or later and Flutter 3.47.6 (the version CI uses). On Linux, first install the build packages listed in the Linux job of .github/workflows/ci.yml. On Ubuntu 22.04, run sudo apt-get remove -y libunwind-14-dev first, as that job does.
# Relay on this computer, reachable from this computer only
cd server && npm ci && npm run build && SOTTO_DOMAIN=localhost:8080 HOST=127.0.0.1 npm start
# App (another terminal): desktop, or Chrome for the web version
cd app && flutter run -d linux --dart-define=SOTTO_RELAY_URL=ws://localhost:8080/relay
cd app && flutter run -d chrome --dart-define=SOTTO_RELAY_URL=ws://localhost:8080/relay
Two windows on this computer work with the commands above: the Linux app plus Chrome, or two Chrome windows. Do not start the Linux app twice: Sotto runs one desktop window per user, and a second start exits at once. Open the app in both, go through onboarding, then add each other: one person presses Contacts → Share my contact, and the other pastes that link under Contacts → Add contact. Compare the safety numbers, then press Video call. You can also paste a link under Home → Call a link.
For two computers on the same network, start the relay with SOTTO_DOMAIN=<relay-LAN-IP>:8080 npm start (it listens on all interfaces, port 8080; SOTTO_DOMAIN is the name the apps dial, and the relay requires it) and build each app with --dart-define=SOTTO_RELAY_URL=ws://<relay-LAN-IP>:8080/relay. Local calls connect directly. To test Hide my IP address locally, also run a TURN server on the relay's computer, as in step 0 of e2e/README.md, and start the relay with SOTTO_STUN_URLS, SOTTO_TURN_URLS and SOTTO_TURN_SECRET set to the values in .github/workflows/ci.yml (lines 131–133). Those values point at 127.0.0.1, so they work only on the relay's own computer. On Linux the app needs a Secret Service (GNOME Keyring or KWallet) to keep its keys; without one it offers a session that saves nothing.
Organisations can run their own Sotto server with one command:
git clone https://github.com/rbr48/sotto && cd sotto
sudo ./infra/install.sh
You need a Linux server with a public IP address and at least 2 GB of RAM (the installer adds a 2 GB swap file when memory plus swap is under about 2.5 GB, because building the web app needs that much), and a domain whose DNS A record points to it (with any Cloudflare proxy turned off). Open TCP 80, 443 and 3478, UDP 443, 3478 and 49152–65535, and TCP 5349 once the installer enables TURN over TLS, in any firewall your hosting provider runs. The full guide is docs/SELF_HOSTING.md.
What holds today:
What doesn't hold yet (details in docs/THREAT_MODEL.md):
| Folder | What it is |
|---|---|
app/ | Flutter app: Android, Windows, Linux and the browser (web) |
server/ | Relay server (Node.js + TypeScript). Keeps nothing on disk; holds undelivered messages in memory for up to 60 seconds |
infra/ | Docker Compose deployment (relay, web app behind Caddy, coturn). install.sh sets it up for self-hosting and for the test server |
e2e/ | End-to-end tests: real calls and messages between headless browsers, through the real relay and TURN server |
packaging/ | Installer and package builds: Windows (Inno Setup), Linux (.deb, AppImage) |
fastlane/ | Google Play and F-Droid store listing: text, images and change logs |
website/ | The public sottocall.com page (static HTML) |
tools/crypto-vectors/ | Independent implementation of the protocol that generates crypto test vectors |
tools/icons/, tools/sounds/ | Generators for the logo and every app icon, and for the bundled sounds |
.github/ | CI and release workflows |
docs/ | Strategy, roadmap, features and deployment guides |
cd server && npm ci && npm run lint && npm run format:check && npm run typecheck && npm test && npm run build
cd app && flutter pub get && dart format --output=none --set-exit-if-changed lib test && flutter analyze && flutter test
CI also runs the end-to-end browser tests, the crypto test-vector check, the installer tests and the dependency scans. The end-to-end test needs the relay, a TURN server and a web build with SOTTO_TEST_HOOKS=true running. See e2e/README.md and .github/workflows/ci.yml.
docs/FEATURES.md.Contacts for the hosted service at call.sottocall.com:
Sotto cannot call emergency services. In an emergency, use a phone to call your local emergency number.
This project is licensed under the GNU Affero General Public License, version 3 or later (AGPL-3.0-or-later).
Copyright (C) 2026 Izhaan Intellect.