Soty

Open source · Android and Linux · no sign-up

Conversations that stay yours

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.

Anna End-to-end encryption is on

Hi! I am ready to receive messages.

Great, our keys match. Delivered

Message

No account

No phone number, no email, no password. Your identity is a key pair generated on the device.

End-to-end encryption

A message is encrypted on the sender device and decrypted only on the recipient device.

Works without the internet

Offline, messages travel over BLE and Wi-Fi Direct, hopping through nearby devices.

Open source

The app and the relay host are built from open sources, and the builds live on GitHub.

Three ways to deliver a message

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.

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.

Directly over the network

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.

A relay for offline time

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.

What happens to a message

One envelope, one recipient. There is nothing extra inside: the ciphertext, the sender signature and a couple of header fields.

  1. 1

    Encrypted on the sender

    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.

  2. 2

    Signed with Ed25519

    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.

  3. 3

    Delivered

    The envelope goes wherever the recipient is: over the mesh, directly over libp2p or to a relay. None of these channels sees the plaintext.

  4. 4

    Verified and decrypted

    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.

What it already does

Not only encryption: conversations, contacts and looking after itself, all in one app.

One-to-one and group chats

Direct conversations and groups. Each member gets their own envelope, so the keys of the people in a chat stay invisible to each other.

Contacts by QR code

Your key is shown as a QR code, someone else is read with the camera. The exchange happens between the devices, with no middleman.

Statuses and read receipts

Sent, delivered, read. Receipts are signed envelopes too, so they cannot be forged — and the recipient can simply not send them.

Background delivery

While the app is closed a foreground service with a permanent notification receives messages. It can be switched off in the settings.

App lock

Unlock with a fingerprint or the system password: without it, the contents of your chats are not shown.

Your data stays with you

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.

More than one relay

You can keep several relays: the app connects to a live one and offers to replace an address that went quiet.

Theme and languages

Light, dark or system theme. The interface is translated into 10 languages, Russian and English among them.

Relays and federation

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.

  • Offline delivery

    An envelope for an absent recipient waits on a relay and is delivered as soon as the device comes online.

  • A tracker, not a directory

    A relay answers "who is online right now" and hands out addresses. Only discovery goes through it, never the conversation.

  • Federated hosts

    Hosts synchronise with each other: a live relay plus anti-entropy over what they hold. If one node goes offline, no envelope is lost.

  • Straight about metadata

    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.

Read more

Public nodes of the project

  • 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.

Download

Every build comes from the same source tree: the app for Android and Linux, and the relay host for operators.

Latest release v1.3.0+10 published 16 October 2026

Android

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

Download

Linux x64

The 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

Download

Relay host

An offline delivery and tracker node: one binary that only needs libsqlite3. For operators who run a relay themselves.

dtm_host.bin · 8 MB

Download
SHA-256 checksums are in the release notes and in the SHA256SUMS file. All releases on GitHub

Security

Briefly: what you can lean on, and what you have to accept as it is.

How it is built
  • A 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.

Common questions

The most frequent ones, briefly.

Do I need an account or a phone number?

No. On first launch the app generates a key pair, and that is all. No sign-up, no number, no email.

Can a relay read my messages?

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.

What happens if the recipient is offline?

A copy stays with you, and the envelope waits on a relay or with a neighbour in the mesh until the recipient comes online.

Can I lose my conversations?

Only together with the device. There is no server holding a copy, and the keys live on the device alone.

Which platforms does it run on?

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.

All questions

Try it without signing up

Download the APK, scan your contact QR code and start writing. No gateways, no settings, no SMS confirmation.