Guide · updated 2026-10-05
How the Bluetooth mesh moves a message
A mesh sounds like infrastructure. In bitchat it is just phones, close enough for Bluetooth Low Energy to hear one another, agreeing to pass packets along. There is no tower to install and no login that “joins the network”. If the radios cannot hear a peer, there is no mesh yet.
Hearing distance comes first
Bluetooth Low Energy is a short-range radio. In an open room, a few tens of metres is a fair expectation. A concrete wall, a body, a metal door, or a bag full of other radios can cut that down to “the person across the table”. Marketing diagrams that show a neighborhood covered by three phones are not how this radio behaves.
The practical test is boring and reliable. Two people open the app, turn Bluetooth on, accept the scanning permission, and stand where they can see each other. If the peer list stays empty, step closer before you change any other setting. Most “it does not work” reports at a festival are range and pockets, not a broken APK.
What a hop is
A hop is one radio handoff. Your phone to a friend’s phone is one hop. That friend’s phone to someone you cannot hear is the second hop. The Android project documents a maximum of seven. The limit exists so a packet dies instead of circling forever through a dense crowd.
Packets are compact. Larger messages are fragmented and reassembled. Duplicates are dropped, which matters when two paths deliver the same packet. None of this requires the internet, and none of it requires the phones to share a Wi-Fi password. It requires the app to be allowed to use the radio.
Private messages on this path use the Noise Protocol so the phones in the middle relay ciphertext rather than readable text. They can still see that traffic exists. That distinction is the whole of the privacy guide, and it belongs next to any explanation of hops.
You are the infrastructure
A relay is not a special account. It is a phone that is in range of two others and is willing to forward. If everyone in a crowd force-stops the app, the mesh collapses to direct pairs. If a few phones leave the app running, people on the edges can reach each other through those few.
That is a social fact as much as a technical one. A mesh messenger rewards the person who keeps the phone awake. It does not reward a crowd of installs that are never opened.
What Android does to background radios
The project uses a foreground service to keep the mesh alive inside Android’s rules. A foreground service is the ongoing notification you see while a music app or a maps app is working. Phone skins from Samsung, Xiaomi, Oppo, and others add a second layer of battery killing that stock Android does not. If peers vanish the moment the screen locks, look at battery optimization for bitchat and allow unrestricted use. That is a phone setting, not a hidden mode inside the APK.
Duty cycling is how the app tries not to burn the battery while it listens. Listening less often saves power and also misses short encounters. A person who walks past for three seconds may never appear. A person who sits beside you will.
The other local radio
Wi-Fi Aware, on phones that implement it, gives the mesh a fatter pipe for images and files without joining a traditional Wi-Fi network. It is optional hardware. An older phone that only has Bluetooth still participates. You should not buy a phone for this feature in order to read text. Text was designed to fit the smaller radio.
Clean reasons it will not deliver
- The other person is out of range, and nobody between you is running the app.
- Location permission is denied, so Android refuses the Bluetooth scan.
- The Wear APK was installed on a phone, or the phone APK on a watch.
- The message was typed into a geohash room, which is the internet path, while the phone is offline.
- Seven hops were not enough. The packet is supposed to stop.
None of those are fixed by downloading a second, unofficial APK. Start from the signed build, then read the permission steps once.