Skip to content

Repository files navigation

MeshAid

No mobile signal. No server. Still connected.

MeshAid turns nearby Android phones into a Bluetooth Low Energy mesh for local messaging without mobile data, Wi-Fi, an account, or a central server. Messages can hop between participating MeshAid devices to reach people beyond a single Bluetooth connection.

Use the Public Lobby for nearby announcements, switch to end-to-end encrypted Direct Messages for private conversations, or create a QR-approved encrypted Trusted Circle for your group.

Download MeshAid for Android · Android 8.0 or newer

Built for places the internet does not reach

  • Internet blackouts and mobile-data outages — keep nearby people connected when ordinary online messaging is unavailable.
  • Hiking, trekking, and camping — coordinate with a group in remote areas with weak or nonexistent coverage.
  • Crowded events and temporary sites — communicate locally at festivals, camps, campuses, and community gatherings.
  • Local emergency coordination — exchange nearby updates when centralized infrastructure is unavailable or overloaded.

MeshAid does not require GPS and cannot restore internet access. It also cannot defeat Bluetooth/radio jamming: every relay must be a nearby device running a compatible MeshAid version, and practical range depends on phones, obstacles, interference, and terrain.

Public when you want it, encrypted when you need it

Mode Who can read it? Protection
Public Lobby Anyone reachable through the local mesh Messages are signed and rate-limited, but intentionally public
Direct Messages Only the two endpoint devices End-to-end encrypted through recipient-bound Noise sessions
Trusted Circles Only QR-approved member devices End-to-end encrypted group messaging with signed membership and key rotation

Trusted Circles use an in-person, three-step QR process. The organizer sees the joining device's fingerprint and must explicitly approve it before that device receives the Circle key.

How the mesh works

  1. Install MeshAid and enable Bluetooth/Nearby Devices.
  2. Nearby MeshAid phones discover one another automatically.
  3. Each participating phone can relay packets, extending the path across the group.
  4. Choose the Public Lobby, a private Direct Message, or a QR-approved Trusted Circle.

No phone number, email address, internet account, analytics SDK, or Android Internet permission is required.

Download and install

Testing builds are published on the repository's GitHub Releases page. For most modern Android phones, download the debug-arm64 APK. Use the larger debug-universal APK only when the device architecture is unknown.

Before installing, compare the APK's SHA-256 digest with the release checksum file and confirm that the release was produced by the tagged source and GitHub provenance attestation. Android may ask the user to allow installs from the browser or file manager used to open the APK.

The development APK is signed with Android's standard debug certificate. Android will not upgrade it to a production-signed APK with a different certificate. Existing testers must export anything they need, uninstall the debug build, and then install the first production-signed public beta; uninstalling deletes local app data and Circle keys.

Safety status

Version 0.4.3 is an unaudited, debug-signed testing release—not a claim of safety for protests or other high-risk use. Keep it labelled as a pre-release until an independent security review and adversarial multi-device field test are complete.

  • Bluetooth LE is the only enabled transport in the MeshAid interface in version 0.4.
  • Android 12+ uses Nearby Devices and does not request location.
  • Android 8–11 requires foreground location permission because Android gates BLE scanning behind it. MeshAid does not read or transmit GPS coordinates.
  • The Public Lobby is readable and recordable by anyone reachable through the mesh. Signed aliases prevent message tampering but do not verify a real-world identity.
  • Trusted Circles encrypt messages to a QR-approved group. The first invite QR contains no group key; admission requires a join request, explicit organizer approval, and a device-bound encrypted welcome QR.
  • Trusted Circle keys and saved Circle messages are stored in an authenticated encrypted file whose non-exportable AES key lives in Android Keystore.
  • The APK contains no shared master key. Circle, member, and session secrets are generated on-device; signing keys are never embedded in the repository.
  • Backups and device-transfer of app data are disabled. The official UI blocks screenshots, insecure displays, and third-party overlays where Android supports those controls.
  • BLE/Noise transport identities and public-lobby signing keys rotate on each fresh app process. Each Trusted Circle uses separate member keys.
  • The profile screen includes a private-data wipe for Circle keys, saved Circle messages, invites, and username.

Read SECURITY.md before testing.

Current features

  • Multi-hop Bluetooth LE discovery, relaying, and store-and-forward
  • Editable 1–24 character display names
  • Public nearby lobby with signed, explicitly unverified aliases
  • Public Lobby flood controls: 280-character posts, five-second local send cooldown, receiver-side per-identity throttling, and repeated-content suppression
  • Length-safe signed direct messages inside recipient-addressed Noise sessions
  • Trusted Circles with AES-256-GCM message encryption and Ed25519 member signatures
  • Three-step offline QR admission using Ed25519, X25519, HKDF-SHA-256, and a device-bound AES-GCM welcome
  • Organizer approval with device fingerprint display
  • Idempotent invite re-scanning and duplicate-member protection
  • Organizer member revocation through circle epoch/key rotation (retained members must be re-invited)
  • Admin-signed reset notifications, persistent “rejoin required” state, and epoch-bound QR2 re-admission
  • Session/admission-time filtering so the official app does not display pre-join history
  • Background QR verification with visible progress and automatic completion after the welcome scan
  • Five-minute, single-use organizer invitations
  • Per-sender public-lobby rate limiting and bounded message history
  • Android Keystore-backed encrypted local storage and atomic writes
  • Android 8.0+ (API 26)

Trusted Circle admission

  1. The organizer creates a five-minute Invite offer QR. It identifies the circle and organizer key but contains no circle key.
  2. The joining device scans it and displays a signed Join request QR containing fresh keys created for that circle.
  3. The organizer scans the request, checks the name/fingerprint, explicitly approves it, and displays a Welcome QR encrypted specifically to the joining device.

Copying only the first QR cannot decrypt the circle. A copied welcome QR cannot be opened by a different device. Invitations are currently organizer-only.

Build for development

Prerequisites: Android Studio, its bundled JDK, Android SDK Platform 36, and Android Build Tools.

$env:JAVA_HOME='C:\Program Files\Android\Android Studio\jbr'
$env:ANDROID_HOME="$env:LOCALAPPDATA\Android\Sdk"
.\gradlew.bat testDebugUnitTest assembleDebug

Universal debug APK:

app/build/outputs/apk/debug/app-universal-debug.apk

Debug APKs are signed with the standard Android debug key and are only suitable for controlled testing. A public release needs protected release signing, reproducible builds, a published source commit, and an external security review.

Public beta releases

Public releases are built only from a version tag. An unprivileged job tests and builds unsigned APKs; a separate protected job does not check out or execute repository source and only signs the handoff artifacts. The workflow verifies every APK signature and permission set, publishes SHA-256 checksums, and creates a GitHub provenance attestation. Actions, the Gradle wrapper, and resolved dependencies are checksum-pinned.

Maintainers should follow RELEASE.md. Never commit a keystore, signing password, private key, or .env file.

Contributing

Bug reports, interoperability results, documentation fixes, and focused tests are welcome. Security issues must be reported privately as described in SECURITY.md; do not include sensitive details in public issues. See CONTRIBUTING.md before opening a pull request.

Origin and license

MeshAid is a modified fork of permissionlesstech/bitchat-android. The exact upstream revision and material changes are recorded in NOTICE.md. This derivative remains licensed under GNU GPL v3; see LICENSE.md.

About

Offline Android BLE mesh messenger for internet blackouts, hiking and off-grid groups—with end-to-end encrypted DMs and QR-approved Trusted Circles.

Topics

Resources

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Contributors

Languages