Privacy policy
The short version
Yapmesh has no server, no account, no phone number, no analytics, no crash reporting and no advertising. We collect nothing, because there is no "we" that your phone talks to. Everything Yapmesh knows lives on your phone and is yours to delete with the app.
Who is responsible
Yapmesh is an independent project made by one developer. Questions go to hello@yapmesh.com. Under data-protection laws such as the GDPR there is no processing of personal data by Yapmesh: the app is software you run, and it sends nothing to us.
What the app stores on your phone
- Your identity: an Ed25519 signing key and an X25519 encryption key, generated on the phone. Ratchet sessions with your contacts. Kept in Android's secure storage.
- Contacts: the signed contact codes you scanned, tapped or pasted, the names you gave them, presence grants you gave or received, and, if you typed them, a phone number for the SMS rung and an internet address for the internet rung.
- Messages, voice notes and files you sent and received, with their delivery ticks, and group keys, rosters and fence descriptions for your groups. A group with retention forgets messages after the hours you set, and can delete everything when you leave.
- Cargo for other people: sealed frames you are carrying for someone you have not met yet (up to 256 frames or 512 KB). You cannot read them. They are dropped when delivered or expired.
- Settings: theme, app-lock delay, media reveal choice. Nothing that identifies you.
What leaves your phone, and who can see it
- To the phones around you, in the clear: a hello beacon carrying a display name (empty while you hide), which rungs are up, the app version, the battery level, the names of your direct neighbours, and the highest presence tier you answer at. This is how the mesh forms. Hide, and your name is left out.
- Presence tokens: only if you granted presence to a contact: a 16-byte token that changes every 15 minutes and is meaningless without the secret you gave them.
- Direct messages, voice notes, private files and calls: sealed to one recipient; relays and carriers see a signed header (your key, the recipient's key, a hop count, a size) and ciphertext.
- Group messages and files: encrypted with the group's current key before they are sent or chunked; a private group is announced by its id only.
- Nearby room messages and drop-zone files: signed, not encrypted. Everyone in radio range is the audience, by design. Files you put in the drop zone spread to every phone in range automatically.
- SOS: signed, not encrypted, so every phone can show it; it carries your location only if you switch that on, and your battery level.
- By SMS or another app: when you hand-carry a message, your messaging app or the app you shared through sees that you sent a piece of text, and your carrier sees an SMS. The text is a sealed frame.
Nothing goes to Yapmesh, ever. There is no server to receive it.
Every Android permission and why
Yapmesh's onboarding lets you switch each radio permission off before it is asked for; the permission is then never requested, and you can change your mind later from the Mesh tab.
| Permission | What it is for | If you refuse |
|---|---|---|
| Bluetooth (connect, scan, advertise; Android 11 and older: Bluetooth and Bluetooth admin) | The Bluetooth rung: Bluetooth LE links and classic Bluetooth links through Android's Nearby Connections. Scanning is declared "never for location". | Refuse it and Yapmesh still runs over Wi-Fi, by hand-carry and by SMS. |
| Nearby Wi-Fi devices (Android 13 and newer) | The Wi-Fi Direct rung through Nearby Connections. Declared "never for location". | Refuse it and the Wi-Fi Direct rung stays off. |
| Location, coarse and fine | Android 12 and older require it before an app may scan for Bluetooth or Wi-Fi devices; Yapmesh asks for it there only for that reason. On Android 13 and newer it is asked only when you create or join a geo fence (to compare your position with the circle) or a Wi-Fi fence (Android hands out network identifiers only with this permission). Your position never leaves the phone: the fence produces a signed inside/outside record, nothing else. | Refuse it on Android 13+ and every rung still works; geo and Wi-Fi fences read "unknown", which counts as outside. |
| Camera | Scanning a contact's QR code, an invite, or the animated code of a hand-carried message. | Refuse it and you can still paste codes or receive them by tap or sound. |
| Microphone | Recording voice notes, listening for the sound rung, and the microphone of a call. | Refuse it and those three features are off. |
| Receive SMS | When a Yapmesh message arrives as a text (a sealed code split into pieces), Yapmesh reads that text so it lands in the chat instead of your inbox. Yapmesh does not have the Send SMS permission: sending opens your own messaging app and you press Send on each piece. | Refuse it and Yapmesh can still send by SMS; received pieces stay in your SMS app and can be pasted in. |
| Notifications | Messages, SOS alerts, and the permanent notification of the foreground service. | Refuse it and the mesh still runs while the app is open; you will not be told about new messages. |
| Foreground service (data sync) and wake lock | Keeps the radios and the mesh running while Yapmesh is open or in the background, under a visible notification. | Android grants these without a prompt. |
| Internet and Wi-Fi state | The internet rung to an address you typed, the router rung on your own network, the laptop gateway, and hosting a hotspot to hand the app over. There is no server: this permission never contacts one. | Android grants these without a prompt. |
| NFC | Exchanging contact codes by tapping phones; Yapmesh presents your signed contact code as a tag. | Only on phones with NFC. |
| Install packages | Installing a newer build that arrived over the mesh, after Yapmesh has checked it was signed by the same key. | You are asked at install time. |
| Biometric | The app lock: your phone's own fingerprint, face or screen lock in front of Yapmesh. Yapmesh stores no PIN. | Only if you switch the lock on. |
| Modify audio settings | Playing the sound rung's tones through the speaker at a set volume. | Android grants this without a prompt. |
The laptop browser client
The browser client is served by a phone on your own Wi-Fi or hotspot and runs entirely in the browser. It keeps its identity in the browser's storage and sends nothing anywhere except to that phone. It is not hosted on this website.
This website
yapmesh.com is static files. It sets no cookies, loads no third-party scripts or fonts, and has no analytics. The hosting provider keeps ordinary access logs (IP address, time, page) for its own operation, which we do not use. The site's service worker stores a copy of the pages in your browser so it opens offline; clear site data to remove it. A light/dark choice is kept in your browser's local storage only.
Children
Yapmesh is not directed at children under 13 and, having no account, cannot know a user's age. A classroom deployment is the school's responsibility under its own rules.
Your rights
There is nothing held by Yapmesh to access, correct or erase. To erase everything Yapmesh knows, uninstall the app, or use a group's "delete everything when I leave". A message already delivered to someone else's phone is theirs, as with any messenger.
Changes
This page is versioned in the public repository. A change is a new commit with a date; the effective date above moves with it.