Private messaging without an account.

Sotto is an end-to-end encrypted messenger for Android. No phone number, no email, no account, no ads. Your identity is generated on the device and never leaves it.

Download Android APK GitHub Releases · v1.0.0

Android 7.0+ (minSdk 24) arm64-v8a · 40.1 MB v1.0.0

Current release: Android only. iOS and desktop builds are not published. There is no public Google Play listing yet; an internal test track exists only for invited testers.

Verify the file before you install it

SHA-256 of app-arm64-v8a-release.apk:

A2B4A91AD14A7ED1F8460A29C2849BF17E05900138B7FE651510A204E8BBD965

Signing certificate:

SHA-256: DD:72:BC:31:36:83:62:86:04:DF:68:A9:68:6C:29:F1:9B:E7:E3:0C:F1:BC:49:60:5A:6E:22:47:7F:FC:70:8D Subject: CN=Sotto, OU=Sotto, O=Sotto, L=Shanghai, ST=Shanghai, C=CN

Every build we publish is signed with the same certificate, so this value does not change between versions. A repackaged APK cannot carry it.

Download and install

Three ways to get the app. They all end at the same signed package; they differ only in how much setup they ask of you. You only need one.

A. GitHub Releases no account needed

  1. Open the releases page on the phone. Tap the download button above, or type github.com/…/releases. Download app-arm64-v8a-release.apk (nearly every phone made since 2017). If the install fails with “not compatible”, your phone is 32-bit: use app-armeabi-v7a-release.apk instead. The x86_64 build is only for Android emulators.
  2. Allow this one app to install packages. Android blocks installs from browsers and file managers by default. Find the switch for the app you downloaded with:
    PhoneWhere the switch is
    Stock Android 12+
    Pixel, Motorola, Nokia
    Settings → Apps → Special app access → Install unknown apps → choose your browser or Files app → Allow from this source.
    Samsung
    One UI 6 / 7
    Settings → Security and privacy → turn Auto Blocker off. If the install is still blocked: Settings → Apps → Special access → Install unknown apps → your browser → allow.
    Xiaomi
    HyperOS / MIUI
    Settings → Privacy protection → Special permissions → Install unknown apps → your browser → allow. Also turn off Pure Mode (Settings → Privacy protection → Pure mode) and approve the installer’s own “risk scan” prompt if it appears.
    Huawei
    EMUI 12 / 13
    Settings → Security → More settings → Install apps from external sources → your browser → allow.
    Honor
    MagicOS
    Settings → Security → More security settings → Install unknown apps → your browser → allow.
    OPPO / realme
    ColorOS
    Settings → Apps → Special app access → Install unknown apps → your browser → allow. A separate “Security scan” prompt may appear at install time; it is the system scanner, not Sotto.
    OnePlus
    OxygenOS
    Settings → Apps → Special app access → Install unknown apps → your browser → allow.
    vivo / iQOO
    OriginOS / Funtouch
    Settings → More settings → Permission manager → Install unknown apps → your browser → allow.
    HarmonyOS NEXT
    (5.x and later)
    Not possible: HarmonyOS NEXT does not run Android APKs. Only the Android-based EMUI builds can install Sotto.

    Menu names move between ROM versions. If a path does not match, search Settings for “install unknown”. After installing, you can turn the switch back off; it is not needed for updates either, as long as you install the next APK from the same app.

  3. Tap the downloaded file, then Install → Open. If the phone warns that the file came from an unknown source, that is the switch you just enabled. If it warns about a “harmful app”, check the signature as described in path C before deciding.
  4. Create your identity on first launch. Write the 12-word recovery phrase on paper and keep it offline. There is no password reset and no account recovery; losing the phrase means losing access to that identity.

B. Google Play internal test invitation only

The Play listing is not public. This path only works if the maintainer has added your Google account to the test list. It is the simplest path for people who do not want to enable sideloading.

  1. Send the maintainer the Google account email you use on the phone. Not your recovery address — the exact account signed in to the Play Store app.
  2. Check that the phone is signed in to that account. Play Store → tap your profile picture → confirm the email. A different account is the single most common reason the test link says “app not available”.
  3. Open the opt-in link on the phone. It looks like play.google.com/apps/internaltest/…. Tap Become a tester, then Download it on Google Play.
  4. Install, then open the app from the Play Store or app drawer. Future updates arrive through Play like any other app while you stay on the test track.

Google limits an internal test track to a set number of testers, and the maintainer can remove you at any time. Being on the track means Google knows that this account installed Sotto; it does not give Sotto your identity, because the app still creates its keys on the device. The Play build and the APK are signed with the same certificate, so you can move between them without uninstalling.

C. Check the file after downloading any path

A published hash only helps if you compare it. Two independent things are worth checking: the file hash (this exact build) and the signing certificate (this publisher, across all builds).

On a computer, before copying the file to the phone

# macOS / Linux
shasum -a 256 app-arm64-v8a-release.apk

# Windows PowerShell
Get-FileHash .\app-arm64-v8a-release.apk -Algorithm SHA256

Compare the 64 characters with the hash printed at the top of this page. Case does not matter. One wrong character means the file is not the one we built: delete it and download again, preferably on a different network.

The signature, from a computer

# Android SDK build-tools (apksigner), any OS
apksigner verify --print-certs app-arm64-v8a-release.apk

# The line "Signer #1 certificate SHA-256 digest" must equal:
# DD:72:BC:31:36:83:62:86:04:DF:68:A9:68:6C:29:F1:9B:E7:E3:0C:F1:BC:49:60:5A:6E:22:47:7F:FC:70:8D

Without a computer

Install an APK inspector from the Play Store (any app that shows “APK signature” or “certificate fingerprint”), open the downloaded file with it, and compare the SHA-256 certificate digest with the value above. Names differ between apps; what matters is that the app shows a certificate digest beginning with DD:72:BC:31. Do not compare the APK’s own SHA-256 with the certificate digest — they are different values and will never match.

What this check cannot do: if someone replaced both this page and the file, the page’s own hash would match the replacement. The certificate fingerprint is the stronger value because it is also published in the repository’s README.md and in every release note; if two independent places disagree, stop and ask.

Updating later: install the new APK over the old one. You do not need to uninstall, and your local history stays. Uninstalling first deletes the encrypted database on the device.

What Sotto does not do

  • It is not audited. The protocol implementation is independent and has not had a third-party security audit. Tests passing is not an audit.
  • iOS and desktop are not released. There is no App Store build.
  • There is no push service. With the app killed, a notification can take up to about 15 minutes. Messages are not guaranteed to arrive.
  • Message history does not sync across devices. Restoring the same recovery phrase on a new device does not bring old messages with it.
  • The relay sees metadata: which account posted, when, and roughly how large the ciphertext is. It does not see message content, group names, or member lists.
  • This is not anonymity. It removes the phone number and the account, not network-level observation.
  • No post-quantum protection yet. PQXDH is not implemented.
  • Group trust is TOFU (trust on first use). A member’s keys are trusted the first time they are seen.
  • Large-group fan-out is model-tested, not load-tested. The 200,000-member figure comes from the fan-out model, not a live concurrency test.
  • Attachments are limited. Chunked file storage and self-sync slots have no automatic TTL on the relay side; the privacy policy states this plainly.

If any of the above is a blocker for your group, do not migrate yet. The install and migration guide says when not to switch.