](https://f-droid.org/packages/com.geeksville.mesh/)
[
](https://apt.izzysoft.de/fdroid/index/apk/com.geeksville.mesh)
[
](https://github.com/meshtastic/Meshtastic-Android/releases)
[
](https://play.google.com/store/apps/details?id=com.geeksville.mesh&referrer=utm_source%3Dgithub-android-readme)
The play store is the last to update of these options. To [join the Play Store testing program](https://play.google.com/apps/testing/com.geeksville.mesh), opt in to become a tester.
If you encounter any problems or have questions, [ask us on the discord](https://discord.gg/meshtastic), [create an issue](https://github.com/meshtastic/Meshtastic-Android/issues), or [post in the forum](https://github.com/orgs/meshtastic/discussions) and we'll help as we can.
### Desktop
**Meshtastic Desktop** installers (macOS DMG, Windows MSI/EXE, Linux DEB/RPM/AppImage) are available from [GitHub Releases](https://github.com/meshtastic/Meshtastic-Android/releases). A Flatpak is available on [Flathub](https://flathub.org/apps/org.meshtastic.MeshtasticDesktop) (packaging repo: [flathub/org.meshtastic.MeshtasticDesktop](https://github.com/flathub/org.meshtastic.MeshtasticDesktop)).
## Documentation
The two documentation sites below are deployed to GitHub Pages automatically on every push to `main`.
| Site | URL | Contents |
|---|---|---|
| **User & Developer Docs** | [meshtastic.github.io/Meshtastic-Android](https://meshtastic.github.io/Meshtastic-Android/) | Jekyll site — user guide, developer guide, in-app doc content |
| **API Reference** | [meshtastic.github.io/Meshtastic-Android/api](https://meshtastic.github.io/Meshtastic-Android/api/) | Dokka-generated KDoc for all public APIs |
### Generating Locally
**User & Developer Docs (Jekyll):**
```bash
./gradlew generateDocsBundle publishDocsSite
BUNDLE_GEMFILE=docs/Gemfile bundle exec jekyll serve \
--source build/_site --baseurl ""
```
**API Reference (Dokka):**
```bash
./gradlew dokkaGeneratePublicationHtml
# Output: build/dokka/html/index.html
```
## Architecture
### Modern Android Development (MAD)
The app follows modern Android development practices, built on top of a shared Kotlin Multiplatform (KMP) Core:
- **KMP Modules:** Business logic (`core:domain`), data sources (`core:data`, `core:database`, `core:datastore`), and communications (`core:network`, `core:ble`) are entirely platform-agnostic, targeting Android and Compose Desktop.
- **UI:** JetBrains Compose Multiplatform (Material 3) using Compose Multiplatform resources.
- **State Management:** Unidirectional Data Flow (UDF) with ViewModels, Coroutines, and Flow.
- **Dependency Injection:** Koin with Koin Annotations (K2 Compiler Plugin).
- **Navigation:** JetBrains Navigation 3 (Multiplatform routing with RESTful deep linking).
- **Data Layer:** Repository pattern with Room KMP (local DB), DataStore (prefs), and Protobuf (device comms). Protobuf models are consumed from the upstream `org.meshtastic:protobufs` Maven artifact, pinned in `gradle/libs.versions.toml`.
### Bluetooth Low Energy (BLE)
The BLE stack uses a multiplatform interface-driven architecture. Platform-agnostic interfaces live in `commonMain`, utilizing the **Kable** multiplatform BLE library to handle device communication across all supported targets (Android, Desktop). This provides a robust, Coroutine-based architecture for reliable device communication while remaining fully KMP compatible. See [core/ble/README.md](core/ble/README.md) for details.
### Module Documentation
Each module has its own README with details on its responsibilities, API surface, and internal design.
| Module | Description |
|---|---|
| [androidApp](androidApp/README.md) | Android application host — activity, manifest, flavors, root Koin graph |
| [desktopApp](desktopApp/README.md) | Compose Desktop host — window, transports, packaging |
| [core/domain](core/domain/README.md) | Business-logic use cases (radio config, sessions, exports) |
| [core/repository](core/repository/README.md) | Data & infrastructure contracts (RadioTransport, NodeRepository, ServiceRepository) |
| [core/takserver](core/takserver/README.md) | Meshtastic ↔ TAK (ATAK/iTAK) bridge — CoT server & conversion |
| [core/ble](core/ble/README.md) | Multiplatform BLE transport (Kable) |
| [core/network](core/network/README.md) | Internet comms: firmware metadata, map tiles, radio transports |
| [core/data](core/data/README.md) | Repository layer — orchestrates DB, network, and service data |
| [core/database](core/database/README.md) | Room KMP local persistence |
| [core/datastore](core/datastore/README.md) | DataStore preferences |
| [core/service](core/service/README.md) | Meshtastic Android service abstractions |
| [core/navigation](core/navigation/README.md) | Type-safe Navigation 3 route model |
| [core/resources](core/resources/README.md) | Centralised CMP string & drawable resources |
| [core/model](core/model/README.md) | Shared domain models |
| [core/ui](core/ui/README.md) | Shared UI components |
| [core/common](core/common/README.md) | Common utilities |
| [core/di](core/di/README.md) | Koin DI modules |
| [core/testing](core/testing/README.md) | Shared test fakes & utilities |
| [core/konsist](core/konsist/README.md) | Konsist architecture-rule tests (KMP boundary guards) |
| [core/nfc](core/nfc/README.md) | NFC support |
| [core/prefs](core/prefs/README.md) | Type-safe preferences over multiplatform DataStore |
| [core/barcode](core/barcode/README.md) | Barcode / QR scanning |
| [feature/messaging](feature/messaging/README.md) | Messaging UI feature |
| [feature/map](feature/map/README.md) | Map UI feature — shared state, policy, tile sources and the waypoint editor |
| [feature/map-maplibre](feature/map-maplibre/README.md) | MapLibre map surfaces shared by the `fdroid` flavor and Desktop |
| [feature/node](feature/node/README.md) | Node detail UI feature |
| [feature/settings](feature/settings/README.md) | Settings UI feature |
| [feature/firmware](feature/firmware/README.md) | Firmware update UI feature |
| [feature/intro](feature/intro/README.md) | Onboarding / intro UI feature |
| [feature/wifi-provision](feature/wifi-provision/README.md) | Wi-Fi provisioning UI feature |
| [feature/connections](feature/connections/README.md) | Device discovery & connection management (BLE / USB / TCP) |
| [feature/discovery](feature/discovery/README.md) | Mesh network discovery (scanner, AI summaries, Mesh Beacon) |
| [feature/docs](feature/docs/README.md) | In-app documentation browser with Chirpy AI assistant |
| [feature/widget](feature/widget/README.md) | Android home-screen Glance widget (live mesh stats) |
| [baselineprofile](baselineprofile/README.md) | Macrobenchmark Baseline Profile generation for `:androidApp` |
## Translations
You can help translate the app into your native language using [Crowdin](https://crowdin.meshtastic.org/android).
## Integration
The app includes a built-in **Local TAK Server** feature that can be enabled in settings. This runs a loopback-only TLS (mTLS) server on port 8089 so ATAK on the same device can connect directly and route its traffic over the mesh.
## Building the Android App
> [!WARNING]
> Debug and release builds install side by side to ease development, but don't run both at once — force-quit the one you are not using.
Follow the [Android development guide](https://meshtastic.org/docs/development/android/) to set up your environment.
Note: when building the `google` flavor locally you will need a [Google Maps Android SDK api key](https://developers.google.com/maps/documentation/android-sdk/get-api-key) to use Google Maps. Create `secrets.properties` at the repo root and set `MAPS_API_KEY=…`. Without it the build still succeeds with a placeholder key, but map tiles will not load.
e.g.
```properties
# secrets.properties
MAPS_API_KEY=your_google_maps_api_key_here
```
## Contributing guidelines
For detailed instructions on how to contribute, please see our [CONTRIBUTING.md](CONTRIBUTING.md) file.
For details on our release process, see the [RELEASE_PROCESS.md](RELEASE_PROCESS.md) file.
## Repository Statistics

Copyright 2025-2026, Meshtastic LLC. GPL-3.0 license