Android application for Meshtastic
  • Kotlin 96.8%
  • Shell 1.5%
  • PowerShell 0.8%
  • Python 0.4%
  • JavaScript 0.3%
  • Other 0.2%
Find a file
James Rich bf5f86daae
fix(ci): stop label-enforcement check from failing on every human PR (#6084)
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-05 09:35:54 -05:00
.claude chore(tooling): gate git push on detekt in pre-bash-guard hook (#5993) 2026-06-28 14:45:30 +00:00
.gemini chore(ai): modernize and unify agent tooling and instructions (#5087) 2026-04-12 17:29:05 +00:00
.github fix(ci): stop label-enforcement check from failing on every human PR (#6084) 2026-07-05 09:35:54 -05:00
.idea chore(repo): untrack per-developer scratch + prune stale ignore/agent-doc cruft (#5996) 2026-06-28 11:24:35 -05:00
.run feat: Configure Pre-Commit run for debugging (#4284) 2026-01-21 19:50:27 +00:00
.skills feat(firmware): nRF52 legacy BLE DFU — stock-bootloader fixes + stranded-device recovery (#6041) 2026-07-02 02:54:22 +00:00
.specify docs: veracity pass, screenshot enrichment & screenshot-pipeline split (#5961) 2026-06-26 11:58:18 +00:00
androidApp chore: Scheduled updates (Firmware, Hardware, Translations, Graphs, Baseline) (#6075) 2026-07-02 14:26:49 -05:00
baselineprofile perf: add Baseline Profile generation for :androidApp (#5735) 2026-06-16 15:51:54 -05:00
build-logic fix(build): remove -Xbackend-threads=0 to stop parallel codegen crashes (#6066) 2026-07-02 06:53:25 -05:00
config fix(build): supply AboutLibraries license texts for offline builds (#5818) 2026-06-16 17:28:49 -05:00
core fix(qr): Apply channel replacements reliably (#6072) 2026-07-02 18:31:32 +00:00
desktopApp fix(data): stale firmware/hardware caches — stop cancelling slow API refreshes, prune pulled releases, seed from newer bundles (#6060) 2026-07-02 02:35:18 +00:00
docs chore: Scheduled updates (Firmware, Hardware, Translations, Graphs, Baseline) (#6070) 2026-07-02 12:46:11 -05:00
docs-screenshots docs: veracity pass, screenshot enrichment & screenshot-pipeline split (#5961) 2026-06-26 11:58:18 +00:00
fastlane chore: Scheduled updates (Firmware, Hardware, Translations, Graphs, Baseline) (#5983) 2026-06-28 20:07:58 -05:00
feature fix(logs): Allow access to DebugPanel Logs while disconnected (#6074) 2026-07-02 18:35:38 +00:00
gradle chore(deps): update org.jetbrains.kotlinx:kotlinx-collections-immutable to v0.5.1 (#6073) 2026-07-02 18:33:46 +00:00
schemas feat: offline-first event firmware metadata (JSON schema + bundled asset) (#5920) 2026-06-24 00:23:43 +00:00
screenshot-tests fix(connections): label the connecting-card button "Stop Connecting" (#6046) 2026-07-01 19:01:09 +00:00
scripts fix(docs): preserve #anchor when rewriting sibling links for Docusaurus (#5963) 2026-06-26 07:30:08 -05:00
specs feat(lockdown): firmware lockdown mode (provision / unlock / lock-now) (#5939) 2026-06-24 20:18:13 +00:00
.aiexclude chore: optimize AI agent context and implement CI cost controls (#5335) 2026-05-02 13:19:11 -05:00
.coderabbit.yaml fix(ci): rename skip_author to ignore_usernames in .coderabbit.yaml (#6069) 2026-07-02 08:05:17 -05:00
.copilotignore chore: optimize AI agent context and implement CI cost controls (#5335) 2026-05-02 13:19:11 -05:00
.gitattributes chore: optimize AI agent context and implement CI cost controls (#5335) 2026-05-02 13:19:11 -05:00
.gitignore chore(repo): untrack per-developer scratch + prune stale ignore/agent-doc cruft (#5996) 2026-06-28 11:24:35 -05:00
.ruby-version fix(ci): downgrade Ruby to 4.0.4 for ubuntu-24.04 compatibility (#5519) 2026-05-19 21:12:38 -05:00
AGENTS.md chore(repo): untrack per-developer scratch + prune stale ignore/agent-doc cruft (#5996) 2026-06-28 11:24:35 -05:00
build.gradle.kts chore(deps): re-pin protobufs to v-less snapshot 2.7.26-4b8d665-SNAPSHOT, drop resolution override (#5942) 2026-06-24 18:27:38 -05:00
CHANGELOG.md docs: update CHANGELOG.md (#6071) 2026-07-02 15:15:31 -05:00
CLAUDE.md docs: de-submodule protos, sync constitution to v1.3.3, prune stale governance refs (#5905) 2026-06-22 15:23:59 -05:00
CODE_OF_CONDUCT.md repo: Add Contributor Covenant Code of Conduct (#3941) 2025-12-10 00:03:23 +00:00
codecov.yml refactor: Remove AIDL API and modernize service architecture (#5586) 2026-06-16 15:51:54 -05:00
compose_compiler_config.conf feat: Migrate networking to Ktor and enhance multiplatform support (#4890) 2026-03-23 16:48:10 +00:00
config.properties chore: bump VERSION_NAME_BASE to 2.8.0 for release 2026-06-16 15:51:54 -05:00
CONTRIBUTING.md docs: comprehensive documentation audit and refresh (#5572) 2026-05-21 20:50:01 -05:00
crowdin.yml docs: move English sources into docs/en/ locale folder (#5501) 2026-05-19 14:06:44 -05:00
debugging-android.md add instructions on how to capture logcat logs 2020-03-07 17:19:36 -08:00
Gemfile feat(ci): migrate to fastlane for release management (#3038) 2025-09-09 21:08:11 +00:00
Gemfile.lock chore(deps): update fastlane to v2.236.1 (#5772) 2026-06-11 11:18:08 +00:00
GEMINI.md chore(ai): modernize and unify agent tooling and instructions (#5087) 2026-04-12 17:29:05 +00:00
gradle.properties feat: add Compose Preview Screenshot Testing infrastructure (#5410) 2026-05-12 02:18:23 +00:00
gradlew chore(deps): update gradle to v9.6.0 (#5860) 2026-06-18 21:17:42 -05:00
gradlew.bat chore(deps): update gradle to v9.6.0 (#5860) 2026-06-18 21:17:42 -05:00
jitpack.yml refactor: Remove AIDL API and modernize service architecture (#5586) 2026-06-16 15:51:54 -05:00
LICENSE Add license and copyright 2020-03-01 16:39:53 -08:00
obtainium-test-builds.md docs: add Obtainium test-build install guide (#5936) 2026-06-24 13:46:34 -05:00
README.md docs: update repo/developer/in-app docs and repair the screenshot pipeline for 2.8.0 (#5775) 2026-06-16 15:51:54 -05:00
RELEASE_PROCESS.md docs: comprehensive documentation audit and refresh (#5572) 2026-05-21 20:50:01 -05:00
secrets.defaults.properties refactor: maps (#2097) 2025-08-13 17:51:19 +00:00
SECURITY.md Revise security policy for supported versions and reporting 2026-03-25 10:18:51 -05:00
settings.gradle.kts chore(deps): update plugin com.gradle.develocity to v4.5.0 (#6026) 2026-06-30 06:21:01 -05:00

Meshtastic Logo

Meshtastic-Android

GitHub all releases Android CI codecov Crowdin CLA assistant Fiscal Contributors Vercel

This is a tool for using Android (and Compose Desktop) with open-source mesh radios. For more information see our webpage: meshtastic.org. If you are looking for the device side code, see here.

If you have questions or feedback please Join our discussion forum or the Discord Group. We would love to hear from you!

Features

Highlights from the latest release:

  • Full-text message search across your conversation history.
  • Mesh network discovery to surface nodes and channels around you.
  • Android Auto support for hands-free use while driving (google flavor).
  • Air-quality telemetry — PM1.0, PM2.5, PM10, and CO₂ readings from supported sensors.
  • Device hardware links via msh.to for quick access to hardware details.
  • App Functions / system-AI integration so on-device assistants can trigger common workflows.

Get Meshtastic

The easiest and fastest way to get the latest releases is to use our GitHub releases. It is recommended to use these with Obtainium to get the latest updates automatically.

Alternatively, these other providers are also available, but may be slower to update.

Get it on F-Droid Get it on IzzyOnDroid Get it on GitHub Download at https://play.google.com/store/apps/details?id=com.geeksville.mesh]

The play store is the last to update of these options, but if you want to join the Play Store testing program go to this URL and opt-in to become a tester. If you encounter any problems or have questions, ask us on the discord, create an issue, or post in the forum 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. A Flatpak package is maintained at vidplace7/org.meshtastic.desktop.

Documentation

Both sites are deployed to GitHub Pages automatically on every push to main.

Site URL Contents
User & Developer Docs meshtastic.github.io/Meshtastic-Android Jekyll site — user guide, developer guide, in-app doc content
API Reference meshtastic.github.io/Meshtastic-Android/api Dokka-generated KDoc for all public APIs

Generating Locally

User & Developer Docs (Jekyll):

./gradlew generateDocsBundle publishDocsSite
BUNDLE_GEMFILE=docs/Gemfile bundle exec jekyll serve \
  --source build/_site --baseurl ""

API Reference (Dokka):

./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 for details.

Module Documentation

Each module has its own README with details on its responsibilities, API surface, and internal design.

Module Description
core/domain Business-logic use cases (radio config, sessions, exports)
core/repository Data & infrastructure contracts (RadioTransport, NodeRepository, ServiceRepository)
core/takserver Meshtastic ↔ TAK (ATAK/iTAK) bridge — CoT server & conversion
core/ble Multiplatform BLE transport (Kable)
core/network Internet comms: firmware metadata, map tiles, radio transports
core/data Repository layer — orchestrates DB, network, and service data
core/database Room KMP local persistence
core/datastore DataStore preferences
core/service Meshtastic Android service abstractions
core/navigation Type-safe Navigation 3 route model
core/resources Centralised CMP string & drawable resources
core/model Shared domain models
core/ui Shared UI components
core/common Common utilities
core/di Koin DI modules
core/testing Shared test fakes & utilities
core/nfc NFC support
core/prefs Legacy preference helpers
core/barcode Barcode / QR scanning
feature/messaging Messaging UI feature
feature/map Map UI feature
feature/node Node detail UI feature
feature/settings Settings UI feature
feature/firmware Firmware update UI feature
feature/intro Onboarding / intro UI feature
feature/wifi-provision Wi-Fi provisioning UI feature
feature/connections Device discovery & connection management (BLE / USB / TCP)
feature/discovery Mesh network discovery
feature/docs In-app documentation browser with Chirpy AI assistant
feature/widget Android home-screen Glance widget (live mesh stats)
feature/car Android Auto integration (Car App Library, google flavor)
baselineprofile Macrobenchmark Baseline Profile generation for :androidApp

Translations

You can help translate the app into your native language using Crowdin.

Integration

The app includes a built-in Local TAK Server feature that can be enabled in settings. This runs a local TCP server on port 8089 to allow ATAK clients to connect directly and route their traffic over the mesh.

Building the Android App

Warning

Debug and release builds can be installed concurrently. This is solely to enable smoother development, and you should avoid running both apps simultaneously. To ensure proper function, force quit the app not in use.

https://meshtastic.org/docs/development/android/

Note: when building the google flavor locally you will need to supply your own Google Maps Android SDK api key MAPS_API_KEY in local.properties in order to use Google Maps. e.g.

MAPS_API_KEY=your_google_maps_api_key_here

Contributing guidelines

For detailed instructions on how to contribute, please see our CONTRIBUTING.md file. For details on our release process, see the RELEASE_PROCESS.md file.

Repository Statistics

Alt

Copyright 2025, Meshtastic LLC. GPL-3.0 license