Skip to content

Getting Started

sputlab edited this page Nov 13, 2026 · 1 revision

Getting Started

Requirements

  • Android 10 or later (minSdk 29, targetSdk 35) with Bluetooth LE.
  • At least two phones: a mesh needs peers. Three are needed to test relaying.
  • Android 10/11 only: location services must be switched on, otherwise the system returns no Bluetooth scan results.

Install

NodeWave is built to be distributed through F-Droid. Until a signed release is published, build the APK yourself (see Building) and install it:

./gradlew installDebug      # installs on every connected device

On Xiaomi/MIUI, "Install via USB" may require a Mi account and a SIM. Copy the APK to the phone and install it manually instead.

First run

  1. Open the app and grant the requested permissions (see Permissions).
  2. Tap START RADIO. A notification appears: the radio runs in a foreground service.
  3. Repeat on the second phone. Each should list the other under NODES within a few seconds.
  4. Tap a node to select it, type a message and tap SEND (or ALL to send to everybody in range). You can also use PING (CIAO - 73).
  5. The other phone shows the message; the sender's chat marks it DELIVERED.

Watching the radio

Everything the radio does is logged with the tag MESH_RADIO, and shown in the on-screen log console:

adb logcat -s MESH_RADIO
adb -s <serial> logcat -s MESH_RADIO     # with several devices connected

Try the relay (three phones)

  1. Install the same version on all three phones and start the radio on each.
  2. Wait a few seconds: each phone should list the other two (indirect nodes appear after the first neighbour announcement, HELLO).
  3. Phones in the same room all see each other, so force the relay: on the sender and the receiver switch on DEBUG: skip direct link (force relay), leaving the third phone as it is.
  4. Send from the sender to the receiver. The receiver shows the message with 1 relay, the sender shows DELIVERED · 1 relay.
  5. Alternatively switch Bluetooth off on the relay phone and watch the indirect node disappear (a stale route can take up to a minute to expire).

Next

Clone this wiki locally