Developer Guide

Technical documentation for contributing to the Meshtastic Android and Desktop app.


Before You Open a PR

Things that trip up first-time contributors β€” check these before requesting review:

  • Formatting passes β€” run ./gradlew spotlessApply to auto-format, then verify with spotlessCheck
  • Detekt passes β€” run ./gradlew detekt and fix all reported issues
  • All tests pass β€” run ./gradlew test allTests (both are needed: test covers Android-only modules, allTests covers KMP)
  • Screenshot tests pass β€” if you touched any Compose UI, run ./gradlew :screenshot-tests:validateDebugScreenshotTest and update reference images if needed
  • Protos are an external dependency β€” protobuf models come from the org.meshtastic:protobufs Maven artifact (pinned in gradle/libs.versions.toml); change protos upstream and bump the version, never edit generated code locally
  • Docs updated β€” if you changed user-visible UI, update the corresponding page under docs/en/user/
  • Previews updated β€” if you changed UI composables, update the corresponding *Previews.kt file and the screenshot-test baselines
  • Branch naming β€” branches must start with feat/, fix/, chore/, docs/, build/, ci/, refactor/, test/, or deps/

What’s New for Developers

July 2026 β€” Map layer stack (MapLayer.kt, MapLayersManager, GeoJSON/KML import, Site Planner) extracted from the Google flavor into shared androidApp/src/main source (#6148) β€” F-Droid now renders imported overlays via a new OSMdroid-based renderer, so both flavors compile one implementation.

July 2026 β€” Persistence β€” Local Mesh Discovery sessions and cached msh.to device links now persist to Room (DiscoverySessionEntity, DiscoveryPresetResultEntity, DiscoveredNodeEntity, DeviceLinkEntity).

June 2026 β€” Architecture / Codebase β€” Protos migrated from the core/proto git submodule to the org.meshtastic:protobufs Maven artifact; there is no longer a local proto module to build or sync.

June 2026 β€” AIDL/IMeshService removed (#5586). The mesh service is now in-process only, driven entirely through RadioController β€” no cross-process binder, no aidl stubs.

June 2026 β€” Testing β€” Split the screenshot pipeline: the new generate-only :docs-screenshots module holds doc-framed compositions, while :screenshot-tests stays the CI visual-regression gate β€” so reframing a doc image no longer churns a test baseline.

June 2026 β€” New feature modules: feature:discovery (mesh network discovery, #5275) and feature:car (Android Auto / Car App Library, google flavor only, #5633).

June 2026 β€” Testing β€” Added the :baselineprofile module (#5735): a Macrobenchmark cold-start journey generates a Baseline Profile for :androidApp to AOT-compile hot startup paths.

June 2026 β€” Persistence β€” FTS5 full-text message search (#5373): a PacketFts virtual table mirrors Packet.messageText, kept in sync by Room-managed triggers.


Table of contents