Offline mesh
No internet and no cell towers: messages travel over Bluetooth Low Energy and Wi-Fi Direct and hop through nearby devices until they reach the recipient.
Open source · Android and Linux · no sign-up
Soty encrypts every message on your device and hands it over directly: offline through BLE and Wi-Fi Direct, online over libp2p. There is no server that stores your messages.
Keys are generated on the device and never leave it.
Hi! I am ready to receive messages.
Great, our keys match. Delivered
No phone number, no email, no password. Your identity is a key pair generated on the device.
A message is encrypted on the sender device and decrypted only on the recipient device.
Offline, messages travel over BLE and Wi-Fi Direct, hopping through nearby devices.
The app and the relay host are built from open sources, and the builds live on GitHub.
Soty picks the right channel on its own: it tries to reach the other device directly first and only falls back to a relay when the two cannot see each other.
No internet and no cell towers: messages travel over Bluetooth Low Energy and Wi-Fi Direct and hop through nearby devices until they reach the recipient.
When both devices are online they connect to each other over libp2p: a tracker only points out addresses, the conversation itself stays between the devices.
When the recipient is away, the encrypted envelope waits on a relay and is delivered as soon as they come back online. Plaintext never goes there.
One envelope, one recipient. There is nothing extra inside: the ciphertext, the sender signature and a couple of header fields.
Every message gets a one-off X25519 key pair. An AES-256-GCM key is derived from the shared secret through HKDF, and the text is encrypted with it.
The finished envelope is signed with the sender long-term key, so the text, the recipient or the timestamp cannot be swapped on the way.
The envelope goes wherever the recipient is: over the mesh, directly over libp2p or to a relay. None of these channels sees the plaintext.
The receiving side always runs the same order: clock, Ed25519 signature, identifier, duplicates, decryption. Anything that fails is dropped silently.
One-off keys make ciphertexts look unrelated: two identical messages come out as two different byte strings. Only the device the envelope is addressed to can read it — a relay holds ciphertext that has nothing to compare against.
Not only encryption: conversations, contacts and looking after itself, all in one app.
Direct conversations and groups. Each member gets their own envelope, so the keys of the people in a chat stay invisible to each other.
Your key is shown as a QR code, someone else is read with the camera. The exchange happens between the devices, with no middleman.
Sent, delivered, read. Receipts are signed envelopes too, so they cannot be forged — and the recipient can simply not send them.
While the app is closed a foreground service with a permanent notification receives messages. It can be switched off in the settings.
Unlock with a fingerprint or the system password: without it, the contents of your chats are not shown.
The "Keep messages" setting decides whether your messages stay on the device. The rest is pruned automatically, and a relay has its own retention window.
You can keep several relays: the app connects to a live one and offers to replace an address that went quiet.
Light, dark or system theme. The interface is translated into 10 languages, Russian and English among them.
A relay is an ordinary program on someone else server. It does one thing: it holds encrypted envelopes for people who are offline. Hosts join a federation and share what they have accumulated.
An envelope for an absent recipient waits on a relay and is delivered as soon as the device comes online.
A relay answers "who is online right now" and hands out addresses. Only discovery goes through it, never the conversation.
Hosts synchronise with each other: a live relay plus anti-entropy over what they hold. If one node goes offline, no envelope is lost.
A relay sees that an envelope arrived, how large it is and who it is for. It does not see the text. If even that is too much, there is the mesh and direct connections.
Relay 1
ws://85.198.75.50:3100/ws
fad55cc762eda3f6cbc9c6522030ce8ec29e87143c9c78f452038d24143a4e82
Relay 2
wss://price.dcns.ru/soty-ws
dba88ecc7cd8053f76ddbe9c29d0bf63bb24e6234ebcaf9c074dcb0a1ce4b014
The addresses and key fingerprints ship with the build, and can be replaced with your own in the settings.
Every build comes from the same source tree: the app for Android and Linux, and the relay host for operators.
The messenger as a single APK: download it, allow installing from an unknown source and open the file. Android 8.0 or newer.
soty-release.apk · 86 MB
DownloadThe same messenger for the desktop. Unpack the archive and run the soty binary; it needs GTK 3 and libsqlite3.
soty-linux-x64.tar.gz · 20 MB
DownloadAn offline delivery and tracker node: one binary that only needs libsqlite3. For operators who run a relay themselves.
dtm_host.bin · 8 MB
DownloadA one-off X25519 exchange for every message: compromising one message does not drag the others along.
AES-256-GCM with a 12-byte nonce: tampering with an envelope is detected before decryption.
An Ed25519 signature and a fixed order of checks: clock, signature, identifier, duplicate, decryption.
An authentication failure is never retried or logged: an invalid envelope simply disappears.
The most frequent ones, briefly.
No. On first launch the app generates a key pair, and that is all. No sign-up, no number, no email.
No. A relay holds an encrypted envelope: without the recipient key it is just bytes. Metadata — the time and the recipient — is visible to it, though.
A copy stays with you, and the envelope waits on a relay or with a neighbour in the mesh until the recipient comes online.
Only together with the device. There is no server holding a copy, and the keys live on the device alone.
Android (APK) and Linux x64. There are no builds for iOS, macOS or Windows yet: the local database and the transports rule out the web.
Download the APK, scan your contact QR code and start writing. No gateways, no settings, no SMS confirmation.