WiBChat Mesh
WiBChat Mesh turns a group of Android phones into a small network of their own. Each phone finds the ones near it over Bluetooth Low Energy, and every phone passes on the messages it receives — so a message can hop phone to phone until it reaches someone standing several devices away. There is no internet connection, SIM card, account or server in the middle: the phones are the network, which is what makes it work exactly where an ordinary messenger does not.
- Tap Download APK above (or scan the QR).
- If prompted, allow installs from this browser/source.
- Open the downloaded file and tap Install.
- Grant nearby-devices / Bluetooth / notification permissions on first launch.
0.1.0-debug2026-10-08 14:40:44 UTC-04:0022.79 MBb1e0e41dc19ff110bb6e859ad280e2e2144e73a448c293305bf6d8bd1ff1189fWhat WiBChat Mesh is
WiBChat Mesh is an offline chat app for Android. It is built for the situation where there is no working mobile network at all — a blackout or disaster, a crowded venue where data collapses, a large building with no Wi-Fi, a trail far from any mast — but the people who need to reach each other are standing within radio range of one another.
The phones do the routing themselves. WiBChat keeps a live list of the devices around it, opens a one-to-one chat with any of them, and re-broadcasts what it hears so that messages travel further than a single Bluetooth link could carry. Nothing is uploaded anywhere: every conversation lives only in a local database on the phone that sent it and the phones it reached.
No internet needed
Runs in airplane mode over Bluetooth Low Energy, with Wi-Fi Direct as an optional second radio.
No account, no sign-up
No phone number, e-mail or password. Your identity is a key generated on the device itself.
No server in the middle
Messages are stored and forwarded phone to phone, never routed through a data centre.
Multi-hop relay
A message can travel up to 10 hops through other phones to reach someone outside your range.
What it does
People & conversations
- People list — nearby devices appear as they are discovered, each with a display name, a short id and the radio it was found on.
- Direct chat — tap a person to open a one-to-one conversation.
- Encrypted private text — once a contact is accepted, one-to-one messages are sealed end-to-end (X25519 + ChaCha20-Poly1305) and carry a lock mark.
- Channels — named group chats that announce themselves to nearby phones, so a channel created on one device shows up on another as a tap-to-join prompt. Give it a password and its traffic is encrypted with a key derived through Argon2id; leave it public and it is not.
- Voice notes — tap the microphone to record, tap again to send; notes are capped at 60 seconds and play inside the bubble.
- Photos & files — attachments are sent with a progress bar showing how much has actually crossed the link.
- Typing, delivery and read receipts — you see typing… while the other side writes, and your messages move from
PENDINGtoSENT,DELIVEREDandREAD, with the hop count beside them. - Profile pictures & display name — set a name and photo that other phones in the mesh see.
- QR pairing — the QR tab exchanges identity keys so a contact can be added by scanning instead of typing.
- Block & report — block someone so their messages and requests stop reaching you, or send an abuse report to the operator.
- Search — find any message stored on this phone and jump straight to its conversation.
Keeping it under control
- App lock — protect the app with a security code or biometrics.
- Message history — keep everything forever, or drop messages older than 7, 30 or 90 days, attachments included.
- Radios — choose Bluetooth only, Wi-Fi Direct only or both, and see which radios are actually live.
- Appearance — system, light or dark theme.
- Delete all message data — wipe this phone's local history in one tap.
- Always-on service — a notification keeps the mesh alive in the background and shows how many peers are connected right now.
How a message travels
flowchart TD A["Phone A
writes a message"] -->|"hop 1"| B["Phone B
relays it"] B -->|"hop 2"| C["Phone C
receives it"] C -->|"hop 3"| D["Phone D
out of A's range"]
- Discover — every phone advertises itself and scans for others. The same phone seen over both Bluetooth and Wi-Fi Direct is shown once, with both radios merged.
- Save, then send — a message is written to the phone's database before it goes out, so a failed send is never lost.
- Relay — every phone re-broadcasts what it receives, up to 10 hops. That is what lets you reach someone you are not standing next to.
- Drop duplicates — each phone remembers recently seen message ids (up to 4,096 of them, for 30 minutes) so the same message does not bounce around the mesh forever.
- Retry — anything still marked
PENDINGis sent again every 15 seconds until it lands. - Verify at every hop — each packet carries the sender's public key and a signature, and every relay checks it, so a message cannot be forged, altered or redirected in transit.
flowchart TD
S["You type a message"] --> P["Saved on the phone as PENDING"]
P --> B["Broadcast over Bluetooth LE"]
B --> H{"Any phone in range?"}
H -->|"no"| R["Retry every 15 seconds"]
R --> B
H -->|"yes"| V{"Signature valid?"}
V -->|"no"| X["Dropped: it cannot be forged"]
V -->|"yes"| D{"Message id seen before?"}
D -->|"yes"| Y["Dropped: duplicate"]
D -->|"no"| K["Stored as DELIVERED"]
K --> F["Re-broadcast, hop count + 1"]
F --> T{"Under 10 hops?"}
T -->|"yes"| B
T -->|"no"| Z["Stop: hop limit reached"]
PENDING → broadcast over Bluetooth LE →
signature checked at every hop → duplicates dropped → stored as
DELIVERED → re-broadcast with hop count + 1 → retried every 15 s
→ stops after 10 hops.
Where it is useful
Emergencies & disasters
When towers or power are down, a street or a shelter can still be a working network.
Events & festivals
Crowds overload mobile data. A mesh keeps the group in touch anyway.
Remote & off-grid work
Farms, boats, mines, survey teams and hiking groups — anywhere with no coverage.
Big buildings
Warehouses, basements, car parks and sites with no Wi-Fi or persistent dead spots.
Schools & campuses
Share a channel by password and run a class or a club with no infrastructure at all.
Travelling
No roaming charges and no local SIM: a group of travellers stays reachable.
Privacy-sensitive groups
No server holds the messages, so there is nothing central to leak or hand over.
Demos & research
A working multi-hop mesh in your pocket, with hop counts and receipts you can show.
Tips & things to do first
- Install it on at least two phones. A mesh of one has nobody to talk to. Three phones is where the interesting part starts, because the middle one becomes a relay.
- Switch Bluetooth on everywhere. It is the default radio and the one that carries the mesh; Wi-Fi Direct is optional on top of it.
- Grant the permissions on first launch. The app asks for nearby devices (Android 12+), location (Android 12L and older, which Android requires for Bluetooth and Wi-Fi scanning), nearby Wi-Fi devices and notifications (Android 13+), and the microphone for voice notes. If you tapped don't allow, re-grant them under Settings > Apps > WiBChat Mesh > Permissions.
- Whitelist the app from battery optimization (Settings tab → Whitelist from battery optimization). Without it Android may stop the mesh when the screen is off and messages sit at
PENDING. On Xiaomi, Huawei, Oppo and Samsung phones also set the app to Unrestricted / Don't optimize and allow autostart. - Watch the notification. WiBChat Mesh active · Connected peers: N is the fastest health check. If it reads 0 while people are standing next to you, permissions or Bluetooth are the usual culprits.
- Stay close, then bridge the gap. Bluetooth LE reaches roughly 10–30 m in the open, less through walls. To reach someone further away, put a third phone in between — it forwards the message automatically, and the hop count on the bubble shows how it went.
- Empty People list? Check that Bluetooth is on, permissions are granted and both phones are awake with the app running, then start a fresh scan from the app. Toggling Bluetooth off and on also forces rediscovery. Discovery is continuous, but it takes a few seconds to settle.
- Pick the right radios. Settings → Radios: Both gives the best discovery and reach, Bluetooth only is the kindest to the battery, and Wi-Fi Direct works with Bluetooth switched off but loses multi-hop relaying, because there is only one Wi-Fi Direct group at a time.
- Put a password on any channel you care about. A public channel is not encrypted. With a password its traffic is encrypted with a key derived from that password through Argon2id (AES-256-GCM), and only the salt plus a non-secret key check travel over the air. Share the password out of band — and note that it cannot be changed or revoked, because anyone who knows it can re-derive the key.
- Join a channel before the messages arrive. A channel message that reaches you before you have joined is stored as “Unable to decrypt this message”, and joining afterwards does not decrypt what you already received.
- Treat attachments as public for now. Private text chat is end-to-end encrypted and every packet is signed, but attachments and voice notes are not encrypted yet — so send sensitive material as text, not as a file.
- Voice notes stop at 60 seconds, and a long recording can exceed what Bluetooth can carry comfortably — the app warns you when that happens. Keep them short, or fall back to text.
- Remember that deleting is local. Clearing a chat, or letting the retention window expire, removes this phone's copy and its attachments; other phones keep theirs. A mesh has no central store to delete from.
- Turn on app lock (Settings → Security) if the phone is shared or left lying around.
- Use real hardware. Emulators have no Bluetooth LE or Wi-Fi Direct, so nothing will ever show up in the People list.
- Expect large files to be slow. The mesh floods every message to everyone nearby, so a big attachment competes with all other traffic. Text gets through long before a large video does.
Worth knowing before you rely on it
- Deleting is per-phone. Once another phone holds a copy, nothing can be recalled or remotely wiped.
- Attachments and voice notes are not encrypted yet — they cross the authenticated direct link in the clear. Private text chat and password-protected channels are encrypted.
- Channels have no membership list. You cannot remove a member, and there is no forward secrecy: everyone who knows the password shares one key.
- Channels only reach phones within radio range, or within a chain of phones bridging the gap. Share the password out of band.
- Retention is measured from each message's own timestamp. The sweeper runs hourly, and once immediately after you change the window.
- Radio modes are still fixed. The default
BALANCEDposture runs Bluetooth LE; Wi-Fi Direct needs the higher-performance modes, which the app does not expose yet — the Radios setting is what makes the radio available at all. - This is a debug build. Expect rough edges, and do not treat it as a secure channel for anything critical while it is being tested.
Requirements
- Two or more physical Android phones, Android 8.0 (API 26) or newer, with Bluetooth. Emulators cannot run the radios.
- No internet, SIM card, account or server is needed to chat — a connection is only used if you choose to send an abuse report.
- Sideloading allowed on each phone (the one-off “allow installs from this source” prompt).