Help and how-to
How to read this manual
This is the complete manual for the Yapmesh app, version 1.1.1, as it stood on 11 September 2026. It walks through every screen in the order you meet them, names every switch and button by the exact words on the screen, and quotes every message the app can show you so that you can search this page for the sentence you are looking at. Words that appear on a screen are set like Join the mesh, and a path through the app like Menu → Safety → Blocked people.
The name. The app calls itself Yap on most of its screens and Yapmesh on its formal ones. They are one thing: Yap is the short name, Yapmesh the full one, and the website, the package and the legal pages use Yapmesh.
The pictures. Every picture is a real screen of the real app, nothing is drawn or mocked up. Most are from a Samsung Galaxy A07 running the 11 September 2026 build; screens that show only static settings, dialogs and empty states were taken from the same build's browser client (the copy of the app a phone serves to a laptop, see Using Yapmesh on a laptop), which is the same program drawn by a browser. The browser copy wears the app's own teal; on a phone with Android 12 or newer the colours follow your wallpaper, so your screens may be blue, green or amber instead. Names in the pictures (Amina, Bea, Zak, Ward 4) are test names on test phones.
Honesty labels. Where it matters, a feature carries one of three labels. Verified on phones means it has been exercised between real phones and logged. Partly verified means part of it has. Built, not yet on a phone means it passed the automated tests but has not yet run on a phone at all. The last section lists them together.
What Yapmesh is, in one page
Yapmesh is a messenger that runs from your phone to the phones around you. It needs no internet, no SIM card, no phone number, no account and no server. Phones find each other over Bluetooth, Wi-Fi Direct and any Wi-Fi network, pass sealed messages along from phone to phone, and carry them in their pockets until they meet the phone they are for. When there is internet it can use that too, without any server of ours.
- What it needs
- An Android phone on Android 8.1 or newer, including older 32-bit phones. About 55 MB of space. Bluetooth or Wi-Fi switched on to reach other phones.
- What it does not need
- Internet, a SIM, a phone number, an email address, a password, an account, a server, an app store.
- Your identity
- A key pair the phone makes on first run. Its public half is you: people add you by scanning it, everything private is sealed to it, and your avatar colour is derived from it so you look the same on every phone.
- What it costs
- Nothing. No adverts, no paid tier, no trial. The protocol is published.
- iPhone
- It runs: on 11 September 2026 a release build was installed on an iPhone 17 Pro Max and exchanged messages with two Android phones over the same Wi-Fi. Over Bluetooth an iPhone can reach only other iPhones (Apple's Multipeer, built but untested), never Android. There is no App Store or TestFlight build yet, so nothing to download.
- Two editions
- The copy from yapmesh.com can hand itself to another phone, install updates that arrive over the mesh, and receive SMS. The copy from Google Play cannot do those three things, because Play does not allow them; it shares a link instead.
Getting the app
Download it
The signed installer, its size, its SHA-256 and the signing-key fingerprint are on the download section of the technical page. Android will ask you to allow installs from your browser the first time; that is normal for an app that is not from the store. Samsung phones with Auto Blocker on refuse every install until it is switched off under Settings → Security and privacy → Auto Blocker.
Get it from a friend's phone

A phone that already has Yapmesh can install it on a phone that has nothing, with no internet at all. Verified on phones
- On the giving phone: Menu → Share the app, then under Give Yap to a phone that has nothing tap Start a hotspot for them. The screen shows two codes: 1. Scan to join … with the network name and password, and 2. Then scan this to open the download.
- On the receiving phone: open the camera and scan the first code to join the hotspot. The phone will say the network has no internet; that is expected. If it offers to keep using the network, accept, and switch mobile data off while you download.
- Scan the second code. A page opens on the giving phone's address; tap Download, allow the source when Android asks, open the file and tap Install.
- Check the Signer fingerprint line on the giving phone's screen against Menu → Share the app → ⓘ → About on the new phone. If the lines differ, it is not the same app.
- On the giving phone tap Stop the hotspot when done.
The giving phone shows an error if it cannot: “This build cannot host a hotspot.”, “Android needs the location or nearby-devices permission to start a hotspot.”, “The phone refused to start a hotspot (is Wi-Fi off, or another hotspot on?).”. The 8 September 2026 log records a fresh phone getting the 54.6 MB installer this way in about 45 seconds.
Use it in a laptop browser
Any browser on a phone's Wi-Fi or hotspot can open Yapmesh as a full node, with nothing installed on the laptop. See Using Yapmesh on a laptop.
First run


The first screen asks for one thing: a name. First name is fine, up to 64 characters. It is what other phones show next to your messages; it is not an account and nobody checks it. Under it the app tells you what happens next: “Next, Yap asks for Bluetooth and nearby-devices access: that is how phones find each other without Wi-Fi.”
Join the mesh makes your key pair and opens the app. An empty name is quietly refused.
Privacy preferences opens the permissions door before anything is asked for. “Yap only asks for what you leave on. Anything off is never requested; you can still allow it later from the Mesh tab. The app works without any of these over the same Wi-Fi, by hand-carry and by SMS.”
| Switch | What it grants | What off costs |
|---|---|---|
| Bluetooth | Bluetooth scan, advertise and connect (Android 12 and newer ask for these; older versions grant them at install). | “Reach phones with no Wi-Fi. Off: Bluetooth links stay idle.” |
| Nearby devices | Nearby Wi-Fi devices on Android 13 and newer; Location while in use on Android 12 and older, because those versions cannot scan for Wi-Fi Direct without it. | “Find phones for Wi-Fi Direct (Location on Android 12 and older). Off: only phones on the same Wi-Fi.” |
| Notifications | Posting notifications, including the one quiet notice that keeps the mesh running in the background. | “One quiet notice keeps the mesh alive in the background. Off: the mesh pauses when the app is hidden.” |
The button at the bottom reads Enter your name first while the name is empty, Join without any permission when every switch is off, and Join with these otherwise. A permission you refuse is never asked for again by the app; it shows as a grey chip on the Mesh tab (see idle rungs) that opens the phone's settings when tapped.
Camera, microphone and location are asked for only at the moment a feature needs them: scanning a code, recording a voice note, sharing a place. Each is explained where it appears in this manual.
The home screen


Home has four tabs along the bottom: Chats, Mesh, People and Files. The app bar shows the tab's title (Yap on the Chats tab) and under it a live line: “3 in mesh”, or “Hidden · 3 in mesh” while you are hidden. The small icon before it says whether any link is up.
The app bar buttons, left to right:
- Search (Chats tab only): replaces the title with Search chats. Matches names and previews. “No chats match “…”.” when nothing does.
- SOS (red): a tap only shows “Hold the SOS button to send an alert”. A long press opens the send sheet. See SOS.
- The eye: Hide me / Show me. One tap to vanish from nearby phones, one tap to come back. See Hiding.
- Menu (⋮), in order: New group, SOS alerts, Share the app, Photos & videos, Files & downloads, Chat settings, Battery & background, LoRa radio, Internet reach, Internet spools, Hidden chats, Safety, Help (this page), Screen lock, and Lock now once the lock is on. The three internet and radio items appear only in builds that carry those transports.
Lines that appear when they matter. A red strip under the app bar with a Retry button means the radios failed to start; the text is the error. A grey status pill on the Chats tab reads, for example, “Looking for nearby phones · 2 phones · Wi-Fi + Bluetooth” and expands to the ladder when tapped; it fades after six seconds. A one-line hint such as “Turn on Bluetooth to reach phones with no Wi-Fi” or “Allow nearby devices in Settings to reach phones with no Wi-Fi” appears when no link has come up for 30 seconds and a radio is idle, and goes the moment a link is up. A red SOS banner appears when someone nearby sent one.
Leaving. Pressing Back on a tab shows “Press back again to leave the mesh”; a second press within two seconds closes the app. While the app is open, or in the background under its “Yap is on the mesh” notification, your phone keeps relaying for others. Nothing runs once you close it.
The Chats tab


The list holds three kinds of row. Nearby is always first and pinned: the public room of everyone in radio range, with a badge “N in range” and the last line said. Group rows show the group's icon and name with “Open · anyone nearby can join”, “Private · invite code only”, “Fenced · …” or “You left …”. Contact rows show the person, a blue tick if you verified them in person, the small icon of the rung they were last reached by (its tooltip reads “Reached by Bluetooth” and so on), a bell-off icon if muted, a pin if pinned, and an unread count.
Previews say who spoke: “You: …” for your own, and the sender's name in rooms and groups. Attachments preview as “📷 Photo”, “🎥 Video”, “🎤 Voice note”, “📎 name”, “🎵 name”, “📍 Location”, “📍 Live place”, “👤 Contact”, “📊 question”, “Sticker”, “GIF” and “Message deleted”.
Pinned chats sort to the top. Archived chats collapse into one row, Archived, with a count. Hidden chats leave the list entirely and live under Menu → Hidden chats. Long-press any row for its actions sheet (see the person sheet and group actions).
Under the list, Groups nearby lists open groups other phones announced, each with Join.
New chat opens a sheet: New group (“Open to anyone nearby, or private by invite”), Join a group (“Groups announced nearby, a scanned or pasted invite”), Scan a QR code (“A contact, a group invite or a message code”), NFC tap, By sound, Paste a code (“A code that came by any app or SMS”), and then your contacts, each marked “Nearby now” or “Out of range · messages wait”.
Adding people and verifying them
The People tab


Your own card is first: your name, “No account · your key is you” (or “Hidden from nearby”), the first sixteen characters of your key, and My code.
Contacts — “Added by QR, NFC, sound or a pasted code. Messages to them are end-to-end encrypted.” Each row says “Nearby now” or “Not in range” and, if they let you sense them, the tier (“same room” and so on; otherwise “not around”). Tap to open the chat, hold for the person sheet.
Nearby now — “Phones linked to yours right now. Scan to make them contacts. Hold a name to block.” Each is “Verified contact” or “Not verified — nearby chat only”. A stranger here can only be reached in the public room until you exchange codes.
Blocked by the mesh appears only when the phones around you have voted someone out; see the mesh vote.
Add someone opens: Scan their QR code (“Line of sight: the surest way”), NFC tap, By sound, Paste a code, Scan any Yap code (“A group invite, a message code or an animated QR”) and Share the app for a phone that does not have it yet.
My code: the five ways to give your key



“Let someone scan this to add you as a verified contact. It carries your public keys only.” Under the QR:
- Copy code as text puts a “yap1:…” code on the clipboard: “Code copied. Send it any way you like; the other phone pastes it.”
- Share code hands the same text to any app through Android's share sheet.
- Share as link shares it as a “https://yapmesh.com/add#yap1:…” link, which opens straight into the app on a phone that has it.
- Beam (animated QR) shows the code as a changing sequence of QR frames (“frame 14”, “3 blocks · 441 characters”) for a camera that cannot read one dense code: “Point the other phone's Yap scanner at this. It keeps changing; the other phone stops on its own once it has enough.”
- Say it by sound plays it as chirps, if it fits: a full contact code does not (“This code is 325 bytes; sound carries 200 at most. Use Beam or Share instead.”), a short one does.
- NFC needs no button: “NFC: hold the phones back to back and the other phone reads this code from yours.”
The Reach me over the internet card at the bottom of My code belongs to the typed-address rung.
The ways in, one by one




| Way | How | What the app says |
|---|---|---|
| Scan their QR | Scan their QR code opens the camera with the hint “Point at the other phone's Yap code”. It reads still and animated codes; on an animated one it shows “Receiving 40%” and “Keep the camera on the moving code”. | “Added Amina as a verified contact”. If the camera is refused: “Camera permission is needed to scan a code”. |
| NFC tap | “Hold the phones back to back”. “Keep them together for a second. The other phone's Yap code is read straight from it: no camera, no typing. Both phones must have NFC on.” The screen waits with “Waiting for a tap…” and offers Try again. | “Added Amina as a verified contact — same table”; “Nothing read. Hold the phones still, back to back, and try again.”; or “NFC is not available on this phone (or is switched off). Use the QR code or “By sound” instead.” |
| By sound | Listen tab: “Hold this phone a hand from the other one and have it play its code. Whoever you hear is in the same room as you.” A level line reads “level 62% · SNR 14 dB · 1 heard”. Needs the microphone. | “Added Amina as a verified contact — same room”; “Microphone permission is needed to listen”; “Cannot listen on this device: …”. |
| Paste a code | A dialog with the hint “yap1:… or any Yap code” and Add. Takes a contact code, a group invite (“yapg1:…”) or a hand-carried message. | “Added …”, “Joined …”, “Message received”, “Not a Yap code”, “That code is damaged”, “Part of a longer code; send the rest”, “A Yap code this version does not know”. |
| A link | A “yapmesh.com/add#…” link someone sent by any app opens in Yapmesh directly. | The same messages as pasting. |
| A contact card in a chat | Someone sends My contact card or introduces a third person from the attach sheet. The bubble reads “Amina's contact card · Signed keys · adds a verified contact” or “Introduced by you · signed by Bilal”, with Add. | “Added Amina as a verified contact” or, for an introduction, “Added Chen, introduced by Bilal. Scan their code in person to verify”. |
Every code is signed. A forged or damaged one fails its signature and is dropped; the app never adds a key it cannot verify. QR, NFC and sound are proximity channels: the tier they prove (“same table”, “same room”) is remembered and used by presence.
Safety number
Every contact has a safety number, under their name → Safety number in the person sheet. The screen shows a QR and sixty digits in groups, and says “Verified on this phone” or “Not yet verified in person”. Scan their screen compares the two phones: “Matched. Amina is verified on this phone.” or “No match. One of you may be talking to a different key — compare the digits, and if they differ too, do not trust this chat.”
A contact added by scanning, tapping or sound in person is already verified. One added from a pasted code, a link or an introduction is not, until you compare numbers. Built, not yet on a phone
The Nearby room




Nearby is the one public place: “Public to everyone in range · relayed phone to phone”. Everything said here is signed with the sender's key but not encrypted, and every phone in radio range, contact or stranger, can read it and pass it on. The header counts “N phones in range · public”. Your own messages show “seen by N”: the number of phones that acknowledged them, including hidden ones.
The empty states are honest about why: “Waiting for nearby phones — Open Yap on another phone within range. No Wi-Fi, no internet, no account.” when no phone is linked, and “Nobody has said anything yet — Everyone within radio range reads this room. Say hello.” when phones are linked but quiet.
The menu offers Search, Media & files, Mute notifications…, Auto-delete…, Export chat…, Share a file with everyone and SOS alerts; each is explained under chat tools. Holding the Nearby row on the Chats tab offers Go quiet (“Vanish from nearby and hold its messages; your phone keeps relaying”) or Come back.
While hidden the room replaces its composer with “You are hidden. Nobody nearby can see you, and you cannot post. Your phone still relays for the mesh.” and a count of messages waiting; Show me brings you back. Trying to post while hidden says “Hidden nodes do not speak to nearby”.
The abuse filter (on by default, see Safety) refuses abusive text before it leaves the phone: “Yap will not send that: it reads as abuse. Say it another way.”
Private chats

A private chat opens from a contact's row in Chats, People or the New chat sheet. Everything in it is end-to-end encrypted: “Messages and files are end-to-end encrypted. Only the two of you can read them.” The empty state says the same with the mechanism: “Messages and files are sealed to their key on this phone. Relays carry ciphertext; nothing is stored anywhere else.”
The header shows the person, a tick if verified, and a live line: “Nearby now · Bluetooth” when linked, otherwise “Last heard 12 min ago · messages wait for a path” or “Not heard yet · messages wait for a path”. Two pills sit above the thread: End-to-end encrypted and the presence tier (“not sensed”, “reachable”, “same network”, “same area”, “same room”, “same table”). Tapping the header opens the person sheet.
The call buttons (Voice call, Video call) light up only when there is a Wi-Fi or internet path to that phone; otherwise their tooltip reads “Calls need a Wi-Fi or internet link to this person”. Calls are one hop: signalling rides the mesh, the media goes direct. Built, not yet on a phone
The five delivery states

| State | Tick | Meaning |
|---|---|---|
| “Queued” | one grey tick | In your outbox; no phone has it yet. It is offered to every phone that appears. |
| “Stuck” | one amber tick and a row of buttons | Every radio was tried for eight seconds and nothing came back. The bubble offers to hand it over by hand; see Hand-carrying. |
| “Riding” | one purple tick | Another phone took custody and is carrying it, sealed. The tooltip says “Riding with 2 phones”. Chen cannot read it. |
| “Delivered” | two ticks | Their phone has it. A receipt came back, itself sealed. |
| “Read” | two coloured ticks | They opened it. Off if they switched read receipts off in Chat settings; groups always send them. |
Tap any bubble for its details trailer: “direct” or “3 hops”, “via Bluetooth”, and “Sent 19:52:07” or “Received …” to the second.
Deliver when they are…
From the chat menu, Deliver when they are… holds a message until the other phone proves a closeness: now (“as soon as any path exists”), same network (“on the same Wi-Fi or hotspot”), same area (“in radio range”), same room (“after a sound handshake”), same table (“after an NFC tap or a scan”). A banner reads “Delivering when they are same room” with Send now; a held bubble reads “waiting until they are same room”. Built, not yet on a phone
Let them sense me

Presence is a grant you give per person, not a setting. Let them sense me… asks “Let Amina sense me when we are…”: same network, same area, same room, or same table. From then on that person's phone can tell when you are within that closeness and no closer; “Amina can now sense you at same room or closer”. Stop sharing presence withdraws it. Everyone else sees only a token that changes every fifteen minutes and means nothing without the secret you gave. Verified on phones
The person sheet shows both directions: “They sense you: same room” or “They cannot sense you”, and “You sense them: …” or “You cannot sense them”.
Writing messages
The composer


The bar at the bottom has the text field (up to 4,000 characters, five lines before it scrolls), the @ button (“Mention someone”), the paperclip (“Send a file”) and the round button. The round button is a microphone while the field is empty: “Hold to record a voice note”, then “Recording… release to send”. It becomes Send once you type. A reply strip above the field shows who you are answering, with Cancel reply.
The paperclip opens six choices: Document, Photo or video, Location, Contact, Poll, Live place, and the reminder “Hold the microphone for a voice note”. Voice notes need the microphone (“Microphone permission is needed for voice notes”); a four-second note is about 20 KB. Location asks for the location permission at that moment and says “Location is off or was refused; nothing sent” if it cannot.
In a group, @ lists the members; a mention is bold in the bubble and the mentioned person gets a notification on its own channel. Typing sends a hint to the other phone every three seconds while it is within one radio hop, never further; the other phone's header shows it. Switch it off in Chat settings.
Polls


Poll asks for a Question (200 characters), two to twelve options (Add option), and Allow several answers. Send poll refuses an empty question (“Type the question first”) or a single option (“Pick one option”). The bubble reads “Choose one” or “Choose one or more”, shows a bar and count per option and “N votes”. Tap an option to vote; tap again to withdraw; in a single-choice poll a new vote replaces the old. Each phone counts the signed votes itself; there is no tally server. Partly verified
Location and live place

Location sends where you are once, as a pin: “lat, lon · tap to open in maps”. Live place keeps it updating: “A place now, then an update every 30 s over the mesh while the app is open. Stop any time.” for 15 minutes, 1 hour or 8 hours. A bar above the composer reads “Sharing your live place · 42 min left” with Stop; the bubble on the other side reads “Live place” and later “Live place · ended”. Built, not yet on a phone
Sending a contact

Contact opens Send a contact. My contact card — “Signed keys · they can add you” — is the same code as My code. Below it, each of your contacts can be introduced: “Introduce · signed by Amina” if you verified them, “Introduce · unverified, signed by Amina” if not, or “No card kept · ask them to share their code again”. The recipient sees a card with Add.
What you can do with a message




Hold any bubble. The sheet starts with six quick reactions: 👍 ❤️ 😂 😮 😢 🙏. Tap one to react; tap your own reaction again to withdraw it. Reactions pile up under the bubble; tapping the pile lists who reacted (“Nobody yet” when empty). Then:
| Action | What it does | Notes |
|---|---|---|
| Reply | Quotes the message above yours. The quote shows the author (or “You”), the text, or “Message” for media, or “Not on this phone” if the original never arrived here. | Verified on phones |
| Forward | Opens Forward to: the Nearby room, groups you can post in, and contacts; Send (2). The copy is marked “Forwarded”. “Forwarded to 2 chats”. | A file must be downloaded first: “Download the file first, then forward it”. Built, not yet on a phone |
| Copy text | “Copied” | |
| Edit | Your own text only. Edit message with the hint New text, then Save: “Edited. Every phone that has it shows the new text.” The bubble is marked “edited”. | “Only your own messages can be edited”, “Only text can be edited”, “Type the new text first”. Partly verified |
| Star / Unstar | “Kept under Menu → Chat settings → Starred, on this phone” | Local only; nothing is sent. |
| Pin in this chat / Unpin | A bar at the top of the chat: “Pinned · Amina — Generator fuel arrives at 5…”, with an unpin cross. | Partly verified |
| Delete for everyone | “Every phone that has it replaces it with “deleted”; one that never got it never will.” | Shows as “You deleted this message” / “This message was deleted”. Built, not yet on a phone |
| Add contact | On a contact card. | |
| Details / Hide details | “Hops, rung, exact time” | |
| Report this message | On others' messages: “Saved on this phone, and blocks Amina here”. Opens the report screen. | |
| Block Amina | “At once, on this phone. They are not told.” → “Amina is blocked on this phone. Undo it under Menu → Safety.” |
Other things a bubble can show: “Forwarded” above a forwarded message; “Hidden by your abuse filter · tap to show” when the filter folded it; a date chip (“Today”, “Yesterday”, a weekday, “12 March”); and for group messages you sent, the per-member summary described under group chats.
Files, photos, video and voice in a chat


A file bubble tells you exactly where the file is: “sending…”, “receiving…”, “downloading… 44%”, “Waiting for the file”, “2.1 MB · tap to open”, “1.3 MB · tap to play”, or a hold line such as “Tap to download”, “From someone not in your contacts · tap to download”, “Too large to download automatically”. A half-arrived photo or video never opens: the bubble waits for the last chunk before it draws anything. Open with another app hands a file to the phone.
Voice notes and any audio file play in the bubble: a waveform that fills as it plays, a clock, pause and resume, and tap-to-seek on the waveform. Photos open in the viewer with pinch-zoom up to 6×; videos play with scrub and replay, and a video the phone cannot decode says “This build cannot show the file itself.” with Open with another app.
Menu → Photos & videos decides showing, not fetching: Open when downloaded (“A photo or video shows itself as soon as the whole file is here.”) or Wait for a tap (“Bubbles stay covered. Tap one to open the photo or video.”) for when someone is looking over your shoulder. The same screen has Match my wallpaper (Android 12 and newer take the colours the phone picked from your wallpaper; off keeps Yap teal) and Link previews, off by default because fetching a preview tells that website your phone looked.
Chat tools: search, media, mute, auto-delete, pin, export





Every chat's ⋮ menu has the same first block.
| Item | What it does |
|---|---|
| Search | The title becomes a field, “Search this chat”, with a match count. “Nothing matches — Try another word.” |
| Media & files | A list titled “Media · Nearby”: every photo, file and voice note of that chat with who sent it, when, its size and “not on this phone” if it was never fetched. “No photos, files or voice notes here yet.” |
| Mute notifications… | 8 hours, 1 week or Always: “Muted for 8 hours. The badge still counts.” The row shows a bell-off icon; Unmute notifications says “Notifications are back on”. |
| Auto-delete… | Keep messages, 24 hours, 7 days, 90 days. “Applies to messages sent from now on, on both phones. A phone that already holds a message honours the timer; the mesh cannot force it.” |
| Pin chat / Unpin chat | Keeps the chat at the top of the Chats tab. |
| Export chat… | “A plain-text file of this chat, unencrypted, for you to keep or send on. Files are listed by name, not included.” Then Android's share sheet. “Could not export: …” on failure. |
Mute, auto-delete, typing hints, read-receipt switches, star, pin, forward, search, media lists, export and send-to-many are Built, not yet on a phone as of 11 September 2026; edit, pin, reply, react and polls were exercised between a phone and a browser node on that day.
Groups
Making a group



Menu → New group or New chat → New group. Give it a Group name (“Chess club, Year 10 physics, Ward 4…”, up to 64 characters). Then:
- Open (default on): “Announced on the mesh; anyone nearby can find and join it.” Off makes it Private: “Not announced; people join by scanning or pasting your invite code.” A fenced group is always Private (fenced): “A fenced group is never announced; people join by invite and keep the key only inside.”
- Fence: “None: members keep the group wherever they go” until you choose one; see Fences.
- Retention — Messages disappear after Never, 24 hours, 7 days or 30 days, enforced on every member's phone; and Delete everything when I leave: “The thread and the group's files go from this phone on leaving”.
Create says “Created Ward 4. Phones nearby can now find it.”, “Created Ward 4. Share its invite code to let people in.” or, fenced, “Created Ward 4, fenced to …. Share its invite code to let people in.”. An empty name: “Give the group a name”.
Who is in a group is a signed record on every member's phone, not a server's opinion. Keys rotate when someone leaves or is removed; every sender has its own key chain per epoch, so a message read later never unlocks the ones before it. Verified on phones for open and private groups on three phones; fences Built, not yet on a phone.
Joining, inviting, members




Join a group offers Scan invite (“Point at the group's invite code”), Paste a code (“yapg1:…”) and Groups nearby: “Open groups other phones announced. Join to get the key.” Success is “Joined Ward 4”.
Invite someone (chat menu or group actions) shows the invite as a QR with Copy code as text. An open group's code “Anyone nearby can also find this group without a code. Scanning it just saves them the search.”; a private group's code “is the only way in. It carries the group key: anyone who has it can read the group.”
Members (the people icon in the chat) lists everyone with tags “admin”, “anchor”, “you” and “Where your last message stands with each of them”: “linked now”, “last message: read”, “Left”. In a fenced group a newcomer waits “At the door: tap their phone, chirp, or scan their code to let them in” until a member taps Admit: “Let Bilal in? Only after you tapped phones (NFC), chirped, or scanned their code in person. That is the proof they are inside.” → “Bilal is in; the key is on its way”. The admin can Remove from group: “The key rotates; they cannot read what is said from now on, and cannot re-join with the old invite.” → “Bilal removed; key rotated”.
Group info: icon, description, notices only

Tap the group's title, or Group info · edit. The admin can set an Icon (“An emoji, like 🎻”), a Description (“What this group is for”, 300 characters) and Only I can post — “Members read; nothing they send is shown. Good for notices.” Save says “Saved and sent to every member”. “Signed with your key and sealed to the group: every member sees it, no member can change it, and phones outside the group relay it unread.” Members see “Only the admin posts here. You can read.” or “Every member can post.”, and “Only the admin can change this.”. In a notices-only group a member's phone refuses to send and every holder drops a non-admin message. Built, not yet on a phone
Inside a group chat



The header shows the icon, name and “Open · anyone nearby can join · 3 members” or “Private · invite only · …”, the description if one is set, or the fence label, and a fence chip. The menu adds Group info, Invite someone, Members, Fence (fenced only), Share a file and Leave group to the usual chat tools.
Your own messages carry a per-member summary: “delivered to 3 of 5 · read by 2 · riding for 1”, settling to “delivered to all” and “read by all”; “nobody else in the group yet” while you are alone. A phone that hides receives but does not count. Verified on phones
Bars that can appear above the thread: “Amina at the door: tap phones, chirp or scan to let them in”; the pinned message; “No key yet. A member sends it after your join.” (the thread reads “Waiting for the key — A member will send this phone the key once your join reaches them. Until then nothing here can be read.”); “Only the admin posts here. You can read.”; “You are hidden. Show yourself to post.” with Show me; and the fence re-entry bar described below.
Leave group asks “Leave Ward 4? Its messages will be deleted from this phone. You can rejoin with an invite code.” — Stay / Leave. The row then reads “You left this group”.
The group actions sheet

Hold a group in Chats: Unread/Read, Archive/Unarchive, Hide/Unhide, Pin/Unpin, Mute/Unmute, Info, then Invite someone (“Show the invite code as a QR or copy it as text”) and Leave group (“Its messages are deleted from this phone”). Unread, archive and hide are local marks; nothing is sent.
Fences: groups that exist only in a place



A fence ties a group to a place. A member's phone that leaves the place loses the key; the rest of the group rotates it, so what is said afterwards stays unreadable on the phone that left. Built, not yet on a phone: fences pass every automated test and have not yet been tried on a phone.
| Kind | The app's own description | Setting it up |
|---|---|---|
| No fence | “Members keep the group wherever they go.” | |
| Circle on a map | “A circle around where you stand. GPS only; a mock-location app counts as outside.” | “There is no map in this build. The circle is centred on where this phone is right now; pick how wide it is.” A grid with your dot, Radius: 250 m from 25 to 2,000 m, Read position again, Use this circle. “A phone counts as inside when its fix is within this radius; clearly beyond it is outside; a fix too fuzzy to tell is unknown, and unknown for longer than the grace period counts as outside.” |
| Area on a map | “Walk the corners of an area. GPS only; a zip code is just a label on it.” | Add a corner here at each corner, or tap the grid (“100 m per square, north up”); three or more corners make the shape. “Corner 3 added (±12 m)”; “That is a mock location; not added.”; Use this area. |
| Wi-Fi in the building | “The Wi-Fi access points of a building, captured on a walk. “Inside” means one is visible.” | Scan here in each part of the building: “4 new access points (6 in view)”. “No scan: Wi-Fi is off, or the location permission (which Android needs for a Wi-Fi scan) is missing.” Use these access points. |
| Near an anchor phone | “A direct radio link to a member phone you name, optionally plus a chirp or NFC tap. Hardest to fake: recommended for a hospital, school, office.” | Pick the phones that stay put (“the ward desk, the staff room”); anchors must be members. Inside means: A radio link to an anchor (“Radio range: the area, not the walls”), A link plus a chirp or NFC tap (“The same room: sound does not cross walls”), or An NFC tap with an anchor (“The same table, renewed every 5 minutes”). |
| Combined | “Any of, or all of, several fences.” | Inside any of them / Inside all of them, Add a fence. |
The Label (“Zip 75001, Ward 4, Lincoln High”) is “A name for people. Never a boundary: the phone has no postal maps.”
Rules set with the fence on the New group screen: When a phone leaves the fence — Lock (“Drop the keys, keep the sealed messages, show “you left””) or Wipe (“Also delete the thread and the group's files from that phone”); Coming back in — Automatic (“The phone re-joins by itself when it is inside again”) or Needs a proof (“An NFC tap, a chirp or a QR scan with a member who is inside”); Grace period of 2, 5 or 15 minutes or 1 hour; Replay on re-entry of Nothing, Last 6 hours, Last 24 hours or Last 3 days.
Living inside one. The chat header carries a chip: “Inside”, “Outside 04:31” (the grace period counting down), “Unknown”, “Checking”, “Locked out”. The phone sends a liveness beacon every half grace period. When the grace runs out outside, a tombstone appears: “You left Ward 4 — This phone was outside for more than 5 minutes. Its keys were dropped and the rest of the group rotated theirs; the sealed messages stay here, unreadable.” (or, with wipe, “Its keys, thread and files were deleted”). Back inside, either “Back inside? The phone re-joins by itself.” with Re-enter, or “To re-enter: tap a member's phone, chirp, or scan their code.” The Fence page in the chat menu shows all of this plus Try to re-enter now.
Files
The Files tab: the drop zone


“Whatever is shared here reaches every phone in range and spreads phone to phone. No Wi-Fi, no internet, no account. Drop a file to start.” Share a file picks any file; “Dropped notes.pdf: every phone in range gets it”. A file is cut into 16 KiB chunks under a Merkle root that is its name; every phone that holds a piece serves it, rarest piece first, and each chunk is proven against the root before it is kept, so a bad chunk is dropped before it is stored. Verified on phones: 5 MB in 320 chunks, 0 rejected, over Bluetooth alone in 2 min 53 s.
The Swarm panel shows “↓ 399.5 KB/s · ↑ 0 B/s” and “1 downloading · 1 phone sending to you” or “Nothing downloading”. Each file row shows its size and state (“Downloading 44% · about 5 s left”, “On this phone”, “Tap to download”), “Offered by …”, and “2 of 3 phones have it”. Holding a file offers Open and Share the file another way (“Quick Share, Bluetooth, email, any app — for a phone that is not on the mesh”). Tapping a waiting file when nobody has it says “Nobody in reach has this file right now”. While hidden: “You are hidden. Tap Show me to share files.”
Files in a group are encrypted with the group's key before they are chunked, so a phone that relays every chunk holds a box it has no key for. Files in a private chat are sealed to the one recipient.
Files & downloads: what arrives by itself


Menu → Files & downloads. “A file offered by someone not in your contacts can wait for your tap. A file that waits is not on this phone until you ask for it.” Built, not yet on a phone
| Kind | Default | Choices |
|---|---|---|
| Photos | Everyone | Everyone — “Downloads as soon as it is offered, whoever sent it.”; Contacts only — “Downloads from people in your contacts and your groups. Anyone else: tap to download.”; Never — “Always waits for a tap.” |
| Audio and voice notes | Everyone | the same three |
| Videos | Contacts only | the same three |
| Documents and other files | Contacts only | the same three |
| From people not in your contacts (largest file) | 25 MB | “Bigger files are refused before they download, so a stranger cannot fill this phone.” 5, 25, 100, 500 MB or No limit |
| From your contacts and groups (largest file) | No limit | “Bigger files wait for a tap instead of downloading by themselves.” |
What opens, and what is caught. “Yap cannot scan files for viruses: messages are sealed end to end, so nothing between two phones can look inside, and there is no virus checker on the mesh.” Instead a received file is stored under its fingerprint, without a name the phone would act on, and when you open one the app reads its first bytes. An app installer, a program, a script or an archive is shown in red and needs a second confirmation whatever its name says:
- “This file installs an app on your phone. An app can read your messages, your photos and your contacts.”
- “This file is a program. Opening it runs code on the device that opens it.”
- “This file is a script: a list of commands for the device to run.”
- “This is an archive. What is inside cannot be seen until it is opened, and it may hold a program.”
- “This file may not be what it says it is.”
- and, when the name lies: “It was sent with a name that says otherwise: “holiday.jpg” looks like a photo, but the bytes are an archive”; the bubble carries a red “Sent as photo, really archive”.
The dialog offers Delete file, Cancel, Open anyway: “Deleted setup.apk. It will not be downloaded again.” Blocking someone deletes every file they sent and makes sure the same file never comes back from anyone else.
SOS



Long-press the red SOS in the app bar, or Menu → SOS alerts → Send SOS. “Every phone in reach is alerted, relays carry it 16 hops, and phones that meet later pass it on for a day. Signed with your name.” Add a line (“What is wrong and where you are (optional)”), keep or clear Include my position (on by default; it also sends your battery level), and tap Send SOS to every phone in reach. If location is refused: “SOS sent without a position: location is off or was refused”. Verified on phones on two phones on 7 September 2026.
Every phone that receives one shows a red banner at once, before it even reads it: “SOS from Amina, next to you, Ward 4 is flooding, tap for details” or “… 3 hops away …”. Hidden phones alert too, and acknowledge, so the sender's count is honest. SOS alerts lists every SOS heard with its sender, time, “mine” for your own, “next to you” or “2 hops away”, “battery 62%” and the position. “No SOS heard yet.” otherwise.
The Mesh tab



The map draws you in the centre, your direct neighbours on the first ring and their neighbours on the second: “Live · two hops deep” and “3 phones”, or “Alone · waiting for a link”. Hidden phones are drawn as “hidden”.
Ladder shows one chip per rung, lit when a link of that kind is up: Internet, Wi-Fi, Wi-Fi Direct, Bluetooth, SMS, Screen, Sound, Shared, LoRa. “Every link is ranked by rung; a message takes the best one and drops a rung when nothing comes back. When every radio fails the message is stuck and its bubble offers SMS, Share, Beam and Chirp; those rungs light up when used.”
Idle rungs. A grey chip such as “Bluetooth · Bluetooth off”, “Bluetooth · Bluetooth permission refused”, “Wi-Fi Direct · Nearby Wi-Fi permission refused” or “Wi-Fi Direct · No Wi-Fi Aware on this phone” explains why a rung is not running; tapping it opens the phone's Bluetooth or app settings. This is where a permission refused at first run can be granted later.
Counters. Mesh: Mesh size, Links, Neighbours, Speed. Carrying and relaying: Carrying for others (sealed messages this phone holds for people it may meet), Muled (delivered that way), Handed over, Ladder falls, Stuck, Hand-carried in, Relayed, Relayed for other groups, Received, Chunks in/out. Dropped: Duplicates dropped, Expired dropped, Bad signatures, Malformed, Oversize dropped, Blocked by mesh, Blocked dropped.
Radio is the transports' own words: “Looking for nearby phones · Looking over Bluetooth LE · Looking on Wi-Fi · Internet: no peers remembered · SMS: no numbers yet · LoRa: no board paired”, with “No link up yet” or “Up: Wi-Fi + Bluetooth”. Then the laptop switch (below), Neighbours (each with its transport, protocol version, “via relay” or “direct, punched”, and a tick if verified), Recent errors and the footer “Me: Zak · 770cf596f56fa1cd…”.
The ladder: nine ways a message can travel
You never choose a rung. Every link is ranked; a message takes the best one it has, waits eight seconds for a reply, drops to the next, and floods last. The technical page has the exact frame limits and test log for each; this table is the user's view.
| Rung | When it is used | What you do |
|---|---|---|
| Internet | The other phone's address is known, or Internet reach is on and you both have internet. | Nothing, once set up. See Over the internet. |
| Wi-Fi | Both phones on one Wi-Fi network, or one phone's hotspot. | Join the same network. |
| Wi-Fi Direct | Two phones with Wi-Fi on, no router. | Leave Wi-Fi on and allow Nearby devices. |
| Bluetooth | The everyday link: a room, sometimes a building. | Leave Bluetooth on and allow it. |
| SMS | A stuck message, when the other person's number is known. | Tap SMS on the stuck bubble; press Send in your messaging app. |
| Screen | A stuck message, arm's length, line of sight. | Tap Beam; the other phone scans. |
| Sound | A short code or receipt, same room. | Tap Chirp; the other phone listens. |
| Shared | A stuck message through any app: WhatsApp, e-mail, a USB stick, paper. | Tap Share; the other phone pastes or opens the link. |
| LoRa | Short messages for kilometres through a paired Meshtastic board. | Pair a board under Menu → LoRa radio. |
Pocket-riding: when nobody is nearby
A message you cannot deliver waits in your outbox and is offered to every phone that appears. A phone that accepts it carries it, sealed, until it meets the phone it is for, then hands it over and sends the receipt back the same way. Your tick reads “Riding”. The phone in the middle cannot read it, and its Mesh tab counts it under Carrying for others. Verified on phones: on 8 September 2026 a message crossed between two phones that never met, in 108 seconds, through a third.
Hand-carrying a stuck message

After eight seconds with no way through, a message is marked stuck and its bubble reads “Stuck: no radio could deliver this. Hand it over:” with four buttons. Nothing is sent without your tap. Verified on phones for SMS, Share and Beam; Chirp Built, not yet on a phone.
| Button | What happens |
|---|---|
| SMS | The first time it asks “Phone number for Amina” (“+44 7700 900123”; “That is not a phone number” if it is not). Then it opens your own messaging app with the sealed code as the text: “This message needs 3 texts. Send this one, then tap SMS again for the next.”, “Send this one; 1 more to go — tap SMS again.”, “Last piece. Send it and the message is on its way.” You press Send each time. The receiving phone, if it allowed SMS, puts the pieces back together and shows the message in the chat. |
| Share | “Hand the code to any app”: the sealed message as text or a link through Android's share sheet. The other person pastes it (New chat → Paste a code) or opens the link. |
| Beam | “Show it as an animated QR for their camera”: the Beam this message screen. The other phone uses Scan any Yap code. |
| Chirp | “Play it as sound (small frames only)”: opens By sound with the message; a message that does not fit says “This message is 812 bytes; sound carries 200 at most. Use Beam or Share instead.” |
With several stuck messages for one person, the chat menu offers Hand-carry all queued (N)…: “One code holds them all, still sealed to their recipients.” with Share as one code or Beam as one animated QR. Whatever the road, the code is the same sealed frame: an SMS gateway, a WhatsApp server or a poster on a wall carries a box it cannot open, and the receipt comes back over the radio later.
Over the internet, without a server
A typed address

The plainest way. The Reach me over the internet card on My code reads “Listening on port 7734. Works only where this phone can be reached: the same network, a VPN such as Tailscale, or a router that forwards the port. No server, no DHT.” and shows “My address” and “On this network” with copy buttons. Give that host:port to a contact; they enter it under their name → Reach over the internet in the person sheet: “Reach Amina over the internet — host:port (from their My code screen)”. “Their phone must be reachable: the same network, a VPN such as Tailscale, or a router that forwards the port. No server and no DHT: two phones both behind NAT cannot find each other this way.” Verified on phones on 8 September 2026 over a tunnelled path.
Internet reach: meeting through public relays

Menu → Internet reach. Off by default. “With this on, Yap keeps one connection open to public relays that Yapmesh does not run, so contacts can find this phone over the internet with no server of ours. A relay sees this phone's IP address, a random tag that changes every hour, and sealed bytes. It never sees who you are, who you talk to, or what you say. It costs some battery; on a low battery Yap pauses it by itself.”
- Reach contacts over the internet: the master switch.
- Nostr relays: “Free public relays anyone may run; notes are never stored, only passed on. Replace any of them.” Three are listed by default; Add a relay takes “wss://relay.example”.
- MQTT brokers: “Off. A second meeting place on public test brokers; on only if the relays let you down.”
- Direct connections: “Public STUN servers help two phones behind mobile networks connect directly; when that fails, messages ride the relay.” Add a STUN server takes “stun:host:port”.
- Let contacts wake this phone: “Off: this phone is reachable only while Yap is running.” On, “Contacts with a message for you can wake Yap; the push server sees only a random topic.” With the ntfy app installed, Google's push wakes Yap for free, like WhatsApp; without it, Yap must stay running.
- Right now: “Nobody: internet reach is off”, “No contact heard yet” or “Heard lately: Amina”, and “12 beacons sent · 3 received · 2 notes posted · 1 opened”.
“Per contact: open a person from Chats and turn “Reach over the internet” off to keep them to radios and hand-carry only. Two people who have never exchanged codes cannot meet here: the tag comes from keys both already hold.” The switch in the person sheet is Find them over the internet: “Off for Amina: radios and hand-carry only.” / “On: you meet on public relays under a tag only you two can derive.”
Built, not yet on a phone — proven from a laptop against real public relays on 11 September 2026 (met in 1.3 s, delivered and acknowledged in 2.7 s); the phone edges have not yet run on hardware. Battery & background (below) matters here: without the Doze exemption Android closes the relay connection minutes after the screen goes off.
Internet spools: a mailbox you can host

Menu → Internet spools. “A spool holds sealed envelopes for you until your phone collects them. It learns the size and the time of each envelope and a hash of your id — never who wrote it, what it says, or whom it is for. Yap parks a message there only when every radio has been tried and the person is one of your contacts. Run your own with one command (packages/yapmesh_relay) or use one a friend runs.” Add a spool takes “https://spool.example.org/”; “That is not an http(s) address” otherwise. Envelopes expire after seven days. Built, not yet on a phone
LoRa radio

Menu → LoRa radio. “A Meshtastic board carries messages for kilometres, with no phone signal and no internet. In return each message is about 200 bytes on the air, a whole frame is 756 bytes at most, and files never ride.” Switch the board on, tap Scan (“Its Bluetooth name starts with “Meshtastic”.”), tap Pair. Private messages over LoRa is off by default: “Direct and group messages are sealed end to end, but over LoRa the frame header (who to whom) is visible to every board on the channel, and the message is stored and forwarded by boards you do not own. Off means only Nearby messages, receipts and SOS ride LoRa.” “Nearby messages are signed but not encrypted, so on the default Meshtastic channel — whose key everyone has — any board within range, owned by anyone, can read them. Only a channel with its own key kept to your group makes them private on the air.” Built, not yet on a phone; no board has been paired on a real phone.
Using Yapmesh on a laptop


On the Mesh tab, Use Yap on a laptop: “Serves the app to any browser on your Wi-Fi or hotspot. No install.” Switch it on and the card shows “Open this on the laptop”, an address such as “http://172.168.0.111:7733” with a copy button (“Address copied”), and a QR. Join the phone's Wi-Fi or hotspot from the laptop, open the address, and the browser becomes its own node: it makes its own keys, has its own name, chats, files and map, and this phone relays for it. “The laptop becomes its own node with its own keys; this phone only relays for it. No Wi-Fi in the room? Turn on your hotspot and let the laptop join it.” Verified on phones; on 11 September 2026 the manual's own browser pictures were made this way and a poll was voted from the browser and counted on the phone.
What the browser copy cannot do, in its own words: send a private file (“Private files can be sent from a phone; the browser has no file path to seal”), start a hotspot or a gateway (“This build cannot host the gateway.”), lock with a fingerprint, use Bluetooth, SMS, NFC or LoRa. It reaches other phones only through the phone that serves it.
Hiding

The eye in the app bar hides you: Hide me / Show me. Hidden, your name leaves the air: nearby phones see “Hidden phone” on their map with “relay only”, you cannot post to Nearby (“Hidden nodes do not speak to nearby”), to groups, offer files, or vote (“Hidden nodes do not vote”); your app bar reads “Hidden · 3 in mesh”; the Chats tab shows “You are hidden” with how many Nearby messages are waiting; and your phone keeps relaying everything for everyone. Private chats still work: a hidden phone receives, and its sender still gets receipts. An SOS still reaches a hidden phone and it still acknowledges. Verified on phones on 6 September 2026.
Safety





Menu → Safety gathers everything: Blocked people, Reports from this phone, the Abuse filter switch, Community standards, Help and how-to, Privacy policy, Terms of use, Child safety, Government and legal requests (“What Yapmesh holds about you: nothing. Transparency report.”), Contact and abuse reports ([email protected]) and Delete everything on this phone. Its footer: “Yapmesh has no accounts and no server, so there is no account to close and nothing of yours held anywhere else. Everything the app knows is on this phone. Copies of messages already delivered to other phones belong to those phones and cannot be recalled.”
Blocking
Block from a message (Block Amina), from the person sheet (Block on this phone) or from People. “Blocking is yours alone: it takes effect at once, nobody votes on it, and the person is never told. Nothing they send is shown here, no file of theirs is fetched, and no read or delivery receipt goes back to them.” Every file they ever sent is deleted and its hash denied, so it cannot come back from anyone. Unblock is under Blocked people.
Reporting
Report this message or Report Amina opens Report Amina: the message quoted, What is wrong? — Spam or flooding, Harassment or bullying, Hate speech, Violence or a threat, Sexual content, Child safety, A scam or impersonation, Something else — a note of up to 1,000 characters, and Block them on this phone too (on by default). Save this report.
Reports from this phone lists them as “Amina · Harassment or bullying” with an export button per report (the share subject is “Yapmesh abuse report — Amina”), and Clear: “Delete every report? The blocks stay. Only the written records go.”
The abuse filter
On by default. “Offline, on this phone: abusive text is refused on send and folded behind a tap when it arrives.” It is a word list for English, Urdu script and Roman Urdu with spelling tricks folded in; it runs on the phone, it can be switched off, and it is not a judge. Explicit images are blocked in the Nearby room and blurred in private chats and groups. No cloud service looks at anything. Built, not yet on a phone
The mesh vote
Separately from your own block, the person sheet offers Ask the mesh to block them: “A vote. Blocked for everyone when more than 5% of the mesh agrees; your vote goes to everyone, signed.” When that share is reached, every phone around stops carrying anything of theirs; People lists them under Blocked by the mesh with “X of Y allow votes”, and Vote to allow (or Withdraw my block, vote to allow) undoes it by the same share. If it happens to you, a banner says “The mesh has blocked you — More than 5% of the phones around you voted to block you. Nothing you send is shown or relayed, and nothing addressed to you is carried, until more than 5% vote to allow you again.”, names who voted, and says how many more allow votes are needed: “Talk to people near you: in Yap they open People, find you under “Blocked by the mesh”, and tap “Vote to allow”.” Built, not yet on a phone
Delete everything on this phone
“Delete everything? This phone loses its identity key, every contact, every group, every message and every file it has received, and all settings. Your contacts will see your name go dead: their copy of your key stops matching, and they will have to add you again from scratch. It cannot be undone, and messages already delivered to other phones are not touched. The app closes when this is done. Open it again to start over as someone new.” Keep everything / Delete everything. Then “Everything is deleted. Close and reopen Yapmesh.”
The person sheet
Hold a name in People or Chats, tap a chat's header, or choose Block, allow or remove… from a chat menu. The sheet shows the person, their presence and the vote state, then:
- Chat marks: Unread/Read, Archive/Unarchive, Hide/Unhide, Pin/Unpin, Mute/Unmute, Export. “Amina is archived”, “Amina is under Menu → Hidden chats”, “Amina is back in Chats”.
- Safety number — “Compare sixty digits or scan, to verify their key in person”.
- Reach over the internet — “No address yet. Type the host:port shown on their My code screen.” or “Dialling …”; “That is not a host:port”; “Internet address for Amina forgotten”.
- Find them over the internet — the per-contact switch for Internet reach.
- Phone number for SMS — “No number yet. Used only when you tap SMS on a stuck message.”; “SMS for Amina will go to +44 …, when you tap SMS”.
- Block on this phone / Unblock on this phone; Report Amina; Ask the mesh to block them / Vote to allow.
- Remove contact — “Their messages will be deleted from this phone.”
Settings
Chat settings, starred, send to many, export all




Menu → Chat settings. Read receipts (on): “Off: nobody is told you read their message, and you stop seeing when they read yours. Groups always send them.” Show when I am typing (on): “A hint to the phone you are writing to, only while it is within one radio hop. Never stored, never relayed.”
Starred messages: “Hold a message and tap Star to keep it here.”, each with who and which chat. Send to many: pick people, write once, and “Sent to 4 people, each sealed separately”; the bookmark icon saves the names as a list (“Save as a list”, a chip “Ward team · 4” you can delete). It is deliberately not a broadcast list: nobody sees the list, and each copy is sealed to one person. Export all chats: “One JSON file with every chat, unencrypted, for you to keep. Files are not included.” → “Export all chats? The file is readable by anyone who gets it. Keep it somewhere safe.”
Screen lock

Menu → Screen lock. Lock Yap: “Ask for the fingerprint, face or screen lock of this phone before Yap opens”. On a phone without one: “This phone has no fingerprint, face or screen lock set up. Set one in the phone settings first.” Turning it on raises the phone's own prompt; refusing it says “Not unlocked, so nothing changed”. Then Lock again Immediately, After 1 minute or After 30 minutes: “After you leave Yap. A glance at a notification is not worth a fingerprint every time.” Lock now appears in the menu once the lock is on. The locked screen reads “Yap is locked — Unlock with the fingerprint, face or screen lock of this phone.” and “Messages keep arriving while the app is locked; nothing is shown until it is open.” Partly verified
Battery & background
Menu → Battery & background. Keep Yap awake in the background: “On: Android leaves Yap out of battery optimisation” / “Off: Android may pause Yap when the screen is off”. Without it Android's Doze closes radio and relay connections minutes after the screen goes off; with it the mesh keeps running under the “Yap is on the mesh” notification. Some phones (Samsung, Xiaomi and Huawei among them) add their own app-killing on top, in their own settings. “Turn it back off — Android only allows this from its own battery page”. Between the looks shows the Heartbeat (every 15 minutes), Movement (how often the phone started moving, which triggers a re-scan) and Re-scans.
Honest battery figure: none yet. Every bench session ran on USB power, so no full-day number is published.
Hidden and archived chats

Archive from a person or group sheet; the row collapses into Archived on the Chats tab (“Nothing is archived.” when empty). Hide the same way; hidden chats live only under Menu → Hidden chats (“No hidden chats.”). Both are marks on this phone; nothing is sent, and messages keep arriving.
Notifications
Yapmesh posts on six channels you can tune in Android's settings: Nearby (“Messages in the Nearby room”), Groups, Direct messages, Mentions (“Group messages that name you”), SOS (“Emergency alerts from people nearby”) and Yap mesh, the quiet permanent one that reads “Yap is on the mesh — Keeping nearby phones connected”. Bodies are the message text, or “Sticker”, “Shared a place”, “Shared a contact”, “Sent a file”, “New message”; an SOS is “SOS from Amina — Needs help nearby”. Tapping one opens the chat. A muted chat still counts on the badge.
Share the app, updates and About



Menu → Share the app. On a phone from yapmesh.com the first card is This phone's installer: “Yap 1.1.1 (build 3) · 54.6 MB · offered to the mesh”, “Phones nearby on an older build are told about it and fetch it phone to phone, like any file.”, the Signer fingerprint, “You've given Yap to 2 people from this phone.” and Send the app with Quick Share / Bluetooth / any app. Then the hotspot card (above), From a laptop or any browser (“Turn on the gateway and a phone on the same Wi-Fi or hotspot can download the app from this one, no internet needed.” with Start the gateway), and Installers seen on the mesh. A debug build warns in red not to hand it to strangers.
The copy from Google Play shows Give Yapmesh to someone instead: “Send them this link. It opens the page that offers Yapmesh on Google Play and, for a phone with no Play Store, the signed app to download directly.” “Why not the app itself? This copy came from Google Play, and Play does not allow an app it distributes to hand out or update itself.”
Updates. When a phone nearby has a newer build, a card appears on the Files tab and on Share the app: “Update available: Yap 1.2.0 (build 4) · fetching from phones nearby”, then Install. Updates are accepted only from the same signer.
About (the ⓘ on Share the app) shows the version, the Signer fingerprint with a copy button, “The first 8 groups of the SHA-256 of the certificate this app was signed with. Anyone who gives you Yap shows the same line under “Share the app”; if the lines differ, it is not the same app. Updates are only accepted from this signer.”, What Yap is, the fence promise, how many people this phone has given the app to, and the links: Help and how-to, Privacy policy, Terms of use, Community standards, Safety: blocked people and reports, Child safety, Open-source licences, Support ([email protected]).
When something does not work
| What you see | What it means | What to do |
|---|---|---|
| “Waiting for nearby phones…” | No link to any phone. | Open Yapmesh on another phone within a room's distance with Bluetooth on. Check the Mesh tab for grey idle chips. |
| “Turn on Bluetooth to reach phones with no Wi-Fi” | Bluetooth is off. | Turn it on, or join the same Wi-Fi. |
| “Allow Bluetooth in Settings…” / “Allow nearby devices in Settings…” / “Allow Location in Settings…” | A permission was refused at first run. | Tap the grey chip on the Mesh tab; it opens the phone's settings page for the app. |
| “No Wi-Fi Aware on this phone: phones with no Wi-Fi are out of reach” | The phone lacks Wi-Fi Aware; Wi-Fi Direct and Bluetooth still run. | Nothing; it is a note about the hardware. |
| “Radio start failed …” / “Radio error: …” with Retry | The radios did not start. | Tap Retry. If it persists, toggle Bluetooth and Wi-Fi off and on. |
| “Stuck: no radio could deliver this.” | Eight seconds passed with no path. | Wait for the person to come in range (the message keeps trying and will ride in pockets), or hand it over by SMS, Share, Beam or Chirp. |
| “Phone not reachable, retrying…” | The browser client lost the phone that serves it. | Keep the laptop on the phone's Wi-Fi or hotspot and the phone's laptop switch on. |
| “Nobody in reach has this file right now” | A waiting file; no phone in range holds it. | Try again when the sender or another holder is in range. |
| “Camera permission is needed to scan a code” | Camera refused. | Allow it in the phone's settings, or use NFC, sound or a pasted code. |
| “Microphone permission is needed for voice notes” / “… to listen” | Microphone refused. | Allow it in the phone's settings. |
| “Location is off or was refused; nothing sent” | Location refused or off when sharing a place, an SOS position or setting up a fence. | Turn location on and allow it, then try again. |
| “Not a Yap code” / “That code is damaged” / “Part of a longer code; send the rest” / “A Yap code this version does not know” | A pasted or scanned code was not usable. | Ask for it again; for a multi-piece SMS, paste every piece; update the app if the code is newer than it. |
| “Yap will not send that: it reads as abuse. Say it another way.” | The abuse filter refused the text. | Reword it, or switch the filter off under Safety. |
| “Hidden nodes do not speak to nearby” and similar | You are hidden. | Tap the eye to show yourself. |
| “The mesh has blocked you” | More than 5% of phones around you voted to block you. | Ask people near you to open People, find you under Blocked by the mesh, and tap Vote to allow. |
| “Calls need a Wi-Fi or internet link to this person” | Only Bluetooth between you. | Join the same Wi-Fi or hotspot. |
| “Not unlocked, so nothing changed” | The phone's own unlock prompt was refused when turning the lock on. | Try again and unlock. |
| “Could not open the help page…” | No browser, or no internet for the first visit. | Open yapmesh.com/help.html from any device; the page then works offline in that browser. |
| “Could not record: …” / “Could not share: …” / “Could not export: …” / “Could not start the hotspot: …” | The phone refused the operation; the rest of the line is its reason. | Read the reason; it is Android's. |
What has and has not run on a phone
As of 11 September 2026, from the hardware log and the test suite (845 automated tests on the protocol core, all passing that day):
| Feature | Status |
|---|---|
| Text, photos, voice notes, replies, reactions in private chats and Nearby; files spreading; open and private groups with per-member counts; presence grants; hide me; SOS; hand-carry by SMS, Share and Beam; installing from a friend's phone; the laptop browser client; the Bluetooth, Wi-Fi, Wi-Fi Direct, SMS and any-app rungs; pocket-riding; a typed internet address | Verified on phones |
| Polls, edit, pin, reply and react between a phone and a browser node; the screen-to-camera rung; the app lock; the media setting; the iPhone build (runs on a real iPhone and chats with Android over Wi-Fi; Bluetooth between iPhones untested) | Partly verified |
| Fences; disappearing history; forward, star, delete for everyone; mute, auto-delete, typing hints and the read-receipt switch; search, media lists, export, send to many, live place; group icon, description and notices-only; safety numbers and the link path; file safety, the abuse filter and the mesh vote; Internet reach, spools, push wake, LoRa, Wi-Fi Aware; calls; the sound rung; battery and background | Built, not yet on a phone |
The technical page carries the same labels with the log entries behind them, and the hardware log is published unedited.
Glossary
- Mesh
- The phones that can reach each other, directly or through others, right now.
- Rung
- One kind of link, ranked on the ladder: Internet, Wi-Fi, Wi-Fi Direct, Bluetooth, SMS, Screen, Sound, Shared, LoRa.
- Hop
- One phone-to-phone step. A message can cross eight; an SOS sixteen.
- Riding / pocket-riding / muling
- A sealed message carried by a phone that is not its recipient, until they meet.
- Stuck
- A message every radio failed to deliver in eight seconds; it offers hand-carry.
- Hand-carry
- Moving a sealed message by SMS, any app, an animated QR or sound, with your own tap.
- Sealed
- Encrypted so that only the recipient's key opens it. Relays carry sealed frames unread.
- Signed
- Carrying the sender's signature, so a forged frame is dropped. Nearby messages are signed but not sealed.
- Key / identity
- The key pair made on first run. Its public half is you.
- Verified contact
- A contact whose key you got in person: scan, NFC tap, sound, or a matched safety number.
- Safety number
- Sixty digits both phones show when each holds the other's real key.
- Presence grant
- Permission you give one person to sense how close you are, at a tier: same network, area, room or table.
- Fence
- A rule that keeps a group's key only on phones inside a place.
- Anchor
- A member phone that stays put; being linked to it means being inside.
- Grace period
- How long a phone may be outside a fence before it loses the key.
- Epoch
- One period of a group's key; leaving or removing someone starts a new one.
- Swarm
- Every phone holding pieces of a file, serving them to each other.
- Chunk / Merkle root
- A 16 KiB piece of a file, and the hash tree root that names the file and proves each piece.
- Spool
- A small relay anyone can run that holds sealed envelopes for a contact for seven days.
- Relay (Nostr, MQTT)
- A public server used only as a meeting place for two phones that both have internet; it sees an IP address and sealed bytes.
- Gateway
- The phone's own web server that hands the app to a laptop browser or a new phone.
- Signer fingerprint
- A short form of the certificate that signed the app; the same on every genuine copy.
Where to get help
Support and abuse reports: [email protected]. Security findings: the security page says how to report and what is in scope. The protocol, the code and the test log are on GitHub. This page is also reachable from inside the app under Menu → Help, Menu → Safety → Help and how-to and Share the app → ⓘ → Help and how-to, and once opened it stays available offline in that browser.