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 spotlessApplyto auto-format, then verify withspotlessCheck - Detekt passes β run
./gradlew detektand fix all reported issues - All tests pass β run
./gradlew test allTests(both are needed:testcovers Android-only modules,allTestscovers KMP) - Screenshot tests pass β if you touched any Compose UI, run
./gradlew :screenshot-tests:validateDebugScreenshotTestand update reference images if needed - Protos are an external dependency β protobuf models come from the
org.meshtastic:protobufsMaven artifact (pinned ingradle/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.ktfile and the screenshot-test baselines - Branch naming β branches must start with
feat/,fix/,chore/,docs/,build/,ci/,refactor/,test/, ordeps/
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.