MeshLine · offline mesh communication
MeshLine hops emergency messages directly between nearby phones over Bluetooth LE — no cell tower, no internet, no SIM, no server, no account. Every packet is signed before it is read. Every private word is end-to-end encrypted, including the ones your phone carries for a stranger.
The failure nobody plans for
A disaster does not only take the roads. It takes the towers. And the moment a tower is gone, a phone with a full battery and a clear line of sight to a hundred other phones becomes a torch. MeshLine gives those phones back to each other — directly, one to the next, until a message reaches somebody who can act on it.
How a message travels
Nothing is trusted on arrival. Each phone checks the sender's Ed25519 signature before anything else touches the packet, drops what it has already seen, decrements the hop count, and passes on what is left. A relay carries ciphertext it cannot read, and cannot alter a packet without invalidating it.
The app
Inside one packet
Ed25519 over the immutable header and payload. Packet::verify() runs before any other processing on receive — nothing unsigned reaches a parser.
sender_id must equal SHA-256(pubkey)[..16], so an attacker cannot attach their own key and claim to be somebody else.
TTL and flags are excluded from the signed bytes, because relays have to change them. Signatures therefore survive every hop untouched.
ChaCha20-Poly1305 under a Noise-XX session, or XChaCha20-Poly1305 under a group key. The relay carries it; the relay cannot read it.
The security model
Anyone in radio range can transmit anything. So MeshLine treats every arriving byte as an attack until it proves otherwise — and refuses to send at all rather than fall back to plaintext.
Signature, then freshness window, then proof-of-work, then rate limit — in that order, on every packet, before a single field is acted on.
Each side's Noise static key is signed by its mesh identity, so a session is bound to a known node rather than to whoever answered.
The group key travels inside an existing pairwise session. Removing a member rotates the key and bumps the epoch, so they can read nothing sent afterwards.
Per-message nonces with a sliding window, a duplicate cache, and a freshness bound — so a recorded packet cannot be played back into the crowd.
Identity, session keys, group keys, and history are sealed under Android Keystore keys and excluded from backup. Panic wipe removes all of it in one action.
Fragment reassembly happens before a signature can be checked, so it is capped by count, size, concurrency per peer and in total, and by a timeout. A noisy peer cannot evict a quiet one's part-built packet.
Being straight about this
A longer feature list would be easy to write. These are the things you would otherwise assume while standing in the middle of an emergency, so they are stated here, in the app, and in the store listing.
Bluetooth LE only in this release. Range is tens of metres, extended only by other phones running MeshLine. No LoRa, no Wi-Fi Direct.
Nothing guarantees an SOS reaches anyone. With no phone in range your message waits on your device and goes out the moment one appears.
Deliberately. That is exactly what lets a stranger in range act on it. Private chats and groups are encrypted; a distress broadcast is not.
An attacker present at the very first handshake is authenticated to both sides. Comparing safety numbers in person is the only thing that detects it, which is why the app keeps asking.
A group's messages carry a tag derived from its key. It is opaque and rotates on rekey, but within an epoch an observer with a radio can count a group's traffic.
Pins give distance and true bearing rather than a map. Shipping a fabricated basemap in a disaster app invites someone to navigate by it.
The measure of it
hops before a packet is dropped — roughly seven devices between you and the far end.
servers, accounts, trackers, or analytics. Nothing to breach, because nothing is collected.
digits in a safety number, compared in person, because that is what a radio cannot do for you.
most recent messages kept, encrypted under a hardware-backed key, and wipeable in one action.
Carry it before you need it
MeshLine is only as strong as the number of phones running it nearby. It costs nothing to carry and asks nothing of you until the day it matters — no account, no sign-in, no network. Android 8.0 and above.
Built in India by Prahari Labs