mirror of
https://github.com/meshtastic/Meshtastic-Android.git
synced 2026-07-09 04:45:40 -04:00
docs: second-pass audit of docs/en — fix drift and document new features (#6157)
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -34,6 +34,10 @@ Things that trip up first-time contributors — check these before requesting re
|
||||
Keep the last 5–8 entries and trim older ones from the bottom.
|
||||
-->
|
||||
|
||||
**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](developer/persistence) — Local Mesh Discovery sessions and cached `msh.to` device links now persist to Room (`DiscoverySessionEntity`, `DiscoveryPresetResultEntity`, `DiscoveredNodeEntity`, `DeviceLinkEntity`).
|
||||
|
||||
**June 2026** — [Architecture](developer/architecture) / [Codebase](developer/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.
|
||||
@@ -46,9 +50,5 @@ Keep the last 5–8 entries and trim older ones from the bottom.
|
||||
|
||||
**June 2026** — [Persistence](developer/persistence) — FTS5 full-text message search (#5373): a `PacketFts` virtual table mirrors `Packet.messageText`, kept in sync by Room-managed triggers.
|
||||
|
||||
**May 2026** — [Measurement & Formatting](developer/measurement) — New page documenting the `MetricFormatter` API, locale-aware unit conversion patterns, and how to add new measurement types.
|
||||
|
||||
**May 2026** — [Testing](developer/testing) — Compose Preview Screenshot Testing (CST) integrated: `screenshot-tests/` module, `@PreviewTest` wrappers, CI validation, docs asset pipeline.
|
||||
|
||||
<!-- DEV_WHATS_NEW_END -->
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
title: Adding a Feature Module
|
||||
parent: Developer Guide
|
||||
nav_order: 3
|
||||
last_updated: 2026-05-13
|
||||
last_updated: 2026-07-08
|
||||
aliases:
|
||||
- new-module
|
||||
- feature-module
|
||||
@@ -27,7 +27,7 @@ plugins {
|
||||
}
|
||||
|
||||
kotlin {
|
||||
androidLibrary { withHostTest { } }
|
||||
android { withHostTest { isIncludeAndroidResources = true } }
|
||||
|
||||
sourceSets {
|
||||
commonMain.dependencies {
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
title: Codebase
|
||||
parent: Developer Guide
|
||||
nav_order: 2
|
||||
last_updated: 2026-06-11
|
||||
last_updated: 2026-07-08
|
||||
aliases:
|
||||
- repository-layout
|
||||
- project-structure
|
||||
@@ -60,10 +60,9 @@ Meshtastic-Android/
|
||||
├── screenshot-tests/ # Compose Preview screenshot tests (visual-regression gate)
|
||||
├── docs-screenshots/ # Doc-framed composition screenshots (generate-only, not CI-gated)
|
||||
├── build-logic/ # Convention plugins and build helpers
|
||||
│ ├── convention/
|
||||
│ └── flatpak/
|
||||
│ └── convention/
|
||||
├── docs/ # Documentation source (markdown)
|
||||
│ └── en/ # English sources (translations land in docs/{lang}/)
|
||||
│ └── en/ # English source; other locales live under docs/<locale>/user/
|
||||
│ ├── user/
|
||||
│ └── developer/
|
||||
├── gradle/ # Gradle wrapper and version catalog
|
||||
@@ -96,7 +95,7 @@ All build files use Kotlin DSL (`.gradle.kts`). Configuration:
|
||||
|
||||
### Convention Plugins
|
||||
|
||||
Located in `build-logic/convention/src/main/kotlin/org/meshtastic/buildlogic/`:
|
||||
Located in `build-logic/convention/src/main/kotlin/`:
|
||||
|
||||
| Plugin | Purpose |
|
||||
|--------|---------|
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
title: Contributing
|
||||
parent: Developer Guide
|
||||
nav_order: 8
|
||||
last_updated: 2026-05-13
|
||||
last_updated: 2026-07-08
|
||||
aliases:
|
||||
- contributing
|
||||
- pull-request
|
||||
@@ -29,12 +29,12 @@ Branches use conventional-commit style prefixes:
|
||||
| `test/<scope>` | Test additions or fixes |
|
||||
| `deps/<scope>` | Dependency updates |
|
||||
|
||||
Numeric spec prefixes (e.g., `003-app-docs-markdown`) are also valid for spec-driven work.
|
||||
Timestamp-based spec prefixes (`YYYYMMDD-HHMMSS-feature-name`, as created by `/speckit.git.feature`) are also valid for spec-driven work.
|
||||
|
||||
Examples:
|
||||
- `feat/desktop-ble-transport`
|
||||
- `fix/bluetooth-reconnect`
|
||||
- `003-app-docs-markdown`
|
||||
- `20260601-074653-air-quality-telemetry`
|
||||
|
||||
## Development Workflow
|
||||
|
||||
|
||||
@@ -148,6 +148,7 @@ Date and time formatting uses the `DateFormatter` `expect object` with platform-
|
||||
| `formatTime()` | "2:30 PM" |
|
||||
| `formatTimeWithSeconds()` | "2:30:45 PM" |
|
||||
| `formatDate()` | "2026-05-13" |
|
||||
| `formatDateTimeShort()` | "5/13/26 2:30 PM" |
|
||||
|
||||
Unlike `MetricFormatter`, `DateFormatter` is declared with `expect`/`actual` (an `expect object` in `commonMain`, an `actual object` per platform) because date formatting inherently depends on platform locale APIs.
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
title: Navigation & Deep Links
|
||||
parent: Developer Guide
|
||||
nav_order: 4
|
||||
last_updated: 2026-07-01
|
||||
last_updated: 2026-07-08
|
||||
aliases:
|
||||
- deeplinks
|
||||
- navigation-3
|
||||
@@ -57,8 +57,9 @@ https://meshtastic.org/{path} # App Link, android:autoVerify — also open
|
||||
`adb shell am start -a android.intent.action.VIEW -d "meshtastic://meshtastic/{path}"` is the fastest way to
|
||||
trigger any route below from a shell or automation script without touching the UI.
|
||||
|
||||
**Source of truth:** the exhaustive, always-current list of segments lives as KDoc on
|
||||
**Source of truth:** the always-current list of segments lives in the `when` block in
|
||||
[`DeepLinkRouter.route()`](../../../core/navigation/src/commonMain/kotlin/org/meshtastic/core/navigation/DeepLinkRouter.kt)
|
||||
(the class-level KDoc above it is illustrative, not exhaustive)
|
||||
and as executable spec in
|
||||
[`DeepLinkRouterTest.kt`](../../../core/navigation/src/commonTest/kotlin/org/meshtastic/core/navigation/DeepLinkRouterTest.kt).
|
||||
The table below is a snapshot for quick reference — check those two files if it looks out of date.
|
||||
@@ -76,6 +77,7 @@ The table below is a snapshot for quick reference — check those two files if i
|
||||
| `/settings/helpDocs` | `SettingsRoute.HelpDocs` | Docs browser |
|
||||
| `/settings/helpDocs/{pageId}` | `SettingsRoute.HelpDocPage(pageId)` | Specific doc page |
|
||||
| `/settings/help-docs` | `SettingsRoute.HelpDocs` | Compatibility alias |
|
||||
| `/discovery` | `DiscoveryRoute.DiscoveryGraph` | Local Mesh Discovery entry point |
|
||||
| `/settings/local-mesh-discovery/session/{sessionId}` | `DiscoveryRoute.DiscoverySummary(sessionId)` | Discovery session result |
|
||||
| `/nodes` | `NodesRoute.Nodes` | Node list |
|
||||
| `/nodes/{destNum}` | `NodesRoute.NodeDetail(destNum)` | Node detail |
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
title: Persistence
|
||||
parent: Developer Guide
|
||||
nav_order: 6
|
||||
last_updated: 2026-06-11
|
||||
last_updated: 2026-07-08
|
||||
aliases:
|
||||
- room
|
||||
- database
|
||||
@@ -49,6 +49,10 @@ The primary structured data store:
|
||||
| `DeviceHardwareEntity` | Cached device hardware catalog |
|
||||
| `FirmwareReleaseEntity` | Cached firmware release info |
|
||||
| `TracerouteNodePositionEntity` | Traceroute hop position data |
|
||||
| `DiscoverySessionEntity` | A Local Mesh Discovery scan session (timestamp, presets scanned, home preset) |
|
||||
| `DiscoveryPresetResultEntity` | Per-preset result within a discovery session |
|
||||
| `DiscoveredNodeEntity` | Nodes found during a discovery preset scan |
|
||||
| `DeviceLinkEntity` | Cached `msh.to` device links from the Meshtastic API |
|
||||
|
||||
> 💡 **Note:** Waypoints, telemetry, and channel data are stored within the `Packet` entity (using the `port_num` field to distinguish packet types) rather than in separate tables.
|
||||
|
||||
|
||||
@@ -57,7 +57,7 @@ Serial communication over USB:
|
||||
## TCP/IP
|
||||
|
||||
**Module:** `core:network`
|
||||
**Platforms:** Android, Desktop, iOS
|
||||
**Platforms:** Android, Desktop (iOS: code compiles, but there's no iOS app target or `RadioTransportFactory` yet — see Transport Factory below)
|
||||
|
||||
Network-based transport for WiFi-enabled radios:
|
||||
- TCP socket connection to radio's IP address
|
||||
|
||||
@@ -19,6 +19,12 @@ Documentation for using the Meshtastic Android and Desktop app.
|
||||
Keep the last 5–8 entries and archive older ones by removing them.
|
||||
-->
|
||||
|
||||
**July 2026** — [Map & Waypoints](user/map-and-waypoints) — Waypoints can now define a geofence: get notified when nodes enter or leave an area. Creator-only by default, with a per-geofence opt-in for others.
|
||||
|
||||
**July 2026** — [Map & Waypoints](user/map-and-waypoints) — Map Layers (import your own `.kml`/`.kmz`/GeoJSON overlays) and Site Planner (RF coverage estimation) are now available on F-Droid, not just Google Play.
|
||||
|
||||
**July 2026** — [Nodes](user/nodes) — Added a "Nodes per Hop" histogram showing how many nodes sit at each hop distance, filterable to a last-heard time window.
|
||||
|
||||
**July 2026** — [Messages & Channels](user/messages-and-channels) — Documented tap-to-open `@mentions` and on-device message translation (Google Play build only).
|
||||
|
||||
**July 2026** — [Node Metrics](user/node-metrics) — Air Quality now shows an EPA NowCast AQI reading and the CO₂ sensor's own temperature & humidity.
|
||||
@@ -29,11 +35,5 @@ Keep the last 5–8 entries and archive older ones by removing them.
|
||||
|
||||
**June 2026** — [Home Screen Widget](user/widget) — New page covering the Android home screen widget that shows your connected radio's local stats at a glance.
|
||||
|
||||
**June 2026** — [Discovery](user/discovery) — Added the Local Mesh Discovery scanner: a dedicated mode that cycles your radio through LoRa presets, dwells on each to collect packets, and ranks which preset works best at your location.
|
||||
|
||||
**June 2026** — [Node Metrics](user/node-metrics) — Added Air Quality metrics (PM1.0, PM2.5, PM10, and CO₂ with severity color bands), a separate view from the BME680 IAQ reading.
|
||||
|
||||
**June 2026** — [Messages & Channels](user/messages-and-channels) — Added full-text message search within a conversation, with a result counter and previous/next navigation.
|
||||
|
||||
<!-- WHATS_NEW_END -->
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
title: Connections
|
||||
parent: User Guide
|
||||
nav_order: 2
|
||||
last_updated: 2026-06-25
|
||||
last_updated: 2026-07-08
|
||||
description: Connect your phone or desktop to a Meshtastic radio via Bluetooth, USB, or TCP/IP.
|
||||
aliases:
|
||||
- bluetooth
|
||||
@@ -79,8 +79,8 @@ Some Meshtastic radios support WiFi/Ethernet connectivity, allowing TCP-based co
|
||||
1. Make sure the radio is on the same local network as your phone/desktop.
|
||||
2. On the Connect screen, select the **Network** transport filter.
|
||||
3. Choose the radio one of two ways:
|
||||
- **Scan Network Devices** — toggle this on to auto-discover radios that advertise themselves on the local network (mDNS / `_meshtastic._tcp`). Discovered devices appear in the list; tap one to connect.
|
||||
- **Add Network Device Manually** — enter the radio's IP address (or hostname) and port (default: `4403`).
|
||||
- **Scan for network devices** — toggle this on to auto-discover radios that advertise themselves on the local network (mDNS / `_meshtastic._tcp`). Discovered devices appear in the list; tap one to connect.
|
||||
- **Add device manually…** — enter the radio's IP address (or hostname) and port (default: `4403`).
|
||||
4. Previously-used network addresses are remembered under **Recent Network Devices** for quick reconnection (long-press to remove one).
|
||||
|
||||
> 💡 **Tip:** Network discovery uses mDNS, which only works when both devices are on the same subnet. On Android 17+ the app needs the local-network permission for scanning; if discovery finds nothing, add the device manually by IP.
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
title: Debug Logs
|
||||
parent: User Guide
|
||||
nav_order: 22
|
||||
last_updated: 2026-07-01
|
||||
last_updated: 2026-07-08
|
||||
description: View and export the app's own debug logs from inside the app, and attach a capture to a GitHub issue to help diagnose bugs — no adb required.
|
||||
aliases:
|
||||
- debug-logs
|
||||
@@ -44,7 +44,7 @@ Tap the **download** icon to save the current logs to a file. You choose where i
|
||||
|
||||
Attach that file to your GitHub issue.
|
||||
|
||||
> 🔒 **Privacy:** Exports automatically **redact** sensitive values such as channel keys and admin/session keys before writing the file. Even so, logs can contain node names, positions, and other identifying details — glance through the file before sharing it publicly, and share privately if you have any doubt.
|
||||
> 🔒 **Privacy:** Exports automatically **redact** private keys, admin keys, and session passkeys before writing the file. Channel PSKs are **not** redacted, and logs can also contain node names, positions, and other identifying details — glance through the file before sharing it publicly, and share privately if you have any doubt.
|
||||
|
||||
## Desktop
|
||||
|
||||
|
||||
@@ -67,7 +67,7 @@ Bluetooth Low Energy is supported on Desktop via the [Kable](https://github.com/
|
||||
| Map | ✓ | ◐ | Map tab exists on desktop, but the interactive map view is Android-only |
|
||||
| Settings | ✓ | ✓ | Full parity |
|
||||
| Bluetooth (BLE) | ✓ | ✓ | Via Kable on desktop |
|
||||
| Firmware Update | ✓ | ◐ | Desktop supports in-app USB firmware update; BLE/Wi-Fi OTA is Android-only |
|
||||
| Firmware Update | ✓ | ✓ | In-app USB, BLE, and Wi-Fi (ESP32) update all work the same as Android |
|
||||
| Notifications | ✓ | ✓ | Native OS notifications |
|
||||
| Widgets | ✓ | ✗ | Android-only |
|
||||
| Android Auto | ✓ | ✗ | Android-only — not available on Desktop or iOS |
|
||||
@@ -135,7 +135,6 @@ Requirements:
|
||||
|
||||
## Known Limitations
|
||||
|
||||
- Firmware updates over the air (BLE/Wi-Fi) are Android-only; on desktop, use the in-app USB update or the [Web Flasher](https://flasher.meshtastic.org)
|
||||
- The interactive map view is Android-only — the Map tab is present but does not render a map on desktop
|
||||
- Some Android-specific features (widgets, specific notification channels) are unavailable
|
||||
- Performance may vary on low-spec hardware running Compose Desktop
|
||||
@@ -144,7 +143,7 @@ Requirements:
|
||||
## Related Topics
|
||||
|
||||
- [Connections](connections) — connection methods overview
|
||||
- [Firmware Updates](firmware) — in-app USB update on desktop, or the [Web Flasher](https://flasher.meshtastic.org)
|
||||
- [Firmware Updates](firmware) — USB, BLE, and Wi-Fi update all work the same as on Android
|
||||
|
||||
---
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
title: Discovery
|
||||
parent: User Guide
|
||||
nav_order: 12
|
||||
last_updated: 2026-06-11
|
||||
last_updated: 2026-07-08
|
||||
description: Explore your mesh network — the Local Mesh Discovery scanner, traceroute paths, neighbor maps, and node discovery tools.
|
||||
aliases:
|
||||
- mesh-discovery
|
||||
@@ -115,8 +115,8 @@ Each hop represents a relay node that forwarded the message. The SNR and RSSI va
|
||||
|
||||
| What to look for | What it means |
|
||||
|------------------|---------------|
|
||||
| All hops show Good SNR (> 5 dB) | Healthy path — messages flow reliably |
|
||||
| One hop shows Bad SNR (< 0 dB) | Weak link — this relay segment is fragile |
|
||||
| All hops show Good SNR (≥ −7 dB, green) | Healthy path — messages flow reliably |
|
||||
| One hop shows Bad SNR (< −15 dB, red) | Weak link — this relay segment is fragile |
|
||||
| Many hops (4+) | Long path — consider repositioning a node to shorten it |
|
||||
| Different path on retry | Mesh is adapting — multiple routes exist (this is good!) |
|
||||
|
||||
|
||||
@@ -17,7 +17,7 @@ Keep your Meshtastic radio up to date with the latest firmware for new features,
|
||||
|
||||
## Checking for Updates
|
||||
|
||||
1. Open the connected radio's configuration and, under **Advanced**, tap **Firmware Update** — or tap the firmware notification if one is shown. The entry appears only for OTA-capable devices.
|
||||
1. Open the connected radio's configuration and, under **Advanced**, tap **Firmware Update**. The entry appears only for OTA-capable devices.
|
||||
2. The app checks for available firmware versions.
|
||||
3. Available updates show the version number and changelog summary.
|
||||
|
||||
|
||||
@@ -2,13 +2,17 @@
|
||||
title: Map & Waypoints
|
||||
parent: User Guide
|
||||
nav_order: 6
|
||||
last_updated: 2026-06-25
|
||||
description: View node positions on the map, create and share waypoints, and manage position sharing and privacy.
|
||||
last_updated: 2026-07-08
|
||||
description: View node positions on the map, create and share waypoints, manage map layers and Site Planner, and control position sharing and privacy.
|
||||
aliases:
|
||||
- map
|
||||
- waypoints
|
||||
- gps
|
||||
- location
|
||||
- site-planner
|
||||
- map-layers
|
||||
- geojson
|
||||
- kml
|
||||
---
|
||||
|
||||
# Map & Waypoints
|
||||
@@ -52,19 +56,30 @@ Waypoints are shared geographic points of interest that all mesh members can see
|
||||
|
||||
| Property | Description |
|
||||
|----------|-------------|
|
||||
| Name | Short identifier (max 30 characters) |
|
||||
| Name | Short identifier (max 29 characters) |
|
||||
| Description | Optional longer description |
|
||||
| Icon | Visual marker emoji on the map |
|
||||
| Locked | If locked, only the creator can edit or delete |
|
||||
| Expiration | Optional auto-remove time |
|
||||
| Expiration | Optional auto-remove date and time |
|
||||
| Geofence | Optional enter/exit alert area — see below |
|
||||
|
||||
### Waypoint Expiration
|
||||
|
||||
Waypoints can be set to expire automatically:
|
||||
- **Never** (default) — waypoint remains until manually deleted
|
||||
- **Timed** — waypoint is automatically removed after the specified duration (e.g., "remove after 2 hours"). Useful for temporary markers like rally points, hazards, or meeting locations.
|
||||
- **Timed** — pick a specific date and time; the waypoint is automatically removed once that time passes. Useful for temporary markers like rally points, hazards, or meeting locations.
|
||||
|
||||
Expired waypoints are automatically hidden from the map so they don't clutter the display. The expiration countdown begins when the waypoint is created, not when other nodes receive it.
|
||||
Expired waypoints are automatically hidden from the map so they don't clutter the display. The expiration countdown is based on the absolute time you picked, not a duration from when the waypoint was created or received.
|
||||
|
||||
### Waypoint Geofences
|
||||
|
||||
Any waypoint can also define a **geofence** — an alert area — so you or others get notified when a node enters or leaves it:
|
||||
|
||||
1. Set a **geofence radius** from the preset chips (or **Off** to disable), or tap **Set area on map** to draw a custom rectangular area instead.
|
||||
2. Once a region is set, toggle **Notify on enter** and/or **Notify on exit**.
|
||||
3. Optionally enable **Favorites only** to limit alerts to your favorited nodes.
|
||||
|
||||
Since waypoints (and their geofences) are broadcast to the whole mesh, only the **creator** is alerted by default. If someone else shares a geofenced waypoint with you, its detail view offers a **"Notify me of crossings"** opt-in so you can also receive enter/exit alerts for it.
|
||||
|
||||
### Managing Waypoints
|
||||
|
||||
@@ -73,6 +88,14 @@ Expired waypoints are automatically hidden from the map so they don't clutter th
|
||||
- **Locked waypoints** cannot be modified or deleted by other nodes — only the original creator can change them
|
||||
- Unlocked waypoints can be edited by any mesh member
|
||||
|
||||
## Map Layers
|
||||
|
||||
Tap the layers icon on the map to open **Manage Map Layers**, where you can import your own overlays in `.kml`, `.kmz`, or GeoJSON format — either by opening a file with Meshtastic or sharing it into the app from another app. Imported layers are listed with a toggle to show/hide each one and an option to remove it. This is available on both the Google Play and F-Droid builds.
|
||||
|
||||
### Site Planner
|
||||
|
||||
**Site Planner** estimates RF coverage for a transmitter and draws it on the map as a color-coded overlay. Open it from a map control, or from a node's detail page via **Estimate coverage** (shown only for nodes with a known position). Configure the transmitter (location, frequency, TX power, antenna gain and height), the receiver (sensitivity, height), and simulation options (max range, high-resolution terrain, color palette), then run the estimate. Like map layers, Site Planner works on both the Google Play and F-Droid builds.
|
||||
|
||||
## Position Sharing
|
||||
|
||||
### Enabling Position Sharing
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
title: Messages & Channels
|
||||
parent: User Guide
|
||||
nav_order: 3
|
||||
last_updated: 2026-06-25
|
||||
last_updated: 2026-07-08
|
||||
description: Send and receive messages, manage channels, configure encryption, search conversations, and use quick chat, reactions, and message actions.
|
||||
aliases:
|
||||
- channels
|
||||
@@ -57,15 +57,17 @@ Direct messages (DMs) are point-to-point encrypted communications between two sp
|
||||
|
||||
### Message States
|
||||
|
||||
| State | Icon | Meaning |
|
||||
|-------|------|---------|
|
||||
| Queued | ⏳ | Message waiting to be sent |
|
||||
| En route | ✓ | Delivered to the radio, awaiting acknowledgment |
|
||||
| Delivered | ✓✓ | Acknowledgment received from recipient |
|
||||
| Received | ✓ | Message received from the mesh (incoming) |
|
||||
| S&F Routing | 🔗 | Store & Forward: message being routed through an S&F node |
|
||||
| S&F Confirmed | 🔗 | Store & Forward: delivery confirmed via S&F node |
|
||||
| Error | ✗ | Delivery failed after retries |
|
||||
A status label appears under **your own** outgoing messages only (incoming messages from others show no status label):
|
||||
|
||||
| State | Meaning |
|
||||
|-------|---------|
|
||||
| Sending… | Queued or already handed to the radio, not yet resolved either way (queued and en-route both show this same text) |
|
||||
| Delivered to recipient | The strongest confirmation for a direct message — an acknowledgment came back |
|
||||
| Delivered to mesh | For a channel broadcast, the message reached the mesh (broadcasts have no per-recipient ack) |
|
||||
| Relayed, not confirmed by recipient | For a direct message, shown in a warning color — the message was relayed but no acknowledgment has come back yet |
|
||||
| Routing via SF++ chain… | Being routed/buffered by the Store & Forward Plus Plus chain |
|
||||
| Confirmed on SF++ chain | Confirmed delivered via the SF++ chain |
|
||||
| Error | Delivery failed — tap the status for the specific reason (see Delivery Errors below) |
|
||||
|
||||
### Delivery Errors
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
title: Node Metrics
|
||||
parent: User Guide
|
||||
nav_order: 5
|
||||
last_updated: 2026-06-25
|
||||
last_updated: 2026-07-08
|
||||
description: Telemetry dashboards for each mesh node — device health, environment sensors, air quality, signal quality, power, traceroute, and position history.
|
||||
aliases:
|
||||
- metrics
|
||||
@@ -104,8 +104,8 @@ Signal quality is rated from **SNR relative to the active LoRa modem preset's de
|
||||
| Quality | Criteria |
|
||||
|---------|----------|
|
||||
| Good | SNR above the preset's limit |
|
||||
| Fair | up to 5.5 dB below the limit |
|
||||
| Bad | between 5.5 dB and 7.5 dB below the limit |
|
||||
| Fair | less than 5.5 dB below the limit |
|
||||
| Bad | 5.5 dB to 7.5 dB below the limit |
|
||||
| None | more than 7.5 dB below the limit |
|
||||
|
||||
See [Understanding the Signal Meter](signal-meter) for the full explanation.
|
||||
|
||||
@@ -2,12 +2,13 @@
|
||||
title: Nodes
|
||||
parent: User Guide
|
||||
nav_order: 4
|
||||
last_updated: 2026-06-25
|
||||
last_updated: 2026-07-08
|
||||
description: Browse, filter, and sort mesh nodes — view details, signal quality, roles, and quick actions.
|
||||
aliases:
|
||||
- node-list
|
||||
- mesh-nodes
|
||||
- peers
|
||||
- hop-histogram
|
||||
---
|
||||
|
||||
# Nodes
|
||||
@@ -121,6 +122,10 @@ Type in the search field to filter nodes by name or short name. The filter updat
|
||||
| **Via MQTT** | Grouped by MQTT vs. radio-heard |
|
||||
| **Favorites** | Favorited nodes first |
|
||||
|
||||
## Nodes per Hop
|
||||
|
||||
Tap the hop-histogram icon in the node list's app bar to open a bar chart of how many nodes sit at each hop distance (0 = direct, 1 = one relay away, and so on). Filter the chart to a **last heard** window — All time, 1 hour, 8 hours, or 24 hours — to see how the mesh looks right now versus over a longer period. It's a quick way to gauge how busy and spread out your local mesh is.
|
||||
|
||||
## Node Detail
|
||||
|
||||
Tapping a node opens the detail view with comprehensive information. See [Node Metrics](node-metrics) for full details on metrics and telemetry.
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
title: Getting Started
|
||||
parent: User Guide
|
||||
nav_order: 1
|
||||
last_updated: 2026-05-13
|
||||
last_updated: 2026-07-08
|
||||
description: First-launch setup — permissions, onboarding flow, and next steps after connecting your radio.
|
||||
aliases:
|
||||
- first-launch
|
||||
@@ -60,10 +60,10 @@ If denied, Bluetooth scanning will not function and your node will not report a
|
||||
|
||||
Notifications alert you to:
|
||||
- Incoming messages from channels and direct messages
|
||||
- Connection status changes (connected, disconnected, reconnecting)
|
||||
- Firmware update availability
|
||||
- New nodes joining the mesh
|
||||
- Low battery on a remote node
|
||||
|
||||
> 💡 **Tip:** You can fine-tune notification preferences later in Android system settings. The app creates separate notification channels for messages, connection events, and background service status.
|
||||
> 💡 **Tip:** You can fine-tune notification preferences later in Android system settings — the app creates a separate notification channel per category (plus a few internal ones, like the background service), so you can enable or silence them individually.
|
||||
|
||||
### Critical Alerts Permission
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
title: Settings — Modules & Admin
|
||||
parent: User Guide
|
||||
nav_order: 8
|
||||
last_updated: 2026-05-20
|
||||
last_updated: 2026-07-08
|
||||
description: Configure optional feature modules (MQTT, telemetry, canned messages, TAK, and more) and perform device administration.
|
||||
aliases:
|
||||
- modules
|
||||
@@ -81,10 +81,11 @@ Buffers messages for nodes that were temporarily offline, then replays them when
|
||||
| Setting | Description |
|
||||
|---------|-------------|
|
||||
| Enabled | Activate store and forward |
|
||||
| Heartbeat (s) | Announcement interval |
|
||||
| Heartbeat | Periodically announce this node's store-and-forward capability |
|
||||
| Records | Maximum stored messages |
|
||||
| History Return (max) | Max messages to replay |
|
||||
| History Return (window) | Time window for replay |
|
||||
| Server | Act as a store-and-forward server for the mesh (requires ample memory, e.g. ESP32 with PSRAM) |
|
||||
|
||||
> 💡 **Tip:** Store and Forward works best on nodes with ample memory (ESP32 with PSRAM). Router nodes are ideal candidates since they're typically always-on.
|
||||
|
||||
@@ -145,6 +146,7 @@ GPIO control over the mesh network. Allows a remote node to read or write GPIO p
|
||||
|---------|-------------|
|
||||
| Enabled | Activate remote GPIO access |
|
||||
| Allow Undefined Pins | Allow access to any GPIO pin (security risk) |
|
||||
| Available Pins | Up to 4 GPIO pins this node exposes for remote read/write |
|
||||
|
||||
> ⚠️ **Warning:** Enabling "Allow Undefined Pins" gives remote nodes access to all GPIO pins, which could interfere with the radio's own hardware. Only enable on dedicated GPIO nodes.
|
||||
|
||||
@@ -156,6 +158,7 @@ Broadcasts information about directly heard neighbors, enabling mesh topology ma
|
||||
|---------|-------------|
|
||||
| Enabled | Activate neighbor broadcasting |
|
||||
| Update Interval (s) | How often to broadcast neighbor list |
|
||||
| Transmit Over LoRa | Also broadcast neighbor info over LoRa, not just MQTT/phone. Unavailable on a channel using the default key and name |
|
||||
|
||||
See [Discovery](discovery) for how to use neighbor data for mesh topology exploration.
|
||||
|
||||
@@ -165,8 +168,8 @@ Controls onboard NeoPixel or other addressable RGB LEDs on supported hardware. C
|
||||
|
||||
| Setting | Description |
|
||||
|---------|-------------|
|
||||
| Enabled | Activate LED control |
|
||||
| LED State | On, Off, or set specific color |
|
||||
| LED State | Turn the LED on or off |
|
||||
| Current | LED current limit (0–31) |
|
||||
| Red / Green / Blue | Individual color channel values (0–255) |
|
||||
|
||||
### Detection Sensor Module
|
||||
@@ -177,7 +180,8 @@ Turns your node into a motion or door sensor alert system. When a GPIO pin detec
|
||||
|---------|-------------|
|
||||
| Enabled | Activate detection sensor |
|
||||
| Monitor Pin | GPIO pin connected to sensor |
|
||||
| Detection Triggered High | Trigger when pin goes high (vs. low) |
|
||||
| Detection Trigger Type | How the pin's state maps to a detection event (e.g. active high/low, edge-triggered) |
|
||||
| Use Input Pullup Mode | Enable the pin's internal pull-up resistor |
|
||||
| Minimum Broadcast (s) | Minimum time between alert broadcasts |
|
||||
| State Broadcast (s) | Periodic state broadcast interval |
|
||||
| Send Bell | Include bell character in alerts |
|
||||
@@ -225,10 +229,7 @@ Remotely reboot a connected or administered node.
|
||||
|
||||
### Debug Panel
|
||||
|
||||
View detailed diagnostic information:
|
||||
- Protocol buffers debug output
|
||||
- Mesh packet log
|
||||
- Connection state details
|
||||
Opens the **Packets** and **App logs** tabs for viewing, filtering, and exporting diagnostic output. See [Debug Logs](debug-logs) for the full walkthrough.
|
||||
|
||||
### Troubleshooting Remote Admin
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
title: Settings — Radio & User
|
||||
parent: User Guide
|
||||
nav_order: 7
|
||||
last_updated: 2026-05-20
|
||||
last_updated: 2026-07-08
|
||||
description: Configure your radio hardware, LoRa presets, user profile, position sharing, power management, and security.
|
||||
aliases:
|
||||
- settings
|
||||
@@ -59,19 +59,19 @@ After modifying settings, tap **Save** to write the configuration to your radio.
|
||||
|
||||
| Preset | Range | Speed | SNR Limit | Best For |
|
||||
|--------|-------|-------|-----------|----------|
|
||||
| Short Turbo | ~1 km | 21.9 kbps | −5 dB | Dense urban with line-of-sight; data-heavy applications |
|
||||
| Short Turbo | ~1 km | 21.9 kbps | −7.5 dB | Dense urban with line-of-sight; data-heavy applications |
|
||||
| Short Fast | ~3 km | 10.9 kbps | −7.5 dB | Urban neighborhoods; buildings within a few blocks |
|
||||
| Short Slow | ~5 km | 5.5 kbps | −10 dB | Suburban short-range; moderate building density |
|
||||
| Medium Fast | ~5 km | 5.5 kbps | −10 dB | Suburban areas; moderate building density |
|
||||
| Medium Slow | ~8 km | 1.1 kbps | −12.5 dB | Suburban/rural; moderate range with slower speed |
|
||||
| Long Turbo | ~10 km | 4.4 kbps | −10 dB | Similar range to Long Fast but with 500 kHz bandwidth; faster throughput |
|
||||
| Long Fast | ~10 km | 1.1 kbps | −12.5 dB | **General use (default)** — balanced range and speed |
|
||||
| Long Moderate | ~20 km | 0.34 kbps | −15 dB | Rural with some terrain; occasional use |
|
||||
| Lite Fast | ~5 km | 5.5 kbps | −10 dB | EU 866 MHz SRD band (125 kHz BW); comparable to Medium Fast |
|
||||
| Lite Slow | ~10 km | 1.1 kbps | −12.5 dB | EU 866 MHz SRD band (125 kHz BW); comparable to Long Fast |
|
||||
| Medium Fast | ~5 km | 5.5 kbps | −12.5 dB | Suburban areas; moderate building density |
|
||||
| Medium Slow | ~8 km | 1.1 kbps | −15 dB | Suburban/rural; moderate range with slower speed |
|
||||
| Long Turbo | ~10 km | 4.4 kbps | −12.5 dB | Similar range to Long Fast but with 500 kHz bandwidth; faster throughput |
|
||||
| Long Fast | ~10 km | 1.1 kbps | −17.5 dB | **General use (default)** — balanced range and speed |
|
||||
| Long Moderate | ~20 km | 0.34 kbps | −17.5 dB | Rural with some terrain; occasional use |
|
||||
| Lite Fast | ~5 km | 5.5 kbps | −12.5 dB | EU 866 MHz SRD band (125 kHz BW); comparable to Medium Fast |
|
||||
| Lite Slow | ~10 km | 1.1 kbps | −15 dB | EU 866 MHz SRD band (125 kHz BW); comparable to Long Fast |
|
||||
| Narrow Fast | ~5 km | 2.7 kbps | −10 dB | EU 868 MHz band (62.5 kHz BW); avoids interference with other devices |
|
||||
| Narrow Slow | ~10 km | 1.1 kbps | −12.5 dB | EU 868 MHz band (62.5 kHz BW); comparable to Long Fast |
|
||||
| ~~Long Slow~~ | ~30 km | 0.18 kbps | −17.5 dB | ⚠️ **Deprecated** — still selectable but may be removed in a future firmware release |
|
||||
| ~~Long Slow~~ | ~30 km | 0.18 kbps | −20 dB | ⚠️ **Deprecated** — still selectable but may be removed in a future firmware release |
|
||||
| ~~Very Long Slow~~ | ~40+ km | 0.09 kbps | −20 dB | ⚠️ **Deprecated** — still selectable but may be removed in a future firmware release |
|
||||
|
||||
> ℹ️ **Note:** This table uses the common short names. In the app's preset dropdown they read as **Short Range - Fast**, **Long Range - Fast**, **Lite - Fast**, **Narrow - Fast**, and so on.
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
title: How the Meshtastic Signal Meter Works
|
||||
parent: User Guide
|
||||
nav_order: 15
|
||||
last_updated: 2026-06-25
|
||||
last_updated: 2026-07-08
|
||||
description: How the signal meter rates quality from SNR relative to the LoRa modem preset — spread spectrum, presets, and what the bars really mean.
|
||||
aliases:
|
||||
- signal
|
||||
@@ -54,8 +54,8 @@ Because the rating is relative to the preset limit, the *same* SNR can rate diff
|
||||
| Level | Bars | Criteria | Meaning |
|
||||
|-------|------|----------|---------|
|
||||
| Good | 3 | SNR **above** the preset's `limit` | Signal is comfortably above the demodulation floor — healthy connection. |
|
||||
| Fair | 2 | up to `5.5 dB` below the `limit` | Decodable, but getting close to the floor. |
|
||||
| Bad | 1 | between `5.5 dB` and `7.5 dB` below the `limit` | At the very edge of what the preset can recover. |
|
||||
| Fair | 2 | less than `5.5 dB` below the `limit` | Decodable, but getting close to the floor. |
|
||||
| Bad | 1 | `5.5 dB` to `7.5 dB` below the `limit` | At the very edge of what the preset can recover. |
|
||||
| None | 0 | more than `7.5 dB` below the `limit` | Below the floor — transmission lost to noise. |
|
||||
|
||||
> **Note:** The fixed SNR thresholds you may have seen elsewhere (`-7 dB` / `-15 dB`) are now only used for coloring individual hops in traceroute results — not for the per-node signal meter described here.
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
title: TAK Integration
|
||||
parent: User Guide
|
||||
nav_order: 10
|
||||
last_updated: 2026-05-13
|
||||
last_updated: 2026-07-08
|
||||
description: Interoperate with ATAK and WinTAK — CoT position sharing, TAK roles, and plugin setup.
|
||||
aliases:
|
||||
- tak
|
||||
@@ -78,24 +78,23 @@ When using TAK roles, your node broadcasts identity information that appears on
|
||||
|
||||
| Setting | Description |
|
||||
|---------|-------------|
|
||||
| Team | Your team color on the TAK map (e.g., Blue, Red, Cyan, Green) |
|
||||
| Role | Your operational role (Team Member, Team Lead, HQ, Medic, RTO, etc.) |
|
||||
| Callsign | Your TAK callsign (defaults to your Meshtastic long name) |
|
||||
| Team Color | Your team color on the TAK map (e.g., Blue, Red, Cyan, Green) |
|
||||
| Member Role | Your operational role (Team Member, Team Lead, HQ, Medic, RTO, etc.) |
|
||||
|
||||
These settings appear in **Settings → Module Config → TAK** when the TAK module is enabled.
|
||||
These settings appear in **Settings → Module Config → TAK** when the TAK module is enabled. Your TAK callsign isn't a separate setting — it's derived automatically from your Meshtastic node name.
|
||||
|
||||
> 💡 **Tip:** Team/role colors are the standard TAK affiliation colors. Coordinate with your TAK team to use consistent team assignments.
|
||||
|
||||
## Wire Format (V1 / V2)
|
||||
|
||||
Meshtastic supports two TAK wire formats:
|
||||
Meshtastic supports two TAK wire formats, chosen automatically based on the connected radio's firmware — no manual configuration needed:
|
||||
|
||||
| Format | Compatibility | Features |
|
||||
|--------|--------------|----------|
|
||||
| V1 (Legacy) | ATAK Plugin v1.x, older firmware | Basic CoT position sharing only |
|
||||
| V2 (Current) | ATAK Plugin v2.x, firmware 2.3+ | Full CoT support including chat, routes, zstd compression |
|
||||
| V1 (Legacy) | Firmware 2.7.x and older | Bare protobuf encoding on port 72. Supports position sharing (PLI) and chat (GeoChat) only — shapes, markers, routes, and other typed CoT events are dropped |
|
||||
| V2 (Current) | Firmware 2.8.0+ | Compact, zstd-compressed encoding on port 78. Adds shapes, markers, routes, aircraft, casevac, emergency, and task CoT types on top of everything V1 supports |
|
||||
|
||||
The app automatically selects V2 when both sides support it. No manual configuration needed — the TAK module negotiates format based on firmware capabilities.
|
||||
A node still relays legacy V1 packets from older nodes even while running V2 itself, so mixed-firmware meshes keep working.
|
||||
|
||||
## Usage with ATAK
|
||||
|
||||
@@ -114,7 +113,7 @@ Once configured:
|
||||
| Node doesn't appear on ATAK map | TAK module disabled or wrong role | Verify TAK module is enabled and node role is TAK or TAK Tracker |
|
||||
| Position updates are stale | GPS fix lost or interval too long | Check GPS status; reduce position broadcast interval in Position Config |
|
||||
| ATAK plugin shows "disconnected" | BLE connection lost or plugin crashed | Reconnect Bluetooth in Meshtastic app, then restart ATAK plugin |
|
||||
| Chat messages not bridging | V1 format doesn't support chat | Ensure both nodes run firmware 2.3+ for V2 wire format |
|
||||
| Shapes, markers, or routes not bridging | Sending node is on legacy V1 (firmware 2.7.x or older) | Update the sending node's firmware to 2.8.0+ for V2 wire format |
|
||||
| CoT data not flowing | Channel mismatch | All TAK nodes must be on the same channel with matching encryption |
|
||||
|
||||
## Security Considerations
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
title: Units, Measurement & Locale
|
||||
parent: User Guide
|
||||
nav_order: 16
|
||||
last_updated: 2026-05-12
|
||||
last_updated: 2026-07-08
|
||||
description: How the app formats temperature, distance, speed, and other measurements based on your device locale.
|
||||
---
|
||||
|
||||
@@ -14,7 +14,7 @@ The Meshtastic app automatically displays temperatures, distances, speeds, and t
|
||||
|
||||
## How It Works
|
||||
|
||||
Meshtastic radios always transmit data in **metric units** (meters, °C, km/h, hPa, etc.). When the app receives this data, it converts and displays values in whatever unit system your device's locale specifies.
|
||||
Meshtastic radios always transmit data in **metric units** (meters, °C, m/s, hPa, etc.). When the app receives this data, it converts and displays values in whatever unit system your device's locale specifies.
|
||||
|
||||
On Android, your measurement preferences are determined by your system **Language & Region** settings. On Desktop (JVM), the app uses the JVM's default `Locale`.
|
||||
|
||||
|
||||
Reference in New Issue
Block a user