Sotto:端對端加密的語音與視訊通話,供專業人士與其客戶使用。客戶透過瀏覽器連結加入。無需帳號、無電話號碼,伺服器上不儲存任何資料。
AI 翻譯
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.
社交Dart · JavaScriptGitHub @rbr48上線中營運者未確認
試用過了嗎? 點一下就好,不需要登入。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證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.
翻譯準備中
取自儲存庫 README
正在載入完整 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.檢視完整 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.