diff --git a/androidApp/src/main/assets/firmware_releases.json b/androidApp/src/main/assets/firmware_releases.json
index 2e4550d9c..463821f80 100644
--- a/androidApp/src/main/assets/firmware_releases.json
+++ b/androidApp/src/main/assets/firmware_releases.json
@@ -188,6 +188,12 @@
]
},
"pullRequests": [
+ {
+ "id": "10937",
+ "title": "Update meshtastic/device-ui digest to effbb92",
+ "page_url": "https://github.com/meshtastic/firmware/pull/10937",
+ "zip_url": "https://img.shields.io/badge/Flash_this_PR_in_the_Web_Flasher-2C2D3C?style=for-the-badge"
+ },
{
"id": "10936",
"title": "Snake!",
@@ -319,12 +325,6 @@
"title": "Add helpful checks of channel names and PSK",
"page_url": "https://github.com/meshtastic/firmware/pull/10792",
"zip_url": "https://img.shields.io/badge/Flash_this_PR_in_the_Web_Flasher-2C2D3C?style=for-the-badge"
- },
- {
- "id": "10791",
- "title": "T5S3 ePaper build fix ",
- "page_url": "https://github.com/meshtastic/firmware/pull/10791",
- "zip_url": "https://img.shields.io/badge/Flash_this_PR_in_the_Web_Flasher-2C2D3C?style=for-the-badge"
}
]
}
\ No newline at end of file
diff --git a/core/resources/src/commonMain/composeResources/values-et/strings.xml b/core/resources/src/commonMain/composeResources/values-et/strings.xml
index e41bcc45c..d51e69831 100644
--- a/core/resources/src/commonMain/composeResources/values-et/strings.xml
+++ b/core/resources/src/commonMain/composeResources/values-et/strings.xml
@@ -28,6 +28,7 @@
ühenduses
roll %1$s
signaal %1$s
+ Hüpet %1$d: %2$d seadmeni
Nõustu
Tänusõnad
@@ -691,6 +692,8 @@
Peida parool
Ajalookirjete maksimaalne arv
Ajalookirjete aken
+ Selles akna sõlmedest pole ühtegi kuulda
+ Sõlme hüppe kohta
Hüpete arv
Hüppe kaugusel
Host
diff --git a/core/resources/src/commonMain/composeResources/values-fi/strings.xml b/core/resources/src/commonMain/composeResources/values-fi/strings.xml
index 0bdf2d1cc..5d2e78582 100644
--- a/core/resources/src/commonMain/composeResources/values-fi/strings.xml
+++ b/core/resources/src/commonMain/composeResources/values-fi/strings.xml
@@ -28,6 +28,7 @@
online-tilassa
rooli %1$s
signaali %1$s
+ Hyppy %1$d: %2$d radiota
Hyväksy
Kiitokset
@@ -215,6 +216,8 @@
Sulje
Sulje valinta
CO₂
+ CO₂ kosteus
+ CO₂ lämpötila
CODEC 2 käytössä
CODEC2 näytteenottotaajuus
Koodausnopeus
@@ -731,6 +734,8 @@
Piilota salasana
Historian maksimimäärä
Historian aikamäärä
+ Tässä näkymässä ei kuultu yhtään radiota
+ Radiot hyppymäärän mukaan
Hyppyjen määrä
Hyppyjä
Isäntälaite
@@ -1484,7 +1489,31 @@
Signaali
Signaalin laatu
+ Site Planner
+ Antennin vahvistus (dBi)
+ Antennin korkeus (m)
+ Väripaletti
+ Arvio peittoalueesta
+ Arvioidaan peittoaluetta…
+ Peittoalueen arviointi epäonnistui
+ Taajuus (MHz)
+ Korkearesoluutioinen maasto
+ Anna arvo väliltä −90...90
+ Anna arvo väliltä −180...180
+ Arvon on oltava suurempi kuin 0
+ Anna arvo väliltä −150...−30 dBm
+ Enimmäisetäisyys (km)
+ Vastaanottimen korkeus (m)
+ Vastaanottimen herkkyys (dBm)
Näyttö
+ Vastaanotin
+ Simulaation asetukset
+ Sivusto / lähetin
+ Arvio lähettimen kuuluvuusalueesta
+ TX-lähetysteho (W)
+ Käytä nykyistä sijaintia
+ Käytä kartan keskikohtaa
+ Käytä nykyistä radion sijaintia
Ohita
Paikka
Älykäs sijainti
diff --git a/docs/ar-rSA/user/android-auto.md b/docs/ar-rSA/user/android-auto.md
index 26aeb6e30..dfc7931cd 100644
--- a/docs/ar-rSA/user/android-auto.md
+++ b/docs/ar-rSA/user/android-auto.md
@@ -2,7 +2,7 @@
title: Android Auto
parent: User Guide
nav_order: 18
-last_updated: 2026-06-11
+last_updated: 2026-07-07
description: Use Meshtastic hands-free on an Android Auto head unit — read messages aloud, reply by voice, and check nodes and mesh status while driving.
aliases:
- android-auto
@@ -17,9 +17,11 @@ Meshtastic integrates with Android Auto so you can stay in touch with your mesh
> ⚠️ **Note:** Android Auto support is available on **Google-flavor Android builds only**. It is not included in the F-Droid build, and it is not available on Desktop or iOS.
+> ℹ️ **What ships today:** The Google Play build provides **notification-only** car messaging — incoming messages are announced on the head unit and you reply through its notification controls. The full tabbed **Messages / Nodes / Status** experience described below is a beta built on the Android Car App Library (Google's templated car UI is currently restricted to Closed/Internal Play tracks), so it appears only in builds compiled with `-PenableCarTemplates=true`. The rest of this page documents that beta experience.
+
## Overview
-When your phone is connected to an Android Auto head unit (or the Desktop Head Unit emulator used for development), Meshtastic appears as a messaging app built with the Android Car App Library. The car interface presents a tabbed Home screen optimized for driving-safe, glanceable use:
+When your phone is connected to an Android Auto head unit (or the Desktop Head Unit emulator used for development), the beta build presents Meshtastic as a messaging app built with the Android Car App Library, with a tabbed Home screen optimized for driving-safe, glanceable use:
- **Messages** — recent conversations, with hands-free reading and replies.
- **Nodes** — the mesh node list, with a node-detail view.
diff --git a/docs/ar-rSA/user/connections.md b/docs/ar-rSA/user/connections.md
index 9fd10203b..c5f291531 100644
--- a/docs/ar-rSA/user/connections.md
+++ b/docs/ar-rSA/user/connections.md
@@ -23,7 +23,7 @@ Bluetooth Low Energy is the default and most common connection method on Android
1. Ensure your Meshtastic radio is powered on and in pairing mode.
2. Open the app and navigate to the **Connect** tab.
-3. Tap **Scan for Devices** — nearby Meshtastic radios will appear.
+3. Tap **Scan for Bluetooth devices** — nearby Meshtastic radios will appear.
4. Select your device from the list.
5. Accept the Bluetooth pairing prompt if shown.
diff --git a/docs/ar-rSA/user/desktop.md b/docs/ar-rSA/user/desktop.md
index 718964767..f9e3875f0 100644
--- a/docs/ar-rSA/user/desktop.md
+++ b/docs/ar-rSA/user/desktop.md
@@ -2,7 +2,7 @@
title: Desktop App
parent: User Guide
nav_order: 14
-last_updated: 2026-06-11
+last_updated: 2026-07-07
description: Install and use the Meshtastic Desktop app on Linux, macOS, and Windows — connections, feature parity, and keyboard shortcuts.
aliases:
- desktop
@@ -60,19 +60,19 @@ Bluetooth Low Energy is supported on Desktop via the [Kable](https://github.com/
## Feature Parity
-| Feature | Android | Desktop | Notes |
-| -------------------------------------------- | ------- | ------- | ---------------------------------------------- |
-| Messaging | ✓ | ✓ | Full parity |
-| Node List | ✓ | ✓ | Full parity |
-| الخريطة | ✓ | ✓ | Full parity |
-| الإعدادات | ✓ | ✓ | Full parity |
-| Bluetooth (BLE) | ✓ | ✓ | Via Kable on desktop |
-| Firmware Update OTA | ✓ | ✗ | Use web flasher |
-| Notifications | ✓ | ✓ | Native OS notifications |
-| Widgets | ✓ | ✗ | Android-only |
-| Android Auto | ✓ | ✗ | Android-only — not available on Desktop or iOS |
-| AI Assistant (Chirpy) | ✓\* | ✗ | Google flavor Android only |
-| App Functions (system AI) | ✓† | ✗ | Google flavor Android only |
+| Feature | Android | Desktop | Notes |
+| -------------------------------------------- | ------- | ------- | -------------------------------------------------------------------------- |
+| Messaging | ✓ | ✓ | Full parity |
+| Node List | ✓ | ✓ | Full parity |
+| الخريطة | ✓ | ◐ | Map tab exists on desktop, but the interactive map view is Android-only |
+| الإعدادات | ✓ | ✓ | Full parity |
+| Bluetooth (BLE) | ✓ | ✓ | Via Kable on desktop |
+| Firmware Update | ✓ | ◐ | Desktop supports in-app USB firmware update; BLE/Wi-Fi OTA is Android-only |
+| Notifications | ✓ | ✓ | Native OS notifications |
+| Widgets | ✓ | ✗ | Android-only |
+| Android Auto | ✓ | ✗ | Android-only — not available on Desktop or iOS |
+| AI Assistant (Chirpy) | ✓\* | ✗ | Google flavor Android only |
+| App Functions (system AI) | ✓† | ✗ | Google flavor Android only |
\*Chirpy AI requires Android 14+ on Google flavor builds with supported hardware.
@@ -84,14 +84,17 @@ The Desktop app uses the same Compose Multiplatform UI with adaptations for larg
### Keyboard Shortcuts
-| Shortcut | Action |
-| ------------------- | ---------------------- |
-| **⌘Q** / **Ctrl+Q** | Quit the application |
-| **⌘,** / **Ctrl+,** | Open Settings |
-| **⌘1** / **Ctrl+1** | Switch to Messages tab |
-| **⌘2** / **Ctrl+2** | Switch to Nodes tab |
-| **⌘3** / **Ctrl+3** | Switch to Map tab |
-| **⌘4** / **Ctrl+4** | Switch to Connect tab |
+All shortcuts use the **Meta** key — that's ⌘ (Command) on macOS and the Super / Windows key on Linux and Windows. (`Ctrl` is not bound.)
+
+| Shortcut | Action |
+| ---------- | ---------------------- |
+| **Meta+Q** | Quit the application |
+| **Meta+,** | Open Settings |
+| **Meta+1** | Switch to Messages tab |
+| **Meta+2** | Switch to Nodes tab |
+| **Meta+3** | Switch to Map tab |
+| **Meta+4** | Switch to Connect tab |
+| **Meta+/** | Open About |
### Window & System Tray
@@ -123,7 +126,6 @@ Individual doc pages render with full formatting:
```bash
git clone https://github.com/meshtastic/Meshtastic-Android.git
cd Meshtastic-Android
-git submodule update --init
./gradlew :desktopApp:run
```
@@ -134,7 +136,8 @@ Requirements:
## Known Limitations
-- No OTA firmware updates (use web flasher)
+- 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
- BLE bonding is not yet supported on desktop (pairing works without bonding)
@@ -142,7 +145,7 @@ Requirements:
## Related Topics
- [Connections](connections) — connection methods overview
-- [Firmware Updates](firmware) — use the [Web Flasher](https://flasher.meshtastic.org) for desktop firmware updates
+- [Firmware Updates](firmware) — in-app USB update on desktop, or the [Web Flasher](https://flasher.meshtastic.org)
---
diff --git a/docs/ar-rSA/user/discovery.md b/docs/ar-rSA/user/discovery.md
index dd9d2b83d..12f2db5ba 100644
--- a/docs/ar-rSA/user/discovery.md
+++ b/docs/ar-rSA/user/discovery.md
@@ -44,7 +44,6 @@ Before starting, configure these controls:
The **Start** button stays disabled — with an explanation of why — until the scan can run. Common reasons it's disabled:
- The device is **not connected**.
-- The current channel is using the **default channel key** (use a unique key first — see [Messages & Channels](messages-and-channels)).
- **No presets** have been selected to scan.
- The selected preset uses **2.4 GHz**, which your hardware doesn't support.
diff --git a/docs/ar-rSA/user/firmware.md b/docs/ar-rSA/user/firmware.md
index 36340e3b0..1cecf0a44 100644
--- a/docs/ar-rSA/user/firmware.md
+++ b/docs/ar-rSA/user/firmware.md
@@ -2,8 +2,8 @@
title: Firmware Updates
parent: User Guide
nav_order: 13
-last_updated: 2026-05-13
-description: Update your radio firmware over Bluetooth — OTA process, version channels, pre-flight checks, and recovery.
+last_updated: 2026-07-07
+description: Update your radio firmware over Bluetooth or USB — OTA process, version channels, pre-flight checks, and recovery.
aliases:
- firmware
- update
@@ -17,7 +17,7 @@ Keep your Meshtastic radio up to date with the latest firmware for new features,
## Checking for Updates
-1. Navigate to **Settings → Firmware Update** or tap the firmware notification if shown.
+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.
2. The app checks for available firmware versions.
3. Available updates show the version number and changelog summary.
@@ -39,19 +39,26 @@ The most common update method for Android users:

-### USB Flashing
+### In-App USB Update
-For recovery or when OTA is unavailable:
+When your radio is connected over **USB/serial** (rather than Bluetooth), the Firmware Update screen offers **USB File Transfer**. The app reboots the device into DFU mode, then prompts you to save the `.uf2` file to the device's DFU drive using the system file picker. This option appears only on a USB/serial connection — it is not available over Bluetooth.
+
+> ℹ️ **nRF bootloader note:** Some devices (e.g. RAK WisBlock RAK4631) need their bootloader flashed with the vendor's serial DFU tool (such as `adafruit-nrfutil`) — copying the `.uf2` alone won't update the bootloader. The app surfaces a hint when this applies.
+
+### Other Flashing Options
+
+For recovery or when neither OTA nor in-app USB is available:
- Use the [Meshtastic Web Flasher](https://flasher.meshtastic.org)
- Or the [Meshtastic CLI tool](https://meshtastic.org/docs/getting-started/flashing-firmware) on desktop
## Version Channels
-| عربي | الوصف |
-| ------ | ------------------------------------------- |
-| Stable | Recommended for most users; tested releases |
-| Alpha | Preview releases; may contain bugs |
+| عربي | الوصف |
+| ---------- | -------------------------------------------------------------------------- |
+| Stable | Recommended for most users; tested releases |
+| Alpha | Preview releases; may contain bugs |
+| Local File | Flash a firmware file you select yourself, instead of a downloaded release |
## Pre-Update Checklist
@@ -73,7 +80,7 @@ Once the update succeeds:
- The radio will reboot automatically
- Bluetooth connection will re-establish
- Verify your settings are intact
-- Check the firmware version in **Settings → About**
+- Confirm the new version under **Currently Installed** on the Firmware Update screen — it's also shown on the node's detail page and the Connections screen

diff --git a/docs/ar-rSA/user/messages-and-channels.md b/docs/ar-rSA/user/messages-and-channels.md
index d6c6f8474..7cdbecdb9 100644
--- a/docs/ar-rSA/user/messages-and-channels.md
+++ b/docs/ar-rSA/user/messages-and-channels.md
@@ -116,12 +116,16 @@ You can search the full history of any conversation directly from the chat scree

-> 💡 **Tip:** Search is full-text and stays within the conversation you opened it from — it doesn't search across other channels or contacts. Matching is fast even on long histories because messages are indexed locally.
+> 💡 **Tip:** Search is full-text and stays within the conversation you opened it from — it doesn't search across other channels or contacts. It matches against the messages already stored on your device, so it works fully offline.
### Message Bubbles
Messages appear as chat bubbles — sent messages on the right, received messages on the left. Each bubble shows the sender, timestamp, and delivery status. Messages with replies include a quoted preview of the original message above the response.
+### Mentions
+
+Type `@` while composing to mention a node — a picker suggests matching contacts as you type. In a received message, a mention appears as a highlighted chip showing the node's name; tap it to jump straight to that node's detail page.
+
### Reactions
React to messages with emoji:
@@ -143,6 +147,7 @@ Long-press any message to access:
- **Copy** — copy message text to clipboard
- **Reply** — quote the message in your response
- **React** — add an emoji reaction
+- **Translate** — translate a received message into your device language and toggle between the original and translated text (Google Play build only; uses on-device translation)
- **Delete** — remove a message you sent (local deletion)
### Message Priority
diff --git a/docs/ar-rSA/user/mqtt.md b/docs/ar-rSA/user/mqtt.md
index 6da435415..6c2d7101f 100644
--- a/docs/ar-rSA/user/mqtt.md
+++ b/docs/ar-rSA/user/mqtt.md
@@ -56,6 +56,8 @@ A gateway node with internet access (WiFi or Ethernet) publishes mesh messages t
The community maintains a public broker at `mqtt.meshtastic.org`. This is intended for general use and testing.
+> ℹ️ **Note:** Connections to `mqtt.meshtastic.org` always use TLS (port 8883), even if the TLS toggle is off. For any other broker, TLS is used only when you enable it (port 8883 with TLS, 1883 without).
+
> 🔒 **Privacy:** Messages on the public broker are readable by anyone subscribed. Always use channel encryption for private communications.
### Private Broker
diff --git a/docs/ar-rSA/user/node-metrics.md b/docs/ar-rSA/user/node-metrics.md
index 0d1754e55..6d16cee92 100644
--- a/docs/ar-rSA/user/node-metrics.md
+++ b/docs/ar-rSA/user/node-metrics.md
@@ -55,12 +55,15 @@ The BME680 **IAQ (Indoor Air Quality)** index is a single 0–500+ value derived
Air Quality is a dedicated metrics view for nodes equipped with a particulate-matter and/or CO₂ sensor. It is **separate from the BME680 IAQ reading** listed under Environment Metrics — IAQ is a single gas-resistance-derived index, while the Air Quality view charts the underlying particulate and CO₂ measurements.
-| Metric | Unit | الوصف |
-| --------------------- | ----- | ---------------------------------------------------- |
-| PM1.0 | µg/m³ | Particulate matter up to 1.0 micron |
-| PM2.5 | µg/m³ | Particulate matter up to 2.5 microns |
-| PM10 | µg/m³ | Particulate matter up to 10 microns |
-| CO₂ | ppm | Carbon dioxide concentration |
+| Metric | Unit | الوصف |
+| --------------------- | --------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| PM1.0 | µg/m³ | Particulate matter up to 1.0 micron |
+| PM2.5 | µg/m³ | Particulate matter up to 2.5 microns |
+| PM10 | µg/m³ | Particulate matter up to 10 microns |
+| AQI | EPA index | EPA **NowCast** AQI computed from your recent PM2.5 history, with a color-coded severity label. Shown next to PM2.5 once enough readings have accumulated. |
+| CO₂ | ppm | Carbon dioxide concentration |
+| CO₂ temperature | °C / °F | Temperature reported by the CO₂ sensor itself (e.g. SCD4x) |
+| CO₂ humidity | % | Relative humidity reported by the CO₂ sensor |
CO₂ readings are color-coded by severity to make air quality easy to read at a glance:
@@ -98,12 +101,12 @@ Radio signal quality information:
Signal quality is rated from **SNR relative to the active LoRa modem preset's demodulation floor**, not from fixed thresholds — a given SNR means different things on different presets (e.g. −15 dB is fine on LongSlow but unusable on ShortFast). RSSI is shown but is not part of the rating. Letting `limit` be the preset's SNR limit:
-| Quality | Criteria |
-| ------- | ------------------------------------------------ |
-| جيد | SNR above the preset's limit |
-| مناسب | within 5.5 dB below the limit |
-| سيئ | within 7.5 dB below the limit |
-| لا يوجد | more than 7.5 dB below the limit |
+| Quality | Criteria |
+| ------- | ------------------------------------------------------------------------- |
+| جيد | SNR above the preset's limit |
+| مناسب | up to 5.5 dB below the limit |
+| سيئ | between 5.5 dB and 7.5 dB below the limit |
+| لا يوجد | more than 7.5 dB below the limit |
See [Understanding the Signal Meter](signal-meter) for the full explanation.
diff --git a/docs/ar-rSA/user/settings-radio-user.md b/docs/ar-rSA/user/settings-radio-user.md
index 9b4e3d156..4c9ff9564 100644
--- a/docs/ar-rSA/user/settings-radio-user.md
+++ b/docs/ar-rSA/user/settings-radio-user.md
@@ -74,6 +74,8 @@ After modifying settings, tap **Save** to write the configuration to your radio.
| ~~Long Slow~~ | ~30 km | 0.18 kbps | −17.5 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.
+
#### Choosing a Modem Preset
The modem preset controls the fundamental tradeoff between **range** and **data rate**:
diff --git a/docs/ar-rSA/user/signal-meter.md b/docs/ar-rSA/user/signal-meter.md
index 067071fb0..a193f7b8d 100644
--- a/docs/ar-rSA/user/signal-meter.md
+++ b/docs/ar-rSA/user/signal-meter.md
@@ -52,12 +52,12 @@ The app rates your signal quality (None, Bad, Fair, or Good) from **SNR alone, m
Because the rating is relative to the preset limit, the _same_ SNR can rate differently on different presets — `-15 dB` is healthy on `LongSlow` but unusable on `ShortFast`. Letting `limit` be the active preset's SNR Limit, here is how the app picks the bars (or color):
-| Level | Bars | Criteria | Meaning |
-| ------- | ---- | ------------------------------------ | ---------------------------------------------------------------------------------------- |
-| جيد | 3 | SNR **above** the preset's `limit` | Signal is comfortably above the demodulation floor — healthy connection. |
-| مناسب | 2 | within `5.5 dB` below the `limit` | Decodable, but getting close to the floor. |
-| سيئ | 1 | within `7.5 dB` below the `limit` | At the very edge of what the preset can recover. |
-| لا يوجد | 0 | more than `7.5 dB` below the `limit` | Below the floor — transmission lost to noise. |
+| Level | Bars | Criteria | Meaning |
+| ------- | ---- | ----------------------------------------------- | ---------------------------------------------------------------------------------------- |
+| جيد | 3 | SNR **above** the preset's `limit` | Signal is comfortably above the demodulation floor — healthy connection. |
+| مناسب | 2 | up to `5.5 dB` below the `limit` | Decodable, but getting close to the floor. |
+| سيئ | 1 | between `5.5 dB` and `7.5 dB` below the `limit` | At the very edge of what the preset can recover. |
+| لا يوجد | 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.
diff --git a/docs/ar-rSA/user/telemetry-and-sensors.md b/docs/ar-rSA/user/telemetry-and-sensors.md
index 9ebff3b9c..11de4e3b0 100644
--- a/docs/ar-rSA/user/telemetry-and-sensors.md
+++ b/docs/ar-rSA/user/telemetry-and-sensors.md
@@ -103,7 +103,9 @@ Nodes with particulate matter or CO₂ sensors report air quality data:
| PM10 | µg/m³ | Coarse particulate matter |
| CO₂ | ppm | Carbon dioxide concentration |
-The CO₂ reading is color-coded by severity (Good → Stuffy → Poor → Unsafe → Evacuate). See [Node Metrics — Air Quality](node-metrics#air-quality-metrics) for the exact ppm bands and colors.
+CO₂ sensors such as the SCD4x also report their own temperature and humidity, which appear alongside the readings above. From PM2.5 history the app additionally derives an **EPA NowCast AQI** value.
+
+The CO₂ reading is color-coded by severity (Good → Stuffy → Poor → Unsafe → Evacuate). See [Node Metrics — Air Quality](node-metrics#air-quality-metrics) for the exact ppm bands, colors, and AQI detail.
Air quality data can be viewed as info cards on the node detail screen, charted over time, and exported to CSV.
diff --git a/docs/ar-rSA/user/translate.md b/docs/ar-rSA/user/translate.md
index 25aa4693c..70c966fed 100644
--- a/docs/ar-rSA/user/translate.md
+++ b/docs/ar-rSA/user/translate.md
@@ -18,11 +18,11 @@ Contributing translations helps make Meshtastic accessible to a wider audience.
## What Gets Translated
-| Resource | Source Location | Notes |
-| ----------------- | ------------------------------------- | ---------------------------------------------------------------------- |
-| UI strings | `composeResources/values/strings.xml` | Buttons, labels, messages, and all user-visible text |
-| User Guide pages | `docs/user/*.md` | In-app documentation shown in Help & Documentation |
-| Fastlane metadata | `fastlane/metadata/android/en-US/` | App Store listing title, description, and changelogs |
+| Resource | Source Location | Notes |
+| ----------------- | ------------------------------------------------------------------- | ---------------------------------------------------------------------- |
+| UI strings | `core/resources/src/commonMain/composeResources/values/strings.xml` | Buttons, labels, messages, and all user-visible text |
+| User Guide pages | `docs/en/user/*.md` | In-app documentation shown in Help & Documentation |
+| Fastlane metadata | `fastlane/metadata/android/en-US/` | App Store listing title, description, and changelogs |
> ⚠️ **Note:** Developer Guide pages are English-only. Code-focused documentation targeting contributors is not translated.
diff --git a/docs/ar-rSA/user/units-and-locale.md b/docs/ar-rSA/user/units-and-locale.md
index 3e9189792..a172f5903 100644
--- a/docs/ar-rSA/user/units-and-locale.md
+++ b/docs/ar-rSA/user/units-and-locale.md
@@ -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 uses the `MetricFormatter` utility to convert and display values in whatever unit system your device's locale specifies.
+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.
On Android, your measurement preferences are determined by your system **Language & Region** settings. On Desktop (JVM), the app uses the JVM's default `Locale`.
@@ -115,12 +115,13 @@ On Android, your measurement system (metric vs imperial) is tied to your region
2. Change your **Region** or **Measurement units** preference
3. Return to Meshtastic — values update immediately
-> 💡 **Tip:** The app uses `MetricFormatter` from `core:common`. All measurement formatting is handled by a shared KMP utility that respects your platform's locale. Developers adding new measurement displays should use `MetricFormatter` rather than hard-coding unit conversions.
+> 💡 **Tip:** All measurement formatting is handled centrally and respects your platform's locale, so units stay consistent everywhere in the app.
## Related Topics
- [Node Metrics](node-metrics) — where temperature, distance, and sensor values are displayed
- [Telemetry & Sensors](telemetry-and-sensors) — the sensors that produce these measurements
+- [Measurement & Formatting](../developer/measurement) — developer reference for the formatting utilities
- [Settings — Radio & User](settings-radio-user) — region setting that drives unit selection
---
diff --git a/docs/be-rBY/user/android-auto.md b/docs/be-rBY/user/android-auto.md
index c0c7b7903..b5e747a27 100644
--- a/docs/be-rBY/user/android-auto.md
+++ b/docs/be-rBY/user/android-auto.md
@@ -2,7 +2,7 @@
title: Android Auto
parent: User Guide
nav_order: 18
-last_updated: 2026-06-11
+last_updated: 2026-07-07
description: Use Meshtastic hands-free on an Android Auto head unit — read messages aloud, reply by voice, and check nodes and mesh status while driving.
aliases:
- android-auto
@@ -17,9 +17,11 @@ Meshtastic integrates with Android Auto so you can stay in touch with your mesh
> ⚠️ **Note:** Android Auto support is available on **Google-flavor Android builds only**. It is not included in the F-Droid build, and it is not available on Desktop or iOS.
+> ℹ️ **What ships today:** The Google Play build provides **notification-only** car messaging — incoming messages are announced on the head unit and you reply through its notification controls. The full tabbed **Messages / Nodes / Status** experience described below is a beta built on the Android Car App Library (Google's templated car UI is currently restricted to Closed/Internal Play tracks), so it appears only in builds compiled with `-PenableCarTemplates=true`. The rest of this page documents that beta experience.
+
## Абзор
-When your phone is connected to an Android Auto head unit (or the Desktop Head Unit emulator used for development), Meshtastic appears as a messaging app built with the Android Car App Library. The car interface presents a tabbed Home screen optimized for driving-safe, glanceable use:
+When your phone is connected to an Android Auto head unit (or the Desktop Head Unit emulator used for development), the beta build presents Meshtastic as a messaging app built with the Android Car App Library, with a tabbed Home screen optimized for driving-safe, glanceable use:
- **Messages** — recent conversations, with hands-free reading and replies.
- **Nodes** — the mesh node list, with a node-detail view.
diff --git a/docs/be-rBY/user/connections.md b/docs/be-rBY/user/connections.md
index d6f595b43..047b54aa6 100644
--- a/docs/be-rBY/user/connections.md
+++ b/docs/be-rBY/user/connections.md
@@ -23,7 +23,7 @@ Bluetooth Low Energy is the default and most common connection method on Android
1. Ensure your Meshtastic radio is powered on and in pairing mode.
2. Open the app and navigate to the **Connect** tab.
-3. Tap **Scan for Devices** — nearby Meshtastic radios will appear.
+3. Tap **Scan for Bluetooth devices** — nearby Meshtastic radios will appear.
4. Select your device from the list.
5. Accept the Bluetooth pairing prompt if shown.
diff --git a/docs/be-rBY/user/desktop.md b/docs/be-rBY/user/desktop.md
index 4d2d32364..c298bcbab 100644
--- a/docs/be-rBY/user/desktop.md
+++ b/docs/be-rBY/user/desktop.md
@@ -2,7 +2,7 @@
title: Desktop App
parent: User Guide
nav_order: 14
-last_updated: 2026-06-11
+last_updated: 2026-07-07
description: Install and use the Meshtastic Desktop app on Linux, macOS, and Windows — connections, feature parity, and keyboard shortcuts.
aliases:
- desktop
@@ -60,19 +60,19 @@ Bluetooth Low Energy is supported on Desktop via the [Kable](https://github.com/
## Feature Parity
-| Feature | Android | Desktop | Notes |
-| -------------------------------------------- | ------- | ------- | ---------------------------------------------- |
-| Messaging | ✓ | ✓ | Full parity |
-| Node List | ✓ | ✓ | Full parity |
-| Map | ✓ | ✓ | Full parity |
-| Налады | ✓ | ✓ | Full parity |
-| Bluetooth (BLE) | ✓ | ✓ | Via Kable on desktop |
-| Firmware Update OTA | ✓ | ✗ | Use web flasher |
-| Notifications | ✓ | ✓ | Native OS notifications |
-| Widgets | ✓ | ✗ | Android-only |
-| Android Auto | ✓ | ✗ | Android-only — not available on Desktop or iOS |
-| AI Assistant (Chirpy) | ✓\* | ✗ | Google flavor Android only |
-| App Functions (system AI) | ✓† | ✗ | Google flavor Android only |
+| Feature | Android | Desktop | Notes |
+| -------------------------------------------- | ------- | ------- | -------------------------------------------------------------------------- |
+| Messaging | ✓ | ✓ | Full parity |
+| Node List | ✓ | ✓ | Full parity |
+| Map | ✓ | ◐ | Map tab exists on desktop, but the interactive map view is Android-only |
+| Налады | ✓ | ✓ | Full parity |
+| Bluetooth (BLE) | ✓ | ✓ | Via Kable on desktop |
+| Firmware Update | ✓ | ◐ | Desktop supports in-app USB firmware update; BLE/Wi-Fi OTA is Android-only |
+| Notifications | ✓ | ✓ | Native OS notifications |
+| Widgets | ✓ | ✗ | Android-only |
+| Android Auto | ✓ | ✗ | Android-only — not available on Desktop or iOS |
+| AI Assistant (Chirpy) | ✓\* | ✗ | Google flavor Android only |
+| App Functions (system AI) | ✓† | ✗ | Google flavor Android only |
\*Chirpy AI requires Android 14+ on Google flavor builds with supported hardware.
@@ -84,14 +84,17 @@ The Desktop app uses the same Compose Multiplatform UI with adaptations for larg
### Keyboard Shortcuts
-| Shortcut | Action |
-| ------------------- | ---------------------- |
-| **⌘Q** / **Ctrl+Q** | Quit the application |
-| **⌘,** / **Ctrl+,** | Open Settings |
-| **⌘1** / **Ctrl+1** | Switch to Messages tab |
-| **⌘2** / **Ctrl+2** | Switch to Nodes tab |
-| **⌘3** / **Ctrl+3** | Switch to Map tab |
-| **⌘4** / **Ctrl+4** | Switch to Connect tab |
+All shortcuts use the **Meta** key — that's ⌘ (Command) on macOS and the Super / Windows key on Linux and Windows. (`Ctrl` is not bound.)
+
+| Shortcut | Action |
+| ---------- | ---------------------- |
+| **Meta+Q** | Quit the application |
+| **Meta+,** | Open Settings |
+| **Meta+1** | Switch to Messages tab |
+| **Meta+2** | Switch to Nodes tab |
+| **Meta+3** | Switch to Map tab |
+| **Meta+4** | Switch to Connect tab |
+| **Meta+/** | Open About |
### Window & System Tray
@@ -123,7 +126,6 @@ Individual doc pages render with full formatting:
```bash
git clone https://github.com/meshtastic/Meshtastic-Android.git
cd Meshtastic-Android
-git submodule update --init
./gradlew :desktopApp:run
```
@@ -134,7 +136,8 @@ Requirements:
## Known Limitations
-- No OTA firmware updates (use web flasher)
+- 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
- BLE bonding is not yet supported on desktop (pairing works without bonding)
@@ -142,7 +145,7 @@ Requirements:
## Related Topics
- [Connections](connections) — connection methods overview
-- [Firmware Updates](firmware) — use the [Web Flasher](https://flasher.meshtastic.org) for desktop firmware updates
+- [Firmware Updates](firmware) — in-app USB update on desktop, or the [Web Flasher](https://flasher.meshtastic.org)
---
diff --git a/docs/be-rBY/user/discovery.md b/docs/be-rBY/user/discovery.md
index 3c4c3630b..657306e76 100644
--- a/docs/be-rBY/user/discovery.md
+++ b/docs/be-rBY/user/discovery.md
@@ -44,7 +44,6 @@ Before starting, configure these controls:
The **Start** button stays disabled — with an explanation of why — until the scan can run. Common reasons it's disabled:
- The device is **not connected**.
-- The current channel is using the **default channel key** (use a unique key first — see [Messages & Channels](messages-and-channels)).
- **No presets** have been selected to scan.
- The selected preset uses **2.4 GHz**, which your hardware doesn't support.
diff --git a/docs/be-rBY/user/firmware.md b/docs/be-rBY/user/firmware.md
index 35259f286..662e52b2f 100644
--- a/docs/be-rBY/user/firmware.md
+++ b/docs/be-rBY/user/firmware.md
@@ -2,8 +2,8 @@
title: Firmware Updates
parent: User Guide
nav_order: 13
-last_updated: 2026-05-13
-description: Update your radio firmware over Bluetooth — OTA process, version channels, pre-flight checks, and recovery.
+last_updated: 2026-07-07
+description: Update your radio firmware over Bluetooth or USB — OTA process, version channels, pre-flight checks, and recovery.
aliases:
- firmware
- update
@@ -17,7 +17,7 @@ Keep your Meshtastic radio up to date with the latest firmware for new features,
## Checking for Updates
-1. Navigate to **Settings → Firmware Update** or tap the firmware notification if shown.
+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.
2. The app checks for available firmware versions.
3. Available updates show the version number and changelog summary.
@@ -39,19 +39,26 @@ The most common update method for Android users:

-### USB Flashing
+### In-App USB Update
-For recovery or when OTA is unavailable:
+When your radio is connected over **USB/serial** (rather than Bluetooth), the Firmware Update screen offers **USB File Transfer**. The app reboots the device into DFU mode, then prompts you to save the `.uf2` file to the device's DFU drive using the system file picker. This option appears only on a USB/serial connection — it is not available over Bluetooth.
+
+> ℹ️ **nRF bootloader note:** Some devices (e.g. RAK WisBlock RAK4631) need their bootloader flashed with the vendor's serial DFU tool (such as `adafruit-nrfutil`) — copying the `.uf2` alone won't update the bootloader. The app surfaces a hint when this applies.
+
+### Other Flashing Options
+
+For recovery or when neither OTA nor in-app USB is available:
- Use the [Meshtastic Web Flasher](https://flasher.meshtastic.org)
- Or the [Meshtastic CLI tool](https://meshtastic.org/docs/getting-started/flashing-firmware) on desktop
## Version Channels
-| Канал | Апісанне |
-| ------ | ------------------------------------------- |
-| Stable | Recommended for most users; tested releases |
-| Alpha | Preview releases; may contain bugs |
+| Канал | Апісанне |
+| ---------- | -------------------------------------------------------------------------- |
+| Stable | Recommended for most users; tested releases |
+| Alpha | Preview releases; may contain bugs |
+| Local File | Flash a firmware file you select yourself, instead of a downloaded release |
## Pre-Update Checklist
@@ -73,7 +80,7 @@ Once the update succeeds:
- The radio will reboot automatically
- Bluetooth connection will re-establish
- Verify your settings are intact
-- Check the firmware version in **Settings → About**
+- Confirm the new version under **Currently Installed** on the Firmware Update screen — it's also shown on the node's detail page and the Connections screen

diff --git a/docs/be-rBY/user/messages-and-channels.md b/docs/be-rBY/user/messages-and-channels.md
index f1db74e11..a31daa622 100644
--- a/docs/be-rBY/user/messages-and-channels.md
+++ b/docs/be-rBY/user/messages-and-channels.md
@@ -116,12 +116,16 @@ You can search the full history of any conversation directly from the chat scree

-> 💡 **Tip:** Search is full-text and stays within the conversation you opened it from — it doesn't search across other channels or contacts. Matching is fast even on long histories because messages are indexed locally.
+> 💡 **Tip:** Search is full-text and stays within the conversation you opened it from — it doesn't search across other channels or contacts. It matches against the messages already stored on your device, so it works fully offline.
### Message Bubbles
Messages appear as chat bubbles — sent messages on the right, received messages on the left. Each bubble shows the sender, timestamp, and delivery status. Messages with replies include a quoted preview of the original message above the response.
+### Mentions
+
+Type `@` while composing to mention a node — a picker suggests matching contacts as you type. In a received message, a mention appears as a highlighted chip showing the node's name; tap it to jump straight to that node's detail page.
+
### Reactions
React to messages with emoji:
@@ -143,6 +147,7 @@ Long-press any message to access:
- **Copy** — copy message text to clipboard
- **Reply** — quote the message in your response
- **React** — add an emoji reaction
+- **Translate** — translate a received message into your device language and toggle between the original and translated text (Google Play build only; uses on-device translation)
- **Delete** — remove a message you sent (local deletion)
### Message Priority
diff --git a/docs/be-rBY/user/mqtt.md b/docs/be-rBY/user/mqtt.md
index 096e6bf92..463f0529f 100644
--- a/docs/be-rBY/user/mqtt.md
+++ b/docs/be-rBY/user/mqtt.md
@@ -56,6 +56,8 @@ A gateway node with internet access (WiFi or Ethernet) publishes mesh messages t
The community maintains a public broker at `mqtt.meshtastic.org`. This is intended for general use and testing.
+> ℹ️ **Note:** Connections to `mqtt.meshtastic.org` always use TLS (port 8883), even if the TLS toggle is off. For any other broker, TLS is used only when you enable it (port 8883 with TLS, 1883 without).
+
> 🔒 **Privacy:** Messages on the public broker are readable by anyone subscribed. Always use channel encryption for private communications.
### Private Broker
diff --git a/docs/be-rBY/user/node-metrics.md b/docs/be-rBY/user/node-metrics.md
index 7094d9943..c16f44854 100644
--- a/docs/be-rBY/user/node-metrics.md
+++ b/docs/be-rBY/user/node-metrics.md
@@ -55,12 +55,15 @@ The BME680 **IAQ (Indoor Air Quality)** index is a single 0–500+ value derived
Air Quality is a dedicated metrics view for nodes equipped with a particulate-matter and/or CO₂ sensor. It is **separate from the BME680 IAQ reading** listed under Environment Metrics — IAQ is a single gas-resistance-derived index, while the Air Quality view charts the underlying particulate and CO₂ measurements.
-| Metric | Unit | Апісанне |
-| --------------------- | ----- | ---------------------------------------------------- |
-| PM1.0 | µg/m³ | Particulate matter up to 1.0 micron |
-| PM2.5 | µg/m³ | Particulate matter up to 2.5 microns |
-| PM10 | µg/m³ | Particulate matter up to 10 microns |
-| CO₂ | ppm | Carbon dioxide concentration |
+| Metric | Unit | Апісанне |
+| --------------------- | --------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| PM1.0 | µg/m³ | Particulate matter up to 1.0 micron |
+| PM2.5 | µg/m³ | Particulate matter up to 2.5 microns |
+| PM10 | µg/m³ | Particulate matter up to 10 microns |
+| AQI | EPA index | EPA **NowCast** AQI computed from your recent PM2.5 history, with a color-coded severity label. Shown next to PM2.5 once enough readings have accumulated. |
+| CO₂ | ppm | Carbon dioxide concentration |
+| CO₂ temperature | °C / °F | Temperature reported by the CO₂ sensor itself (e.g. SCD4x) |
+| CO₂ humidity | % | Relative humidity reported by the CO₂ sensor |
CO₂ readings are color-coded by severity to make air quality easy to read at a glance:
@@ -98,12 +101,12 @@ Radio signal quality information:
Signal quality is rated from **SNR relative to the active LoRa modem preset's demodulation floor**, not from fixed thresholds — a given SNR means different things on different presets (e.g. −15 dB is fine on LongSlow but unusable on ShortFast). RSSI is shown but is not part of the rating. Letting `limit` be the preset's SNR limit:
-| Quality | Criteria |
-| ------- | ------------------------------------------------ |
-| Good | SNR above the preset's limit |
-| Fair | within 5.5 dB below the limit |
-| Bad | within 7.5 dB below the limit |
-| Нічога | more than 7.5 dB below the limit |
+| 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 |
+| Нічога | more than 7.5 dB below the limit |
See [Understanding the Signal Meter](signal-meter) for the full explanation.
diff --git a/docs/be-rBY/user/settings-radio-user.md b/docs/be-rBY/user/settings-radio-user.md
index 7016e9422..2565e214b 100644
--- a/docs/be-rBY/user/settings-radio-user.md
+++ b/docs/be-rBY/user/settings-radio-user.md
@@ -74,6 +74,8 @@ After modifying settings, tap **Save** to write the configuration to your radio.
| ~~Long Slow~~ | ~30 km | 0.18 kbps | −17.5 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.
+
#### Choosing a Modem Preset
The modem preset controls the fundamental tradeoff between **range** and **data rate**:
diff --git a/docs/be-rBY/user/signal-meter.md b/docs/be-rBY/user/signal-meter.md
index 1d295322e..5541717ba 100644
--- a/docs/be-rBY/user/signal-meter.md
+++ b/docs/be-rBY/user/signal-meter.md
@@ -52,12 +52,12 @@ The app rates your signal quality (None, Bad, Fair, or Good) from **SNR alone, m
Because the rating is relative to the preset limit, the _same_ SNR can rate differently on different presets — `-15 dB` is healthy on `LongSlow` but unusable on `ShortFast`. Letting `limit` be the active preset's SNR Limit, here is how the app picks the bars (or color):
-| Level | Bars | Criteria | Meaning |
-| ------ | ---- | ------------------------------------ | ---------------------------------------------------------------------------------------- |
-| Good | 3 | SNR **above** the preset's `limit` | Signal is comfortably above the demodulation floor — healthy connection. |
-| Fair | 2 | within `5.5 dB` below the `limit` | Decodable, but getting close to the floor. |
-| Bad | 1 | within `7.5 dB` below the `limit` | At the very edge of what the preset can recover. |
-| Нічога | 0 | more than `7.5 dB` below the `limit` | Below the floor — transmission lost to noise. |
+| 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. |
+| Нічога | 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.
diff --git a/docs/be-rBY/user/telemetry-and-sensors.md b/docs/be-rBY/user/telemetry-and-sensors.md
index 8b9eaef91..17d9ba3a5 100644
--- a/docs/be-rBY/user/telemetry-and-sensors.md
+++ b/docs/be-rBY/user/telemetry-and-sensors.md
@@ -103,7 +103,9 @@ Nodes with particulate matter or CO₂ sensors report air quality data:
| PM10 | µg/m³ | Coarse particulate matter |
| CO₂ | ppm | Carbon dioxide concentration |
-The CO₂ reading is color-coded by severity (Good → Stuffy → Poor → Unsafe → Evacuate). See [Node Metrics — Air Quality](node-metrics#air-quality-metrics) for the exact ppm bands and colors.
+CO₂ sensors such as the SCD4x also report their own temperature and humidity, which appear alongside the readings above. From PM2.5 history the app additionally derives an **EPA NowCast AQI** value.
+
+The CO₂ reading is color-coded by severity (Good → Stuffy → Poor → Unsafe → Evacuate). See [Node Metrics — Air Quality](node-metrics#air-quality-metrics) for the exact ppm bands, colors, and AQI detail.
Air quality data can be viewed as info cards on the node detail screen, charted over time, and exported to CSV.
diff --git a/docs/be-rBY/user/translate.md b/docs/be-rBY/user/translate.md
index 25aa4693c..70c966fed 100644
--- a/docs/be-rBY/user/translate.md
+++ b/docs/be-rBY/user/translate.md
@@ -18,11 +18,11 @@ Contributing translations helps make Meshtastic accessible to a wider audience.
## What Gets Translated
-| Resource | Source Location | Notes |
-| ----------------- | ------------------------------------- | ---------------------------------------------------------------------- |
-| UI strings | `composeResources/values/strings.xml` | Buttons, labels, messages, and all user-visible text |
-| User Guide pages | `docs/user/*.md` | In-app documentation shown in Help & Documentation |
-| Fastlane metadata | `fastlane/metadata/android/en-US/` | App Store listing title, description, and changelogs |
+| Resource | Source Location | Notes |
+| ----------------- | ------------------------------------------------------------------- | ---------------------------------------------------------------------- |
+| UI strings | `core/resources/src/commonMain/composeResources/values/strings.xml` | Buttons, labels, messages, and all user-visible text |
+| User Guide pages | `docs/en/user/*.md` | In-app documentation shown in Help & Documentation |
+| Fastlane metadata | `fastlane/metadata/android/en-US/` | App Store listing title, description, and changelogs |
> ⚠️ **Note:** Developer Guide pages are English-only. Code-focused documentation targeting contributors is not translated.
diff --git a/docs/be-rBY/user/units-and-locale.md b/docs/be-rBY/user/units-and-locale.md
index 201c235e5..ecb5809a4 100644
--- a/docs/be-rBY/user/units-and-locale.md
+++ b/docs/be-rBY/user/units-and-locale.md
@@ -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 uses the `MetricFormatter` utility to convert and display values in whatever unit system your device's locale specifies.
+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.
On Android, your measurement preferences are determined by your system **Language & Region** settings. On Desktop (JVM), the app uses the JVM's default `Locale`.
@@ -115,12 +115,13 @@ On Android, your measurement system (metric vs imperial) is tied to your region
2. Change your **Region** or **Measurement units** preference
3. Return to Meshtastic — values update immediately
-> 💡 **Tip:** The app uses `MetricFormatter` from `core:common`. All measurement formatting is handled by a shared KMP utility that respects your platform's locale. Developers adding new measurement displays should use `MetricFormatter` rather than hard-coding unit conversions.
+> 💡 **Tip:** All measurement formatting is handled centrally and respects your platform's locale, so units stay consistent everywhere in the app.
## Related Topics
- [Node Metrics](node-metrics) — where temperature, distance, and sensor values are displayed
- [Telemetry & Sensors](telemetry-and-sensors) — the sensors that produce these measurements
+- [Measurement & Formatting](../developer/measurement) — developer reference for the formatting utilities
- [Settings — Radio & User](settings-radio-user) — region setting that drives unit selection
---
diff --git a/docs/bg-rBG/user/android-auto.md b/docs/bg-rBG/user/android-auto.md
index d3b1df911..70e88a36c 100644
--- a/docs/bg-rBG/user/android-auto.md
+++ b/docs/bg-rBG/user/android-auto.md
@@ -2,7 +2,7 @@
title: Android Auto
parent: Ръководство за потребители
nav_order: 18
-last_updated: 2026-06-11
+last_updated: 2026-07-07
description: Use Meshtastic hands-free on an Android Auto head unit — read messages aloud, reply by voice, and check nodes and mesh status while driving.
aliases:
- android-auto
@@ -17,9 +17,11 @@ Meshtastic integrates with Android Auto so you can stay in touch with your mesh
> ⚠️ **Note:** Android Auto support is available on **Google-flavor Android builds only**. It is not included in the F-Droid build, and it is not available on Desktop or iOS.
+> ℹ️ **What ships today:** The Google Play build provides **notification-only** car messaging — incoming messages are announced on the head unit and you reply through its notification controls. The full tabbed **Messages / Nodes / Status** experience described below is a beta built on the Android Car App Library (Google's templated car UI is currently restricted to Closed/Internal Play tracks), so it appears only in builds compiled with `-PenableCarTemplates=true`. The rest of this page documents that beta experience.
+
## Общ преглед
-When your phone is connected to an Android Auto head unit (or the Desktop Head Unit emulator used for development), Meshtastic appears as a messaging app built with the Android Car App Library. The car interface presents a tabbed Home screen optimized for driving-safe, glanceable use:
+When your phone is connected to an Android Auto head unit (or the Desktop Head Unit emulator used for development), the beta build presents Meshtastic as a messaging app built with the Android Car App Library, with a tabbed Home screen optimized for driving-safe, glanceable use:
- **Messages** — recent conversations, with hands-free reading and replies.
- **Nodes** — the mesh node list, with a node-detail view.
diff --git a/docs/bg-rBG/user/connections.md b/docs/bg-rBG/user/connections.md
index b509f5c56..4cfbc8f91 100644
--- a/docs/bg-rBG/user/connections.md
+++ b/docs/bg-rBG/user/connections.md
@@ -23,7 +23,7 @@ Bluetooth Low Energy е методът за свързване по подраз
1. Уверете се, че вашето радио Meshtastic е включено и е в режим на сдвояване.
2. Отворете приложението и отидете в раздела **Свързване**.
-3. Натиснете **Сканиране за устройства** — ще се появят близките радиа Meshtastic.
+3. Tap **Scan for Bluetooth devices** — nearby Meshtastic radios will appear.
4. Изберете вашето устройство от списъка.
5. Приемете подканата за Bluetooth сдвояване, ако се покаже.
diff --git a/docs/bg-rBG/user/desktop.md b/docs/bg-rBG/user/desktop.md
index e23be99c4..bb044e7ea 100644
--- a/docs/bg-rBG/user/desktop.md
+++ b/docs/bg-rBG/user/desktop.md
@@ -2,7 +2,7 @@
title: Настолно приложение
parent: Ръководство за потребители
nav_order: 14
-last_updated: 2026-06-11
+last_updated: 2026-07-07
description: Install and use the Meshtastic Desktop app on Linux, macOS, and Windows — connections, feature parity, and keyboard shortcuts.
aliases:
- desktop
@@ -60,19 +60,19 @@ Bluetooth Low Energy is supported on Desktop via the [Kable](https://github.com/
## Feature Parity
-| Feature | Android | Desktop | Бележки |
-| -------------------------------------------- | ------- | ------- | ---------------------------------------------- |
-| Messaging | ✓ | ✓ | Full parity |
-| Node List | ✓ | ✓ | Full parity |
-| Карта | ✓ | ✓ | Full parity |
-| Настройки | ✓ | ✓ | Full parity |
-| Bluetooth (BLE) | ✓ | ✓ | Via Kable on desktop |
-| Firmware Update OTA | ✓ | ✗ | Use web flasher |
-| Известия | ✓ | ✓ | Native OS notifications |
-| Widgets | ✓ | ✗ | Android-only |
-| Android Auto | ✓ | ✗ | Android-only — not available on Desktop or iOS |
-| AI Assistant (Chirpy) | ✓\* | ✗ | Google flavor Android only |
-| App Functions (system AI) | ✓† | ✗ | Google flavor Android only |
+| Feature | Android | Desktop | Бележки |
+| -------------------------------------------- | ------- | ------- | -------------------------------------------------------------------------- |
+| Messaging | ✓ | ✓ | Full parity |
+| Node List | ✓ | ✓ | Full parity |
+| Карта | ✓ | ◐ | Map tab exists on desktop, but the interactive map view is Android-only |
+| Настройки | ✓ | ✓ | Full parity |
+| Bluetooth (BLE) | ✓ | ✓ | Via Kable on desktop |
+| Актуализация на фърмуера | ✓ | ◐ | Desktop supports in-app USB firmware update; BLE/Wi-Fi OTA is Android-only |
+| Известия | ✓ | ✓ | Native OS notifications |
+| Widgets | ✓ | ✗ | Android-only |
+| Android Auto | ✓ | ✗ | Android-only — not available on Desktop or iOS |
+| AI Assistant (Chirpy) | ✓\* | ✗ | Google flavor Android only |
+| App Functions (system AI) | ✓† | ✗ | Google flavor Android only |
\*Chirpy AI requires Android 14+ on Google flavor builds with supported hardware.
@@ -84,14 +84,17 @@ The Desktop app uses the same Compose Multiplatform UI with adaptations for larg
### Keyboard Shortcuts
-| Shortcut | Action |
-| ------------------- | ---------------------- |
-| **⌘Q** / **Ctrl+Q** | Quit the application |
-| **⌘,** / **Ctrl+,** | Open Settings |
-| **⌘1** / **Ctrl+1** | Switch to Messages tab |
-| **⌘2** / **Ctrl+2** | Switch to Nodes tab |
-| **⌘3** / **Ctrl+3** | Switch to Map tab |
-| **⌘4** / **Ctrl+4** | Switch to Connect tab |
+All shortcuts use the **Meta** key — that's ⌘ (Command) on macOS and the Super / Windows key on Linux and Windows. (`Ctrl` is not bound.)
+
+| Shortcut | Action |
+| ---------- | ---------------------- |
+| **Meta+Q** | Quit the application |
+| **Meta+,** | Open Settings |
+| **Meta+1** | Switch to Messages tab |
+| **Meta+2** | Switch to Nodes tab |
+| **Meta+3** | Switch to Map tab |
+| **Meta+4** | Switch to Connect tab |
+| **Meta+/** | Open About |
### Window & System Tray
@@ -123,7 +126,6 @@ Individual doc pages render with full formatting:
```bash
git clone https://github.com/meshtastic/Meshtastic-Android.git
cd Meshtastic-Android
-git submodule update --init
./gradlew :desktopApp:run
```
@@ -134,7 +136,8 @@ Requirements:
## Known Limitations
-- No OTA firmware updates (use web flasher)
+- 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
- BLE bonding is not yet supported on desktop (pairing works without bonding)
@@ -142,7 +145,7 @@ Requirements:
## Related Topics
- [Connections](connections) — connection methods overview
-- [Firmware Updates](firmware) — use the [Web Flasher](https://flasher.meshtastic.org) for desktop firmware updates
+- [Firmware Updates](firmware) — in-app USB update on desktop, or the [Web Flasher](https://flasher.meshtastic.org)
---
diff --git a/docs/bg-rBG/user/discovery.md b/docs/bg-rBG/user/discovery.md
index d6b68ae6d..4e4114e31 100644
--- a/docs/bg-rBG/user/discovery.md
+++ b/docs/bg-rBG/user/discovery.md
@@ -44,7 +44,6 @@ Open it from **Settings → Local Mesh Discovery**.
The **Start** button stays disabled — with an explanation of why — until the scan can run. Common reasons it's disabled:
- The device is **not connected**.
-- The current channel is using the **default channel key** (use a unique key first — see [Messages & Channels](messages-and-channels)).
- **No presets** have been selected to scan.
- The selected preset uses **2.4 GHz**, which your hardware doesn't support.
diff --git a/docs/bg-rBG/user/firmware.md b/docs/bg-rBG/user/firmware.md
index 6eb82fd91..e16bc634b 100644
--- a/docs/bg-rBG/user/firmware.md
+++ b/docs/bg-rBG/user/firmware.md
@@ -2,8 +2,8 @@
title: Актуализации на фърмуера
parent: Ръководство за потребители
nav_order: 13
-last_updated: 2026-05-13
-description: Update your radio firmware over Bluetooth — OTA process, version channels, pre-flight checks, and recovery.
+last_updated: 2026-07-07
+description: Update your radio firmware over Bluetooth or USB — OTA process, version channels, pre-flight checks, and recovery.
aliases:
- firmware
- update
@@ -17,7 +17,7 @@ aliases:
## Проверка за актуализации
-1. Отидете до **Настройки → Актуализация на фърмуера** или докоснете известието за фърмуера, ако е показано.
+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.
2. Приложението проверява за налични версии на фърмуера.
3. Available updates show the version number and changelog summary.
@@ -39,19 +39,26 @@ aliases:

-### USB Flashing
+### In-App USB Update
-For recovery or when OTA is unavailable:
+When your radio is connected over **USB/serial** (rather than Bluetooth), the Firmware Update screen offers **USB File Transfer**. The app reboots the device into DFU mode, then prompts you to save the `.uf2` file to the device's DFU drive using the system file picker. This option appears only on a USB/serial connection — it is not available over Bluetooth.
+
+> ℹ️ **nRF bootloader note:** Some devices (e.g. RAK WisBlock RAK4631) need their bootloader flashed with the vendor's serial DFU tool (such as `adafruit-nrfutil`) — copying the `.uf2` alone won't update the bootloader. The app surfaces a hint when this applies.
+
+### Other Flashing Options
+
+For recovery or when neither OTA nor in-app USB is available:
- Use the [Meshtastic Web Flasher](https://flasher.meshtastic.org)
- Or the [Meshtastic CLI tool](https://meshtastic.org/docs/getting-started/flashing-firmware) on desktop
## Канали на версиите
-| Канал | Описание |
-| -------- | ------------------------------------------------------ |
-| Стабилен | Препоръчва се за повечето потребители; тествани версии |
-| Алфа | Предварителни издания; може да съдържат грешки |
+| Канал | Описание |
+| ------------ | -------------------------------------------------------------------------- |
+| Стабилен | Препоръчва се за повечето потребители; тествани версии |
+| Алфа | Предварителни издания; може да съдържат грешки |
+| Локален файл | Flash a firmware file you select yourself, instead of a downloaded release |
## Контролен списък преди актуализация
@@ -73,7 +80,7 @@ Once the update succeeds:
- Радиото ще се рестартира автоматично
- Bluetooth връзката ще се възстанови
- Проверете дали настройките ви са непокътнати
-- Проверете версията на фърмуера в **Настройки → Относно**
+- Confirm the new version under **Currently Installed** on the Firmware Update screen — it's also shown on the node's detail page and the Connections screen

diff --git a/docs/bg-rBG/user/messages-and-channels.md b/docs/bg-rBG/user/messages-and-channels.md
index 3604823d6..2ef8c5efd 100644
--- a/docs/bg-rBG/user/messages-and-channels.md
+++ b/docs/bg-rBG/user/messages-and-channels.md
@@ -116,12 +116,16 @@ You can search the full history of any conversation directly from the chat scree

-> 💡 **Tip:** Search is full-text and stays within the conversation you opened it from — it doesn't search across other channels or contacts. Matching is fast even on long histories because messages are indexed locally.
+> 💡 **Tip:** Search is full-text and stays within the conversation you opened it from — it doesn't search across other channels or contacts. It matches against the messages already stored on your device, so it works fully offline.
### Message Bubbles
Messages appear as chat bubbles — sent messages on the right, received messages on the left. Each bubble shows the sender, timestamp, and delivery status. Messages with replies include a quoted preview of the original message above the response.
+### Mentions
+
+Type `@` while composing to mention a node — a picker suggests matching contacts as you type. In a received message, a mention appears as a highlighted chip showing the node's name; tap it to jump straight to that node's detail page.
+
### Reactions
React to messages with emoji:
@@ -143,6 +147,7 @@ Long-press any message to access:
- **Copy** — copy message text to clipboard
- **Reply** — quote the message in your response
- **React** — add an emoji reaction
+- **Translate** — translate a received message into your device language and toggle between the original and translated text (Google Play build only; uses on-device translation)
- **Delete** — remove a message you sent (local deletion)
### Message Priority
diff --git a/docs/bg-rBG/user/mqtt.md b/docs/bg-rBG/user/mqtt.md
index a3904900e..274eda52d 100644
--- a/docs/bg-rBG/user/mqtt.md
+++ b/docs/bg-rBG/user/mqtt.md
@@ -56,6 +56,8 @@ A gateway node with internet access (WiFi or Ethernet) publishes mesh messages t
The community maintains a public broker at `mqtt.meshtastic.org`. This is intended for general use and testing.
+> ℹ️ **Note:** Connections to `mqtt.meshtastic.org` always use TLS (port 8883), even if the TLS toggle is off. For any other broker, TLS is used only when you enable it (port 8883 with TLS, 1883 without).
+
> 🔒 **Privacy:** Messages on the public broker are readable by anyone subscribed. Always use channel encryption for private communications.
### Private Broker
diff --git a/docs/bg-rBG/user/node-metrics.md b/docs/bg-rBG/user/node-metrics.md
index 3793dcdfb..a90fe91a3 100644
--- a/docs/bg-rBG/user/node-metrics.md
+++ b/docs/bg-rBG/user/node-metrics.md
@@ -55,12 +55,15 @@ The BME680 **IAQ (Indoor Air Quality)** index is a single 0–500+ value derived
Air Quality is a dedicated metrics view for nodes equipped with a particulate-matter and/or CO₂ sensor. It is **separate from the BME680 IAQ reading** listed under Environment Metrics — IAQ is a single gas-resistance-derived index, while the Air Quality view charts the underlying particulate and CO₂ measurements.
-| Метрични | Unit | Описание |
-| --------------------- | ----- | ---------------------------------------------------- |
-| PM1.0 | µg/m³ | Particulate matter up to 1.0 micron |
-| PM2.5 | µg/m³ | Particulate matter up to 2.5 microns |
-| PM10 | µg/m³ | Particulate matter up to 10 microns |
-| CO₂ | ppm | Carbon dioxide concentration |
+| Метрични | Unit | Описание |
+| --------------------- | --------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| PM1.0 | µg/m³ | Particulate matter up to 1.0 micron |
+| PM2.5 | µg/m³ | Particulate matter up to 2.5 microns |
+| PM10 | µg/m³ | Particulate matter up to 10 microns |
+| AQI | EPA index | EPA **NowCast** AQI computed from your recent PM2.5 history, with a color-coded severity label. Shown next to PM2.5 once enough readings have accumulated. |
+| CO₂ | ppm | Carbon dioxide concentration |
+| CO₂ temperature | °C / °F | Temperature reported by the CO₂ sensor itself (e.g. SCD4x) |
+| CO₂ humidity | % | Relative humidity reported by the CO₂ sensor |
CO₂ readings are color-coded by severity to make air quality easy to read at a glance:
@@ -98,12 +101,12 @@ Radio signal quality information:
Signal quality is rated from **SNR relative to the active LoRa modem preset's demodulation floor**, not from fixed thresholds — a given SNR means different things on different presets (e.g. −15 dB is fine on LongSlow but unusable on ShortFast). RSSI is shown but is not part of the rating. Letting `limit` be the preset's SNR limit:
-| Quality | Criteria |
-| ------------- | ------------------------------------------------ |
-| Добър | SNR above the preset's limit |
-| Задоволителен | within 5.5 dB below the limit |
-| Лош | within 7.5 dB below the limit |
-| Няма | more than 7.5 dB below the limit |
+| Quality | Criteria |
+| ------------- | ------------------------------------------------------------------------- |
+| Добър | SNR above the preset's limit |
+| Задоволителен | up to 5.5 dB below the limit |
+| Лош | between 5.5 dB and 7.5 dB below the limit |
+| Няма | more than 7.5 dB below the limit |
See [Understanding the Signal Meter](signal-meter) for the full explanation.
diff --git a/docs/bg-rBG/user/settings-radio-user.md b/docs/bg-rBG/user/settings-radio-user.md
index f440cad76..e428fb4b7 100644
--- a/docs/bg-rBG/user/settings-radio-user.md
+++ b/docs/bg-rBG/user/settings-radio-user.md
@@ -74,6 +74,8 @@ After modifying settings, tap **Save** to write the configuration to your radio.
| ~~Long Slow~~ | ~30 km | 0.18 kbps | −17.5 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.
+
#### Choosing a Modem Preset
The modem preset controls the fundamental tradeoff between **range** and **data rate**:
diff --git a/docs/bg-rBG/user/signal-meter.md b/docs/bg-rBG/user/signal-meter.md
index 97f5dc0c9..db75b6033 100644
--- a/docs/bg-rBG/user/signal-meter.md
+++ b/docs/bg-rBG/user/signal-meter.md
@@ -52,12 +52,12 @@ The app rates your signal quality (None, Bad, Fair, or Good) from **SNR alone, m
Because the rating is relative to the preset limit, the _same_ SNR can rate differently on different presets — `-15 dB` is healthy on `LongSlow` but unusable on `ShortFast`. Letting `limit` be the active preset's SNR Limit, here is how the app picks the bars (or color):
-| Level | Bars | Criteria | Meaning |
-| ------------- | ---- | ------------------------------------ | ---------------------------------------------------------------------------------------- |
-| Добър | 3 | SNR **above** the preset's `limit` | Signal is comfortably above the demodulation floor — healthy connection. |
-| Задоволителен | 2 | within `5.5 dB` below the `limit` | Decodable, but getting close to the floor. |
-| Лош | 1 | within `7.5 dB` below the `limit` | At the very edge of what the preset can recover. |
-| Няма | 0 | more than `7.5 dB` below the `limit` | Below the floor — transmission lost to noise. |
+| Level | Bars | Criteria | Meaning |
+| ------------- | ---- | ----------------------------------------------- | ---------------------------------------------------------------------------------------- |
+| Добър | 3 | SNR **above** the preset's `limit` | Signal is comfortably above the demodulation floor — healthy connection. |
+| Задоволителен | 2 | up to `5.5 dB` below the `limit` | Decodable, but getting close to the floor. |
+| Лош | 1 | between `5.5 dB` and `7.5 dB` below the `limit` | At the very edge of what the preset can recover. |
+| Няма | 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.
diff --git a/docs/bg-rBG/user/telemetry-and-sensors.md b/docs/bg-rBG/user/telemetry-and-sensors.md
index d0c5c577a..b54aba0b9 100644
--- a/docs/bg-rBG/user/telemetry-and-sensors.md
+++ b/docs/bg-rBG/user/telemetry-and-sensors.md
@@ -103,7 +103,9 @@ Nodes with particulate matter or CO₂ sensors report air quality data:
| PM10 | µg/m³ | Coarse particulate matter |
| CO₂ | ppm | Carbon dioxide concentration |
-The CO₂ reading is color-coded by severity (Good → Stuffy → Poor → Unsafe → Evacuate). See [Node Metrics — Air Quality](node-metrics#air-quality-metrics) for the exact ppm bands and colors.
+CO₂ sensors such as the SCD4x also report their own temperature and humidity, which appear alongside the readings above. From PM2.5 history the app additionally derives an **EPA NowCast AQI** value.
+
+The CO₂ reading is color-coded by severity (Good → Stuffy → Poor → Unsafe → Evacuate). See [Node Metrics — Air Quality](node-metrics#air-quality-metrics) for the exact ppm bands, colors, and AQI detail.
Air quality data can be viewed as info cards on the node detail screen, charted over time, and exported to CSV.
diff --git a/docs/bg-rBG/user/translate.md b/docs/bg-rBG/user/translate.md
index efc01da6e..ba1f5ce65 100644
--- a/docs/bg-rBG/user/translate.md
+++ b/docs/bg-rBG/user/translate.md
@@ -18,11 +18,11 @@ Contributing translations helps make Meshtastic accessible to a wider audience.
## What Gets Translated
-| Resource | Source Location | Бележки |
-| ----------------- | ------------------------------------- | ---------------------------------------------------------------------- |
-| UI strings | `composeResources/values/strings.xml` | Buttons, labels, messages, and all user-visible text |
-| User Guide pages | `docs/user/*.md` | In-app documentation shown in Help & Documentation |
-| Fastlane metadata | `fastlane/metadata/android/en-US/` | App Store listing title, description, and changelogs |
+| Resource | Source Location | Бележки |
+| ----------------- | ------------------------------------------------------------------- | ---------------------------------------------------------------------- |
+| UI strings | `core/resources/src/commonMain/composeResources/values/strings.xml` | Buttons, labels, messages, and all user-visible text |
+| User Guide pages | `docs/en/user/*.md` | In-app documentation shown in Help & Documentation |
+| Fastlane metadata | `fastlane/metadata/android/en-US/` | App Store listing title, description, and changelogs |
> ⚠️ **Note:** Developer Guide pages are English-only. Code-focused documentation targeting contributors is not translated.
diff --git a/docs/bg-rBG/user/units-and-locale.md b/docs/bg-rBG/user/units-and-locale.md
index f824d730b..281204d67 100644
--- a/docs/bg-rBG/user/units-and-locale.md
+++ b/docs/bg-rBG/user/units-and-locale.md
@@ -14,7 +14,7 @@ The Meshtastic app automatically displays temperatures, distances, speeds, and t
## Как работи
-Meshtastic radios always transmit data in **metric units** (meters, °C, km/h, hPa, etc.). When the app receives this data, it uses the `MetricFormatter` utility to convert and display values in whatever unit system your device's locale specifies.
+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.
On Android, your measurement preferences are determined by your system **Language & Region** settings. On Desktop (JVM), the app uses the JVM's default `Locale`.
@@ -115,12 +115,13 @@ On Android, your measurement system (metric vs imperial) is tied to your region
2. Change your **Region** or **Measurement units** preference
3. Return to Meshtastic — values update immediately
-> 💡 **Tip:** The app uses `MetricFormatter` from `core:common`. All measurement formatting is handled by a shared KMP utility that respects your platform's locale. Developers adding new measurement displays should use `MetricFormatter` rather than hard-coding unit conversions.
+> 💡 **Tip:** All measurement formatting is handled centrally and respects your platform's locale, so units stay consistent everywhere in the app.
## Related Topics
- [Node Metrics](node-metrics) — where temperature, distance, and sensor values are displayed
- [Telemetry & Sensors](telemetry-and-sensors) — the sensors that produce these measurements
+- [Measurement & Formatting](../developer/measurement) — developer reference for the formatting utilities
- [Settings — Radio & User](settings-radio-user) — region setting that drives unit selection
---
diff --git a/docs/ca-rES/user/android-auto.md b/docs/ca-rES/user/android-auto.md
index aeb53435d..b9ec6a2af 100644
--- a/docs/ca-rES/user/android-auto.md
+++ b/docs/ca-rES/user/android-auto.md
@@ -2,7 +2,7 @@
title: Android Auto
parent: User Guide
nav_order: 18
-last_updated: 2026-06-11
+last_updated: 2026-07-07
description: Use Meshtastic hands-free on an Android Auto head unit — read messages aloud, reply by voice, and check nodes and mesh status while driving.
aliases:
- android-auto
@@ -17,9 +17,11 @@ Meshtastic integrates with Android Auto so you can stay in touch with your mesh
> ⚠️ **Note:** Android Auto support is available on **Google-flavor Android builds only**. It is not included in the F-Droid build, and it is not available on Desktop or iOS.
+> ℹ️ **What ships today:** The Google Play build provides **notification-only** car messaging — incoming messages are announced on the head unit and you reply through its notification controls. The full tabbed **Messages / Nodes / Status** experience described below is a beta built on the Android Car App Library (Google's templated car UI is currently restricted to Closed/Internal Play tracks), so it appears only in builds compiled with `-PenableCarTemplates=true`. The rest of this page documents that beta experience.
+
## Overview
-When your phone is connected to an Android Auto head unit (or the Desktop Head Unit emulator used for development), Meshtastic appears as a messaging app built with the Android Car App Library. The car interface presents a tabbed Home screen optimized for driving-safe, glanceable use:
+When your phone is connected to an Android Auto head unit (or the Desktop Head Unit emulator used for development), the beta build presents Meshtastic as a messaging app built with the Android Car App Library, with a tabbed Home screen optimized for driving-safe, glanceable use:
- **Messages** — recent conversations, with hands-free reading and replies.
- **Nodes** — the mesh node list, with a node-detail view.
diff --git a/docs/ca-rES/user/connections.md b/docs/ca-rES/user/connections.md
index c2232f6b6..fcfed0138 100644
--- a/docs/ca-rES/user/connections.md
+++ b/docs/ca-rES/user/connections.md
@@ -23,7 +23,7 @@ Bluetooth Low Energy is the default and most common connection method on Android
1. Ensure your Meshtastic radio is powered on and in pairing mode.
2. Open the app and navigate to the **Connect** tab.
-3. Tap **Scan for Devices** — nearby Meshtastic radios will appear.
+3. Tap **Scan for Bluetooth devices** — nearby Meshtastic radios will appear.
4. Select your device from the list.
5. Accept the Bluetooth pairing prompt if shown.
diff --git a/docs/ca-rES/user/desktop.md b/docs/ca-rES/user/desktop.md
index e69b44554..2ac96feda 100644
--- a/docs/ca-rES/user/desktop.md
+++ b/docs/ca-rES/user/desktop.md
@@ -2,7 +2,7 @@
title: Desktop App
parent: User Guide
nav_order: 14
-last_updated: 2026-06-11
+last_updated: 2026-07-07
description: Install and use the Meshtastic Desktop app on Linux, macOS, and Windows — connections, feature parity, and keyboard shortcuts.
aliases:
- desktop
@@ -60,19 +60,19 @@ Bluetooth Low Energy is supported on Desktop via the [Kable](https://github.com/
## Feature Parity
-| Feature | Android | Desktop | Notes |
-| -------------------------------------------- | ------- | ------- | ---------------------------------------------- |
-| Messaging | ✓ | ✓ | Full parity |
-| Node List | ✓ | ✓ | Full parity |
-| Map | ✓ | ✓ | Full parity |
-| Settings | ✓ | ✓ | Full parity |
-| Bluetooth (BLE) | ✓ | ✓ | Via Kable on desktop |
-| Firmware Update OTA | ✓ | ✗ | Use web flasher |
-| Notifications | ✓ | ✓ | Native OS notifications |
-| Widgets | ✓ | ✗ | Android-only |
-| Android Auto | ✓ | ✗ | Android-only — not available on Desktop or iOS |
-| AI Assistant (Chirpy) | ✓\* | ✗ | Google flavor Android only |
-| App Functions (system AI) | ✓† | ✗ | Google flavor Android only |
+| Feature | Android | Desktop | Notes |
+| -------------------------------------------- | ------- | ------- | -------------------------------------------------------------------------- |
+| Messaging | ✓ | ✓ | Full parity |
+| Node List | ✓ | ✓ | Full parity |
+| 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 |
+| Notifications | ✓ | ✓ | Native OS notifications |
+| Widgets | ✓ | ✗ | Android-only |
+| Android Auto | ✓ | ✗ | Android-only — not available on Desktop or iOS |
+| AI Assistant (Chirpy) | ✓\* | ✗ | Google flavor Android only |
+| App Functions (system AI) | ✓† | ✗ | Google flavor Android only |
\*Chirpy AI requires Android 14+ on Google flavor builds with supported hardware.
@@ -84,14 +84,17 @@ The Desktop app uses the same Compose Multiplatform UI with adaptations for larg
### Keyboard Shortcuts
-| Shortcut | Action |
-| ------------------- | ---------------------- |
-| **⌘Q** / **Ctrl+Q** | Quit the application |
-| **⌘,** / **Ctrl+,** | Open Settings |
-| **⌘1** / **Ctrl+1** | Switch to Messages tab |
-| **⌘2** / **Ctrl+2** | Switch to Nodes tab |
-| **⌘3** / **Ctrl+3** | Switch to Map tab |
-| **⌘4** / **Ctrl+4** | Switch to Connect tab |
+All shortcuts use the **Meta** key — that's ⌘ (Command) on macOS and the Super / Windows key on Linux and Windows. (`Ctrl` is not bound.)
+
+| Shortcut | Action |
+| ---------- | ---------------------- |
+| **Meta+Q** | Quit the application |
+| **Meta+,** | Open Settings |
+| **Meta+1** | Switch to Messages tab |
+| **Meta+2** | Switch to Nodes tab |
+| **Meta+3** | Switch to Map tab |
+| **Meta+4** | Switch to Connect tab |
+| **Meta+/** | Open About |
### Window & System Tray
@@ -123,7 +126,6 @@ Individual doc pages render with full formatting:
```bash
git clone https://github.com/meshtastic/Meshtastic-Android.git
cd Meshtastic-Android
-git submodule update --init
./gradlew :desktopApp:run
```
@@ -134,7 +136,8 @@ Requirements:
## Known Limitations
-- No OTA firmware updates (use web flasher)
+- 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
- BLE bonding is not yet supported on desktop (pairing works without bonding)
@@ -142,7 +145,7 @@ Requirements:
## Related Topics
- [Connections](connections) — connection methods overview
-- [Firmware Updates](firmware) — use the [Web Flasher](https://flasher.meshtastic.org) for desktop firmware updates
+- [Firmware Updates](firmware) — in-app USB update on desktop, or the [Web Flasher](https://flasher.meshtastic.org)
---
diff --git a/docs/ca-rES/user/discovery.md b/docs/ca-rES/user/discovery.md
index 7b0d38b0a..ec6190268 100644
--- a/docs/ca-rES/user/discovery.md
+++ b/docs/ca-rES/user/discovery.md
@@ -44,7 +44,6 @@ Before starting, configure these controls:
The **Start** button stays disabled — with an explanation of why — until the scan can run. Common reasons it's disabled:
- The device is **not connected**.
-- The current channel is using the **default channel key** (use a unique key first — see [Messages & Channels](messages-and-channels)).
- **No presets** have been selected to scan.
- The selected preset uses **2.4 GHz**, which your hardware doesn't support.
diff --git a/docs/ca-rES/user/firmware.md b/docs/ca-rES/user/firmware.md
index 1092a0062..8a1f32029 100644
--- a/docs/ca-rES/user/firmware.md
+++ b/docs/ca-rES/user/firmware.md
@@ -2,8 +2,8 @@
title: Firmware Updates
parent: User Guide
nav_order: 13
-last_updated: 2026-05-13
-description: Update your radio firmware over Bluetooth — OTA process, version channels, pre-flight checks, and recovery.
+last_updated: 2026-07-07
+description: Update your radio firmware over Bluetooth or USB — OTA process, version channels, pre-flight checks, and recovery.
aliases:
- firmware
- update
@@ -17,7 +17,7 @@ Keep your Meshtastic radio up to date with the latest firmware for new features,
## Checking for Updates
-1. Navigate to **Settings → Firmware Update** or tap the firmware notification if shown.
+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.
2. The app checks for available firmware versions.
3. Available updates show the version number and changelog summary.
@@ -39,19 +39,26 @@ The most common update method for Android users:

-### USB Flashing
+### In-App USB Update
-For recovery or when OTA is unavailable:
+When your radio is connected over **USB/serial** (rather than Bluetooth), the Firmware Update screen offers **USB File Transfer**. The app reboots the device into DFU mode, then prompts you to save the `.uf2` file to the device's DFU drive using the system file picker. This option appears only on a USB/serial connection — it is not available over Bluetooth.
+
+> ℹ️ **nRF bootloader note:** Some devices (e.g. RAK WisBlock RAK4631) need their bootloader flashed with the vendor's serial DFU tool (such as `adafruit-nrfutil`) — copying the `.uf2` alone won't update the bootloader. The app surfaces a hint when this applies.
+
+### Other Flashing Options
+
+For recovery or when neither OTA nor in-app USB is available:
- Use the [Meshtastic Web Flasher](https://flasher.meshtastic.org)
- Or the [Meshtastic CLI tool](https://meshtastic.org/docs/getting-started/flashing-firmware) on desktop
## Version Channels
-| Canal | Descripció |
-| ------ | ------------------------------------------- |
-| Stable | Recommended for most users; tested releases |
-| Alpha | Preview releases; may contain bugs |
+| Canal | Descripció |
+| ---------- | -------------------------------------------------------------------------- |
+| Stable | Recommended for most users; tested releases |
+| Alpha | Preview releases; may contain bugs |
+| Local File | Flash a firmware file you select yourself, instead of a downloaded release |
## Pre-Update Checklist
@@ -73,7 +80,7 @@ Once the update succeeds:
- The radio will reboot automatically
- Bluetooth connection will re-establish
- Verify your settings are intact
-- Check the firmware version in **Settings → About**
+- Confirm the new version under **Currently Installed** on the Firmware Update screen — it's also shown on the node's detail page and the Connections screen

diff --git a/docs/ca-rES/user/messages-and-channels.md b/docs/ca-rES/user/messages-and-channels.md
index 569dae864..69c74f556 100644
--- a/docs/ca-rES/user/messages-and-channels.md
+++ b/docs/ca-rES/user/messages-and-channels.md
@@ -116,12 +116,16 @@ You can search the full history of any conversation directly from the chat scree

-> 💡 **Tip:** Search is full-text and stays within the conversation you opened it from — it doesn't search across other channels or contacts. Matching is fast even on long histories because messages are indexed locally.
+> 💡 **Tip:** Search is full-text and stays within the conversation you opened it from — it doesn't search across other channels or contacts. It matches against the messages already stored on your device, so it works fully offline.
### Message Bubbles
Messages appear as chat bubbles — sent messages on the right, received messages on the left. Each bubble shows the sender, timestamp, and delivery status. Messages with replies include a quoted preview of the original message above the response.
+### Mentions
+
+Type `@` while composing to mention a node — a picker suggests matching contacts as you type. In a received message, a mention appears as a highlighted chip showing the node's name; tap it to jump straight to that node's detail page.
+
### Reactions
React to messages with emoji:
@@ -143,6 +147,7 @@ Long-press any message to access:
- **Copy** — copy message text to clipboard
- **Reply** — quote the message in your response
- **React** — add an emoji reaction
+- **Translate** — translate a received message into your device language and toggle between the original and translated text (Google Play build only; uses on-device translation)
- **Delete** — remove a message you sent (local deletion)
### Message Priority
diff --git a/docs/ca-rES/user/mqtt.md b/docs/ca-rES/user/mqtt.md
index 260fa97c9..a03cb3104 100644
--- a/docs/ca-rES/user/mqtt.md
+++ b/docs/ca-rES/user/mqtt.md
@@ -56,6 +56,8 @@ A gateway node with internet access (WiFi or Ethernet) publishes mesh messages t
The community maintains a public broker at `mqtt.meshtastic.org`. This is intended for general use and testing.
+> ℹ️ **Note:** Connections to `mqtt.meshtastic.org` always use TLS (port 8883), even if the TLS toggle is off. For any other broker, TLS is used only when you enable it (port 8883 with TLS, 1883 without).
+
> 🔒 **Privacy:** Messages on the public broker are readable by anyone subscribed. Always use channel encryption for private communications.
### Private Broker
diff --git a/docs/ca-rES/user/node-metrics.md b/docs/ca-rES/user/node-metrics.md
index 16d319e81..69e3603bc 100644
--- a/docs/ca-rES/user/node-metrics.md
+++ b/docs/ca-rES/user/node-metrics.md
@@ -55,12 +55,15 @@ The BME680 **IAQ (Indoor Air Quality)** index is a single 0–500+ value derived
Air Quality is a dedicated metrics view for nodes equipped with a particulate-matter and/or CO₂ sensor. It is **separate from the BME680 IAQ reading** listed under Environment Metrics — IAQ is a single gas-resistance-derived index, while the Air Quality view charts the underlying particulate and CO₂ measurements.
-| Metric | Unit | Descripció |
-| --------------------- | ----- | ---------------------------------------------------- |
-| PM1.0 | µg/m³ | Particulate matter up to 1.0 micron |
-| PM2.5 | µg/m³ | Particulate matter up to 2.5 microns |
-| PM10 | µg/m³ | Particulate matter up to 10 microns |
-| CO₂ | ppm | Carbon dioxide concentration |
+| Metric | Unit | Descripció |
+| --------------------- | --------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| PM1.0 | µg/m³ | Particulate matter up to 1.0 micron |
+| PM2.5 | µg/m³ | Particulate matter up to 2.5 microns |
+| PM10 | µg/m³ | Particulate matter up to 10 microns |
+| AQI | EPA index | EPA **NowCast** AQI computed from your recent PM2.5 history, with a color-coded severity label. Shown next to PM2.5 once enough readings have accumulated. |
+| CO₂ | ppm | Carbon dioxide concentration |
+| CO₂ temperature | °C / °F | Temperature reported by the CO₂ sensor itself (e.g. SCD4x) |
+| CO₂ humidity | % | Relative humidity reported by the CO₂ sensor |
CO₂ readings are color-coded by severity to make air quality easy to read at a glance:
@@ -98,12 +101,12 @@ Radio signal quality information:
Signal quality is rated from **SNR relative to the active LoRa modem preset's demodulation floor**, not from fixed thresholds — a given SNR means different things on different presets (e.g. −15 dB is fine on LongSlow but unusable on ShortFast). RSSI is shown but is not part of the rating. Letting `limit` be the preset's SNR limit:
-| Quality | Criteria |
-| ------- | ------------------------------------------------ |
-| Good | SNR above the preset's limit |
-| Fair | within 5.5 dB below the limit |
-| Bad | within 7.5 dB below the limit |
-| None | more than 7.5 dB below the limit |
+| 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 |
+| None | more than 7.5 dB below the limit |
See [Understanding the Signal Meter](signal-meter) for the full explanation.
diff --git a/docs/ca-rES/user/settings-radio-user.md b/docs/ca-rES/user/settings-radio-user.md
index 1735c4637..d3e4473c3 100644
--- a/docs/ca-rES/user/settings-radio-user.md
+++ b/docs/ca-rES/user/settings-radio-user.md
@@ -74,6 +74,8 @@ After modifying settings, tap **Save** to write the configuration to your radio.
| ~~Long Slow~~ | ~30 km | 0.18 kbps | −17.5 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.
+
#### Choosing a Modem Preset
The modem preset controls the fundamental tradeoff between **range** and **data rate**:
diff --git a/docs/ca-rES/user/signal-meter.md b/docs/ca-rES/user/signal-meter.md
index 43f3aeae7..71741a4c2 100644
--- a/docs/ca-rES/user/signal-meter.md
+++ b/docs/ca-rES/user/signal-meter.md
@@ -52,12 +52,12 @@ The app rates your signal quality (None, Bad, Fair, or Good) from **SNR alone, m
Because the rating is relative to the preset limit, the _same_ SNR can rate differently on different presets — `-15 dB` is healthy on `LongSlow` but unusable on `ShortFast`. Letting `limit` be the active preset's SNR Limit, here is how the app picks the bars (or color):
-| Level | Bars | Criteria | Meaning |
-| ----- | ---- | ------------------------------------ | ---------------------------------------------------------------------------------------- |
-| Good | 3 | SNR **above** the preset's `limit` | Signal is comfortably above the demodulation floor — healthy connection. |
-| Fair | 2 | within `5.5 dB` below the `limit` | Decodable, but getting close to the floor. |
-| Bad | 1 | within `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. |
+| 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. |
+| 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.
diff --git a/docs/ca-rES/user/telemetry-and-sensors.md b/docs/ca-rES/user/telemetry-and-sensors.md
index 328ccf7e9..21aaaca1d 100644
--- a/docs/ca-rES/user/telemetry-and-sensors.md
+++ b/docs/ca-rES/user/telemetry-and-sensors.md
@@ -103,7 +103,9 @@ Nodes with particulate matter or CO₂ sensors report air quality data:
| PM10 | µg/m³ | Coarse particulate matter |
| CO₂ | ppm | Carbon dioxide concentration |
-The CO₂ reading is color-coded by severity (Good → Stuffy → Poor → Unsafe → Evacuate). See [Node Metrics — Air Quality](node-metrics#air-quality-metrics) for the exact ppm bands and colors.
+CO₂ sensors such as the SCD4x also report their own temperature and humidity, which appear alongside the readings above. From PM2.5 history the app additionally derives an **EPA NowCast AQI** value.
+
+The CO₂ reading is color-coded by severity (Good → Stuffy → Poor → Unsafe → Evacuate). See [Node Metrics — Air Quality](node-metrics#air-quality-metrics) for the exact ppm bands, colors, and AQI detail.
Air quality data can be viewed as info cards on the node detail screen, charted over time, and exported to CSV.
diff --git a/docs/ca-rES/user/translate.md b/docs/ca-rES/user/translate.md
index 25aa4693c..70c966fed 100644
--- a/docs/ca-rES/user/translate.md
+++ b/docs/ca-rES/user/translate.md
@@ -18,11 +18,11 @@ Contributing translations helps make Meshtastic accessible to a wider audience.
## What Gets Translated
-| Resource | Source Location | Notes |
-| ----------------- | ------------------------------------- | ---------------------------------------------------------------------- |
-| UI strings | `composeResources/values/strings.xml` | Buttons, labels, messages, and all user-visible text |
-| User Guide pages | `docs/user/*.md` | In-app documentation shown in Help & Documentation |
-| Fastlane metadata | `fastlane/metadata/android/en-US/` | App Store listing title, description, and changelogs |
+| Resource | Source Location | Notes |
+| ----------------- | ------------------------------------------------------------------- | ---------------------------------------------------------------------- |
+| UI strings | `core/resources/src/commonMain/composeResources/values/strings.xml` | Buttons, labels, messages, and all user-visible text |
+| User Guide pages | `docs/en/user/*.md` | In-app documentation shown in Help & Documentation |
+| Fastlane metadata | `fastlane/metadata/android/en-US/` | App Store listing title, description, and changelogs |
> ⚠️ **Note:** Developer Guide pages are English-only. Code-focused documentation targeting contributors is not translated.
diff --git a/docs/ca-rES/user/units-and-locale.md b/docs/ca-rES/user/units-and-locale.md
index feaf6f610..2ccaeb96e 100644
--- a/docs/ca-rES/user/units-and-locale.md
+++ b/docs/ca-rES/user/units-and-locale.md
@@ -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 uses the `MetricFormatter` utility to convert and display values in whatever unit system your device's locale specifies.
+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.
On Android, your measurement preferences are determined by your system **Language & Region** settings. On Desktop (JVM), the app uses the JVM's default `Locale`.
@@ -115,12 +115,13 @@ On Android, your measurement system (metric vs imperial) is tied to your region
2. Change your **Region** or **Measurement units** preference
3. Return to Meshtastic — values update immediately
-> 💡 **Tip:** The app uses `MetricFormatter` from `core:common`. All measurement formatting is handled by a shared KMP utility that respects your platform's locale. Developers adding new measurement displays should use `MetricFormatter` rather than hard-coding unit conversions.
+> 💡 **Tip:** All measurement formatting is handled centrally and respects your platform's locale, so units stay consistent everywhere in the app.
## Related Topics
- [Node Metrics](node-metrics) — where temperature, distance, and sensor values are displayed
- [Telemetry & Sensors](telemetry-and-sensors) — the sensors that produce these measurements
+- [Measurement & Formatting](../developer/measurement) — developer reference for the formatting utilities
- [Settings — Radio & User](settings-radio-user) — region setting that drives unit selection
---
diff --git a/docs/cs-rCZ/user/android-auto.md b/docs/cs-rCZ/user/android-auto.md
index 1fc773832..0577643ac 100644
--- a/docs/cs-rCZ/user/android-auto.md
+++ b/docs/cs-rCZ/user/android-auto.md
@@ -2,7 +2,7 @@
title: Android Auto
parent: Uživatelská příručka
nav_order: 18
-last_updated: 2026-06-11
+last_updated: 2026-07-07
description: Use Meshtastic hands-free on an Android Auto head unit — read messages aloud, reply by voice, and check nodes and mesh status while driving.
aliases:
- android-auto
@@ -17,9 +17,11 @@ Meshtastic integrates with Android Auto so you can stay in touch with your mesh
> ⚠️ **Note:** Android Auto support is available on **Google-flavor Android builds only**. It is not included in the F-Droid build, and it is not available on Desktop or iOS.
+> ℹ️ **What ships today:** The Google Play build provides **notification-only** car messaging — incoming messages are announced on the head unit and you reply through its notification controls. The full tabbed **Messages / Nodes / Status** experience described below is a beta built on the Android Car App Library (Google's templated car UI is currently restricted to Closed/Internal Play tracks), so it appears only in builds compiled with `-PenableCarTemplates=true`. The rest of this page documents that beta experience.
+
## Overview
-When your phone is connected to an Android Auto head unit (or the Desktop Head Unit emulator used for development), Meshtastic appears as a messaging app built with the Android Car App Library. The car interface presents a tabbed Home screen optimized for driving-safe, glanceable use:
+When your phone is connected to an Android Auto head unit (or the Desktop Head Unit emulator used for development), the beta build presents Meshtastic as a messaging app built with the Android Car App Library, with a tabbed Home screen optimized for driving-safe, glanceable use:
- **Messages** — recent conversations, with hands-free reading and replies.
- **Nodes** — the mesh node list, with a node-detail view.
diff --git a/docs/cs-rCZ/user/connections.md b/docs/cs-rCZ/user/connections.md
index 305c0602a..0bc67e6fd 100644
--- a/docs/cs-rCZ/user/connections.md
+++ b/docs/cs-rCZ/user/connections.md
@@ -23,7 +23,7 @@ Bluetooth Low Energy is the default and most common connection method on Android
1. Ensure your Meshtastic radio is powered on and in pairing mode.
2. Open the app and navigate to the **Connect** tab.
-3. Tap **Scan for Devices** — nearby Meshtastic radios will appear.
+3. Tap **Scan for Bluetooth devices** — nearby Meshtastic radios will appear.
4. Select your device from the list.
5. Accept the Bluetooth pairing prompt if shown.
diff --git a/docs/cs-rCZ/user/desktop.md b/docs/cs-rCZ/user/desktop.md
index 190136d53..bcab3bf28 100644
--- a/docs/cs-rCZ/user/desktop.md
+++ b/docs/cs-rCZ/user/desktop.md
@@ -2,7 +2,7 @@
title: Desktop App
parent: User Guide
nav_order: 14
-last_updated: 2026-06-11
+last_updated: 2026-07-07
description: Install and use the Meshtastic Desktop app on Linux, macOS, and Windows — connections, feature parity, and keyboard shortcuts.
aliases:
- desktop
@@ -60,19 +60,19 @@ Bluetooth Low Energy is supported on Desktop via the [Kable](https://github.com/
## Feature Parity
-| Feature | Android | Desktop | Poznámka |
-| -------------------------------------------- | ------- | ------- | ---------------------------------------------- |
-| Messaging | ✓ | ✓ | Full parity |
-| Node List | ✓ | ✓ | Full parity |
-| Mapa | ✓ | ✓ | Full parity |
-| Nastavení | ✓ | ✓ | Full parity |
-| Bluetooth (BLE) | ✓ | ✓ | Via Kable on desktop |
-| Firmware Update OTA | ✓ | ✗ | Use web flasher |
-| Notifications | ✓ | ✓ | Native OS notifications |
-| Widgets | ✓ | ✗ | Android-only |
-| Android Auto | ✓ | ✗ | Android-only — not available on Desktop or iOS |
-| AI Assistant (Chirpy) | ✓\* | ✗ | Google flavor Android only |
-| App Functions (system AI) | ✓† | ✗ | Google flavor Android only |
+| Feature | Android | Desktop | Poznámka |
+| -------------------------------------------- | ------- | ------- | -------------------------------------------------------------------------- |
+| Messaging | ✓ | ✓ | Full parity |
+| Node List | ✓ | ✓ | Full parity |
+| Mapa | ✓ | ◐ | Map tab exists on desktop, but the interactive map view is Android-only |
+| Nastavení | ✓ | ✓ | Full parity |
+| Bluetooth (BLE) | ✓ | ✓ | Via Kable on desktop |
+| Aktualizace firmware | ✓ | ◐ | Desktop supports in-app USB firmware update; BLE/Wi-Fi OTA is Android-only |
+| Notifications | ✓ | ✓ | Native OS notifications |
+| Widgets | ✓ | ✗ | Android-only |
+| Android Auto | ✓ | ✗ | Android-only — not available on Desktop or iOS |
+| AI Assistant (Chirpy) | ✓\* | ✗ | Google flavor Android only |
+| App Functions (system AI) | ✓† | ✗ | Google flavor Android only |
\*Chirpy AI requires Android 14+ on Google flavor builds with supported hardware.
@@ -84,14 +84,17 @@ The Desktop app uses the same Compose Multiplatform UI with adaptations for larg
### Keyboard Shortcuts
-| Shortcut | Action |
-| ------------------- | ---------------------- |
-| **⌘Q** / **Ctrl+Q** | Quit the application |
-| **⌘,** / **Ctrl+,** | Open Settings |
-| **⌘1** / **Ctrl+1** | Switch to Messages tab |
-| **⌘2** / **Ctrl+2** | Switch to Nodes tab |
-| **⌘3** / **Ctrl+3** | Switch to Map tab |
-| **⌘4** / **Ctrl+4** | Switch to Connect tab |
+All shortcuts use the **Meta** key — that's ⌘ (Command) on macOS and the Super / Windows key on Linux and Windows. (`Ctrl` is not bound.)
+
+| Shortcut | Action |
+| ---------- | ---------------------- |
+| **Meta+Q** | Quit the application |
+| **Meta+,** | Open Settings |
+| **Meta+1** | Switch to Messages tab |
+| **Meta+2** | Switch to Nodes tab |
+| **Meta+3** | Switch to Map tab |
+| **Meta+4** | Switch to Connect tab |
+| **Meta+/** | Open About |
### Window & System Tray
@@ -123,7 +126,6 @@ Individual doc pages render with full formatting:
```bash
git clone https://github.com/meshtastic/Meshtastic-Android.git
cd Meshtastic-Android
-git submodule update --init
./gradlew :desktopApp:run
```
@@ -134,7 +136,8 @@ Požadavky:
## Known Limitations
-- No OTA firmware updates (use web flasher)
+- 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
- BLE bonding is not yet supported on desktop (pairing works without bonding)
@@ -142,7 +145,7 @@ Požadavky:
## Related Topics
- [Connections](connections) — connection methods overview
-- [Firmware Updates](firmware) — use the [Web Flasher](https://flasher.meshtastic.org) for desktop firmware updates
+- [Firmware Updates](firmware) — in-app USB update on desktop, or the [Web Flasher](https://flasher.meshtastic.org)
---
diff --git a/docs/cs-rCZ/user/discovery.md b/docs/cs-rCZ/user/discovery.md
index fa769debc..5c680348f 100644
--- a/docs/cs-rCZ/user/discovery.md
+++ b/docs/cs-rCZ/user/discovery.md
@@ -44,7 +44,6 @@ Before starting, configure these controls:
The **Start** button stays disabled — with an explanation of why — until the scan can run. Common reasons it's disabled:
- The device is **not connected**.
-- The current channel is using the **default channel key** (use a unique key first — see [Messages & Channels](messages-and-channels)).
- **No presets** have been selected to scan.
- The selected preset uses **2.4 GHz**, which your hardware doesn't support.
diff --git a/docs/cs-rCZ/user/firmware.md b/docs/cs-rCZ/user/firmware.md
index 717d3799e..bef1bbe2c 100644
--- a/docs/cs-rCZ/user/firmware.md
+++ b/docs/cs-rCZ/user/firmware.md
@@ -2,8 +2,8 @@
title: Firmware Updates
parent: User Guide
nav_order: 13
-last_updated: 2026-05-13
-description: Update your radio firmware over Bluetooth — OTA process, version channels, pre-flight checks, and recovery.
+last_updated: 2026-07-07
+description: Update your radio firmware over Bluetooth or USB — OTA process, version channels, pre-flight checks, and recovery.
aliases:
- firmware
- update
@@ -17,7 +17,7 @@ Keep your Meshtastic radio up to date with the latest firmware for new features,
## Checking for Updates
-1. Navigate to **Settings → Firmware Update** or tap the firmware notification if shown.
+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.
2. The app checks for available firmware versions.
3. Available updates show the version number and changelog summary.
@@ -39,19 +39,26 @@ The most common update method for Android users:

-### USB Flashing
+### In-App USB Update
-For recovery or when OTA is unavailable:
+When your radio is connected over **USB/serial** (rather than Bluetooth), the Firmware Update screen offers **USB File Transfer**. The app reboots the device into DFU mode, then prompts you to save the `.uf2` file to the device's DFU drive using the system file picker. This option appears only on a USB/serial connection — it is not available over Bluetooth.
+
+> ℹ️ **nRF bootloader note:** Some devices (e.g. RAK WisBlock RAK4631) need their bootloader flashed with the vendor's serial DFU tool (such as `adafruit-nrfutil`) — copying the `.uf2` alone won't update the bootloader. The app surfaces a hint when this applies.
+
+### Other Flashing Options
+
+For recovery or when neither OTA nor in-app USB is available:
- Use the [Meshtastic Web Flasher](https://flasher.meshtastic.org)
- Or the [Meshtastic CLI tool](https://meshtastic.org/docs/getting-started/flashing-firmware) on desktop
## Version Channels
-| Kanál | Popis |
-| -------- | ------------------------------------------- |
-| Stabilní | Recommended for most users; tested releases |
-| Alfa | Preview releases; may contain bugs |
+| Kanál | Popis |
+| -------------- | -------------------------------------------------------------------------- |
+| Stabilní | Recommended for most users; tested releases |
+| Alfa | Preview releases; may contain bugs |
+| Lokální soubor | Flash a firmware file you select yourself, instead of a downloaded release |
## Pre-Update Checklist
@@ -73,7 +80,7 @@ Once the update succeeds:
- The radio will reboot automatically
- Bluetooth connection will re-establish
- Verify your settings are intact
-- Check the firmware version in **Settings → About**
+- Confirm the new version under **Currently Installed** on the Firmware Update screen — it's also shown on the node's detail page and the Connections screen

diff --git a/docs/cs-rCZ/user/messages-and-channels.md b/docs/cs-rCZ/user/messages-and-channels.md
index 5fd6fc307..38c96ec3b 100644
--- a/docs/cs-rCZ/user/messages-and-channels.md
+++ b/docs/cs-rCZ/user/messages-and-channels.md
@@ -116,12 +116,16 @@ You can search the full history of any conversation directly from the chat scree

-> 💡 **Tip:** Search is full-text and stays within the conversation you opened it from — it doesn't search across other channels or contacts. Matching is fast even on long histories because messages are indexed locally.
+> 💡 **Tip:** Search is full-text and stays within the conversation you opened it from — it doesn't search across other channels or contacts. It matches against the messages already stored on your device, so it works fully offline.
### Message Bubbles
Messages appear as chat bubbles — sent messages on the right, received messages on the left. Each bubble shows the sender, timestamp, and delivery status. Messages with replies include a quoted preview of the original message above the response.
+### Mentions
+
+Type `@` while composing to mention a node — a picker suggests matching contacts as you type. In a received message, a mention appears as a highlighted chip showing the node's name; tap it to jump straight to that node's detail page.
+
### Reactions
React to messages with emoji:
@@ -143,6 +147,7 @@ Long-press any message to access:
- **Copy** — copy message text to clipboard
- **Reply** — quote the message in your response
- **React** — add an emoji reaction
+- **Translate** — translate a received message into your device language and toggle between the original and translated text (Google Play build only; uses on-device translation)
- **Delete** — remove a message you sent (local deletion)
### Message Priority
diff --git a/docs/cs-rCZ/user/mqtt.md b/docs/cs-rCZ/user/mqtt.md
index 6ba515721..b5a890f3f 100644
--- a/docs/cs-rCZ/user/mqtt.md
+++ b/docs/cs-rCZ/user/mqtt.md
@@ -56,6 +56,8 @@ A gateway node with internet access (WiFi or Ethernet) publishes mesh messages t
The community maintains a public broker at `mqtt.meshtastic.org`. This is intended for general use and testing.
+> ℹ️ **Note:** Connections to `mqtt.meshtastic.org` always use TLS (port 8883), even if the TLS toggle is off. For any other broker, TLS is used only when you enable it (port 8883 with TLS, 1883 without).
+
> 🔒 **Privacy:** Messages on the public broker are readable by anyone subscribed. Always use channel encryption for private communications.
### Private Broker
diff --git a/docs/cs-rCZ/user/node-metrics.md b/docs/cs-rCZ/user/node-metrics.md
index e292ab193..3d64a89dc 100644
--- a/docs/cs-rCZ/user/node-metrics.md
+++ b/docs/cs-rCZ/user/node-metrics.md
@@ -55,12 +55,15 @@ The BME680 **IAQ (Indoor Air Quality)** index is a single 0–500+ value derived
Air Quality is a dedicated metrics view for nodes equipped with a particulate-matter and/or CO₂ sensor. It is **separate from the BME680 IAQ reading** listed under Environment Metrics — IAQ is a single gas-resistance-derived index, while the Air Quality view charts the underlying particulate and CO₂ measurements.
-| Metrický | Unit | Popis |
-| --------------------- | ----- | ---------------------------------------------------- |
-| PM1.0 | µg/m³ | Particulate matter up to 1.0 micron |
-| PM2.5 | µg/m³ | Particulate matter up to 2.5 microns |
-| PM10 | µg/m³ | Particulate matter up to 10 microns |
-| CO₂ | ppm | Carbon dioxide concentration |
+| Metrický | Unit | Popis |
+| --------------------- | --------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| PM1.0 | µg/m³ | Particulate matter up to 1.0 micron |
+| PM2.5 | µg/m³ | Particulate matter up to 2.5 microns |
+| PM10 | µg/m³ | Particulate matter up to 10 microns |
+| AQI | EPA index | EPA **NowCast** AQI computed from your recent PM2.5 history, with a color-coded severity label. Shown next to PM2.5 once enough readings have accumulated. |
+| CO₂ | ppm | Carbon dioxide concentration |
+| CO₂ temperature | °C / °F | Temperature reported by the CO₂ sensor itself (e.g. SCD4x) |
+| CO₂ humidity | % | Relative humidity reported by the CO₂ sensor |
CO₂ readings are color-coded by severity to make air quality easy to read at a glance:
@@ -98,12 +101,12 @@ Radio signal quality information:
Signal quality is rated from **SNR relative to the active LoRa modem preset's demodulation floor**, not from fixed thresholds — a given SNR means different things on different presets (e.g. −15 dB is fine on LongSlow but unusable on ShortFast). RSSI is shown but is not part of the rating. Letting `limit` be the preset's SNR limit:
-| Quality | Criteria |
-| ------- | ------------------------------------------------ |
-| Silný | SNR above the preset's limit |
-| Slabý | within 5.5 dB below the limit |
-| Špatný | within 7.5 dB below the limit |
-| Žádný | more than 7.5 dB below the limit |
+| Quality | Criteria |
+| ------- | ------------------------------------------------------------------------- |
+| Silný | SNR above the preset's limit |
+| Slabý | up to 5.5 dB below the limit |
+| Špatný | between 5.5 dB and 7.5 dB below the limit |
+| Žádný | more than 7.5 dB below the limit |
See [Understanding the Signal Meter](signal-meter) for the full explanation.
diff --git a/docs/cs-rCZ/user/settings-radio-user.md b/docs/cs-rCZ/user/settings-radio-user.md
index 54306dc23..b8eea1f5a 100644
--- a/docs/cs-rCZ/user/settings-radio-user.md
+++ b/docs/cs-rCZ/user/settings-radio-user.md
@@ -74,6 +74,8 @@ After modifying settings, tap **Save** to write the configuration to your radio.
| ~~Long Slow~~ | ~30 km | 0.18 kbps | −17.5 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.
+
#### Choosing a Modem Preset
The modem preset controls the fundamental tradeoff between **range** and **data rate**:
diff --git a/docs/cs-rCZ/user/signal-meter.md b/docs/cs-rCZ/user/signal-meter.md
index 1891d331f..54bf22ece 100644
--- a/docs/cs-rCZ/user/signal-meter.md
+++ b/docs/cs-rCZ/user/signal-meter.md
@@ -52,12 +52,12 @@ The app rates your signal quality (None, Bad, Fair, or Good) from **SNR alone, m
Because the rating is relative to the preset limit, the _same_ SNR can rate differently on different presets — `-15 dB` is healthy on `LongSlow` but unusable on `ShortFast`. Letting `limit` be the active preset's SNR Limit, here is how the app picks the bars (or color):
-| Level | Bars | Criteria | Meaning |
-| ------ | ---- | ------------------------------------ | ---------------------------------------------------------------------------------------- |
-| Silný | 3 | SNR **above** the preset's `limit` | Signal is comfortably above the demodulation floor — healthy connection. |
-| Slabý | 2 | within `5.5 dB` below the `limit` | Decodable, but getting close to the floor. |
-| Špatný | 1 | within `7.5 dB` below the `limit` | At the very edge of what the preset can recover. |
-| Žádný | 0 | more than `7.5 dB` below the `limit` | Below the floor — transmission lost to noise. |
+| Level | Bars | Criteria | Meaning |
+| ------ | ---- | ----------------------------------------------- | ---------------------------------------------------------------------------------------- |
+| Silný | 3 | SNR **above** the preset's `limit` | Signal is comfortably above the demodulation floor — healthy connection. |
+| Slabý | 2 | up to `5.5 dB` below the `limit` | Decodable, but getting close to the floor. |
+| Špatný | 1 | between `5.5 dB` and `7.5 dB` below the `limit` | At the very edge of what the preset can recover. |
+| Žádný | 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.
diff --git a/docs/cs-rCZ/user/telemetry-and-sensors.md b/docs/cs-rCZ/user/telemetry-and-sensors.md
index 2268b43c8..9a5b6ea74 100644
--- a/docs/cs-rCZ/user/telemetry-and-sensors.md
+++ b/docs/cs-rCZ/user/telemetry-and-sensors.md
@@ -103,7 +103,9 @@ Nodes with particulate matter or CO₂ sensors report air quality data:
| PM10 | µg/m³ | Coarse particulate matter |
| CO₂ | ppm | Carbon dioxide concentration |
-The CO₂ reading is color-coded by severity (Good → Stuffy → Poor → Unsafe → Evacuate). See [Node Metrics — Air Quality](node-metrics#air-quality-metrics) for the exact ppm bands and colors.
+CO₂ sensors such as the SCD4x also report their own temperature and humidity, which appear alongside the readings above. From PM2.5 history the app additionally derives an **EPA NowCast AQI** value.
+
+The CO₂ reading is color-coded by severity (Good → Stuffy → Poor → Unsafe → Evacuate). See [Node Metrics — Air Quality](node-metrics#air-quality-metrics) for the exact ppm bands, colors, and AQI detail.
Air quality data can be viewed as info cards on the node detail screen, charted over time, and exported to CSV.
diff --git a/docs/cs-rCZ/user/translate.md b/docs/cs-rCZ/user/translate.md
index b74cce17f..376d74615 100644
--- a/docs/cs-rCZ/user/translate.md
+++ b/docs/cs-rCZ/user/translate.md
@@ -18,11 +18,11 @@ Contributing translations helps make Meshtastic accessible to a wider audience.
## What Gets Translated
-| Resource | Source Location | Poznámka |
-| ----------------- | ------------------------------------- | ---------------------------------------------------------------------- |
-| UI strings | `composeResources/values/strings.xml` | Buttons, labels, messages, and all user-visible text |
-| User Guide pages | `docs/user/*.md` | In-app documentation shown in Help & Documentation |
-| Fastlane metadata | `fastlane/metadata/android/en-US/` | App Store listing title, description, and changelogs |
+| Resource | Source Location | Poznámka |
+| ----------------- | ------------------------------------------------------------------- | ---------------------------------------------------------------------- |
+| UI strings | `core/resources/src/commonMain/composeResources/values/strings.xml` | Buttons, labels, messages, and all user-visible text |
+| User Guide pages | `docs/en/user/*.md` | In-app documentation shown in Help & Documentation |
+| Fastlane metadata | `fastlane/metadata/android/en-US/` | App Store listing title, description, and changelogs |
> ⚠️ **Note:** Developer Guide pages are English-only. Code-focused documentation targeting contributors is not translated.
diff --git a/docs/cs-rCZ/user/units-and-locale.md b/docs/cs-rCZ/user/units-and-locale.md
index f9a294b69..1d2cf1f9d 100644
--- a/docs/cs-rCZ/user/units-and-locale.md
+++ b/docs/cs-rCZ/user/units-and-locale.md
@@ -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 uses the `MetricFormatter` utility to convert and display values in whatever unit system your device's locale specifies.
+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.
On Android, your measurement preferences are determined by your system **Language & Region** settings. On Desktop (JVM), the app uses the JVM's default `Locale`.
@@ -115,12 +115,13 @@ On Android, your measurement system (metric vs imperial) is tied to your region
2. Change your **Region** or **Measurement units** preference
3. Return to Meshtastic — values update immediately
-> 💡 **Tip:** The app uses `MetricFormatter` from `core:common`. All measurement formatting is handled by a shared KMP utility that respects your platform's locale. Developers adding new measurement displays should use `MetricFormatter` rather than hard-coding unit conversions.
+> 💡 **Tip:** All measurement formatting is handled centrally and respects your platform's locale, so units stay consistent everywhere in the app.
## Related Topics
- [Node Metrics](node-metrics) — where temperature, distance, and sensor values are displayed
- [Telemetry & Sensors](telemetry-and-sensors) — the sensors that produce these measurements
+- [Measurement & Formatting](../developer/measurement) — developer reference for the formatting utilities
- [Settings — Radio & User](settings-radio-user) — region setting that drives unit selection
---
diff --git a/docs/de-rDE/user/android-auto.md b/docs/de-rDE/user/android-auto.md
index 3d4fe6b9f..cab0695a1 100644
--- a/docs/de-rDE/user/android-auto.md
+++ b/docs/de-rDE/user/android-auto.md
@@ -2,7 +2,7 @@
title: Android Auto
parent: Benutzerhandbuch
nav_order: 18
-last_updated: 2026-06-11
+last_updated: 2026-07-07
description: Use Meshtastic hands-free on an Android Auto head unit — read messages aloud, reply by voice, and check nodes and mesh status while driving.
aliases:
- android-auto
@@ -17,9 +17,11 @@ Meshtastic integrates with Android Auto so you can stay in touch with your mesh
> ⚠️ **Note:** Android Auto support is available on **Google-flavor Android builds only**. It is not included in the F-Droid build, and it is not available on Desktop or iOS.
+> ℹ️ **What ships today:** The Google Play build provides **notification-only** car messaging — incoming messages are announced on the head unit and you reply through its notification controls. The full tabbed **Messages / Nodes / Status** experience described below is a beta built on the Android Car App Library (Google's templated car UI is currently restricted to Closed/Internal Play tracks), so it appears only in builds compiled with `-PenableCarTemplates=true`. The rest of this page documents that beta experience.
+
## Übersicht
-Wenn Ihr Telefon mit einer Android-Auto-Head-Unit (oder dem für die Entwicklung genutzten Desktop-Head-Unit-Emulator) verbunden ist, erscheint Meshtastic als Messaging-App, die auf Basis der Android Car App Bibliothek entwickelt wurde. The car interface presents a tabbed Home screen optimized for driving-safe, glanceable use:
+When your phone is connected to an Android Auto head unit (or the Desktop Head Unit emulator used for development), the beta build presents Meshtastic as a messaging app built with the Android Car App Library, with a tabbed Home screen optimized for driving-safe, glanceable use:
- **Messages** — recent conversations, with hands-free reading and replies.
- **Nodes** — the mesh node list, with a node-detail view.
diff --git a/docs/de-rDE/user/connections.md b/docs/de-rDE/user/connections.md
index fdc83e506..819d0af0d 100644
--- a/docs/de-rDE/user/connections.md
+++ b/docs/de-rDE/user/connections.md
@@ -23,7 +23,7 @@ Bluetooth Low Energy is the default and most common connection method on Android
1. Ensure your Meshtastic radio is powered on and in pairing mode.
2. Open the app and navigate to the **Connect** tab.
-3. Tap **Scan for Devices** — nearby Meshtastic radios will appear.
+3. Tap **Scan for Bluetooth devices** — nearby Meshtastic radios will appear.
4. Select your device from the list.
5. Accept the Bluetooth pairing prompt if shown.
diff --git a/docs/de-rDE/user/desktop.md b/docs/de-rDE/user/desktop.md
index 1de51c6d1..e4a23a95f 100644
--- a/docs/de-rDE/user/desktop.md
+++ b/docs/de-rDE/user/desktop.md
@@ -2,7 +2,7 @@
title: Desktop App
parent: User Guide
nav_order: 14
-last_updated: 2026-06-11
+last_updated: 2026-07-07
description: Install and use the Meshtastic Desktop app on Linux, macOS, and Windows — connections, feature parity, and keyboard shortcuts.
aliases:
- desktop
@@ -60,19 +60,19 @@ Bluetooth Low Energy is supported on Desktop via the [Kable](https://github.com/
## Feature Parity
-| Funktion | Android | Desktop | Knoten |
-| -------------------------------------------- | ------- | ------- | ---------------------------------------------- |
-| Messaging | ✓ | ✓ | Full parity |
-| Node List | ✓ | ✓ | Full parity |
-| Karte | ✓ | ✓ | Full parity |
-| Einstellungen | ✓ | ✓ | Full parity |
-| Bluetooth (BLE) | ✓ | ✓ | Via Kable on desktop |
-| Firmware Update OTA | ✓ | ✗ | Use web flasher |
-| Benachrichtigungen | ✓ | ✓ | Native OS notifications |
-| Widgets | ✓ | ✗ | Android-only |
-| Android Auto | ✓ | ✗ | Android-only — not available on Desktop or iOS |
-| AI Assistant (Chirpy) | ✓\* | ✗ | Google flavor Android only |
-| App Functions (system AI) | ✓† | ✗ | Google flavor Android only |
+| Funktion | Android | Desktop | Knoten |
+| -------------------------------------------- | ------- | ------- | -------------------------------------------------------------------------- |
+| Messaging | ✓ | ✓ | Full parity |
+| Node List | ✓ | ✓ | Full parity |
+| Karte | ✓ | ◐ | Map tab exists on desktop, but the interactive map view is Android-only |
+| Einstellungen | ✓ | ✓ | Full parity |
+| Bluetooth (BLE) | ✓ | ✓ | Via Kable on desktop |
+| Firmware Aktualisierung | ✓ | ◐ | Desktop supports in-app USB firmware update; BLE/Wi-Fi OTA is Android-only |
+| Benachrichtigungen | ✓ | ✓ | Native OS notifications |
+| Widgets | ✓ | ✗ | Android-only |
+| Android Auto | ✓ | ✗ | Android-only — not available on Desktop or iOS |
+| AI Assistant (Chirpy) | ✓\* | ✗ | Google flavor Android only |
+| App Functions (system AI) | ✓† | ✗ | Google flavor Android only |
\*Chirpy AI requires Android 14+ on Google flavor builds with supported hardware.
@@ -84,14 +84,17 @@ The Desktop app uses the same Compose Multiplatform UI with adaptations for larg
### Tastaturkürzel
-| Tastaturkürzel | Action |
-| ------------------- | ---------------------- |
-| **⌘Q** / **Ctrl+Q** | Quit the application |
-| **⌘,** / **Ctrl+,** | Einstellungen öffnen |
-| **⌘1** / **Ctrl+1** | Switch to Messages tab |
-| **⌘2** / **Ctrl+2** | Switch to Nodes tab |
-| **⌘3** / **Ctrl+3** | Switch to Map tab |
-| **⌘4** / **Ctrl+4** | Switch to Connect tab |
+All shortcuts use the **Meta** key — that's ⌘ (Command) on macOS and the Super / Windows key on Linux and Windows. (`Ctrl` is not bound.)
+
+| Tastaturkürzel | Action |
+| -------------- | ---------------------- |
+| **Meta+Q** | Quit the application |
+| **Meta+,** | Einstellungen öffnen |
+| **Meta+1** | Switch to Messages tab |
+| **Meta+2** | Switch to Nodes tab |
+| **Meta+3** | Switch to Map tab |
+| **Meta+4** | Switch to Connect tab |
+| **Meta+/** | Open About |
### Window & System Tray
@@ -123,7 +126,6 @@ Individual doc pages render with full formatting:
```bash
git clone https://github.com/meshtastic/Meshtastic-Android.git
cd Meshtastic-Android
-git submodule update --init
./gradlew :desktopApp:run
```
@@ -134,7 +136,8 @@ Voraussetzungen:
## Bekannte Einschränkungen
-- No OTA firmware updates (use web flasher)
+- 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
- BLE bonding is not yet supported on desktop (pairing works without bonding)
@@ -142,7 +145,7 @@ Voraussetzungen:
## Related Topics
- [Connections](connections) — connection methods overview
-- [Firmware Updates](firmware) — use the [Web Flasher](https://flasher.meshtastic.org) for desktop firmware updates
+- [Firmware Updates](firmware) — in-app USB update on desktop, or the [Web Flasher](https://flasher.meshtastic.org)
---
diff --git a/docs/de-rDE/user/discovery.md b/docs/de-rDE/user/discovery.md
index 233e74505..c8464f694 100644
--- a/docs/de-rDE/user/discovery.md
+++ b/docs/de-rDE/user/discovery.md
@@ -44,7 +44,6 @@ Before starting, configure these controls:
The **Start** button stays disabled — with an explanation of why — until the scan can run. Common reasons it's disabled:
- The device is **not connected**.
-- The current channel is using the **default channel key** (use a unique key first — see [Messages & Channels](messages-and-channels)).
- **No presets** have been selected to scan.
- The selected preset uses **2.4 GHz**, which your hardware doesn't support.
diff --git a/docs/de-rDE/user/firmware.md b/docs/de-rDE/user/firmware.md
index 223dd4993..5f12f8724 100644
--- a/docs/de-rDE/user/firmware.md
+++ b/docs/de-rDE/user/firmware.md
@@ -2,8 +2,8 @@
title: Firmwareaktualisierungen
parent: User Guide
nav_order: 13
-last_updated: 2026-05-13
-description: Update your radio firmware over Bluetooth — OTA process, version channels, pre-flight checks, and recovery.
+last_updated: 2026-07-07
+description: Update your radio firmware over Bluetooth or USB — OTA process, version channels, pre-flight checks, and recovery.
aliases:
- firmware
- update
@@ -17,7 +17,7 @@ Keep your Meshtastic radio up to date with the latest firmware for new features,
## Checking for Updates
-1. Navigate to **Settings → Firmware Update** or tap the firmware notification if shown.
+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.
2. The app checks for available firmware versions.
3. Available updates show the version number and changelog summary.
@@ -39,19 +39,26 @@ The most common update method for Android users:

-### USB Flashing
+### In-App USB Update
-For recovery or when OTA is unavailable:
+When your radio is connected over **USB/serial** (rather than Bluetooth), the Firmware Update screen offers **USB File Transfer**. The app reboots the device into DFU mode, then prompts you to save the `.uf2` file to the device's DFU drive using the system file picker. This option appears only on a USB/serial connection — it is not available over Bluetooth.
+
+> ℹ️ **nRF bootloader note:** Some devices (e.g. RAK WisBlock RAK4631) need their bootloader flashed with the vendor's serial DFU tool (such as `adafruit-nrfutil`) — copying the `.uf2` alone won't update the bootloader. The app surfaces a hint when this applies.
+
+### Other Flashing Options
+
+For recovery or when neither OTA nor in-app USB is available:
- Use the [Meshtastic Web Flasher](https://flasher.meshtastic.org)
- Or the [Meshtastic CLI tool](https://meshtastic.org/docs/getting-started/flashing-firmware) on desktop
## Version Channels
-| Kanal | Beschreibung |
-| ------ | ------------------------------------------- |
-| Stabil | Recommended for most users; tested releases |
-| Alpha | Preview releases; may contain bugs |
+| Kanal | Beschreibung |
+| ------------ | -------------------------------------------------------------------------- |
+| Stabil | Recommended for most users; tested releases |
+| Alpha | Preview releases; may contain bugs |
+| Lokale Datei | Flash a firmware file you select yourself, instead of a downloaded release |
## Pre-Update Checklist
@@ -73,7 +80,7 @@ Once the update succeeds:
- The radio will reboot automatically
- Bluetooth connection will re-establish
- Verify your settings are intact
-- Check the firmware version in **Settings → About**
+- Confirm the new version under **Currently Installed** on the Firmware Update screen — it's also shown on the node's detail page and the Connections screen

diff --git a/docs/de-rDE/user/messages-and-channels.md b/docs/de-rDE/user/messages-and-channels.md
index 2c2636220..62d1d29ef 100644
--- a/docs/de-rDE/user/messages-and-channels.md
+++ b/docs/de-rDE/user/messages-and-channels.md
@@ -116,12 +116,16 @@ You can search the full history of any conversation directly from the chat scree

-> 💡 **Tip:** Search is full-text and stays within the conversation you opened it from — it doesn't search across other channels or contacts. Matching is fast even on long histories because messages are indexed locally.
+> 💡 **Tip:** Search is full-text and stays within the conversation you opened it from — it doesn't search across other channels or contacts. It matches against the messages already stored on your device, so it works fully offline.
### Message Bubbles
Messages appear as chat bubbles — sent messages on the right, received messages on the left. Each bubble shows the sender, timestamp, and delivery status. Messages with replies include a quoted preview of the original message above the response.
+### Mentions
+
+Type `@` while composing to mention a node — a picker suggests matching contacts as you type. In a received message, a mention appears as a highlighted chip showing the node's name; tap it to jump straight to that node's detail page.
+
### Reactions
React to messages with emoji:
@@ -143,6 +147,7 @@ Long-press any message to access:
- **Copy** — copy message text to clipboard
- **Reply** — quote the message in your response
- **React** — add an emoji reaction
+- **Translate** — translate a received message into your device language and toggle between the original and translated text (Google Play build only; uses on-device translation)
- **Delete** — remove a message you sent (local deletion)
### Message Priority
diff --git a/docs/de-rDE/user/mqtt.md b/docs/de-rDE/user/mqtt.md
index 3f7276bee..87dc4f423 100644
--- a/docs/de-rDE/user/mqtt.md
+++ b/docs/de-rDE/user/mqtt.md
@@ -56,6 +56,8 @@ A gateway node with internet access (WiFi or Ethernet) publishes mesh messages t
The community maintains a public broker at `mqtt.meshtastic.org`. This is intended for general use and testing.
+> ℹ️ **Note:** Connections to `mqtt.meshtastic.org` always use TLS (port 8883), even if the TLS toggle is off. For any other broker, TLS is used only when you enable it (port 8883 with TLS, 1883 without).
+
> 🔒 **Privacy:** Messages on the public broker are readable by anyone subscribed. Always use channel encryption for private communications.
### Private Broker
diff --git a/docs/de-rDE/user/node-metrics.md b/docs/de-rDE/user/node-metrics.md
index f33c27970..133d06910 100644
--- a/docs/de-rDE/user/node-metrics.md
+++ b/docs/de-rDE/user/node-metrics.md
@@ -55,12 +55,15 @@ Der **IAQ-Index (Indoor Air Quality / Raumluftqualität)** des BME680 ist ein ei
Air Quality is a dedicated metrics view for nodes equipped with a particulate-matter and/or CO₂ sensor. Dies ist **unabhängig vom BME680-IAQ-Messwert**, der unter „Environment Metrics“ (Umgebungsmesswerte) aufgeführt ist – IAQ ist ein einzelner, aus dem Gaswiderstand abgeleiteter Index, während die Luftqualitätsansicht die zugrundeliegenden Messwerte für Feinstaub und CO₂ grafisch darstellt.
-| Metrisch | Einheit | Beschreibung |
-| --------------------- | ------- | ---------------------------------------------------- |
-| PM1.0 | µg/m³ | Particulate matter up to 1.0 micron |
-| PM2.5 | µg/m³ | Particulate matter up to 2.5 microns |
-| PM10 | µg/m³ | Particulate matter up to 10 microns |
-| CO₂ | ppm | Carbon dioxide concentration |
+| Metrisch | Einheit | Beschreibung |
+| --------------------- | --------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| PM1.0 | µg/m³ | Particulate matter up to 1.0 micron |
+| PM2.5 | µg/m³ | Particulate matter up to 2.5 microns |
+| PM10 | µg/m³ | Particulate matter up to 10 microns |
+| AQI | EPA index | EPA **NowCast** AQI computed from your recent PM2.5 history, with a color-coded severity label. Shown next to PM2.5 once enough readings have accumulated. |
+| CO₂ | ppm | Carbon dioxide concentration |
+| CO₂ temperature | °C / °F | Temperature reported by the CO₂ sensor itself (e.g. SCD4x) |
+| CO₂ humidity | % | Relative humidity reported by the CO₂ sensor |
CO₂ readings are color-coded by severity to make air quality easy to read at a glance:
@@ -98,12 +101,12 @@ Radio signal quality information:
Die Signalqualität wird auf der Grundlage des **Signal-Rauschabstand im Verhältnis zur Demodulationsschwelle der aktiven LoRa-Modem-Voreinstellung** bewertet, nicht anhand fester Schwellenwerte – ein bestimmter Wert des Signal-Rauschabstand hat je nach Voreinstellung unterschiedliche Bedeutungen (z. B. sind −15 dB bei „LongSlow“ in Ordnung, bei „ShortFast“ jedoch unbrauchbar). RSSI is shown but is not part of the rating. Letting `limit` be the preset's SNR limit:
-| Quality | Criteria |
-| ------------------------ | ------------------------------------------------ |
-| Gut | SNR above the preset's limit |
-| Ordentliche Signalstärke | within 5.5 dB below the limit |
-| Schlecht | within 7.5 dB below the limit |
-| Keins | more than 7.5 dB below the limit |
+| Quality | Criteria |
+| ------------------------ | ------------------------------------------------------------------------- |
+| Gut | SNR above the preset's limit |
+| Ordentliche Signalstärke | up to 5.5 dB below the limit |
+| Schlecht | between 5.5 dB and 7.5 dB below the limit |
+| Keins | more than 7.5 dB below the limit |
See [Understanding the Signal Meter](signal-meter) for the full explanation.
diff --git a/docs/de-rDE/user/settings-radio-user.md b/docs/de-rDE/user/settings-radio-user.md
index 939e736d5..f664f5c5a 100644
--- a/docs/de-rDE/user/settings-radio-user.md
+++ b/docs/de-rDE/user/settings-radio-user.md
@@ -74,6 +74,8 @@ After modifying settings, tap **Save** to write the configuration to your radio.
| ~~Long Slow~~ | ~30 km | 0,18 kbit/s | −17.5 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.
+
#### Choosing a Modem Preset
The modem preset controls the fundamental tradeoff between **range** and **data rate**:
diff --git a/docs/de-rDE/user/signal-meter.md b/docs/de-rDE/user/signal-meter.md
index e379f68d6..fefc23061 100644
--- a/docs/de-rDE/user/signal-meter.md
+++ b/docs/de-rDE/user/signal-meter.md
@@ -52,12 +52,12 @@ The app rates your signal quality (None, Bad, Fair, or Good) from **SNR alone, m
Da die Bewertung relativ zum voreingestellten Grenzwert erfolgt, kann _derselbe_ Signal-Rauschabstand je nach Voreinstellung unterschiedlich bewertet werden: `-15 dB` gelten bei `LongSlow` als guter Wert, sind jedoch bei `ShortFast` unbrauchbar. Letting `limit` be the active preset's SNR Limit, here is how the app picks the bars (or color):
-| Niveau | Balken | Criteria | Meaning |
-| ------------------------ | ------ | ------------------------------------ | ---------------------------------------------------------------------------------------- |
-| Gut | 3 | SNR **above** the preset's `limit` | Signal is comfortably above the demodulation floor — healthy connection. |
-| Ordentliche Signalstärke | 2 | within `5.5 dB` below the `limit` | Decodable, but getting close to the floor. |
-| Schlecht | 1 | within `7.5 dB` below the `limit` | At the very edge of what the preset can recover. |
-| Keins | 0 | more than `7.5 dB` below the `limit` | Below the floor — transmission lost to noise. |
+| Niveau | Balken | Criteria | Meaning |
+| ------------------------ | ------ | ----------------------------------------------- | ---------------------------------------------------------------------------------------- |
+| Gut | 3 | SNR **above** the preset's `limit` | Signal is comfortably above the demodulation floor — healthy connection. |
+| Ordentliche Signalstärke | 2 | up to `5.5 dB` below the `limit` | Decodable, but getting close to the floor. |
+| Schlecht | 1 | between `5.5 dB` and `7.5 dB` below the `limit` | At the very edge of what the preset can recover. |
+| Keins | 0 | more than `7.5 dB` below the `limit` | Below the floor — transmission lost to noise. |
> **Hinweis:** Die festen Schwellenwerte des Signal-Rauschabstandes, die Sie möglicherweise an anderer Stelle gesehen haben (`-7 dB` / `-15 dB`), werden mittlerweile nur noch zur farblichen Kennzeichnung einzelner Sprünge in Traceroute Ergebnissen verwendet – nicht für die hier beschriebene Signalstärkeanzeige pro Knoten.
diff --git a/docs/de-rDE/user/telemetry-and-sensors.md b/docs/de-rDE/user/telemetry-and-sensors.md
index 61d7a962a..9814151b1 100644
--- a/docs/de-rDE/user/telemetry-and-sensors.md
+++ b/docs/de-rDE/user/telemetry-and-sensors.md
@@ -103,7 +103,9 @@ Nodes with particulate matter or CO₂ sensors report air quality data:
| PM10 | µg/m³ | Coarse particulate matter |
| CO₂ | ppm | Carbon dioxide concentration |
-The CO₂ reading is color-coded by severity (Good → Stuffy → Poor → Unsafe → Evacuate). See [Node Metrics — Air Quality](node-metrics#air-quality-metrics) for the exact ppm bands and colors.
+CO₂ sensors such as the SCD4x also report their own temperature and humidity, which appear alongside the readings above. From PM2.5 history the app additionally derives an **EPA NowCast AQI** value.
+
+The CO₂ reading is color-coded by severity (Good → Stuffy → Poor → Unsafe → Evacuate). See [Node Metrics — Air Quality](node-metrics#air-quality-metrics) for the exact ppm bands, colors, and AQI detail.
Air quality data can be viewed as info cards on the node detail screen, charted over time, and exported to CSV.
diff --git a/docs/de-rDE/user/translate.md b/docs/de-rDE/user/translate.md
index 85d2c2dd4..fd5f44044 100644
--- a/docs/de-rDE/user/translate.md
+++ b/docs/de-rDE/user/translate.md
@@ -18,11 +18,11 @@ Contributing translations helps make Meshtastic accessible to a wider audience.
## What Gets Translated
-| Resource | Source Location | Knoten |
-| ----------------- | ------------------------------------- | ---------------------------------------------------------------------- |
-| UI strings | `composeResources/values/strings.xml` | Buttons, labels, messages, and all user-visible text |
-| User Guide pages | `docs/user/*.md` | In-app documentation shown in Help & Documentation |
-| Fastlane metadata | `fastlane/metadata/android/en-US/` | App Store listing title, description, and changelogs |
+| Resource | Source Location | Knoten |
+| ----------------- | ------------------------------------------------------------------- | ---------------------------------------------------------------------- |
+| UI strings | `core/resources/src/commonMain/composeResources/values/strings.xml` | Buttons, labels, messages, and all user-visible text |
+| User Guide pages | `docs/en/user/*.md` | In-app documentation shown in Help & Documentation |
+| Fastlane metadata | `fastlane/metadata/android/en-US/` | App Store listing title, description, and changelogs |
> ⚠️ **Note:** Developer Guide pages are English-only. Code-focused documentation targeting contributors is not translated.
diff --git a/docs/de-rDE/user/units-and-locale.md b/docs/de-rDE/user/units-and-locale.md
index 8dbcf8669..742698c94 100644
--- a/docs/de-rDE/user/units-and-locale.md
+++ b/docs/de-rDE/user/units-and-locale.md
@@ -14,7 +14,7 @@ Die Meshtastic-App zeigt Temperaturen, Entfernungen, Geschwindigkeiten und Zeite
## So funktioniert's
-Meshtastic radios always transmit data in **metric units** (meters, °C, km/h, hPa, etc.). When the app receives this data, it uses the `MetricFormatter` utility to convert and display values in whatever unit system your device's locale specifies.
+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.
On Android, your measurement preferences are determined by your system **Language & Region** settings. On Desktop (JVM), the app uses the JVM's default `Locale`.
@@ -115,12 +115,13 @@ On Android, your measurement system (metric vs imperial) is tied to your region
2. Change your **Region** or **Measurement units** preference
3. Return to Meshtastic — values update immediately
-> 💡 **Tip:** The app uses `MetricFormatter` from `core:common`. All measurement formatting is handled by a shared KMP utility that respects your platform's locale. Developers adding new measurement displays should use `MetricFormatter` rather than hard-coding unit conversions.
+> 💡 **Tip:** All measurement formatting is handled centrally and respects your platform's locale, so units stay consistent everywhere in the app.
## Related Topics
- [Node Metrics](node-metrics) — where temperature, distance, and sensor values are displayed
- [Telemetry & Sensors](telemetry-and-sensors) — the sensors that produce these measurements
+- [Measurement & Formatting](../developer/measurement) — developer reference for the formatting utilities
- [Settings — Radio & User](settings-radio-user) — region setting that drives unit selection
---
diff --git a/docs/el-rGR/user/android-auto.md b/docs/el-rGR/user/android-auto.md
index 183dffb42..47aca6b4b 100644
--- a/docs/el-rGR/user/android-auto.md
+++ b/docs/el-rGR/user/android-auto.md
@@ -2,7 +2,7 @@
title: Android Auto
parent: User Guide
nav_order: 18
-last_updated: 2026-06-11
+last_updated: 2026-07-07
description: Use Meshtastic hands-free on an Android Auto head unit — read messages aloud, reply by voice, and check nodes and mesh status while driving.
aliases:
- android-auto
@@ -17,9 +17,11 @@ Meshtastic integrates with Android Auto so you can stay in touch with your mesh
> ⚠️ **Note:** Android Auto support is available on **Google-flavor Android builds only**. It is not included in the F-Droid build, and it is not available on Desktop or iOS.
+> ℹ️ **What ships today:** The Google Play build provides **notification-only** car messaging — incoming messages are announced on the head unit and you reply through its notification controls. The full tabbed **Messages / Nodes / Status** experience described below is a beta built on the Android Car App Library (Google's templated car UI is currently restricted to Closed/Internal Play tracks), so it appears only in builds compiled with `-PenableCarTemplates=true`. The rest of this page documents that beta experience.
+
## Overview
-When your phone is connected to an Android Auto head unit (or the Desktop Head Unit emulator used for development), Meshtastic appears as a messaging app built with the Android Car App Library. The car interface presents a tabbed Home screen optimized for driving-safe, glanceable use:
+When your phone is connected to an Android Auto head unit (or the Desktop Head Unit emulator used for development), the beta build presents Meshtastic as a messaging app built with the Android Car App Library, with a tabbed Home screen optimized for driving-safe, glanceable use:
- **Messages** — recent conversations, with hands-free reading and replies.
- **Nodes** — the mesh node list, with a node-detail view.
diff --git a/docs/el-rGR/user/connections.md b/docs/el-rGR/user/connections.md
index d299a412c..a4c005203 100644
--- a/docs/el-rGR/user/connections.md
+++ b/docs/el-rGR/user/connections.md
@@ -23,7 +23,7 @@ Bluetooth Low Energy is the default and most common connection method on Android
1. Ensure your Meshtastic radio is powered on and in pairing mode.
2. Open the app and navigate to the **Connect** tab.
-3. Tap **Scan for Devices** — nearby Meshtastic radios will appear.
+3. Tap **Scan for Bluetooth devices** — nearby Meshtastic radios will appear.
4. Select your device from the list.
5. Accept the Bluetooth pairing prompt if shown.
diff --git a/docs/el-rGR/user/desktop.md b/docs/el-rGR/user/desktop.md
index 8de4ad29b..9fecb3887 100644
--- a/docs/el-rGR/user/desktop.md
+++ b/docs/el-rGR/user/desktop.md
@@ -2,7 +2,7 @@
title: Desktop App
parent: User Guide
nav_order: 14
-last_updated: 2026-06-11
+last_updated: 2026-07-07
description: Install and use the Meshtastic Desktop app on Linux, macOS, and Windows — connections, feature parity, and keyboard shortcuts.
aliases:
- desktop
@@ -60,19 +60,19 @@ Bluetooth Low Energy is supported on Desktop via the [Kable](https://github.com/
## Feature Parity
-| Feature | Android | Desktop | Notes |
-| -------------------------------------------- | ------- | ------- | ---------------------------------------------- |
-| Messaging | ✓ | ✓ | Full parity |
-| Node List | ✓ | ✓ | Full parity |
-| Χάρτης | ✓ | ✓ | Full parity |
-| Ρυθμίσεις | ✓ | ✓ | Full parity |
-| Bluetooth (BLE) | ✓ | ✓ | Via Kable on desktop |
-| Firmware Update OTA | ✓ | ✗ | Use web flasher |
-| Notifications | ✓ | ✓ | Native OS notifications |
-| Widgets | ✓ | ✗ | Android-only |
-| Android Auto | ✓ | ✗ | Android-only — not available on Desktop or iOS |
-| AI Assistant (Chirpy) | ✓\* | ✗ | Google flavor Android only |
-| App Functions (system AI) | ✓† | ✗ | Google flavor Android only |
+| Feature | Android | Desktop | Notes |
+| -------------------------------------------- | ------- | ------- | -------------------------------------------------------------------------- |
+| Messaging | ✓ | ✓ | Full parity |
+| Node List | ✓ | ✓ | Full parity |
+| Χάρτης | ✓ | ◐ | Map tab exists on desktop, but the interactive map view is Android-only |
+| Ρυθμίσεις | ✓ | ✓ | Full parity |
+| Bluetooth (BLE) | ✓ | ✓ | Via Kable on desktop |
+| Firmware Update | ✓ | ◐ | Desktop supports in-app USB firmware update; BLE/Wi-Fi OTA is Android-only |
+| Notifications | ✓ | ✓ | Native OS notifications |
+| Widgets | ✓ | ✗ | Android-only |
+| Android Auto | ✓ | ✗ | Android-only — not available on Desktop or iOS |
+| AI Assistant (Chirpy) | ✓\* | ✗ | Google flavor Android only |
+| App Functions (system AI) | ✓† | ✗ | Google flavor Android only |
\*Chirpy AI requires Android 14+ on Google flavor builds with supported hardware.
@@ -84,14 +84,17 @@ The Desktop app uses the same Compose Multiplatform UI with adaptations for larg
### Keyboard Shortcuts
-| Shortcut | Action |
-| ------------------- | ---------------------- |
-| **⌘Q** / **Ctrl+Q** | Quit the application |
-| **⌘,** / **Ctrl+,** | Open Settings |
-| **⌘1** / **Ctrl+1** | Switch to Messages tab |
-| **⌘2** / **Ctrl+2** | Switch to Nodes tab |
-| **⌘3** / **Ctrl+3** | Switch to Map tab |
-| **⌘4** / **Ctrl+4** | Switch to Connect tab |
+All shortcuts use the **Meta** key — that's ⌘ (Command) on macOS and the Super / Windows key on Linux and Windows. (`Ctrl` is not bound.)
+
+| Shortcut | Action |
+| ---------- | ---------------------- |
+| **Meta+Q** | Quit the application |
+| **Meta+,** | Open Settings |
+| **Meta+1** | Switch to Messages tab |
+| **Meta+2** | Switch to Nodes tab |
+| **Meta+3** | Switch to Map tab |
+| **Meta+4** | Switch to Connect tab |
+| **Meta+/** | Open About |
### Window & System Tray
@@ -123,7 +126,6 @@ Individual doc pages render with full formatting:
```bash
git clone https://github.com/meshtastic/Meshtastic-Android.git
cd Meshtastic-Android
-git submodule update --init
./gradlew :desktopApp:run
```
@@ -134,7 +136,8 @@ Requirements:
## Known Limitations
-- No OTA firmware updates (use web flasher)
+- 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
- BLE bonding is not yet supported on desktop (pairing works without bonding)
@@ -142,7 +145,7 @@ Requirements:
## Related Topics
- [Connections](connections) — connection methods overview
-- [Firmware Updates](firmware) — use the [Web Flasher](https://flasher.meshtastic.org) for desktop firmware updates
+- [Firmware Updates](firmware) — in-app USB update on desktop, or the [Web Flasher](https://flasher.meshtastic.org)
---
diff --git a/docs/el-rGR/user/discovery.md b/docs/el-rGR/user/discovery.md
index 7532cb52b..a9119a45b 100644
--- a/docs/el-rGR/user/discovery.md
+++ b/docs/el-rGR/user/discovery.md
@@ -44,7 +44,6 @@ Before starting, configure these controls:
The **Start** button stays disabled — with an explanation of why — until the scan can run. Common reasons it's disabled:
- The device is **not connected**.
-- The current channel is using the **default channel key** (use a unique key first — see [Messages & Channels](messages-and-channels)).
- **No presets** have been selected to scan.
- The selected preset uses **2.4 GHz**, which your hardware doesn't support.
diff --git a/docs/el-rGR/user/firmware.md b/docs/el-rGR/user/firmware.md
index 6a4063616..ca623ef09 100644
--- a/docs/el-rGR/user/firmware.md
+++ b/docs/el-rGR/user/firmware.md
@@ -2,8 +2,8 @@
title: Firmware Updates
parent: User Guide
nav_order: 13
-last_updated: 2026-05-13
-description: Update your radio firmware over Bluetooth — OTA process, version channels, pre-flight checks, and recovery.
+last_updated: 2026-07-07
+description: Update your radio firmware over Bluetooth or USB — OTA process, version channels, pre-flight checks, and recovery.
aliases:
- firmware
- update
@@ -17,7 +17,7 @@ Keep your Meshtastic radio up to date with the latest firmware for new features,
## Checking for Updates
-1. Navigate to **Settings → Firmware Update** or tap the firmware notification if shown.
+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.
2. The app checks for available firmware versions.
3. Available updates show the version number and changelog summary.
@@ -39,19 +39,26 @@ The most common update method for Android users:

-### USB Flashing
+### In-App USB Update
-For recovery or when OTA is unavailable:
+When your radio is connected over **USB/serial** (rather than Bluetooth), the Firmware Update screen offers **USB File Transfer**. The app reboots the device into DFU mode, then prompts you to save the `.uf2` file to the device's DFU drive using the system file picker. This option appears only on a USB/serial connection — it is not available over Bluetooth.
+
+> ℹ️ **nRF bootloader note:** Some devices (e.g. RAK WisBlock RAK4631) need their bootloader flashed with the vendor's serial DFU tool (such as `adafruit-nrfutil`) — copying the `.uf2` alone won't update the bootloader. The app surfaces a hint when this applies.
+
+### Other Flashing Options
+
+For recovery or when neither OTA nor in-app USB is available:
- Use the [Meshtastic Web Flasher](https://flasher.meshtastic.org)
- Or the [Meshtastic CLI tool](https://meshtastic.org/docs/getting-started/flashing-firmware) on desktop
## Version Channels
-| Κανάλι | Περιγραφή |
-| ------ | ------------------------------------------- |
-| Stable | Recommended for most users; tested releases |
-| Alpha | Preview releases; may contain bugs |
+| Κανάλι | Περιγραφή |
+| ---------- | -------------------------------------------------------------------------- |
+| Stable | Recommended for most users; tested releases |
+| Alpha | Preview releases; may contain bugs |
+| Local File | Flash a firmware file you select yourself, instead of a downloaded release |
## Pre-Update Checklist
@@ -73,7 +80,7 @@ Once the update succeeds:
- The radio will reboot automatically
- Bluetooth connection will re-establish
- Verify your settings are intact
-- Check the firmware version in **Settings → About**
+- Confirm the new version under **Currently Installed** on the Firmware Update screen — it's also shown on the node's detail page and the Connections screen

diff --git a/docs/el-rGR/user/messages-and-channels.md b/docs/el-rGR/user/messages-and-channels.md
index 3044a4ef2..4cbc098e1 100644
--- a/docs/el-rGR/user/messages-and-channels.md
+++ b/docs/el-rGR/user/messages-and-channels.md
@@ -116,12 +116,16 @@ You can search the full history of any conversation directly from the chat scree

-> 💡 **Tip:** Search is full-text and stays within the conversation you opened it from — it doesn't search across other channels or contacts. Matching is fast even on long histories because messages are indexed locally.
+> 💡 **Tip:** Search is full-text and stays within the conversation you opened it from — it doesn't search across other channels or contacts. It matches against the messages already stored on your device, so it works fully offline.
### Message Bubbles
Messages appear as chat bubbles — sent messages on the right, received messages on the left. Each bubble shows the sender, timestamp, and delivery status. Messages with replies include a quoted preview of the original message above the response.
+### Mentions
+
+Type `@` while composing to mention a node — a picker suggests matching contacts as you type. In a received message, a mention appears as a highlighted chip showing the node's name; tap it to jump straight to that node's detail page.
+
### Reactions
React to messages with emoji:
@@ -143,6 +147,7 @@ Long-press any message to access:
- **Copy** — copy message text to clipboard
- **Reply** — quote the message in your response
- **React** — add an emoji reaction
+- **Translate** — translate a received message into your device language and toggle between the original and translated text (Google Play build only; uses on-device translation)
- **Delete** — remove a message you sent (local deletion)
### Message Priority
diff --git a/docs/el-rGR/user/mqtt.md b/docs/el-rGR/user/mqtt.md
index e0f425915..d4957ce6e 100644
--- a/docs/el-rGR/user/mqtt.md
+++ b/docs/el-rGR/user/mqtt.md
@@ -56,6 +56,8 @@ A gateway node with internet access (WiFi or Ethernet) publishes mesh messages t
The community maintains a public broker at `mqtt.meshtastic.org`. This is intended for general use and testing.
+> ℹ️ **Note:** Connections to `mqtt.meshtastic.org` always use TLS (port 8883), even if the TLS toggle is off. For any other broker, TLS is used only when you enable it (port 8883 with TLS, 1883 without).
+
> 🔒 **Privacy:** Messages on the public broker are readable by anyone subscribed. Always use channel encryption for private communications.
### Private Broker
diff --git a/docs/el-rGR/user/node-metrics.md b/docs/el-rGR/user/node-metrics.md
index 163ccd217..848ec09d7 100644
--- a/docs/el-rGR/user/node-metrics.md
+++ b/docs/el-rGR/user/node-metrics.md
@@ -55,12 +55,15 @@ The BME680 **IAQ (Indoor Air Quality)** index is a single 0–500+ value derived
Air Quality is a dedicated metrics view for nodes equipped with a particulate-matter and/or CO₂ sensor. It is **separate from the BME680 IAQ reading** listed under Environment Metrics — IAQ is a single gas-resistance-derived index, while the Air Quality view charts the underlying particulate and CO₂ measurements.
-| Metric | Unit | Περιγραφή |
-| --------------------- | ----- | ---------------------------------------------------- |
-| PM1.0 | µg/m³ | Particulate matter up to 1.0 micron |
-| PM2.5 | µg/m³ | Particulate matter up to 2.5 microns |
-| PM10 | µg/m³ | Particulate matter up to 10 microns |
-| CO₂ | ppm | Carbon dioxide concentration |
+| Metric | Unit | Περιγραφή |
+| --------------------- | --------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| PM1.0 | µg/m³ | Particulate matter up to 1.0 micron |
+| PM2.5 | µg/m³ | Particulate matter up to 2.5 microns |
+| PM10 | µg/m³ | Particulate matter up to 10 microns |
+| AQI | EPA index | EPA **NowCast** AQI computed from your recent PM2.5 history, with a color-coded severity label. Shown next to PM2.5 once enough readings have accumulated. |
+| CO₂ | ppm | Carbon dioxide concentration |
+| CO₂ temperature | °C / °F | Temperature reported by the CO₂ sensor itself (e.g. SCD4x) |
+| CO₂ humidity | % | Relative humidity reported by the CO₂ sensor |
CO₂ readings are color-coded by severity to make air quality easy to read at a glance:
@@ -98,12 +101,12 @@ Radio signal quality information:
Signal quality is rated from **SNR relative to the active LoRa modem preset's demodulation floor**, not from fixed thresholds — a given SNR means different things on different presets (e.g. −15 dB is fine on LongSlow but unusable on ShortFast). RSSI is shown but is not part of the rating. Letting `limit` be the preset's SNR limit:
-| Quality | Criteria |
-| ------- | ------------------------------------------------ |
-| Good | SNR above the preset's limit |
-| Fair | within 5.5 dB below the limit |
-| Bad | within 7.5 dB below the limit |
-| None | more than 7.5 dB below the limit |
+| 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 |
+| None | more than 7.5 dB below the limit |
See [Understanding the Signal Meter](signal-meter) for the full explanation.
diff --git a/docs/el-rGR/user/settings-radio-user.md b/docs/el-rGR/user/settings-radio-user.md
index 2dc444e63..5708707f6 100644
--- a/docs/el-rGR/user/settings-radio-user.md
+++ b/docs/el-rGR/user/settings-radio-user.md
@@ -74,6 +74,8 @@ After modifying settings, tap **Save** to write the configuration to your radio.
| ~~Long Slow~~ | ~30 km | 0.18 kbps | −17.5 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.
+
#### Choosing a Modem Preset
The modem preset controls the fundamental tradeoff between **range** and **data rate**:
diff --git a/docs/el-rGR/user/signal-meter.md b/docs/el-rGR/user/signal-meter.md
index 43f3aeae7..71741a4c2 100644
--- a/docs/el-rGR/user/signal-meter.md
+++ b/docs/el-rGR/user/signal-meter.md
@@ -52,12 +52,12 @@ The app rates your signal quality (None, Bad, Fair, or Good) from **SNR alone, m
Because the rating is relative to the preset limit, the _same_ SNR can rate differently on different presets — `-15 dB` is healthy on `LongSlow` but unusable on `ShortFast`. Letting `limit` be the active preset's SNR Limit, here is how the app picks the bars (or color):
-| Level | Bars | Criteria | Meaning |
-| ----- | ---- | ------------------------------------ | ---------------------------------------------------------------------------------------- |
-| Good | 3 | SNR **above** the preset's `limit` | Signal is comfortably above the demodulation floor — healthy connection. |
-| Fair | 2 | within `5.5 dB` below the `limit` | Decodable, but getting close to the floor. |
-| Bad | 1 | within `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. |
+| 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. |
+| 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.
diff --git a/docs/el-rGR/user/telemetry-and-sensors.md b/docs/el-rGR/user/telemetry-and-sensors.md
index b8f97fa55..28c1e2d97 100644
--- a/docs/el-rGR/user/telemetry-and-sensors.md
+++ b/docs/el-rGR/user/telemetry-and-sensors.md
@@ -103,7 +103,9 @@ Nodes with particulate matter or CO₂ sensors report air quality data:
| PM10 | µg/m³ | Coarse particulate matter |
| CO₂ | ppm | Carbon dioxide concentration |
-The CO₂ reading is color-coded by severity (Good → Stuffy → Poor → Unsafe → Evacuate). See [Node Metrics — Air Quality](node-metrics#air-quality-metrics) for the exact ppm bands and colors.
+CO₂ sensors such as the SCD4x also report their own temperature and humidity, which appear alongside the readings above. From PM2.5 history the app additionally derives an **EPA NowCast AQI** value.
+
+The CO₂ reading is color-coded by severity (Good → Stuffy → Poor → Unsafe → Evacuate). See [Node Metrics — Air Quality](node-metrics#air-quality-metrics) for the exact ppm bands, colors, and AQI detail.
Air quality data can be viewed as info cards on the node detail screen, charted over time, and exported to CSV.
diff --git a/docs/el-rGR/user/translate.md b/docs/el-rGR/user/translate.md
index 25aa4693c..70c966fed 100644
--- a/docs/el-rGR/user/translate.md
+++ b/docs/el-rGR/user/translate.md
@@ -18,11 +18,11 @@ Contributing translations helps make Meshtastic accessible to a wider audience.
## What Gets Translated
-| Resource | Source Location | Notes |
-| ----------------- | ------------------------------------- | ---------------------------------------------------------------------- |
-| UI strings | `composeResources/values/strings.xml` | Buttons, labels, messages, and all user-visible text |
-| User Guide pages | `docs/user/*.md` | In-app documentation shown in Help & Documentation |
-| Fastlane metadata | `fastlane/metadata/android/en-US/` | App Store listing title, description, and changelogs |
+| Resource | Source Location | Notes |
+| ----------------- | ------------------------------------------------------------------- | ---------------------------------------------------------------------- |
+| UI strings | `core/resources/src/commonMain/composeResources/values/strings.xml` | Buttons, labels, messages, and all user-visible text |
+| User Guide pages | `docs/en/user/*.md` | In-app documentation shown in Help & Documentation |
+| Fastlane metadata | `fastlane/metadata/android/en-US/` | App Store listing title, description, and changelogs |
> ⚠️ **Note:** Developer Guide pages are English-only. Code-focused documentation targeting contributors is not translated.
diff --git a/docs/el-rGR/user/units-and-locale.md b/docs/el-rGR/user/units-and-locale.md
index 90a2eb69c..5ff8cc8c3 100644
--- a/docs/el-rGR/user/units-and-locale.md
+++ b/docs/el-rGR/user/units-and-locale.md
@@ -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 uses the `MetricFormatter` utility to convert and display values in whatever unit system your device's locale specifies.
+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.
On Android, your measurement preferences are determined by your system **Language & Region** settings. On Desktop (JVM), the app uses the JVM's default `Locale`.
@@ -115,12 +115,13 @@ On Android, your measurement system (metric vs imperial) is tied to your region
2. Change your **Region** or **Measurement units** preference
3. Return to Meshtastic — values update immediately
-> 💡 **Tip:** The app uses `MetricFormatter` from `core:common`. All measurement formatting is handled by a shared KMP utility that respects your platform's locale. Developers adding new measurement displays should use `MetricFormatter` rather than hard-coding unit conversions.
+> 💡 **Tip:** All measurement formatting is handled centrally and respects your platform's locale, so units stay consistent everywhere in the app.
## Related Topics
- [Node Metrics](node-metrics) — where temperature, distance, and sensor values are displayed
- [Telemetry & Sensors](telemetry-and-sensors) — the sensors that produce these measurements
+- [Measurement & Formatting](../developer/measurement) — developer reference for the formatting utilities
- [Settings — Radio & User](settings-radio-user) — region setting that drives unit selection
---
diff --git a/docs/es-rES/user/android-auto.md b/docs/es-rES/user/android-auto.md
index d9da25330..5bddb86b7 100644
--- a/docs/es-rES/user/android-auto.md
+++ b/docs/es-rES/user/android-auto.md
@@ -2,7 +2,7 @@
title: Android Auto
parent: User Guide
nav_order: 18
-last_updated: 2026-06-11
+last_updated: 2026-07-07
description: Use Meshtastic hands-free on an Android Auto head unit — read messages aloud, reply by voice, and check nodes and mesh status while driving.
aliases:
- android-auto
@@ -17,9 +17,11 @@ Meshtastic integrates with Android Auto so you can stay in touch with your mesh
> ⚠️ **Note:** Android Auto support is available on **Google-flavor Android builds only**. It is not included in the F-Droid build, and it is not available on Desktop or iOS.
+> ℹ️ **What ships today:** The Google Play build provides **notification-only** car messaging — incoming messages are announced on the head unit and you reply through its notification controls. The full tabbed **Messages / Nodes / Status** experience described below is a beta built on the Android Car App Library (Google's templated car UI is currently restricted to Closed/Internal Play tracks), so it appears only in builds compiled with `-PenableCarTemplates=true`. The rest of this page documents that beta experience.
+
## Visión general
-When your phone is connected to an Android Auto head unit (or the Desktop Head Unit emulator used for development), Meshtastic appears as a messaging app built with the Android Car App Library. The car interface presents a tabbed Home screen optimized for driving-safe, glanceable use:
+When your phone is connected to an Android Auto head unit (or the Desktop Head Unit emulator used for development), the beta build presents Meshtastic as a messaging app built with the Android Car App Library, with a tabbed Home screen optimized for driving-safe, glanceable use:
- **Messages** — recent conversations, with hands-free reading and replies.
- **Nodes** — the mesh node list, with a node-detail view.
diff --git a/docs/es-rES/user/connections.md b/docs/es-rES/user/connections.md
index 23817d50a..6aca0a349 100644
--- a/docs/es-rES/user/connections.md
+++ b/docs/es-rES/user/connections.md
@@ -23,7 +23,7 @@ Bluetooth Low Energy is the default and most common connection method on Android
1. Ensure your Meshtastic radio is powered on and in pairing mode.
2. Open the app and navigate to the **Connect** tab.
-3. Tap **Scan for Devices** — nearby Meshtastic radios will appear.
+3. Tap **Scan for Bluetooth devices** — nearby Meshtastic radios will appear.
4. Select your device from the list.
5. Accept the Bluetooth pairing prompt if shown.
diff --git a/docs/es-rES/user/desktop.md b/docs/es-rES/user/desktop.md
index 14ab67c08..ea3b534ba 100644
--- a/docs/es-rES/user/desktop.md
+++ b/docs/es-rES/user/desktop.md
@@ -2,7 +2,7 @@
title: Desktop App
parent: User Guide
nav_order: 14
-last_updated: 2026-06-11
+last_updated: 2026-07-07
description: Install and use the Meshtastic Desktop app on Linux, macOS, and Windows — connections, feature parity, and keyboard shortcuts.
aliases:
- desktop
@@ -60,19 +60,19 @@ Bluetooth Low Energy is supported on Desktop via the [Kable](https://github.com/
## Feature Parity
-| Feature | Android | Desktop | Notas |
-| -------------------------------------------- | ------- | ------- | ---------------------------------------------- |
-| Messaging | ✓ | ✓ | Full parity |
-| Node List | ✓ | ✓ | Full parity |
-| Mapa | ✓ | ✓ | Full parity |
-| Ajustes | ✓ | ✓ | Full parity |
-| Bluetooth (BLE) | ✓ | ✓ | Via Kable on desktop |
-| Firmware Update OTA | ✓ | ✗ | Use web flasher |
-| Notifications | ✓ | ✓ | Native OS notifications |
-| Widgets | ✓ | ✗ | Android-only |
-| Android Auto | ✓ | ✗ | Android-only — not available on Desktop or iOS |
-| AI Assistant (Chirpy) | ✓\* | ✗ | Google flavor Android only |
-| App Functions (system AI) | ✓† | ✗ | Google flavor Android only |
+| Feature | Android | Desktop | Notas |
+| -------------------------------------------- | ------- | ------- | -------------------------------------------------------------------------- |
+| Messaging | ✓ | ✓ | Full parity |
+| Node List | ✓ | ✓ | Full parity |
+| Mapa | ✓ | ◐ | Map tab exists on desktop, but the interactive map view is Android-only |
+| Ajustes | ✓ | ✓ | Full parity |
+| Bluetooth (BLE) | ✓ | ✓ | Via Kable on desktop |
+| Actualización de firmware | ✓ | ◐ | Desktop supports in-app USB firmware update; BLE/Wi-Fi OTA is Android-only |
+| Notifications | ✓ | ✓ | Native OS notifications |
+| Widgets | ✓ | ✗ | Android-only |
+| Android Auto | ✓ | ✗ | Android-only — not available on Desktop or iOS |
+| AI Assistant (Chirpy) | ✓\* | ✗ | Google flavor Android only |
+| App Functions (system AI) | ✓† | ✗ | Google flavor Android only |
\*Chirpy AI requires Android 14+ on Google flavor builds with supported hardware.
@@ -84,14 +84,17 @@ The Desktop app uses the same Compose Multiplatform UI with adaptations for larg
### Keyboard Shortcuts
-| Shortcut | Action |
-| ------------------- | ---------------------- |
-| **⌘Q** / **Ctrl+Q** | Quit the application |
-| **⌘,** / **Ctrl+,** | Open Settings |
-| **⌘1** / **Ctrl+1** | Switch to Messages tab |
-| **⌘2** / **Ctrl+2** | Switch to Nodes tab |
-| **⌘3** / **Ctrl+3** | Switch to Map tab |
-| **⌘4** / **Ctrl+4** | Switch to Connect tab |
+All shortcuts use the **Meta** key — that's ⌘ (Command) on macOS and the Super / Windows key on Linux and Windows. (`Ctrl` is not bound.)
+
+| Shortcut | Action |
+| ---------- | ---------------------- |
+| **Meta+Q** | Quit the application |
+| **Meta+,** | Open Settings |
+| **Meta+1** | Switch to Messages tab |
+| **Meta+2** | Switch to Nodes tab |
+| **Meta+3** | Switch to Map tab |
+| **Meta+4** | Switch to Connect tab |
+| **Meta+/** | Open About |
### Window & System Tray
@@ -123,7 +126,6 @@ Individual doc pages render with full formatting:
```bash
git clone https://github.com/meshtastic/Meshtastic-Android.git
cd Meshtastic-Android
-git submodule update --init
./gradlew :desktopApp:run
```
@@ -134,7 +136,8 @@ Requirements:
## Known Limitations
-- No OTA firmware updates (use web flasher)
+- 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
- BLE bonding is not yet supported on desktop (pairing works without bonding)
@@ -142,7 +145,7 @@ Requirements:
## Related Topics
- [Connections](connections) — connection methods overview
-- [Firmware Updates](firmware) — use the [Web Flasher](https://flasher.meshtastic.org) for desktop firmware updates
+- [Firmware Updates](firmware) — in-app USB update on desktop, or the [Web Flasher](https://flasher.meshtastic.org)
---
diff --git a/docs/es-rES/user/discovery.md b/docs/es-rES/user/discovery.md
index 095e74bef..ffea252a7 100644
--- a/docs/es-rES/user/discovery.md
+++ b/docs/es-rES/user/discovery.md
@@ -44,7 +44,6 @@ Before starting, configure these controls:
The **Start** button stays disabled — with an explanation of why — until the scan can run. Common reasons it's disabled:
- The device is **not connected**.
-- The current channel is using the **default channel key** (use a unique key first — see [Messages & Channels](messages-and-channels)).
- **No presets** have been selected to scan.
- The selected preset uses **2.4 GHz**, which your hardware doesn't support.
diff --git a/docs/es-rES/user/firmware.md b/docs/es-rES/user/firmware.md
index 38d4364ef..db2995784 100644
--- a/docs/es-rES/user/firmware.md
+++ b/docs/es-rES/user/firmware.md
@@ -2,8 +2,8 @@
title: Firmware Updates
parent: User Guide
nav_order: 13
-last_updated: 2026-05-13
-description: Update your radio firmware over Bluetooth — OTA process, version channels, pre-flight checks, and recovery.
+last_updated: 2026-07-07
+description: Update your radio firmware over Bluetooth or USB — OTA process, version channels, pre-flight checks, and recovery.
aliases:
- firmware
- update
@@ -17,7 +17,7 @@ Keep your Meshtastic radio up to date with the latest firmware for new features,
## Checking for Updates
-1. Navigate to **Settings → Firmware Update** or tap the firmware notification if shown.
+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.
2. The app checks for available firmware versions.
3. Available updates show the version number and changelog summary.
@@ -39,19 +39,26 @@ The most common update method for Android users:

-### USB Flashing
+### In-App USB Update
-For recovery or when OTA is unavailable:
+When your radio is connected over **USB/serial** (rather than Bluetooth), the Firmware Update screen offers **USB File Transfer**. The app reboots the device into DFU mode, then prompts you to save the `.uf2` file to the device's DFU drive using the system file picker. This option appears only on a USB/serial connection — it is not available over Bluetooth.
+
+> ℹ️ **nRF bootloader note:** Some devices (e.g. RAK WisBlock RAK4631) need their bootloader flashed with the vendor's serial DFU tool (such as `adafruit-nrfutil`) — copying the `.uf2` alone won't update the bootloader. The app surfaces a hint when this applies.
+
+### Other Flashing Options
+
+For recovery or when neither OTA nor in-app USB is available:
- Use the [Meshtastic Web Flasher](https://flasher.meshtastic.org)
- Or the [Meshtastic CLI tool](https://meshtastic.org/docs/getting-started/flashing-firmware) on desktop
## Version Channels
-| Canal | Descripción |
-| ------- | ------------------------------------------- |
-| Estable | Recommended for most users; tested releases |
-| Alpha | Preview releases; may contain bugs |
+| Canal | Descripción |
+| ---------- | -------------------------------------------------------------------------- |
+| Estable | Recommended for most users; tested releases |
+| Alpha | Preview releases; may contain bugs |
+| Local File | Flash a firmware file you select yourself, instead of a downloaded release |
## Pre-Update Checklist
@@ -73,7 +80,7 @@ Once the update succeeds:
- The radio will reboot automatically
- Bluetooth connection will re-establish
- Verify your settings are intact
-- Check the firmware version in **Settings → About**
+- Confirm the new version under **Currently Installed** on the Firmware Update screen — it's also shown on the node's detail page and the Connections screen

diff --git a/docs/es-rES/user/messages-and-channels.md b/docs/es-rES/user/messages-and-channels.md
index 5a94f9cc7..d3f38b993 100644
--- a/docs/es-rES/user/messages-and-channels.md
+++ b/docs/es-rES/user/messages-and-channels.md
@@ -116,12 +116,16 @@ You can search the full history of any conversation directly from the chat scree

-> 💡 **Tip:** Search is full-text and stays within the conversation you opened it from — it doesn't search across other channels or contacts. Matching is fast even on long histories because messages are indexed locally.
+> 💡 **Tip:** Search is full-text and stays within the conversation you opened it from — it doesn't search across other channels or contacts. It matches against the messages already stored on your device, so it works fully offline.
### Message Bubbles
Messages appear as chat bubbles — sent messages on the right, received messages on the left. Each bubble shows the sender, timestamp, and delivery status. Messages with replies include a quoted preview of the original message above the response.
+### Mentions
+
+Type `@` while composing to mention a node — a picker suggests matching contacts as you type. In a received message, a mention appears as a highlighted chip showing the node's name; tap it to jump straight to that node's detail page.
+
### Reactions
React to messages with emoji:
@@ -143,6 +147,7 @@ Long-press any message to access:
- **Copy** — copy message text to clipboard
- **Reply** — quote the message in your response
- **React** — add an emoji reaction
+- **Translate** — translate a received message into your device language and toggle between the original and translated text (Google Play build only; uses on-device translation)
- **Delete** — remove a message you sent (local deletion)
### Message Priority
diff --git a/docs/es-rES/user/mqtt.md b/docs/es-rES/user/mqtt.md
index 44c263015..12b55fca0 100644
--- a/docs/es-rES/user/mqtt.md
+++ b/docs/es-rES/user/mqtt.md
@@ -56,6 +56,8 @@ A gateway node with internet access (WiFi or Ethernet) publishes mesh messages t
The community maintains a public broker at `mqtt.meshtastic.org`. This is intended for general use and testing.
+> ℹ️ **Note:** Connections to `mqtt.meshtastic.org` always use TLS (port 8883), even if the TLS toggle is off. For any other broker, TLS is used only when you enable it (port 8883 with TLS, 1883 without).
+
> 🔒 **Privacy:** Messages on the public broker are readable by anyone subscribed. Always use channel encryption for private communications.
### Private Broker
diff --git a/docs/es-rES/user/node-metrics.md b/docs/es-rES/user/node-metrics.md
index b8c0f6906..c9bb35a7b 100644
--- a/docs/es-rES/user/node-metrics.md
+++ b/docs/es-rES/user/node-metrics.md
@@ -55,12 +55,15 @@ The BME680 **IAQ (Indoor Air Quality)** index is a single 0–500+ value derived
Air Quality is a dedicated metrics view for nodes equipped with a particulate-matter and/or CO₂ sensor. It is **separate from the BME680 IAQ reading** listed under Environment Metrics — IAQ is a single gas-resistance-derived index, while the Air Quality view charts the underlying particulate and CO₂ measurements.
-| Métrico | Unit | Descripción |
-| --------------------- | ----- | ---------------------------------------------------- |
-| PM1.0 | µg/m³ | Particulate matter up to 1.0 micron |
-| PM2.5 | µg/m³ | Particulate matter up to 2.5 microns |
-| PM10 | µg/m³ | Particulate matter up to 10 microns |
-| CO₂ | ppm | Carbon dioxide concentration |
+| Métrico | Unit | Descripción |
+| --------------------- | --------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| PM1.0 | µg/m³ | Particulate matter up to 1.0 micron |
+| PM2.5 | µg/m³ | Particulate matter up to 2.5 microns |
+| PM10 | µg/m³ | Particulate matter up to 10 microns |
+| AQI | EPA index | EPA **NowCast** AQI computed from your recent PM2.5 history, with a color-coded severity label. Shown next to PM2.5 once enough readings have accumulated. |
+| CO₂ | ppm | Carbon dioxide concentration |
+| CO₂ temperature | °C / °F | Temperature reported by the CO₂ sensor itself (e.g. SCD4x) |
+| CO₂ humidity | % | Relative humidity reported by the CO₂ sensor |
CO₂ readings are color-coded by severity to make air quality easy to read at a glance:
@@ -98,12 +101,12 @@ Radio signal quality information:
Signal quality is rated from **SNR relative to the active LoRa modem preset's demodulation floor**, not from fixed thresholds — a given SNR means different things on different presets (e.g. −15 dB is fine on LongSlow but unusable on ShortFast). RSSI is shown but is not part of the rating. Letting `limit` be the preset's SNR limit:
-| Quality | Criteria |
-| --------- | ------------------------------------------------ |
-| Bien | SNR above the preset's limit |
-| Aceptable | within 5.5 dB below the limit |
-| Mal | within 7.5 dB below the limit |
-| Ninguna | more than 7.5 dB below the limit |
+| Quality | Criteria |
+| --------- | ------------------------------------------------------------------------- |
+| Bien | SNR above the preset's limit |
+| Aceptable | up to 5.5 dB below the limit |
+| Mal | between 5.5 dB and 7.5 dB below the limit |
+| Ninguna | more than 7.5 dB below the limit |
See [Understanding the Signal Meter](signal-meter) for the full explanation.
diff --git a/docs/es-rES/user/settings-radio-user.md b/docs/es-rES/user/settings-radio-user.md
index d87361afe..0bb556710 100644
--- a/docs/es-rES/user/settings-radio-user.md
+++ b/docs/es-rES/user/settings-radio-user.md
@@ -74,6 +74,8 @@ After modifying settings, tap **Save** to write the configuration to your radio.
| ~~Long Slow~~ | ~30 km | 0.18 kbps | −17.5 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.
+
#### Choosing a Modem Preset
The modem preset controls the fundamental tradeoff between **range** and **data rate**:
diff --git a/docs/es-rES/user/signal-meter.md b/docs/es-rES/user/signal-meter.md
index f0375c4c9..0204ee4d9 100644
--- a/docs/es-rES/user/signal-meter.md
+++ b/docs/es-rES/user/signal-meter.md
@@ -52,12 +52,12 @@ The app rates your signal quality (None, Bad, Fair, or Good) from **SNR alone, m
Because the rating is relative to the preset limit, the _same_ SNR can rate differently on different presets — `-15 dB` is healthy on `LongSlow` but unusable on `ShortFast`. Letting `limit` be the active preset's SNR Limit, here is how the app picks the bars (or color):
-| Level | Bars | Criteria | Meaning |
-| --------- | ---- | ------------------------------------ | ---------------------------------------------------------------------------------------- |
-| Bien | 3 | SNR **above** the preset's `limit` | Signal is comfortably above the demodulation floor — healthy connection. |
-| Aceptable | 2 | within `5.5 dB` below the `limit` | Decodable, but getting close to the floor. |
-| Mal | 1 | within `7.5 dB` below the `limit` | At the very edge of what the preset can recover. |
-| Ninguna | 0 | more than `7.5 dB` below the `limit` | Below the floor — transmission lost to noise. |
+| Level | Bars | Criteria | Meaning |
+| --------- | ---- | ----------------------------------------------- | ---------------------------------------------------------------------------------------- |
+| Bien | 3 | SNR **above** the preset's `limit` | Signal is comfortably above the demodulation floor — healthy connection. |
+| Aceptable | 2 | up to `5.5 dB` below the `limit` | Decodable, but getting close to the floor. |
+| Mal | 1 | between `5.5 dB` and `7.5 dB` below the `limit` | At the very edge of what the preset can recover. |
+| Ninguna | 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.
diff --git a/docs/es-rES/user/telemetry-and-sensors.md b/docs/es-rES/user/telemetry-and-sensors.md
index c0ba34eff..e6d251a2c 100644
--- a/docs/es-rES/user/telemetry-and-sensors.md
+++ b/docs/es-rES/user/telemetry-and-sensors.md
@@ -103,7 +103,9 @@ Nodes with particulate matter or CO₂ sensors report air quality data:
| PM10 | µg/m³ | Coarse particulate matter |
| CO₂ | ppm | Carbon dioxide concentration |
-The CO₂ reading is color-coded by severity (Good → Stuffy → Poor → Unsafe → Evacuate). See [Node Metrics — Air Quality](node-metrics#air-quality-metrics) for the exact ppm bands and colors.
+CO₂ sensors such as the SCD4x also report their own temperature and humidity, which appear alongside the readings above. From PM2.5 history the app additionally derives an **EPA NowCast AQI** value.
+
+The CO₂ reading is color-coded by severity (Good → Stuffy → Poor → Unsafe → Evacuate). See [Node Metrics — Air Quality](node-metrics#air-quality-metrics) for the exact ppm bands, colors, and AQI detail.
Air quality data can be viewed as info cards on the node detail screen, charted over time, and exported to CSV.
diff --git a/docs/es-rES/user/translate.md b/docs/es-rES/user/translate.md
index 0b762a4f5..d6d4270ef 100644
--- a/docs/es-rES/user/translate.md
+++ b/docs/es-rES/user/translate.md
@@ -18,11 +18,11 @@ Contributing translations helps make Meshtastic accessible to a wider audience.
## What Gets Translated
-| Resource | Source Location | Notas |
-| ----------------- | ------------------------------------- | ---------------------------------------------------------------------- |
-| UI strings | `composeResources/values/strings.xml` | Buttons, labels, messages, and all user-visible text |
-| User Guide pages | `docs/user/*.md` | In-app documentation shown in Help & Documentation |
-| Fastlane metadata | `fastlane/metadata/android/en-US/` | App Store listing title, description, and changelogs |
+| Resource | Source Location | Notas |
+| ----------------- | ------------------------------------------------------------------- | ---------------------------------------------------------------------- |
+| UI strings | `core/resources/src/commonMain/composeResources/values/strings.xml` | Buttons, labels, messages, and all user-visible text |
+| User Guide pages | `docs/en/user/*.md` | In-app documentation shown in Help & Documentation |
+| Fastlane metadata | `fastlane/metadata/android/en-US/` | App Store listing title, description, and changelogs |
> ⚠️ **Note:** Developer Guide pages are English-only. Code-focused documentation targeting contributors is not translated.
diff --git a/docs/es-rES/user/units-and-locale.md b/docs/es-rES/user/units-and-locale.md
index 70bd76749..3e76c4d2f 100644
--- a/docs/es-rES/user/units-and-locale.md
+++ b/docs/es-rES/user/units-and-locale.md
@@ -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 uses the `MetricFormatter` utility to convert and display values in whatever unit system your device's locale specifies.
+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.
On Android, your measurement preferences are determined by your system **Language & Region** settings. On Desktop (JVM), the app uses the JVM's default `Locale`.
@@ -115,12 +115,13 @@ On Android, your measurement system (metric vs imperial) is tied to your region
2. Change your **Region** or **Measurement units** preference
3. Return to Meshtastic — values update immediately
-> 💡 **Tip:** The app uses `MetricFormatter` from `core:common`. All measurement formatting is handled by a shared KMP utility that respects your platform's locale. Developers adding new measurement displays should use `MetricFormatter` rather than hard-coding unit conversions.
+> 💡 **Tip:** All measurement formatting is handled centrally and respects your platform's locale, so units stay consistent everywhere in the app.
## Related Topics
- [Node Metrics](node-metrics) — where temperature, distance, and sensor values are displayed
- [Telemetry & Sensors](telemetry-and-sensors) — the sensors that produce these measurements
+- [Measurement & Formatting](../developer/measurement) — developer reference for the formatting utilities
- [Settings — Radio & User](settings-radio-user) — region setting that drives unit selection
---
diff --git a/docs/et-rEE/user/android-auto.md b/docs/et-rEE/user/android-auto.md
index 3dd3027b6..b15b9b00b 100644
--- a/docs/et-rEE/user/android-auto.md
+++ b/docs/et-rEE/user/android-auto.md
@@ -2,7 +2,7 @@
title: Android auto
parent: Kasutaja juhis
nav_order: 18
-last_updated: 2026-06-11
+last_updated: 2026-07-07
description: Kasuta Meshtasticut käed-vabad režiimis Android Auto peakomplektis – loe sõnumeid valjusti ette, vasta häälega ning kontrolli sõlmede ja võrgu olekut sõidu ajal.
aliases:
- android auto
@@ -17,9 +17,11 @@ Meshtastic integreerub Android Autoga, nii et saad sõidu ajal oma kärgvõrguga
> ⚠️ **Märkus:** Android Auto tugi on saadaval ainult **Google'i-tüüpi Androidi versioonides**. It is not included in the F-Droid build, and it is not available on Desktop or iOS.
+> ℹ️ **What ships today:** The Google Play build provides **notification-only** car messaging — incoming messages are announced on the head unit and you reply through its notification controls. The full tabbed **Messages / Nodes / Status** experience described below is a beta built on the Android Car App Library (Google's templated car UI is currently restricted to Closed/Internal Play tracks), so it appears only in builds compiled with `-PenableCarTemplates=true`. The rest of this page documents that beta experience.
+
## Overview
-Kui telefon on ühendatud Android Auto peakomplektiga (või arenduses kasutatava töölaua peakomplekti emulaatoriga), kuvatakse Meshtastic Android Car App Library abil loodud sõnumsiderakendusena. The car interface presents a tabbed Home screen optimized for driving-safe, glanceable use:
+When your phone is connected to an Android Auto head unit (or the Desktop Head Unit emulator used for development), the beta build presents Meshtastic as a messaging app built with the Android Car App Library, with a tabbed Home screen optimized for driving-safe, glanceable use:
- **Messages** — recent conversations, with hands-free reading and replies.
- **Nodes** — the mesh node list, with a node-detail view.
diff --git a/docs/et-rEE/user/connections.md b/docs/et-rEE/user/connections.md
index f9ad818cd..8398e85dd 100644
--- a/docs/et-rEE/user/connections.md
+++ b/docs/et-rEE/user/connections.md
@@ -23,7 +23,7 @@ Bluetooth Low Energy is the default and most common connection method on Android
1. Veendu, et Meshtastic seade on sisse lülitatud ja sidumisrežiimis.
2. Ava rakendus ja navigeeri vahekaardile **Ühendused**.
-3. Puuduta **Skanni seadmeid** – kuvatakse lähedalasuvad Meshtastic raadiod.
+3. Tap **Scan for Bluetooth devices** — nearby Meshtastic radios will appear.
4. Select your device from the list.
5. Nõustu Bluetoothi sidumise taotlusega, kui see kuvatakse.
diff --git a/docs/et-rEE/user/desktop.md b/docs/et-rEE/user/desktop.md
index 0694ef4b2..4f6d7a11e 100644
--- a/docs/et-rEE/user/desktop.md
+++ b/docs/et-rEE/user/desktop.md
@@ -2,7 +2,7 @@
title: Desktop App
parent: User Guide
nav_order: 14
-last_updated: 2026-06-11
+last_updated: 2026-07-07
description: Meshtastic arvuti rakendus pakub samu võrgusuhtluse funktsioone Linuxis, macOS-is ja Windowsis.
aliases:
- töölaud
@@ -60,19 +60,19 @@ Bluetooth Low Energy is supported on Desktop via the [Kable](https://github.com/
## Feature Parity
-| Feature | Android | Desktop | Sõnumid |
-| -------------------------------------------- | ------- | ------- | ---------------------------------------------- |
-| Messaging | ✓ | ✓ | Full parity |
-| Node List | ✓ | ✓ | Full parity |
-| Kaart | ✓ | ✓ | Full parity |
-| Sätted | ✓ | ✓ | Full parity |
-| Sinihammas (BLE) | ✓ | ✓ | Via Kable on desktop |
-| Püsivara värskendus OTA kaudu | ✓ | ✗ | Use web flasher |
-| Notifications | ✓ | ✓ | Native OS notifications |
-| Widgets | ✓ | ✗ | Android-only |
-| Android auto | ✓ | ✗ | Android-only — not available on Desktop or iOS |
-| AI Assistant (Chirpy) | ✓\* | ✗ | Google flavor Android only |
-| App Functions (system AI) | ✓† | ✗ | Google flavor Android only |
+| Feature | Android | Desktop | Sõnumid |
+| -------------------------------------------- | ------- | ------- | -------------------------------------------------------------------------- |
+| Messaging | ✓ | ✓ | Full parity |
+| Node List | ✓ | ✓ | Full parity |
+| Kaart | ✓ | ◐ | Map tab exists on desktop, but the interactive map view is Android-only |
+| Sätted | ✓ | ✓ | Full parity |
+| Sinihammas (BLE) | ✓ | ✓ | Via Kable on desktop |
+| Püsivara uuendus | ✓ | ◐ | Desktop supports in-app USB firmware update; BLE/Wi-Fi OTA is Android-only |
+| Notifications | ✓ | ✓ | Native OS notifications |
+| Widgets | ✓ | ✗ | Android-only |
+| Android auto | ✓ | ✗ | Android-only — not available on Desktop or iOS |
+| AI Assistant (Chirpy) | ✓\* | ✗ | Google flavor Android only |
+| App Functions (system AI) | ✓† | ✗ | Google flavor Android only |
\*Chirpy AI requires Android 14+ on Google flavor builds with supported hardware.
@@ -84,14 +84,17 @@ The Desktop app uses the same Compose Multiplatform UI with adaptations for larg
### Keyboard Shortcuts
-| Shortcut | Action |
-| ------------------- | ---------------------- |
-| **⌘Q** / **Ctrl+Q** | Quit the application |
-| **⌘,** / **Ctrl+,** | Ava sätted |
-| **⌘1** / **Ctrl+1** | Switch to Messages tab |
-| **⌘2** / **Ctrl+2** | Switch to Nodes tab |
-| **⌘3** / **Ctrl+3** | Switch to Map tab |
-| **⌘4** / **Ctrl+4** | Switch to Connect tab |
+All shortcuts use the **Meta** key — that's ⌘ (Command) on macOS and the Super / Windows key on Linux and Windows. (`Ctrl` is not bound.)
+
+| Shortcut | Action |
+| ---------- | ---------------------- |
+| **Meta+Q** | Quit the application |
+| **Meta+,** | Ava sätted |
+| **Meta+1** | Switch to Messages tab |
+| **Meta+2** | Switch to Nodes tab |
+| **Meta+3** | Switch to Map tab |
+| **Meta+4** | Switch to Connect tab |
+| **Meta+/** | Open About |
### Window & System Tray
@@ -123,7 +126,6 @@ Individual doc pages render with full formatting:
```bash
git clone https://github.com/meshtastic/Meshtastic-Android.git
cd Meshtastic-Android
-git submodule update --init
./gradlew :desktopApp:run
```
@@ -134,7 +136,8 @@ Requirements:
## Known Limitations
-- OTA püsivara värskendusi pole (kasuta veebivärskendajat)
+- 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
- Lauaarvutid ei toeta veel BLE liitmist (sidumine toimib ilma ühendamiseta)
@@ -142,7 +145,7 @@ Requirements:
## Related Topics
- [Connections](connections) — connection methods overview
-- [Püsivara värskendused] (firmware) – kasutage arvuti püsivara värskenduste jaoks [Web Flasherit] (https://flasher.meshtastic.org)
+- [Firmware Updates](firmware) — in-app USB update on desktop, or the [Web Flasher](https://flasher.meshtastic.org)
---
diff --git a/docs/et-rEE/user/discovery.md b/docs/et-rEE/user/discovery.md
index 99235bc4b..080221a27 100644
--- a/docs/et-rEE/user/discovery.md
+++ b/docs/et-rEE/user/discovery.md
@@ -44,7 +44,6 @@ Before starting, configure these controls:
The **Start** button stays disabled — with an explanation of why — until the scan can run. Common reasons it's disabled:
- The device is **not connected**.
-- The current channel is using the **default channel key** (use a unique key first — see [Messages & Channels](messages-and-channels)).
- **No presets** have been selected to scan.
- The selected preset uses **2.4 GHz**, which your hardware doesn't support.
@@ -102,7 +101,7 @@ Traceroute reveals the exact path a message takes from your node to any other no
1. Mine valikuni **Sõlmed** ja puuduta sõlme, mida soovid jälgida.
2. Sõlme üksikasjade ekraanil puuduta **Traceroute**.
3. The app sends a traceroute request and waits for the response.
-4. Results display each hop in order, with signal quality at every step.
+4. Tulemused kuvatakse iga hüppe kohta, koos signaali kvaliteediga igal sammul.
### Reading the Results
@@ -112,21 +111,21 @@ A traceroute result looks like this:
You → Node A (SNR: 8.5, RSSI: -95) → Node B (SNR: 5.2, RSSI: -108) → Target
```
-Each hop represents a relay node that forwarded the message. The SNR and RSSI values at each hop tell you about the link quality on that specific segment.
+Iga hüpe näitab vahendussõlme, mis sõnumi edastas. The SNR and RSSI values at each hop tell you about the link quality on that specific segment.
-| 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 |
-| 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!) |
+| What to look for | What it means |
+| ------------------------------------------------------------------------ | --------------------------------------------------------------------------- |
+| Kõikidel hüpetel on hea SNR (> 5 dB) | Healthy path — messages flow reliably |
+| Ühel hüpel halb SNR (< 0 dB) | Weak link — this relay segment is fragile |
+| Mitu hüppet (4+) | Long path — consider repositioning a node to shorten it |
+| Different path on retry | Mesh is adapting — multiple routes exist (this is good!) |
> 💡 **Vihje:** Käivita traceroute'i mitu korda mõne minuti tagant. If the path changes, your mesh has redundant routes — a sign of a well-connected network.
### Troubleshooting with Traceroute
- **"No route found"** — The target node may be offline, out of range, or on a different channel. Check that both nodes share at least one channel with the same encryption key.
-- **Traceroute times out** — The path may be too long (exceeds hop limit) or a relay node is congested. Try increasing the hop limit in **Settings → LoRa Config**.
+- **Traceroute aegus** — Tee võib olla liiga pikk (ületab hüppete limiidi) või on vahendussõlm ülekoormatud. Proovi hüppe limiiti suurendada menüüs **Seaded → LoRa konfiguratsioon**.
- **Asymmetric paths** — A traceroute from A→B may take a different path than B→A. This is normal — radio propagation is not always symmetric.
---
@@ -164,7 +163,7 @@ The node list itself is a powerful discovery tool when you use its filtering and
### Assessing Connectivity
-- Sort by **Hops away** to see which nodes are directly reachable (0 hops) versus relayed.
+- Sorteeri **Hüpete arvu järgi**, et näha, millised sõlmed on otse kättesaadavad (0 hüpet) ja millised vahendatavate sõlmedega.
- Sort by **Distance** to find nearby nodes and verify they're reachable.
- Kasuta **Välista MQTT** raadio teel (mitte internetisilla kaudu) ligipääsetavatele sõlmedele keskendumiseks.
diff --git a/docs/et-rEE/user/firmware.md b/docs/et-rEE/user/firmware.md
index 1150f1cb0..247e284a8 100644
--- a/docs/et-rEE/user/firmware.md
+++ b/docs/et-rEE/user/firmware.md
@@ -2,8 +2,8 @@
title: Püsivara värskendus
parent: User Guide
nav_order: 13
-last_updated: 2026-05-13
-description: Raadio püsivara uuendamine sinihamba kaudu – OTA protsess, versioonikanalid, lennueelsed kontrollid ja taastamine.
+last_updated: 2026-07-07
+description: Update your radio firmware over Bluetooth or USB — OTA process, version channels, pre-flight checks, and recovery.
aliases:
- firmware
- värskendus
@@ -17,7 +17,7 @@ Hoia oma Meshtastic raadio ajakohasena uusima püsivaraga, et saada uusi funktsi
## Kontrollin värskendust
-1. Mine menüüsse **Seaded → Püsivara värskendus** või puuduta püsivara teavitust, kui see kuvatakse.
+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.
2. The app checks for available firmware versions.
3. Saadaval olevad värskendused näitavad versiooninumbrit ja muudatuste logi kokkuvõtet.
@@ -39,19 +39,26 @@ Kõige levinum värskendamisviis Androidi kasutajate seas:

-### USB Flashing
+### In-App USB Update
-For recovery or when OTA is unavailable:
+When your radio is connected over **USB/serial** (rather than Bluetooth), the Firmware Update screen offers **USB File Transfer**. The app reboots the device into DFU mode, then prompts you to save the `.uf2` file to the device's DFU drive using the system file picker. This option appears only on a USB/serial connection — it is not available over Bluetooth.
+
+> ℹ️ **nRF bootloader note:** Some devices (e.g. RAK WisBlock RAK4631) need their bootloader flashed with the vendor's serial DFU tool (such as `adafruit-nrfutil`) — copying the `.uf2` alone won't update the bootloader. The app surfaces a hint when this applies.
+
+### Other Flashing Options
+
+For recovery or when neither OTA nor in-app USB is available:
- Kasuta [Meshtastic Web Flasherit](https://flasher.meshtastic.org)
- Või arvutil [Meshtastic CLI tööriist](https://meshtastic.org/docs/getting-started/flashing-firmware)
## Version Channels
-| Kanal | Kirjeldus |
-| --------- | ------------------------------------------- |
-| Stabiilne | Recommended for most users; tested releases |
-| Alfa | Preview releases; may contain bugs |
+| Kanal | Kirjeldus |
+| --------- | -------------------------------------------------------------------------- |
+| Stabiilne | Recommended for most users; tested releases |
+| Alfa | Preview releases; may contain bugs |
+| Lokaalne | Flash a firmware file you select yourself, instead of a downloaded release |
## Eelvärskenduse kontrollnimekiri
@@ -73,7 +80,7 @@ Kui värskendus õnnestub:
- The radio will reboot automatically
- Bluetooth connection will re-establish
- Verify your settings are intact
-- Check the firmware version in **Settings → About**
+- Confirm the new version under **Currently Installed** on the Firmware Update screen — it's also shown on the node's detail page and the Connections screen

diff --git a/docs/et-rEE/user/messages-and-channels.md b/docs/et-rEE/user/messages-and-channels.md
index a2c9ea7a0..d3964638f 100644
--- a/docs/et-rEE/user/messages-and-channels.md
+++ b/docs/et-rEE/user/messages-and-channels.md
@@ -74,8 +74,8 @@ When a message fails to deliver, the error indicator shows what went wrong:
| Tõrge | Meaning | What to Do |
| ---------------- | ---------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| No Route | No path exists to the destination node | The recipient may be offline or out of mesh range. Try later or move closer. |
-| Got NAK | The next-hop node refused to relay | The relay node may be congested. Wait and retry. |
-| Aegunud | No acknowledgment within retry window | The recipient may be just out of range. Try increasing hop limit or moving to a better position. |
+| Got NAK | Järgmise-hüppe sõlm keeldus edastamast | The relay node may be congested. Wait and retry. |
+| Aegunud | No acknowledgment within retry window | The recipient may be just out of range. Proovi hüppe limiiti suurendada või paremasse positsiooni liikuda. |
| Liidest pole | No radio interface available to send | Kontrolli, kas raadio on ühendatud ja kanal on seadistatud. |
| Max Retransmit | All retry attempts exhausted | The mesh path is unreliable. Try a different channel or wait for conditions to improve. |
| Kanalit pole | The destination channel doesn't exist | Veendu, et mõlemal sõlmel oleks sama kanali seadistus. |
@@ -116,12 +116,16 @@ You can search the full history of any conversation directly from the chat scree

-> 💡 **Vihje:** Otsing toimub täisteksti põhjal ja jääb vestlusse, kust sa selle avasid – see ei otsi teistest kanalitest ega kontaktide hulgast. Matching is fast even on long histories because messages are indexed locally.
+> 💡 **Vihje:** Otsing toimub täisteksti põhjal ja jääb vestlusse, kust sa selle avasid – see ei otsi teistest kanalitest ega kontaktide hulgast. It matches against the messages already stored on your device, so it works fully offline.
### Message Bubbles
Messages appear as chat bubbles — sent messages on the right, received messages on the left. Each bubble shows the sender, timestamp, and delivery status. Messages with replies include a quoted preview of the original message above the response.
+### Mentions
+
+Type `@` while composing to mention a node — a picker suggests matching contacts as you type. In a received message, a mention appears as a highlighted chip showing the node's name; tap it to jump straight to that node's detail page.
+
### Reactions
React to messages with emoji:
@@ -143,6 +147,7 @@ Long-press any message to access:
- **Copy** — copy message text to clipboard
- **Reply** — quote the message in your response
- **React** — add an emoji reaction
+- **Translate** — translate a received message into your device language and toggle between the original and translated text (Google Play build only; uses on-device translation)
- **Delete** — remove a message you sent (local deletion)
### Message Priority
diff --git a/docs/et-rEE/user/mqtt.md b/docs/et-rEE/user/mqtt.md
index 924a00d9a..b7912a71e 100644
--- a/docs/et-rEE/user/mqtt.md
+++ b/docs/et-rEE/user/mqtt.md
@@ -56,6 +56,8 @@ Internetiühendusega (WiFi või Ethernet) lüüsisõlm jagab võrgusõnumeid MQT
Kogukond haldab avaliku vahendajat aadressil `mqtt.meshtastic.org`. This is intended for general use and testing.
+> ℹ️ **Note:** Connections to `mqtt.meshtastic.org` always use TLS (port 8883), even if the TLS toggle is off. For any other broker, TLS is used only when you enable it (port 8883 with TLS, 1883 without).
+
> 🔒 **Privaatsus:** Avaliku vahendaja sõnumeid saavad lugeda kõik tellijad. Always use channel encryption for private communications.
### Private Broker
diff --git a/docs/et-rEE/user/node-metrics.md b/docs/et-rEE/user/node-metrics.md
index 0d7d8eb7b..0c06dab37 100644
--- a/docs/et-rEE/user/node-metrics.md
+++ b/docs/et-rEE/user/node-metrics.md
@@ -55,12 +55,15 @@ The BME680 **IAQ (Indoor Air Quality)** index is a single 0–500+ value derived
Air Quality is a dedicated metrics view for nodes equipped with a particulate-matter and/or CO₂ sensor. It is **separate from the BME680 IAQ reading** listed under Environment Metrics — IAQ is a single gas-resistance-derived index, while the Air Quality view charts the underlying particulate and CO₂ measurements.
-| Meetriline | Unit | Kirjeldus |
-| --------------------- | ----- | ---------------------------------------------------- |
-| PM1.0 | µg/m³ | Particulate matter up to 1.0 micron |
-| PM2,5 | µg/m³ | Particulate matter up to 2.5 microns |
-| PM10 | µg/m³ | Particulate matter up to 10 microns |
-| CO₂ | ppm | Süsinikdioksiidi kontsentratsioon |
+| Meetriline | Unit | Kirjeldus |
+| --------------------- | --------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| PM1.0 | µg/m³ | Particulate matter up to 1.0 micron |
+| PM2,5 | µg/m³ | Particulate matter up to 2.5 microns |
+| PM10 | µg/m³ | Particulate matter up to 10 microns |
+| AQI | EPA index | EPA **NowCast** AQI computed from your recent PM2.5 history, with a color-coded severity label. Shown next to PM2.5 once enough readings have accumulated. |
+| CO₂ | ppm | Süsinikdioksiidi kontsentratsioon |
+| CO₂ temperature | °C / °F | Temperature reported by the CO₂ sensor itself (e.g. SCD4x) |
+| CO₂ humidity | % | Relative humidity reported by the CO₂ sensor |
CO₂ readings are color-coded by severity to make air quality easy to read at a glance:
@@ -87,23 +90,23 @@ An air-quality log/metrics button appears on the node detail screen **only when
Radio signal quality information:
-| Meetriline | Kirjeldus |
-| ----------- | ------------------------------------------------------------------------------ |
-| SNR | Signal-to-Noise Ratio (higher is better) |
-| RSSI | Received Signal Strength Indicator (closer to 0 is better) |
-| Noise Floor | Local background RF noise in dBm (more negative is quieter) |
-| Hop Count | Number of mesh hops for last message |
+| Meetriline | Kirjeldus |
+| --------------- | ------------------------------------------------------------------------------ |
+| SNR | Signal-to-Noise Ratio (higher is better) |
+| RSSI | Received Signal Strength Indicator (closer to 0 is better) |
+| Noise Floor | Local background RF noise in dBm (more negative is quieter) |
+| Hüppete loendur | Viimase sõnumi kärgvõrgu hüpete arv |
### Signal Quality Reference
Signal quality is rated from **SNR relative to the active LoRa modem preset's demodulation floor**, not from fixed thresholds — a given SNR means different things on different presets (e.g. −15 dB is fine on LongSlow but unusable on ShortFast). RSSI is shown but is not part of the rating. Letting `limit` be the preset's SNR limit:
-| Quality | Criteria |
-| -------- | ------------------------------------------------ |
-| Hea | SNR above the preset's limit |
-| Rahuldav | within 5.5 dB below the limit |
-| Halb | within 7.5 dB below the limit |
-| Puudub | more than 7.5 dB below the limit |
+| Quality | Criteria |
+| -------- | ------------------------------------------------------------------------- |
+| Hea | SNR above the preset's limit |
+| Rahuldav | up to 5.5 dB below the limit |
+| Halb | between 5.5 dB and 7.5 dB below the limit |
+| Puudub | more than 7.5 dB below the limit |
See [Understanding the Signal Meter](signal-meter) for the full explanation.
@@ -125,7 +128,7 @@ Traceroute shows the path a message takes through the mesh:
1. Sõlme üksikasjade ekraanil puuduta **Traceroute**.
2. The app sends a traceroute request to the target node.
-3. Results show each hop with SNR/RSSI values.
+3. Tulemused näitavad iga hüpet koos SNR/RSSI väärtustega.
### Reading Traceroute Results
@@ -133,7 +136,7 @@ Traceroute shows the path a message takes through the mesh:
You → Node A (SNR: 8.5) → Node B (SNR: 5.2) → Target
```
-Each hop represents a relay node that forwarded the message.
+Iga hüpe esindab vahendussõlme, mis sõnumi edastas.
## Asukoha logi
diff --git a/docs/et-rEE/user/nodes.md b/docs/et-rEE/user/nodes.md
index bc01b9b6e..6e9d6b575 100644
--- a/docs/et-rEE/user/nodes.md
+++ b/docs/et-rEE/user/nodes.md
@@ -118,7 +118,7 @@ Type in the search field to filter nodes by name or short name. Filter uueneb re
| **Last heard** (default) | Most recently heard nodes first |
| **Alphabetical** | Sorted by node long name |
| **Distance** | Nearest nodes first (requires position sharing) |
-| **Hops away** | Fewest relay hops first |
+| **Hüppe kaugusel** | Vähim vahendatud hüppeid esimesena |
| **Channel** | Grouped by channel index |
| **Läbi MQTT** | Rühmitatud MQTT ver raadiost kuuldud järgi |
| **Favorites** | Favorited nodes first |
@@ -139,7 +139,7 @@ Inline status indicators show key metrics at a glance:
| --------------- | ------------------------------------------------------------- |
| Signal quality |  |
| Battery level |  |
-| Hop count |  |
+| Hüppete loendur |  |
| Viimati kuuldud |  |
| Kaugus |  |
diff --git a/docs/et-rEE/user/settings-radio-user.md b/docs/et-rEE/user/settings-radio-user.md
index 06e8fa8ee..467ad3d31 100644
--- a/docs/et-rEE/user/settings-radio-user.md
+++ b/docs/et-rEE/user/settings-radio-user.md
@@ -46,7 +46,7 @@ Pärast sätete muutmist puuduta nuppu **Salvesta**, et konfiguratsioon raadioss
| ----------------- | ----------------------------------------------------------------------- | ----------------------------------------- |
| Regioon | Regulatory region for frequency bands | Unset (must configure) |
| Modemi vaikesäte | Speed/range tradeoff | PikkKauge |
-| Hop Limit | Maximum retransmit hops | 3 |
+| Hüppete limiit | Maks uuesti saadetud hüpet | 3 |
| TX võimsus | Transmission power (dBm); 0 = max allowed for region | 0 (region max) |
| Frequency Offset | Fine-tune frequency (MHz) | 0 |
| Channel Bandwidth | Bandwidth setting | Default for preset |
@@ -74,6 +74,8 @@ Pärast sätete muutmist puuduta nuppu **Salvesta**, et konfiguratsioon raadioss
| ~~Long Slow~~ | ~30 km | 0,18 kbps | −17,5 dB | ⚠️ **Vananenud** — endiselt valitav, kuid võidakse tulevases püsivara versioonis eemaldada |
| ~~Very Long Slow~~ | ~40+ km | 0,09 kbps | −20 dB | ⚠️ **Vananenud** — endiselt valitav, kuid võidakse tulevases püsivara versioonis eemaldada |
+> ℹ️ **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.
+
#### Choosing a Modem Preset
The modem preset controls the fundamental tradeoff between **range** and **data rate**:
diff --git a/docs/et-rEE/user/signal-meter.md b/docs/et-rEE/user/signal-meter.md
index 384cf670c..8a4b74b81 100644
--- a/docs/et-rEE/user/signal-meter.md
+++ b/docs/et-rEE/user/signal-meter.md
@@ -52,14 +52,14 @@ The app rates your signal quality (None, Bad, Fair, or Good) from **SNR alone, m
Because the rating is relative to the preset limit, the _same_ SNR can rate differently on different presets — `-15 dB` is healthy on `LongSlow` but unusable on `ShortFast`. Letting `limit` be the active preset's SNR Limit, here is how the app picks the bars (or color):
-| Level | Bars | Criteria | Meaning |
-| -------- | ---- | ------------------------------------ | ---------------------------------------------------------------------------------------- |
-| Hea | 3 | SNR **above** the preset's `limit` | Signal is comfortably above the demodulation floor — healthy connection. |
-| Rahuldav | 2 | within `5.5 dB` below the `limit` | Decodable, but getting close to the floor. |
-| Halb | 1 | within `7.5 dB` below the `limit` | At the very edge of what the preset can recover. |
-| Puudub | 0 | more than `7.5 dB` below the `limit` | Below the floor — transmission lost to noise. |
+| Level | Bars | Criteria | Meaning |
+| -------- | ---- | ----------------------------------------------- | ---------------------------------------------------------------------------------------- |
+| Hea | 3 | SNR **above** the preset's `limit` | Signal is comfortably above the demodulation floor — healthy connection. |
+| Rahuldav | 2 | up to `5.5 dB` below the `limit` | Decodable, but getting close to the floor. |
+| Halb | 1 | between `5.5 dB` and `7.5 dB` below the `limit` | At the very edge of what the preset can recover. |
+| Puudub | 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.
+> **Märkus:** Fikseeritud SNR lävesid, mida võisid mujal näha (`-7 dB` / `-15 dB`), kasutatakse nüüd ainult üksikute hüpete rõhutamiseks traceroute'i tulemustes – mitte siin kirjeldatud sõlmepõhise signaalimõõtja jaoks.
---
@@ -77,7 +77,7 @@ In the app, signal data is shown in several places:
- **Node list** — signal bars icon next to each node
- **Node detail** — SNR, RSSI, and signal quality in the device metrics section
-- **Traceroute** — per-hop signal quality for each relay node
+- **Traceroute** — iga vahendussõlme signaali kvaliteet hüppe kohta
- **Signal metrics** — historical SNR and RSSI data in the metrics charts

diff --git a/docs/et-rEE/user/telemetry-and-sensors.md b/docs/et-rEE/user/telemetry-and-sensors.md
index d5f1b6aff..69d054341 100644
--- a/docs/et-rEE/user/telemetry-and-sensors.md
+++ b/docs/et-rEE/user/telemetry-and-sensors.md
@@ -103,7 +103,9 @@ Nodes with particulate matter or CO₂ sensors report air quality data:
| PM10 | µg/m³ | Coarse particulate matter |
| CO₂ | ppm | Süsinikdioksiidi kontsentratsioon |
-The CO₂ reading is color-coded by severity (Good → Stuffy → Poor → Unsafe → Evacuate). See [Node Metrics — Air Quality](node-metrics#air-quality-metrics) for the exact ppm bands and colors.
+CO₂ sensors such as the SCD4x also report their own temperature and humidity, which appear alongside the readings above. From PM2.5 history the app additionally derives an **EPA NowCast AQI** value.
+
+The CO₂ reading is color-coded by severity (Good → Stuffy → Poor → Unsafe → Evacuate). See [Node Metrics — Air Quality](node-metrics#air-quality-metrics) for the exact ppm bands, colors, and AQI detail.
Õhukvaliteedi andmeid saab vaadata infokaartidena sõlme detailvaates, aja jooksul graafikule lisada ja CSV-vormingusse salvestada.
diff --git a/docs/et-rEE/user/translate.md b/docs/et-rEE/user/translate.md
index 06ee2904d..ed55e6c8a 100644
--- a/docs/et-rEE/user/translate.md
+++ b/docs/et-rEE/user/translate.md
@@ -18,11 +18,11 @@ Tõlgete koostamisele kaasaaitamine aitab Meshtasticut laiemale publikule kätte
## What Gets Translated
-| Resource | Source Location | Sõnumid |
-| ----------------- | ------------------------------------- | ---------------------------------------------------------------------- |
-| UI strings | `composeResources/values/strings.xml` | Buttons, labels, messages, and all user-visible text |
-| User Guide pages | `docs/user/*.md` | In-app documentation shown in Help & Documentation |
-| Fastlane metadata | `fastlane/metadata/android/en-US/` | App Store listing title, description, and changelogs |
+| Resource | Source Location | Sõnumid |
+| ----------------- | ------------------------------------------------------------------- | ---------------------------------------------------------------------- |
+| UI strings | `core/resources/src/commonMain/composeResources/values/strings.xml` | Buttons, labels, messages, and all user-visible text |
+| User Guide pages | `docs/en/user/*.md` | In-app documentation shown in Help & Documentation |
+| Fastlane metadata | `fastlane/metadata/android/en-US/` | App Store listing title, description, and changelogs |
> ⚠️ **Note:** Developer Guide pages are English-only. Code-focused documentation targeting contributors is not translated.
diff --git a/docs/et-rEE/user/units-and-locale.md b/docs/et-rEE/user/units-and-locale.md
index 098cb6f6b..77eb0cc1a 100644
--- a/docs/et-rEE/user/units-and-locale.md
+++ b/docs/et-rEE/user/units-and-locale.md
@@ -14,7 +14,7 @@ Meshtastic rakendus kuvab automaatselt temperatuure, vahemaid, kiirusi ja aegu
## How It Works
-Meshtastic raadiod edastavad andmeid alati **meetrilistes ühikutes** (meetrid, °C, km/h, hPa jne). When the app receives this data, it uses the `MetricFormatter` utility to convert and display values in whatever unit system your device's locale specifies.
+Meshtastic raadiod edastavad andmeid alati **meetrilistes ühikutes** (meetrid, °C, km/h, hPa jne). 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`.
@@ -52,7 +52,7 @@ The app uses natural scaling — short distances stay in meters or feet, while l
- **Node list** — distance and bearing to each node
- **Node detail** — altitude, distance from your position
-- **Map** — waypoint distances, traceroute hop distances
+- **Kaart** — teekonnapunktide vahemaad, traceroute'i hüppevahemaad
- **Compass** — distance to selected node
## Kiirus
@@ -115,12 +115,13 @@ On Android, your measurement system (metric vs imperial) is tied to your region
2. Change your **Region** or **Measurement units** preference
3. Tagasi Meshtastic juurde — väärtused värskendatakse kohe
-> 💡 **Tip:** The app uses `MetricFormatter` from `core:common`. All measurement formatting is handled by a shared KMP utility that respects your platform's locale. Developers adding new measurement displays should use `MetricFormatter` rather than hard-coding unit conversions.
+> 💡 **Tip:** All measurement formatting is handled centrally and respects your platform's locale, so units stay consistent everywhere in the app.
## Related Topics
- [Node Metrics](node-metrics) — where temperature, distance, and sensor values are displayed
- [Telemeetia & Sensorid](telemetry-and-sensors) — andurid, mis neid mõõtmisi teevad
+- [Measurement & Formatting](../developer/measurement) — developer reference for the formatting utilities
- [Settings — Radio & User](settings-radio-user) — region setting that drives unit selection
---
diff --git a/docs/fi-rFI/user/android-auto.md b/docs/fi-rFI/user/android-auto.md
index 241d0ee81..f5e78965b 100644
--- a/docs/fi-rFI/user/android-auto.md
+++ b/docs/fi-rFI/user/android-auto.md
@@ -2,7 +2,7 @@
title: Android Auto
parent: Käyttöopas
nav_order: 18
-last_updated: 2026-06-11
+last_updated: 2026-07-07
description: Käytä Meshtasticia hands-free-tilassa Android Auto -laitteessa — lue viestit ääneen, vastaa puheella ja tarkista radiot sekä mesh-verkon tila ajon aikana.
aliases:
- android-auto
@@ -17,9 +17,11 @@ Meshtastic integroituu Android Auton kanssa, joten voit pysyä yhteydessä mesh-
> ⚠️ **Huom:** Android Auto -tuki on saatavilla vain **Google-version Android-laitteissa**. Sitä ei ole mukana F-Droid-versiossa, eikä se ole saatavilla työpöydällä tai iOS:ssä.
+> ℹ️ **Mitä on saatavilla tällä hetkellä:** Google Play -versio tarjoaa tällä hetkellä **vain ilmoituksiin perustuvan** viestituen autoon – saapuvat viestit luetaan auton näytöllä, ja voit vastata niihin sen ilmoitusohjaimilla. Alla kuvattu välilehdellinen **Viestit / Radiot / Tila** -kokemus on Android Car App Libraryyn perustuva beetaversio (Googlen Android Car -mallit ovat toistaiseksi rajoitettuja suljettuihin/sisäisiin Play-jakeluihin), joten se näkyy vain versioissa, jotka on käännetty asetuksella `-PenableCarTemplates=true`. Tämän sivun loppuosa kuvaa tätä beetakokemusta.
+
## Yleiskatsaus
-Kun puhelin on yhdistetty Android Auto -pääyksikköön (tai kehityksessä käytettävään Desktop Head Unit -emulaattoriin), Meshtastic näkyy viestisovelluksena, joka on toteutettu Android Car App Library -kirjastolla. Auton käyttöliittymä näyttää välilehdellisen aloitusnäkymän, joka on optimoitu ajoturvalliseen ja nopeasti silmäiltävään käyttöön:
+Kun puhelimesi on yhdistetty Android Auto -laitteeseen (tai kehityksessä käytettävään Desktop Head Unit -emulaattoriin), beetaversio näyttää Meshtasticin Android Car App Libraryyn perustuvana viestisovelluksena, jossa on ajon aikaiseen käyttöön optimoitu välilehdellinen aloitusnäyttö:
- **Viestit** — viimeisimmät keskustelut, ääneen luettava ja äänellä vastattava.
- **Radiot** — mesh-verkon radiolista, sisältää radion yksityiskohtaisen näkymän.
diff --git a/docs/fi-rFI/user/connections.md b/docs/fi-rFI/user/connections.md
index df2273f5f..495313d25 100644
--- a/docs/fi-rFI/user/connections.md
+++ b/docs/fi-rFI/user/connections.md
@@ -23,7 +23,7 @@ Bluetooth Low Energy on oletus ja yleisin yhteystapa Androidilla.
1. Varmista, että Meshtastic-radio on päällä ja paritustilassa.
2. Avaa sovellus ja siirry **Yhdistä**-välilehdelle.
-3. Paina **Etsi laitteita** — lähellä olevat Meshtastic-radiot tulevat näkyviin.
+3. Napauta **Hae bluetooth-laitteita** — lähellä olevat Meshtastic-radiot ilmestyvät näkyville.
4. Valitse laitteesi listasta.
5. Hyväksy Bluetooth-pariliitospyyntö, jos se tulee näkyviin.
diff --git a/docs/fi-rFI/user/desktop.md b/docs/fi-rFI/user/desktop.md
index 276033442..4eb4b5b9b 100644
--- a/docs/fi-rFI/user/desktop.md
+++ b/docs/fi-rFI/user/desktop.md
@@ -2,7 +2,7 @@
title: Työpöytäsovellus
parent: Käyttöopas
nav_order: 14
-last_updated: 2026-06-11
+last_updated: 2026-07-07
description: Asenna ja käytä Meshtastic-työpöytäsovellusta Linuxilla, macOS:llä ja Windowsilla — yhteydet, ominaisuuksien yhtenevyys ja pikanäppäimet.
aliases:
- työpöytä
@@ -60,19 +60,19 @@ Bluetooth Low Energy on tuettu työpöydällä [Kable](https://github.com/JuulLa
## Ominaisuuksien yhtenevyys
-| Ominaisuus | Android | Työpöytä | Viestit |
-| ----------------------------------------------------------- | ------- | -------- | -------------------------------------------------------------------- |
-| Viestit | ✓ | ✓ | Täysi yhtenevyys |
-| Radiolista | ✓ | ✓ | Täysi yhtenevyys |
-| Kartta | ✓ | ✓ | Täysi yhtenevyys |
-| Asetukset | ✓ | ✓ | Täysi yhtenevyys |
-| Bluetooth (BLE) | ✓ | ✓ | Työpöydällä Kable-kirjaston kautta |
-| Laiteohjelmistopäivitys OTA | ✓ | ✗ | Käytä web-flasheria |
-| Ilmoitukset | ✓ | ✓ | Käyttöjärjestelmän natiivit ilmoitukset |
-| Widgetit | ✓ | ✗ | Vain Android |
-| Vain Android | ✓ | ✗ | Vain Android — ei saatavilla työpöydällä tai iOS:llä |
-| Tekoälyavustaja (Chirpy) | ✓\* | ✗ | Vain Google-version Android-laitteissa |
-| Sovellustoiminnot (järjestelmän tekoäly) | ✓† | ✗ | Vain Google-version Android-laitteissa |
+| Ominaisuus | Android | Työpöytä | Viestit |
+| ----------------------------------------------------------- | ------- | -------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| Viestit | ✓ | ✓ | Täysi yhtenevyys |
+| Radiolista | ✓ | ✓ | Täysi yhtenevyys |
+| Kartta | ✓ | ◐ | Kartta-välilehti on käytettävissä myös Desktop-versiossa, mutta interaktiivinen karttanäkymä on käytettävissä vain Androidissa |
+| Asetukset | ✓ | ✓ | Täysi yhtenevyys |
+| Bluetooth (BLE) | ✓ | ✓ | Työpöydällä Kable-kirjaston kautta |
+| Laiteohjelmiston päivitys | ✓ | ◐ | Työpöytä-versio tukee laiteohjelmiston päivittämistä USB:n kautta suoraan sovelluksesta. BLE-/Wi-Fi-OTA-päivitykset ovat käytettävissä vain Androidissa |
+| Ilmoitukset | ✓ | ✓ | Käyttöjärjestelmän natiivit ilmoitukset |
+| Widgetit | ✓ | ✗ | Vain Android |
+| Vain Android | ✓ | ✗ | Vain Android — ei saatavilla työpöydällä tai iOS:llä |
+| Tekoälyavustaja (Chirpy) | ✓\* | ✗ | Vain Google-version Android-laitteissa |
+| Sovellustoiminnot (järjestelmän tekoäly) | ✓† | ✗ | Vain Google-version Android-laitteissa |
\*Chirpy AI vaatii Android 14+ -version Google-version Android-laitteissa, joissa on tuettu laitteisto.
@@ -84,14 +84,17 @@ Työpöytäsovellus käyttää samaa Compose Multiplatform -käyttöliittymää,
### Pikanäppäimet
-| Pikanäppäin | Toiminto |
-| ------------------- | --------------------------- |
-| **⌘Q** / **Ctrl+Q** | Sulje sovellus |
-| **⌘,** / **Ctrl+,** | Avaa asetukset |
-| **⌘1** / **Ctrl+1** | Vaihda Viestit-välilehdelle |
-| **⌘2** / **Ctrl+2** | Vaihda Radiot-välilehdelle |
-| **⌘3** / **Ctrl+3** | Vaihda Kartta-välilehdelle |
-| **⌘4** / **Ctrl+4** | Vaihda Yhdistä-välilehdelle |
+Kaikissa pikanäppäimissä käytetään **Meta**-näppäintä — se on ⌘ (komento) macOS:ssa sekä Super-/Windows-näppäin Linuxissa ja Windowsissa. (`Ctrl`-näppäintä ei ole määritetty.)
+
+| Pikanäppäin | Toiminto |
+| ----------- | --------------------------- |
+| **Meta+Q** | Sulje sovellus |
+| **Meta+,** | Avaa asetukset |
+| **Meta+1** | Vaihda Viestit-välilehdelle |
+| **Meta+2** | Vaihda Radiot-välilehdelle |
+| **Meta+3** | Vaihda Kartta-välilehdelle |
+| **Meta+4** | Vaihda Yhdistä-välilehdelle |
+| **Meta+/** | Avaa tietoja |
### Ikkuna ja järjestelmätarjotin
@@ -123,7 +126,6 @@ Yksittäiset dokumenttisivut renderöidään täydellä muotoilulla:
```bash
git clone https://github.com/meshtastic/Meshtastic-Android.git
cd Meshtastic-Android
-git submodule update --init
./gradlew :desktopApp:run
```
@@ -134,7 +136,8 @@ Vaatimukset:
## Tunnetut rajoitukset
-- Ei OTA-laiteohjelmistopäivityksiä (käytä web-flasheria)
+- Langattomat laiteohjelmistopäivitykset (BLE/Wi-Fi OTA) ovat käytettävissä vain Androidissa. Työpöytä-versiossa käytä sovelluksen USB-päivitystä tai [Web Flasheria](https://flasher.meshtastic.org)
+- Interaktiivinen karttanäkymä on käytettävissä vain Androidissa — Kartta-välilehti on työpöytä-versiossa näkyvissä, mutta karttaa ei näytetä
- Jotkin Android-kohtaiset ominaisuudet (widgetit, tietyt ilmoituskanavat) eivät ole käytettävissä
- Suorituskyky voi vaihdella heikkotehoisella laitteistolla ajettaessa Compose Desktopia
- BLE-paritus ei vielä tallenna laiteparia työpöydällä (paritus toimii ilman tallennusta)
@@ -142,7 +145,7 @@ Vaatimukset:
## Aiheeseen liittyvät aiheet
- [Yhteydet](connections) — yhteystapojen yleiskatsaus
-- [Laiteohjelmistopäivitykset](firmware) — käytä [Web Flasheria](https://flasher.meshtastic.org) työpöydän laiteohjelmistopäivityksiin
+- [Laiteohjelmistopäivitykset](firmware) — USB-päivitys suoraan työpöytä-sovelluksessa tai [Web Flasher](https://flasher.meshtastic.org)
---
diff --git a/docs/fi-rFI/user/discovery.md b/docs/fi-rFI/user/discovery.md
index 7b89afa53..41cf54ecb 100644
--- a/docs/fi-rFI/user/discovery.md
+++ b/docs/fi-rFI/user/discovery.md
@@ -44,7 +44,6 @@ Ennen aloittamista määritä nämä asetukset:
**Käynnistä**-painike ei ole käytettävissä ja näyttää syyn, kunnes skannaus voidaan suorittaa. Yleisiä syitä, miksi se on pois käytöstä:
- Laite **ei ole yhdistetty**
-- Nykyinen kanava käyttää **oletuskanava-avainta** (käytä ensin yksilöllistä avainta — katso [Viestit ja kanavat](messages-and-channels)).
- **Esiasetuksia ei ole valittu** skannattavaksi.
- Valittu esiasetus käyttää **2,4 GHz -taajuutta**, jota laitteistosi ei tue.
diff --git a/docs/fi-rFI/user/firmware.md b/docs/fi-rFI/user/firmware.md
index 848db9e3e..3dbf56bc4 100644
--- a/docs/fi-rFI/user/firmware.md
+++ b/docs/fi-rFI/user/firmware.md
@@ -2,8 +2,8 @@
title: Laiteohjelmiston päivitykset
parent: Käyttöopas
nav_order: 13
-last_updated: 2026-05-13
-description: Päivitä radion laiteohjelmisto Bluetoothin kautta — OTA-päivitys, versiohaarat, esitarkistukset ja palautus.
+last_updated: 2026-07-07
+description: Päivitä radiosi laiteohjelmisto bluetoothin tai USB:n kautta — OTA-päivitys, versiokanavat, tarkistukset ennen päivitystä ja palautus.
aliases:
- firmware
- päivitä
@@ -17,7 +17,7 @@ Pidä Meshtastic-radiosi ajan tasalla uusimmalla firmwarella, jossa on uusia omi
## Päivitysten tarkistaminen
-1. Siirry kohtaan **Asetukset — Firmware-päivitys** tai napauta päivitysilmoitusta, jos sellainen näkyy.
+1. Avaa yhdistetyn radion asetukset ja valitse **Lisäasetukset → Laiteohjelmiston päivitys** — tai napauta laiteohjelmistopäivitysilmoitusta, jos sellainen näkyy. Tämä vaihtoehto näkyy vain laitteilla, jotka tukevat OTA-päivityksiä.
2. Sovellus tarkistaa saatavilla olevat firmware-versiot.
3. Saatavilla olevat päivitykset näyttävät versionumeron ja muutoslokin yhteenvedon.
@@ -39,19 +39,26 @@ Yleisin päivitystapa Android-käyttäjille:

-### USB-ohjelmointi
+### USB-päivitys sovelluksesta
-Palautusta varten tai jos OTA ei ole käytettävissä:
+Kun radio on yhdistetty **USB:n tai sarjayhteyden** kautta (bluetoothin sijaan), **laiteohjelmiston päivitys** -näkymässä on käytettävissä **USB-tiedostonsiirto**. Sovellus käynnistää laitteen uudelleen DFU-tilaan ja pyytää sitten tallentamaan `.uf2`-tiedoston laitteen DFU-asemaan järjestelmän tiedostonvalitsimen avulla. Tämä vaihtoehto näkyy vain USB tai sarjayhteydellä — sitä ei voi käyttää bluetoothin kautta.
+
+> ℹ️ **nRF-käynnistyslatain:** Jotkin laitteet (esimerkiksi RAK WisBlock RAK4631) edellyttävät, että käynnistyslatain päivitetään valmistajan sarjamuotoisella DFU-työkalulla (kuten `adafruit-nrfutil`). Pelkän `.uf2`-tiedoston kopioiminen ei päivitä käynnistyslatainta. Sovellus näyttää tästä vihjeen, kun se on tarpeen.
+
+### Muut päivitysvaihtoehdot
+
+Käytä näitä palautukseen tai silloin, kun OTA- tai sovelluksen USB-päivitys ei ole käytettävissä:
- Käytä [Meshtastic Web Flasheriä](https://flasher.meshtastic.org)
- Tai [Meshtastic CLI -työkalua](https://meshtastic.org/docs/getting-started/flashing-firmware) työpöytäympäristössä
## Versiokanavat
-| Kanava | Kuvaus |
-| ------ | --------------------------------------------------------------------- |
-| Vakaa | Suositeltu useimmille käyttäjille: testatut julkaisut |
-| Alpha | Esijulkaisut voivat sisältää virheitä |
+| Kanava | Kuvaus |
+| -------------------- | ------------------------------------------------------------------------ |
+| Vakaa | Suositeltu useimmille käyttäjille: testatut julkaisut |
+| Alpha | Esijulkaisut voivat sisältää virheitä |
+| Paikallinen tiedosto | Asenna itse valitsemasi laiteohjelmistotiedosto ladatun julkaisun sijaan |
## Päivitystä edeltävä tarkistuslista
@@ -73,7 +80,7 @@ Kun päivitys onnistuu:
- Radio käynnistyy uudelleen automaattisesti
- Bluetooth-yhteys muodostuu uudelleen
- Varmista, että asetuksesi ovat säilyneet
-- Tarkista firmware-versio kohdasta **Asetukset — Tietoja**
+- Vahvista uusi versio **Asennettu tällä hetkellä** -kohdasta **Laiteohjelmiston päivitys** -näkymässä — sama tieto näkyy myös radion tiedoissa ja **Yhteydet**-näkymässä

diff --git a/docs/fi-rFI/user/messages-and-channels.md b/docs/fi-rFI/user/messages-and-channels.md
index 33a9d29c5..8d7bdcfa5 100644
--- a/docs/fi-rFI/user/messages-and-channels.md
+++ b/docs/fi-rFI/user/messages-and-channels.md
@@ -116,12 +116,16 @@ Voit hakea koko keskusteluhistorian suoraan chat-näkymästä:

-> 💡 Vinkki: Haku on täystekstihaku ja toimii vain siinä keskustelussa, josta avasit sen — se ei hae muista kanavista tai kontakteista. Osumat löytyvät nopeasti myös pitkistä historiatiedoista, koska viestit on indeksoitu paikallisesti.
+> 💡 Vinkki: Haku on täystekstihaku ja toimii vain siinä keskustelussa, josta avasit sen — se ei hae muista kanavista tai kontakteista. Se hakee osumat laitteellesi jo tallennetuista viesteistä, joten se toimii täysin offline-tilassa.
### Viestikuplat
Viestit näkyvät chat-kuplina — lähetetyt viestit oikealla, vastaanotetut vasemmalla. Jokainen kupla näyttää lähettäjän, aikaleiman ja toimitustilan. Vastaukselliset viestit sisältävät alkuperäisen viestin esikatselun vastauksen yläpuolella.
+### Maininnat
+
+Kirjoita viestiä laatiessasi `@` mainitaksesi radion — valitsin ehdottaa kirjoittaessasi vastaavia yhteystietoja. Vastaanotetussa viestissä maininta näkyy korostettuna tunnisteena, jossa näkyy radion nimi. Napauta sitä siirtyäksesi suoraan kyseisen radion tietosivulle.
+
### Reaktiot
Reagoi viesteihin emojeilla:
@@ -143,6 +147,7 @@ Pitkä painallus missä tahansa viestissä avaa:
- **Kopioi** — kopioi viestin teksti leikepöydälle
- **Vastaa** — lainaa viesti vastaukseesi
- **Reagoi** — lisää emoji-reaktio
+- **Käännä** — kääntää vastaanotetun viestin laitteesi kielelle ja mahdollistaa vaihtamisen alkuperäisen ja käännetyn tekstin välillä (vain Google Play -versiossa; käyttää laitteella toimivaa käännöstä)
- **Poista** — poista lähettämäsi viesti (paikallinen poisto)
### Viestien prioriteetti
diff --git a/docs/fi-rFI/user/mqtt.md b/docs/fi-rFI/user/mqtt.md
index 790eb0604..d343e6fb5 100644
--- a/docs/fi-rFI/user/mqtt.md
+++ b/docs/fi-rFI/user/mqtt.md
@@ -56,6 +56,8 @@ Internet-yhteydellinen gateway-radio (WiFi tai Ethernet) julkaisee mesh-viestit
Yhteisö ylläpitää julkista välityspalvelinta osoitteessa `mqtt.meshtastic.org`. Tämä on tarkoitettu yleiseen käyttöön ja testaukseen.
+> ℹ️ **Huomautus:** Yhteydet palvelimeen `mqtt.meshtastic.org` käyttävät aina TLS-salausta (portti 8883), vaikka TLS-kytkin olisi poistettu käytöstä. Kaikkien muiden välityspalvelimien kohdalla TLS-salausta käytetään vain, kun otat sen käyttöön (TLS:llä portti 8883, ilman TLS:ää portti 1883).
+
> 🔒 **Tietosuoja:** Julkisen välityspalvelimen viestit ovat kaikkien tilaajien luettavissa. Käytä aina kanavasalausta yksityiseen viestintään.
### Oma välityspalvelin
diff --git a/docs/fi-rFI/user/node-metrics.md b/docs/fi-rFI/user/node-metrics.md
index 4a2f93c6f..6eb466214 100644
--- a/docs/fi-rFI/user/node-metrics.md
+++ b/docs/fi-rFI/user/node-metrics.md
@@ -55,12 +55,15 @@ BME680:n **IAQ (Indoor Air Quality)** -indeksi on yksi arvo väliltä 0–500+,
Ilmanlaatu on erillinen mittarinäkymä radioille, joissa on hiukkas- ja/tai CO₂-anturi. Se on **erillinen BME680:n IAQ-lukemasta**, joka on lueteltu ympäristömittareissa — IAQ on yksittäinen kaasuvastukseen perustuva indeksi, kun taas ilmanlaatunäkymä esittää varsinaiset hiukkas- ja CO₂-mittaukset kaavioina.
-| Metrijärjestelmä | Yksikkö | Kuvaus |
-| --------------------- | ------- | ------------------------------------------- |
-| PM1.0 | µg/m³ | Enintään 1,0 mikrometrin kokoiset hiukkaset |
-| PM2.5 | µg/m³ | Enintään 2,5 mikrometrin kokoiset hiukkaset |
-| PM10 | µg/m³ | Enintään 10 mikrometrin kokoiset hiukkaset |
-| CO₂ | ppm | Hiilidioksidipitoisuus |
+| Metrijärjestelmä | Yksikkö | Kuvaus |
+| --------------------- | ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
+| PM1.0 | µg/m³ | Enintään 1,0 mikrometrin kokoiset hiukkaset |
+| PM2.5 | µg/m³ | Enintään 2,5 mikrometrin kokoiset hiukkaset |
+| PM10 | µg/m³ | Enintään 10 mikrometrin kokoiset hiukkaset |
+| AQI | EPA-indeksi | EPA:n **NowCast**-AQI, joka lasketaan viimeaikaisesta PM2.5-historiastasi ja esitetään värikoodatulla ilmanlaadun luokituksella. Näytetään PM2.5-arvon yhteydessä, kun mittauksia on kertynyt riittävästi. |
+| CO₂ | ppm | Hiilidioksidipitoisuus |
+| CO₂ lämpötila | °C / °F | CO₂ anturin ilmoittama lämpötila (esim. SCD4x) |
+| CO₂ kosteus | % | CO₂ anturin ilmoittama suhteellinen ilmankosteus |
CO₂-lukemat on värikoodattu vakavuusasteen mukaan, jotta ilmanlaadun arviointi onnistuu yhdellä silmäyksellä:
@@ -102,7 +105,7 @@ Signaalin laatu arvioidaan **SNR**-arvon perusteella suhteessa käytössä oleva
| ----------- | ---------------------------------- |
| Hyvä | SNR esiasetuksen rajan yläpuolella |
| Kohtalainen | enintään 5,5 dB rajan alapuolella |
-| Huono | enintään 7,5 dB rajan alapuolella |
+| Huono | 5,5–7,5 dB rajan alapuolella |
| ei mitään | yli 7,5 dB rajan alapuolella |
Katso [Signaalimittarin toiminta](signal-meter), jos haluat täydellisen selityksen.
diff --git a/docs/fi-rFI/user/settings-radio-user.md b/docs/fi-rFI/user/settings-radio-user.md
index caae2bda3..8fc03b502 100644
--- a/docs/fi-rFI/user/settings-radio-user.md
+++ b/docs/fi-rFI/user/settings-radio-user.md
@@ -74,6 +74,8 @@ Asetusten muuttamisen jälkeen napauta **Tallenna** kirjoittaaksesi määritykse
| ~~Long Slow~~ | ~30 km | 0.18 kbps | −17.5 dB | ⚠️ **Vanhentunut** — edelleen valittavissa, mutta voidaan poistaa tulevassa laiteohjelmistoversiossa |
| ~~Very Long Slow~~ | ~40+ km | 0.09 kbps | −20 dB | ⚠️ **Vanhentunut** — edelleen valittavissa, mutta voidaan poistaa tulevassa laiteohjelmistoversiossa |
+> ℹ️ **Huomautus:** Tässä taulukossa käytetään yleisesti käytössä olevia lyhyitä nimiä. Sovelluksen esiasetusvalikossa ne näkyvät nimillä **Lyhyt kantama - Nopea**, **Pitkä kantama - Nopea**, **Lite - Nopea**, **Kapea - Nopea** ja niin edelleen.
+
#### Modeemiesiasetuksen valitseminen
Modeemiesiasetus määrittää tärkeimmän kompromissin **kantaman** ja **tiedonsiirtonopeuden** välillä:
diff --git a/docs/fi-rFI/user/signal-meter.md b/docs/fi-rFI/user/signal-meter.md
index b7bc08d24..2d339c499 100644
--- a/docs/fi-rFI/user/signal-meter.md
+++ b/docs/fi-rFI/user/signal-meter.md
@@ -55,8 +55,8 @@ Koska arviointi perustuu esiasetuksen rajaan, _sama_ SNR-arvo voi saada eri arvo
| Taso | Palkit | Kriteerit | Merkitys |
| ----------- | ------ | -------------------------------------- | ------------------------------------------------------------------------------------------ |
| Hyvä | 3 | SNR **esiasetuksen rajan yläpuolella** | Signaali on selvästi demodulaation alarajan yläpuolella — hyvä yhteys. |
-| Kohtalainen | 2 | enintään 5,5 dB "rajan" alapuolella | Signaali voidaan vielä purkaa, mutta se on lähellä demodulaation alarajaa. |
-| Huono | 1 | enintään 7,5 dB "rajan" alapuolella | Signaali on aivan esiasetuksen palautumiskyvyn rajalla. |
+| Kohtalainen | 2 | enintään 5,5 dB rajan alapuolella | Signaali voidaan vielä purkaa, mutta se on lähellä demodulaation alarajaa. |
+| Huono | 1 | 5,5–7,5 dB rajan alapuolella | Signaali on aivan esiasetuksen palautumiskyvyn rajalla. |
| ei mitään | 0 | yli 7,5 dB "rajan" alapuolella | Signaali on demodulaation alarajan alapuolella — lähetys hukkuu kohinaan. |
> **Huomautus:** Kiinteitä SNR-rajoja, joita olet ehkä nähnyt muualla (−7 dB / −15 dB), käytetään nykyisin vain traceroute-tulosten yksittäisten hyppyjen väritykseen — ei radion yleisen signaalin laadun arviointiin.
diff --git a/docs/fi-rFI/user/telemetry-and-sensors.md b/docs/fi-rFI/user/telemetry-and-sensors.md
index 990425ff3..a738f38d5 100644
--- a/docs/fi-rFI/user/telemetry-and-sensors.md
+++ b/docs/fi-rFI/user/telemetry-and-sensors.md
@@ -103,7 +103,9 @@ Hiukkas- tai CO₂-antureilla varustetut radiot raportoivat ilmanlaatutietoja:
| PM10 | µg/m³ | Karkeat hiukkaset |
| CO₂ | ppm | Hiilidioksidipitoisuus |
-CO₂-arvo on värikoodattu vakavuuden mukaan (Hyvä → Tunkkainen → Huono → Epäturvallinen → Evakuoi). Katso [Radion metriikat — ilmanlaatu](node-metrics#air-quality-metrics) tarkat ppm-kaistat ja värit.
+Myös CO₂ anturit, kuten SCD4x, ilmoittavat oman lämpötilansa ja ilmankosteutensa, jotka näytetään edellä olevien mittausten yhteydessä. PM2.5-historiasta sovellus laskee lisäksi **EPA NowCast AQI** -arvon.
+
+CO₂-arvo on värikoodattu vakavuuden mukaan (Hyvä → Tunkkainen → Huono → Epäturvallinen → Evakuoi). Katso [Radion mittarit — Ilmanlaatu](node-metrics#air-quality-metrics), josta löytyvät tarkat ppm-arvot, värit ja AQI-luokituksen tiedot.
Ilmanlaatutiedot voidaan näyttää tietokortteina radion tietonäytössä, esittää kaavioina ajan kuluessa ja viedä CSV-tiedostoon.
diff --git a/docs/fi-rFI/user/translate.md b/docs/fi-rFI/user/translate.md
index 795a9a2a3..0732703f9 100644
--- a/docs/fi-rFI/user/translate.md
+++ b/docs/fi-rFI/user/translate.md
@@ -18,11 +18,11 @@ Käännöksiin osallistuminen auttaa tekemään Meshtasticista saavutettavamman
## Mitä käännetään
-| Resurssi | Lähteen sijainti | Viestit |
-| ------------------- | ------------------------------------- | ------------------------------------------------------------------- |
-| UI-tekstit | `composeResources/values/strings.xml` | Painikkeet, otsikot, viestit ja kaikki käyttäjälle näkyvä teksti |
-| Käyttöoppaan sivut | `docs/user/*.md` | Sovelluksen sisäinen dokumentaatio Ohjeet ja dokumentaatio -osiossa |
-| Fastlane-metatiedot | fastlane/metadata/android/en-US/ | Sovelluskaupan listauksen otsikko, kuvaus ja muutoslokit |
+| Resurssi | Lähteen sijainti | Viestit |
+| ------------------- | ------------------------------------------------------------------- | ------------------------------------------------------------------- |
+| UI-tekstit | `core/resources/src/commonMain/composeResources/values/strings.xml` | Painikkeet, otsikot, viestit ja kaikki käyttäjälle näkyvä teksti |
+| Käyttöoppaan sivut | `docs/en/user/*.md` | Sovelluksen sisäinen dokumentaatio Ohjeet ja dokumentaatio -osiossa |
+| Fastlane-metatiedot | fastlane/metadata/android/en-US/ | Sovelluskaupan listauksen otsikko, kuvaus ja muutoslokit |
> ⚠️ **Huomautus:** Kehittäjän oppaan sivut ovat saatavilla vain englanniksi. Koodiin keskittyvää dokumentaatiota, joka on suunnattu kehitystyöhön osallistuville, ei käännetä.
diff --git a/docs/fi-rFI/user/units-and-locale.md b/docs/fi-rFI/user/units-and-locale.md
index 698d24913..340cdb913 100644
--- a/docs/fi-rFI/user/units-and-locale.md
+++ b/docs/fi-rFI/user/units-and-locale.md
@@ -14,7 +14,7 @@ Meshtastic-sovellus näyttää automaattisesti lämpötilat, etäisyydet, nopeud
## Miten se toimii
-Meshtastic-radiot lähettävät aina datan **metrisissä yksiköissä** (metrit, °C, km/h, hPa jne.). Kun sovellus vastaanottaa tämän datan, se käyttää 'MetricFormatter'-toimintoa muuntaakseen ja näyttääkseen arvot sen yksikköjärjestelmän mukaan, jonka laitteesi tai alueasetuksesi määrittää.
+Meshtastic-radiot lähettävät aina datan **metrisissä yksiköissä** (metrit, °C, km/h, hPa jne.). Kun sovellus vastaanottaa nämä tiedot, se muuntaa ja näyttää arvot laitteesi alueasetusten mukaisessa yksikköjärjestelmässä.
Androidissa mittausasetukset määräytyvät järjestelmän **Kieli ja alue** -asetusten mukaan. Työpöytäversiossa (JVM) sovellus käyttää JVM:n oletus-`Locale`-asetusta.
@@ -115,12 +115,13 @@ Androidissa mittausjärjestelmäsi (metrinen vs imperial) on sidottu alueasetuks
2. Vaihda **Alue**- tai **Mittausyksiköt**-asetusta
3. Palaa Meshtasticiin — arvot päivittyvät välittömästi
-> 💡 **Vinkki:** Sovellus käyttää `core:common`-moduulin `MetricFormatter`-luokkaa. Kaikkien mittausten muotoilu hoidetaan yhteisellä KMP-apuohjelmalla, joka noudattaa käyttöympäristösi alueasetuksia. Uusia mittausnäkymiä lisäävien kehittäjien tulisi käyttää `MetricFormatter`-toimintoa sen sijaan, että yksikkömuunnokset toteutetaan kovakoodattuna.
+> 💡 **Vinkki:** Kaikki mittausten muotoilut tehdään keskitetysti ja ne noudattavat käyttöympäristösi alueasetuksia, joten yksiköt pysyvät yhtenäisinä kaikkialla sovelluksessa.
## Aiheeseen liittyvät aiheet
- [Radion mittarit](node-metrics) — missä lämpötila-, etäisyys- ja anturiarvot näytetään
- [Telemetria ja anturit](telemetry-and-sensors) — anturit, jotka tuottavat nämä mittaukset
+- [Mittaus ja muotoilu](../developer/measurement) — kehittäjien viite muotoiluapuohjelmista
- [Asetukset — Radio ja käyttäjä](settings-radio-user) — alueasetus, joka määrittää käytettävät mittayksiköt
---
diff --git a/docs/fr-rFR/user/android-auto.md b/docs/fr-rFR/user/android-auto.md
index 306ffbb8d..3b33df553 100644
--- a/docs/fr-rFR/user/android-auto.md
+++ b/docs/fr-rFR/user/android-auto.md
@@ -2,7 +2,7 @@
title: Android Auto
parent: Guide de l'utilisateur
nav_order: 18
-last_updated: 2026-06-11
+last_updated: 2026-07-07
description: Use Meshtastic hands-free on an Android Auto head unit — read messages aloud, reply by voice, and check nodes and mesh status while driving.
aliases:
- android-auto
@@ -17,9 +17,11 @@ Meshtastic integrates with Android Auto so you can stay in touch with your mesh
> ⚠️ **Note:** Android Auto support is available on **Google-flavor Android builds only**. It is not included in the F-Droid build, and it is not available on Desktop or iOS.
+> ℹ️ **What ships today:** The Google Play build provides **notification-only** car messaging — incoming messages are announced on the head unit and you reply through its notification controls. The full tabbed **Messages / Nodes / Status** experience described below is a beta built on the Android Car App Library (Google's templated car UI is currently restricted to Closed/Internal Play tracks), so it appears only in builds compiled with `-PenableCarTemplates=true`. The rest of this page documents that beta experience.
+
## Overview
-When your phone is connected to an Android Auto head unit (or the Desktop Head Unit emulator used for development), Meshtastic appears as a messaging app built with the Android Car App Library. The car interface presents a tabbed Home screen optimized for driving-safe, glanceable use:
+When your phone is connected to an Android Auto head unit (or the Desktop Head Unit emulator used for development), the beta build presents Meshtastic as a messaging app built with the Android Car App Library, with a tabbed Home screen optimized for driving-safe, glanceable use:
- **Messages** — recent conversations, with hands-free reading and replies.
- **Nodes** — the mesh node list, with a node-detail view.
diff --git a/docs/fr-rFR/user/connections.md b/docs/fr-rFR/user/connections.md
index ec58296e7..12822b6a5 100644
--- a/docs/fr-rFR/user/connections.md
+++ b/docs/fr-rFR/user/connections.md
@@ -23,7 +23,7 @@ Bluetooth Low Energy is the default and most common connection method on Android
1. Ensure your Meshtastic radio is powered on and in pairing mode.
2. Open the app and navigate to the **Connect** tab.
-3. Tap **Scan for Devices** — nearby Meshtastic radios will appear.
+3. Tap **Scan for Bluetooth devices** — nearby Meshtastic radios will appear.
4. Select your device from the list.
5. Accept the Bluetooth pairing prompt if shown.
diff --git a/docs/fr-rFR/user/desktop.md b/docs/fr-rFR/user/desktop.md
index 33a9c858c..6dc7c5173 100644
--- a/docs/fr-rFR/user/desktop.md
+++ b/docs/fr-rFR/user/desktop.md
@@ -2,7 +2,7 @@
title: Desktop App
parent: User Guide
nav_order: 14
-last_updated: 2026-06-11
+last_updated: 2026-07-07
description: Install and use the Meshtastic Desktop app on Linux, macOS, and Windows — connections, feature parity, and keyboard shortcuts.
aliases:
- desktop
@@ -60,19 +60,19 @@ Bluetooth Low Energy is supported on Desktop via the [Kable](https://github.com/
## Feature Parity
-| Feature | Android | Desktop | Notes |
-| -------------------------------------------- | ------- | ------- | ---------------------------------------------- |
-| Messaging | ✓ | ✓ | Full parity |
-| Node List | ✓ | ✓ | Full parity |
-| Carte | ✓ | ✓ | Full parity |
-| Réglages | ✓ | ✓ | Full parity |
-| Bluetooth (BLE) | ✓ | ✓ | Via Kable on desktop |
-| Firmware Update OTA | ✓ | ✗ | Use web flasher |
-| Notifications | ✓ | ✓ | Native OS notifications |
-| Widgets | ✓ | ✗ | Android-only |
-| Android Auto | ✓ | ✗ | Android-only — not available on Desktop or iOS |
-| AI Assistant (Chirpy) | ✓\* | ✗ | Google flavor Android only |
-| App Functions (system AI) | ✓† | ✗ | Google flavor Android only |
+| Feature | Android | Desktop | Notes |
+| -------------------------------------------- | ------- | ------- | -------------------------------------------------------------------------- |
+| Messaging | ✓ | ✓ | Full parity |
+| Node List | ✓ | ✓ | Full parity |
+| Carte | ✓ | ◐ | Map tab exists on desktop, but the interactive map view is Android-only |
+| Réglages | ✓ | ✓ | Full parity |
+| Bluetooth (BLE) | ✓ | ✓ | Via Kable on desktop |
+| Mise à jour du firmware | ✓ | ◐ | Desktop supports in-app USB firmware update; BLE/Wi-Fi OTA is Android-only |
+| Notifications | ✓ | ✓ | Native OS notifications |
+| Widgets | ✓ | ✗ | Android-only |
+| Android Auto | ✓ | ✗ | Android-only — not available on Desktop or iOS |
+| AI Assistant (Chirpy) | ✓\* | ✗ | Google flavor Android only |
+| App Functions (system AI) | ✓† | ✗ | Google flavor Android only |
\*Chirpy AI requires Android 14+ on Google flavor builds with supported hardware.
@@ -84,14 +84,17 @@ The Desktop app uses the same Compose Multiplatform UI with adaptations for larg
### Keyboard Shortcuts
-| Shortcut | Action |
-| ------------------- | ---------------------- |
-| **⌘Q** / **Ctrl+Q** | Quit the application |
-| **⌘,** / **Ctrl+,** | Open Settings |
-| **⌘1** / **Ctrl+1** | Switch to Messages tab |
-| **⌘2** / **Ctrl+2** | Switch to Nodes tab |
-| **⌘3** / **Ctrl+3** | Switch to Map tab |
-| **⌘4** / **Ctrl+4** | Switch to Connect tab |
+All shortcuts use the **Meta** key — that's ⌘ (Command) on macOS and the Super / Windows key on Linux and Windows. (`Ctrl` is not bound.)
+
+| Shortcut | Action |
+| ---------- | ---------------------- |
+| **Meta+Q** | Quit the application |
+| **Meta+,** | Open Settings |
+| **Meta+1** | Switch to Messages tab |
+| **Meta+2** | Switch to Nodes tab |
+| **Meta+3** | Switch to Map tab |
+| **Meta+4** | Switch to Connect tab |
+| **Meta+/** | Open About |
### Window & System Tray
@@ -123,7 +126,6 @@ Individual doc pages render with full formatting:
```bash
git clone https://github.com/meshtastic/Meshtastic-Android.git
cd Meshtastic-Android
-git submodule update --init
./gradlew :desktopApp:run
```
@@ -134,7 +136,8 @@ Requirements:
## Known Limitations
-- No OTA firmware updates (use web flasher)
+- 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
- BLE bonding is not yet supported on desktop (pairing works without bonding)
@@ -142,7 +145,7 @@ Requirements:
## Related Topics
- [Connections](connections) — connection methods overview
-- [Firmware Updates](firmware) — use the [Web Flasher](https://flasher.meshtastic.org) for desktop firmware updates
+- [Firmware Updates](firmware) — in-app USB update on desktop, or the [Web Flasher](https://flasher.meshtastic.org)
---
diff --git a/docs/fr-rFR/user/discovery.md b/docs/fr-rFR/user/discovery.md
index af6606aa6..bdd0f32c1 100644
--- a/docs/fr-rFR/user/discovery.md
+++ b/docs/fr-rFR/user/discovery.md
@@ -44,7 +44,6 @@ Before starting, configure these controls:
The **Start** button stays disabled — with an explanation of why — until the scan can run. Common reasons it's disabled:
- The device is **not connected**.
-- The current channel is using the **default channel key** (use a unique key first — see [Messages & Channels](messages-and-channels)).
- **No presets** have been selected to scan.
- The selected preset uses **2.4 GHz**, which your hardware doesn't support.
diff --git a/docs/fr-rFR/user/firmware.md b/docs/fr-rFR/user/firmware.md
index 9fe0bfbfa..8b17f5eb5 100644
--- a/docs/fr-rFR/user/firmware.md
+++ b/docs/fr-rFR/user/firmware.md
@@ -2,8 +2,8 @@
title: Firmware Updates
parent: User Guide
nav_order: 13
-last_updated: 2026-05-13
-description: Update your radio firmware over Bluetooth — OTA process, version channels, pre-flight checks, and recovery.
+last_updated: 2026-07-07
+description: Update your radio firmware over Bluetooth or USB — OTA process, version channels, pre-flight checks, and recovery.
aliases:
- firmware
- update
@@ -17,7 +17,7 @@ Keep your Meshtastic radio up to date with the latest firmware for new features,
## Checking for Updates
-1. Navigate to **Settings → Firmware Update** or tap the firmware notification if shown.
+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.
2. The app checks for available firmware versions.
3. Available updates show the version number and changelog summary.
@@ -39,19 +39,26 @@ The most common update method for Android users:

-### USB Flashing
+### In-App USB Update
-For recovery or when OTA is unavailable:
+When your radio is connected over **USB/serial** (rather than Bluetooth), the Firmware Update screen offers **USB File Transfer**. The app reboots the device into DFU mode, then prompts you to save the `.uf2` file to the device's DFU drive using the system file picker. This option appears only on a USB/serial connection — it is not available over Bluetooth.
+
+> ℹ️ **nRF bootloader note:** Some devices (e.g. RAK WisBlock RAK4631) need their bootloader flashed with the vendor's serial DFU tool (such as `adafruit-nrfutil`) — copying the `.uf2` alone won't update the bootloader. The app surfaces a hint when this applies.
+
+### Other Flashing Options
+
+For recovery or when neither OTA nor in-app USB is available:
- Use the [Meshtastic Web Flasher](https://flasher.meshtastic.org)
- Or the [Meshtastic CLI tool](https://meshtastic.org/docs/getting-started/flashing-firmware) on desktop
## Version Channels
-| Canal | Description |
-| ------ | ------------------------------------------- |
-| Stable | Recommended for most users; tested releases |
-| Alpha | Preview releases; may contain bugs |
+| Canal | Description |
+| ------------- | -------------------------------------------------------------------------- |
+| Stable | Recommended for most users; tested releases |
+| Alpha | Preview releases; may contain bugs |
+| Fichier local | Flash a firmware file you select yourself, instead of a downloaded release |
## Pre-Update Checklist
@@ -73,7 +80,7 @@ Once the update succeeds:
- The radio will reboot automatically
- Bluetooth connection will re-establish
- Verify your settings are intact
-- Check the firmware version in **Settings → About**
+- Confirm the new version under **Currently Installed** on the Firmware Update screen — it's also shown on the node's detail page and the Connections screen

diff --git a/docs/fr-rFR/user/messages-and-channels.md b/docs/fr-rFR/user/messages-and-channels.md
index 06bf84d20..1c9693bfc 100644
--- a/docs/fr-rFR/user/messages-and-channels.md
+++ b/docs/fr-rFR/user/messages-and-channels.md
@@ -116,12 +116,16 @@ You can search the full history of any conversation directly from the chat scree

-> 💡 **Tip:** Search is full-text and stays within the conversation you opened it from — it doesn't search across other channels or contacts. Matching is fast even on long histories because messages are indexed locally.
+> 💡 **Tip:** Search is full-text and stays within the conversation you opened it from — it doesn't search across other channels or contacts. It matches against the messages already stored on your device, so it works fully offline.
### Message Bubbles
Messages appear as chat bubbles — sent messages on the right, received messages on the left. Each bubble shows the sender, timestamp, and delivery status. Messages with replies include a quoted preview of the original message above the response.
+### Mentions
+
+Type `@` while composing to mention a node — a picker suggests matching contacts as you type. In a received message, a mention appears as a highlighted chip showing the node's name; tap it to jump straight to that node's detail page.
+
### Reactions
React to messages with emoji:
@@ -143,6 +147,7 @@ Long-press any message to access:
- **Copy** — copy message text to clipboard
- **Reply** — quote the message in your response
- **React** — add an emoji reaction
+- **Translate** — translate a received message into your device language and toggle between the original and translated text (Google Play build only; uses on-device translation)
- **Delete** — remove a message you sent (local deletion)
### Message Priority
diff --git a/docs/fr-rFR/user/mqtt.md b/docs/fr-rFR/user/mqtt.md
index 694b2fc97..35b3c048e 100644
--- a/docs/fr-rFR/user/mqtt.md
+++ b/docs/fr-rFR/user/mqtt.md
@@ -56,6 +56,8 @@ A gateway node with internet access (WiFi or Ethernet) publishes mesh messages t
The community maintains a public broker at `mqtt.meshtastic.org`. This is intended for general use and testing.
+> ℹ️ **Note:** Connections to `mqtt.meshtastic.org` always use TLS (port 8883), even if the TLS toggle is off. For any other broker, TLS is used only when you enable it (port 8883 with TLS, 1883 without).
+
> 🔒 **Privacy:** Messages on the public broker are readable by anyone subscribed. Always use channel encryption for private communications.
### Private Broker
diff --git a/docs/fr-rFR/user/node-metrics.md b/docs/fr-rFR/user/node-metrics.md
index c35d2323d..5efe80dba 100644
--- a/docs/fr-rFR/user/node-metrics.md
+++ b/docs/fr-rFR/user/node-metrics.md
@@ -55,12 +55,15 @@ The BME680 **IAQ (Indoor Air Quality)** index is a single 0–500+ value derived
Air Quality is a dedicated metrics view for nodes equipped with a particulate-matter and/or CO₂ sensor. It is **separate from the BME680 IAQ reading** listed under Environment Metrics — IAQ is a single gas-resistance-derived index, while the Air Quality view charts the underlying particulate and CO₂ measurements.
-| Metric | Unit | Description |
-| --------------------- | ----- | ---------------------------------------------------- |
-| PM1.0 | µg/m³ | Particulate matter up to 1.0 micron |
-| PM2.5 | µg/m³ | Particulate matter up to 2.5 microns |
-| PM10 | µg/m³ | Particulate matter up to 10 microns |
-| CO₂ | ppm | Carbon dioxide concentration |
+| Metric | Unit | Description |
+| --------------------- | --------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| PM1.0 | µg/m³ | Particulate matter up to 1.0 micron |
+| PM2.5 | µg/m³ | Particulate matter up to 2.5 microns |
+| PM10 | µg/m³ | Particulate matter up to 10 microns |
+| AQI | EPA index | EPA **NowCast** AQI computed from your recent PM2.5 history, with a color-coded severity label. Shown next to PM2.5 once enough readings have accumulated. |
+| CO₂ | ppm | Carbon dioxide concentration |
+| CO₂ temperature | °C / °F | Temperature reported by the CO₂ sensor itself (e.g. SCD4x) |
+| CO₂ humidity | % | Relative humidity reported by the CO₂ sensor |
CO₂ readings are color-coded by severity to make air quality easy to read at a glance:
@@ -98,12 +101,12 @@ Radio signal quality information:
Signal quality is rated from **SNR relative to the active LoRa modem preset's demodulation floor**, not from fixed thresholds — a given SNR means different things on different presets (e.g. −15 dB is fine on LongSlow but unusable on ShortFast). RSSI is shown but is not part of the rating. Letting `limit` be the preset's SNR limit:
-| Quality | Criteria |
-| -------- | ------------------------------------------------ |
-| Bon | SNR above the preset's limit |
-| Passable | within 5.5 dB below the limit |
-| Mauvais | within 7.5 dB below the limit |
-| Aucun | more than 7.5 dB below the limit |
+| Quality | Criteria |
+| -------- | ------------------------------------------------------------------------- |
+| Bon | SNR above the preset's limit |
+| Passable | up to 5.5 dB below the limit |
+| Mauvais | between 5.5 dB and 7.5 dB below the limit |
+| Aucun | more than 7.5 dB below the limit |
See [Understanding the Signal Meter](signal-meter) for the full explanation.
diff --git a/docs/fr-rFR/user/settings-radio-user.md b/docs/fr-rFR/user/settings-radio-user.md
index bce6f2142..0941403b3 100644
--- a/docs/fr-rFR/user/settings-radio-user.md
+++ b/docs/fr-rFR/user/settings-radio-user.md
@@ -74,6 +74,8 @@ After modifying settings, tap **Save** to write the configuration to your radio.
| ~~Long Slow~~ | ~30 km | 0.18 kbps | −17.5 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.
+
#### Choosing a Modem Preset
The modem preset controls the fundamental tradeoff between **range** and **data rate**:
diff --git a/docs/fr-rFR/user/signal-meter.md b/docs/fr-rFR/user/signal-meter.md
index ba05fadf4..321112e49 100644
--- a/docs/fr-rFR/user/signal-meter.md
+++ b/docs/fr-rFR/user/signal-meter.md
@@ -52,12 +52,12 @@ The app rates your signal quality (None, Bad, Fair, or Good) from **SNR alone, m
Because the rating is relative to the preset limit, the _same_ SNR can rate differently on different presets — `-15 dB` is healthy on `LongSlow` but unusable on `ShortFast`. Letting `limit` be the active preset's SNR Limit, here is how the app picks the bars (or color):
-| Level | Bars | Criteria | Meaning |
-| -------- | ---- | ------------------------------------ | ---------------------------------------------------------------------------------------- |
-| Bon | 3 | SNR **above** the preset's `limit` | Signal is comfortably above the demodulation floor — healthy connection. |
-| Passable | 2 | within `5.5 dB` below the `limit` | Decodable, but getting close to the floor. |
-| Mauvais | 1 | within `7.5 dB` below the `limit` | At the very edge of what the preset can recover. |
-| Aucun | 0 | more than `7.5 dB` below the `limit` | Below the floor — transmission lost to noise. |
+| Level | Bars | Criteria | Meaning |
+| -------- | ---- | ----------------------------------------------- | ---------------------------------------------------------------------------------------- |
+| Bon | 3 | SNR **above** the preset's `limit` | Signal is comfortably above the demodulation floor — healthy connection. |
+| Passable | 2 | up to `5.5 dB` below the `limit` | Decodable, but getting close to the floor. |
+| Mauvais | 1 | between `5.5 dB` and `7.5 dB` below the `limit` | At the very edge of what the preset can recover. |
+| Aucun | 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.
diff --git a/docs/fr-rFR/user/telemetry-and-sensors.md b/docs/fr-rFR/user/telemetry-and-sensors.md
index bdbcd71e7..a30064ebb 100644
--- a/docs/fr-rFR/user/telemetry-and-sensors.md
+++ b/docs/fr-rFR/user/telemetry-and-sensors.md
@@ -103,7 +103,9 @@ Nodes with particulate matter or CO₂ sensors report air quality data:
| PM10 | µg/m³ | Coarse particulate matter |
| CO₂ | ppm | Carbon dioxide concentration |
-The CO₂ reading is color-coded by severity (Good → Stuffy → Poor → Unsafe → Evacuate). See [Node Metrics — Air Quality](node-metrics#air-quality-metrics) for the exact ppm bands and colors.
+CO₂ sensors such as the SCD4x also report their own temperature and humidity, which appear alongside the readings above. From PM2.5 history the app additionally derives an **EPA NowCast AQI** value.
+
+The CO₂ reading is color-coded by severity (Good → Stuffy → Poor → Unsafe → Evacuate). See [Node Metrics — Air Quality](node-metrics#air-quality-metrics) for the exact ppm bands, colors, and AQI detail.
Air quality data can be viewed as info cards on the node detail screen, charted over time, and exported to CSV.
diff --git a/docs/fr-rFR/user/translate.md b/docs/fr-rFR/user/translate.md
index 25aa4693c..70c966fed 100644
--- a/docs/fr-rFR/user/translate.md
+++ b/docs/fr-rFR/user/translate.md
@@ -18,11 +18,11 @@ Contributing translations helps make Meshtastic accessible to a wider audience.
## What Gets Translated
-| Resource | Source Location | Notes |
-| ----------------- | ------------------------------------- | ---------------------------------------------------------------------- |
-| UI strings | `composeResources/values/strings.xml` | Buttons, labels, messages, and all user-visible text |
-| User Guide pages | `docs/user/*.md` | In-app documentation shown in Help & Documentation |
-| Fastlane metadata | `fastlane/metadata/android/en-US/` | App Store listing title, description, and changelogs |
+| Resource | Source Location | Notes |
+| ----------------- | ------------------------------------------------------------------- | ---------------------------------------------------------------------- |
+| UI strings | `core/resources/src/commonMain/composeResources/values/strings.xml` | Buttons, labels, messages, and all user-visible text |
+| User Guide pages | `docs/en/user/*.md` | In-app documentation shown in Help & Documentation |
+| Fastlane metadata | `fastlane/metadata/android/en-US/` | App Store listing title, description, and changelogs |
> ⚠️ **Note:** Developer Guide pages are English-only. Code-focused documentation targeting contributors is not translated.
diff --git a/docs/fr-rFR/user/units-and-locale.md b/docs/fr-rFR/user/units-and-locale.md
index 2b050d9af..0074c0fe1 100644
--- a/docs/fr-rFR/user/units-and-locale.md
+++ b/docs/fr-rFR/user/units-and-locale.md
@@ -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 uses the `MetricFormatter` utility to convert and display values in whatever unit system your device's locale specifies.
+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.
On Android, your measurement preferences are determined by your system **Language & Region** settings. On Desktop (JVM), the app uses the JVM's default `Locale`.
@@ -115,12 +115,13 @@ On Android, your measurement system (metric vs imperial) is tied to your region
2. Change your **Region** or **Measurement units** preference
3. Return to Meshtastic — values update immediately
-> 💡 **Tip:** The app uses `MetricFormatter` from `core:common`. All measurement formatting is handled by a shared KMP utility that respects your platform's locale. Developers adding new measurement displays should use `MetricFormatter` rather than hard-coding unit conversions.
+> 💡 **Tip:** All measurement formatting is handled centrally and respects your platform's locale, so units stay consistent everywhere in the app.
## Related Topics
- [Node Metrics](node-metrics) — where temperature, distance, and sensor values are displayed
- [Telemetry & Sensors](telemetry-and-sensors) — the sensors that produce these measurements
+- [Measurement & Formatting](../developer/measurement) — developer reference for the formatting utilities
- [Settings — Radio & User](settings-radio-user) — region setting that drives unit selection
---
diff --git a/docs/ga-rIE/user/android-auto.md b/docs/ga-rIE/user/android-auto.md
index aeb53435d..b9ec6a2af 100644
--- a/docs/ga-rIE/user/android-auto.md
+++ b/docs/ga-rIE/user/android-auto.md
@@ -2,7 +2,7 @@
title: Android Auto
parent: User Guide
nav_order: 18
-last_updated: 2026-06-11
+last_updated: 2026-07-07
description: Use Meshtastic hands-free on an Android Auto head unit — read messages aloud, reply by voice, and check nodes and mesh status while driving.
aliases:
- android-auto
@@ -17,9 +17,11 @@ Meshtastic integrates with Android Auto so you can stay in touch with your mesh
> ⚠️ **Note:** Android Auto support is available on **Google-flavor Android builds only**. It is not included in the F-Droid build, and it is not available on Desktop or iOS.
+> ℹ️ **What ships today:** The Google Play build provides **notification-only** car messaging — incoming messages are announced on the head unit and you reply through its notification controls. The full tabbed **Messages / Nodes / Status** experience described below is a beta built on the Android Car App Library (Google's templated car UI is currently restricted to Closed/Internal Play tracks), so it appears only in builds compiled with `-PenableCarTemplates=true`. The rest of this page documents that beta experience.
+
## Overview
-When your phone is connected to an Android Auto head unit (or the Desktop Head Unit emulator used for development), Meshtastic appears as a messaging app built with the Android Car App Library. The car interface presents a tabbed Home screen optimized for driving-safe, glanceable use:
+When your phone is connected to an Android Auto head unit (or the Desktop Head Unit emulator used for development), the beta build presents Meshtastic as a messaging app built with the Android Car App Library, with a tabbed Home screen optimized for driving-safe, glanceable use:
- **Messages** — recent conversations, with hands-free reading and replies.
- **Nodes** — the mesh node list, with a node-detail view.
diff --git a/docs/ga-rIE/user/connections.md b/docs/ga-rIE/user/connections.md
index e5f9581a9..40e72b2bd 100644
--- a/docs/ga-rIE/user/connections.md
+++ b/docs/ga-rIE/user/connections.md
@@ -23,7 +23,7 @@ Bluetooth Low Energy is the default and most common connection method on Android
1. Ensure your Meshtastic radio is powered on and in pairing mode.
2. Open the app and navigate to the **Connect** tab.
-3. Tap **Scan for Devices** — nearby Meshtastic radios will appear.
+3. Tap **Scan for Bluetooth devices** — nearby Meshtastic radios will appear.
4. Select your device from the list.
5. Accept the Bluetooth pairing prompt if shown.
diff --git a/docs/ga-rIE/user/desktop.md b/docs/ga-rIE/user/desktop.md
index e69b44554..2ac96feda 100644
--- a/docs/ga-rIE/user/desktop.md
+++ b/docs/ga-rIE/user/desktop.md
@@ -2,7 +2,7 @@
title: Desktop App
parent: User Guide
nav_order: 14
-last_updated: 2026-06-11
+last_updated: 2026-07-07
description: Install and use the Meshtastic Desktop app on Linux, macOS, and Windows — connections, feature parity, and keyboard shortcuts.
aliases:
- desktop
@@ -60,19 +60,19 @@ Bluetooth Low Energy is supported on Desktop via the [Kable](https://github.com/
## Feature Parity
-| Feature | Android | Desktop | Notes |
-| -------------------------------------------- | ------- | ------- | ---------------------------------------------- |
-| Messaging | ✓ | ✓ | Full parity |
-| Node List | ✓ | ✓ | Full parity |
-| Map | ✓ | ✓ | Full parity |
-| Settings | ✓ | ✓ | Full parity |
-| Bluetooth (BLE) | ✓ | ✓ | Via Kable on desktop |
-| Firmware Update OTA | ✓ | ✗ | Use web flasher |
-| Notifications | ✓ | ✓ | Native OS notifications |
-| Widgets | ✓ | ✗ | Android-only |
-| Android Auto | ✓ | ✗ | Android-only — not available on Desktop or iOS |
-| AI Assistant (Chirpy) | ✓\* | ✗ | Google flavor Android only |
-| App Functions (system AI) | ✓† | ✗ | Google flavor Android only |
+| Feature | Android | Desktop | Notes |
+| -------------------------------------------- | ------- | ------- | -------------------------------------------------------------------------- |
+| Messaging | ✓ | ✓ | Full parity |
+| Node List | ✓ | ✓ | Full parity |
+| 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 |
+| Notifications | ✓ | ✓ | Native OS notifications |
+| Widgets | ✓ | ✗ | Android-only |
+| Android Auto | ✓ | ✗ | Android-only — not available on Desktop or iOS |
+| AI Assistant (Chirpy) | ✓\* | ✗ | Google flavor Android only |
+| App Functions (system AI) | ✓† | ✗ | Google flavor Android only |
\*Chirpy AI requires Android 14+ on Google flavor builds with supported hardware.
@@ -84,14 +84,17 @@ The Desktop app uses the same Compose Multiplatform UI with adaptations for larg
### Keyboard Shortcuts
-| Shortcut | Action |
-| ------------------- | ---------------------- |
-| **⌘Q** / **Ctrl+Q** | Quit the application |
-| **⌘,** / **Ctrl+,** | Open Settings |
-| **⌘1** / **Ctrl+1** | Switch to Messages tab |
-| **⌘2** / **Ctrl+2** | Switch to Nodes tab |
-| **⌘3** / **Ctrl+3** | Switch to Map tab |
-| **⌘4** / **Ctrl+4** | Switch to Connect tab |
+All shortcuts use the **Meta** key — that's ⌘ (Command) on macOS and the Super / Windows key on Linux and Windows. (`Ctrl` is not bound.)
+
+| Shortcut | Action |
+| ---------- | ---------------------- |
+| **Meta+Q** | Quit the application |
+| **Meta+,** | Open Settings |
+| **Meta+1** | Switch to Messages tab |
+| **Meta+2** | Switch to Nodes tab |
+| **Meta+3** | Switch to Map tab |
+| **Meta+4** | Switch to Connect tab |
+| **Meta+/** | Open About |
### Window & System Tray
@@ -123,7 +126,6 @@ Individual doc pages render with full formatting:
```bash
git clone https://github.com/meshtastic/Meshtastic-Android.git
cd Meshtastic-Android
-git submodule update --init
./gradlew :desktopApp:run
```
@@ -134,7 +136,8 @@ Requirements:
## Known Limitations
-- No OTA firmware updates (use web flasher)
+- 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
- BLE bonding is not yet supported on desktop (pairing works without bonding)
@@ -142,7 +145,7 @@ Requirements:
## Related Topics
- [Connections](connections) — connection methods overview
-- [Firmware Updates](firmware) — use the [Web Flasher](https://flasher.meshtastic.org) for desktop firmware updates
+- [Firmware Updates](firmware) — in-app USB update on desktop, or the [Web Flasher](https://flasher.meshtastic.org)
---
diff --git a/docs/ga-rIE/user/discovery.md b/docs/ga-rIE/user/discovery.md
index eb2620666..be88dd5e4 100644
--- a/docs/ga-rIE/user/discovery.md
+++ b/docs/ga-rIE/user/discovery.md
@@ -44,7 +44,6 @@ Before starting, configure these controls:
The **Start** button stays disabled — with an explanation of why — until the scan can run. Common reasons it's disabled:
- The device is **not connected**.
-- The current channel is using the **default channel key** (use a unique key first — see [Messages & Channels](messages-and-channels)).
- **No presets** have been selected to scan.
- The selected preset uses **2.4 GHz**, which your hardware doesn't support.
diff --git a/docs/ga-rIE/user/firmware.md b/docs/ga-rIE/user/firmware.md
index 31c7b877a..eaebaa559 100644
--- a/docs/ga-rIE/user/firmware.md
+++ b/docs/ga-rIE/user/firmware.md
@@ -2,8 +2,8 @@
title: Firmware Updates
parent: User Guide
nav_order: 13
-last_updated: 2026-05-13
-description: Update your radio firmware over Bluetooth — OTA process, version channels, pre-flight checks, and recovery.
+last_updated: 2026-07-07
+description: Update your radio firmware over Bluetooth or USB — OTA process, version channels, pre-flight checks, and recovery.
aliases:
- firmware
- update
@@ -17,7 +17,7 @@ Keep your Meshtastic radio up to date with the latest firmware for new features,
## Checking for Updates
-1. Navigate to **Settings → Firmware Update** or tap the firmware notification if shown.
+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.
2. The app checks for available firmware versions.
3. Available updates show the version number and changelog summary.
@@ -39,19 +39,26 @@ The most common update method for Android users:

-### USB Flashing
+### In-App USB Update
-For recovery or when OTA is unavailable:
+When your radio is connected over **USB/serial** (rather than Bluetooth), the Firmware Update screen offers **USB File Transfer**. The app reboots the device into DFU mode, then prompts you to save the `.uf2` file to the device's DFU drive using the system file picker. This option appears only on a USB/serial connection — it is not available over Bluetooth.
+
+> ℹ️ **nRF bootloader note:** Some devices (e.g. RAK WisBlock RAK4631) need their bootloader flashed with the vendor's serial DFU tool (such as `adafruit-nrfutil`) — copying the `.uf2` alone won't update the bootloader. The app surfaces a hint when this applies.
+
+### Other Flashing Options
+
+For recovery or when neither OTA nor in-app USB is available:
- Use the [Meshtastic Web Flasher](https://flasher.meshtastic.org)
- Or the [Meshtastic CLI tool](https://meshtastic.org/docs/getting-started/flashing-firmware) on desktop
## Version Channels
-| Cainéal | Cur síos |
-| ------- | ------------------------------------------- |
-| Stable | Recommended for most users; tested releases |
-| Alpha | Preview releases; may contain bugs |
+| Cainéal | Cur síos |
+| ---------- | -------------------------------------------------------------------------- |
+| Stable | Recommended for most users; tested releases |
+| Alpha | Preview releases; may contain bugs |
+| Local File | Flash a firmware file you select yourself, instead of a downloaded release |
## Pre-Update Checklist
@@ -73,7 +80,7 @@ Once the update succeeds:
- The radio will reboot automatically
- Bluetooth connection will re-establish
- Verify your settings are intact
-- Check the firmware version in **Settings → About**
+- Confirm the new version under **Currently Installed** on the Firmware Update screen — it's also shown on the node's detail page and the Connections screen

diff --git a/docs/ga-rIE/user/messages-and-channels.md b/docs/ga-rIE/user/messages-and-channels.md
index b1ee365aa..f4949109b 100644
--- a/docs/ga-rIE/user/messages-and-channels.md
+++ b/docs/ga-rIE/user/messages-and-channels.md
@@ -116,12 +116,16 @@ You can search the full history of any conversation directly from the chat scree

-> 💡 **Tip:** Search is full-text and stays within the conversation you opened it from — it doesn't search across other channels or contacts. Matching is fast even on long histories because messages are indexed locally.
+> 💡 **Tip:** Search is full-text and stays within the conversation you opened it from — it doesn't search across other channels or contacts. It matches against the messages already stored on your device, so it works fully offline.
### Message Bubbles
Messages appear as chat bubbles — sent messages on the right, received messages on the left. Each bubble shows the sender, timestamp, and delivery status. Messages with replies include a quoted preview of the original message above the response.
+### Mentions
+
+Type `@` while composing to mention a node — a picker suggests matching contacts as you type. In a received message, a mention appears as a highlighted chip showing the node's name; tap it to jump straight to that node's detail page.
+
### Reactions
React to messages with emoji:
@@ -143,6 +147,7 @@ Long-press any message to access:
- **Copy** — copy message text to clipboard
- **Reply** — quote the message in your response
- **React** — add an emoji reaction
+- **Translate** — translate a received message into your device language and toggle between the original and translated text (Google Play build only; uses on-device translation)
- **Delete** — remove a message you sent (local deletion)
### Message Priority
diff --git a/docs/ga-rIE/user/mqtt.md b/docs/ga-rIE/user/mqtt.md
index 59180312f..49506c0c7 100644
--- a/docs/ga-rIE/user/mqtt.md
+++ b/docs/ga-rIE/user/mqtt.md
@@ -56,6 +56,8 @@ A gateway node with internet access (WiFi or Ethernet) publishes mesh messages t
The community maintains a public broker at `mqtt.meshtastic.org`. This is intended for general use and testing.
+> ℹ️ **Note:** Connections to `mqtt.meshtastic.org` always use TLS (port 8883), even if the TLS toggle is off. For any other broker, TLS is used only when you enable it (port 8883 with TLS, 1883 without).
+
> 🔒 **Privacy:** Messages on the public broker are readable by anyone subscribed. Always use channel encryption for private communications.
### Private Broker
diff --git a/docs/ga-rIE/user/node-metrics.md b/docs/ga-rIE/user/node-metrics.md
index a926e4858..b7647b826 100644
--- a/docs/ga-rIE/user/node-metrics.md
+++ b/docs/ga-rIE/user/node-metrics.md
@@ -55,12 +55,15 @@ The BME680 **IAQ (Indoor Air Quality)** index is a single 0–500+ value derived
Air Quality is a dedicated metrics view for nodes equipped with a particulate-matter and/or CO₂ sensor. It is **separate from the BME680 IAQ reading** listed under Environment Metrics — IAQ is a single gas-resistance-derived index, while the Air Quality view charts the underlying particulate and CO₂ measurements.
-| Metric | Unit | Cur síos |
-| --------------------- | ----- | ---------------------------------------------------- |
-| PM1.0 | µg/m³ | Particulate matter up to 1.0 micron |
-| PM2.5 | µg/m³ | Particulate matter up to 2.5 microns |
-| PM10 | µg/m³ | Particulate matter up to 10 microns |
-| CO₂ | ppm | Carbon dioxide concentration |
+| Metric | Unit | Cur síos |
+| --------------------- | --------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| PM1.0 | µg/m³ | Particulate matter up to 1.0 micron |
+| PM2.5 | µg/m³ | Particulate matter up to 2.5 microns |
+| PM10 | µg/m³ | Particulate matter up to 10 microns |
+| AQI | EPA index | EPA **NowCast** AQI computed from your recent PM2.5 history, with a color-coded severity label. Shown next to PM2.5 once enough readings have accumulated. |
+| CO₂ | ppm | Carbon dioxide concentration |
+| CO₂ temperature | °C / °F | Temperature reported by the CO₂ sensor itself (e.g. SCD4x) |
+| CO₂ humidity | % | Relative humidity reported by the CO₂ sensor |
CO₂ readings are color-coded by severity to make air quality easy to read at a glance:
@@ -98,12 +101,12 @@ Radio signal quality information:
Signal quality is rated from **SNR relative to the active LoRa modem preset's demodulation floor**, not from fixed thresholds — a given SNR means different things on different presets (e.g. −15 dB is fine on LongSlow but unusable on ShortFast). RSSI is shown but is not part of the rating. Letting `limit` be the preset's SNR limit:
-| Quality | Criteria |
-| ---------------- | ------------------------------------------------ |
-| Maith | SNR above the preset's limit |
-| Ceart go leor | within 5.5 dB below the limit |
-| Go dona | within 7.5 dB below the limit |
-| Ní dhéanfaidh sé | more than 7.5 dB below the limit |
+| Quality | Criteria |
+| ---------------- | ------------------------------------------------------------------------- |
+| Maith | SNR above the preset's limit |
+| Ceart go leor | up to 5.5 dB below the limit |
+| Go dona | between 5.5 dB and 7.5 dB below the limit |
+| Ní dhéanfaidh sé | more than 7.5 dB below the limit |
See [Understanding the Signal Meter](signal-meter) for the full explanation.
diff --git a/docs/ga-rIE/user/settings-radio-user.md b/docs/ga-rIE/user/settings-radio-user.md
index 3c1fd15a8..88e7f9fad 100644
--- a/docs/ga-rIE/user/settings-radio-user.md
+++ b/docs/ga-rIE/user/settings-radio-user.md
@@ -74,6 +74,8 @@ After modifying settings, tap **Save** to write the configuration to your radio.
| ~~Long Slow~~ | ~30 km | 0.18 kbps | −17.5 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.
+
#### Choosing a Modem Preset
The modem preset controls the fundamental tradeoff between **range** and **data rate**:
diff --git a/docs/ga-rIE/user/signal-meter.md b/docs/ga-rIE/user/signal-meter.md
index fd9d09f45..e570e961e 100644
--- a/docs/ga-rIE/user/signal-meter.md
+++ b/docs/ga-rIE/user/signal-meter.md
@@ -52,12 +52,12 @@ The app rates your signal quality (None, Bad, Fair, or Good) from **SNR alone, m
Because the rating is relative to the preset limit, the _same_ SNR can rate differently on different presets — `-15 dB` is healthy on `LongSlow` but unusable on `ShortFast`. Letting `limit` be the active preset's SNR Limit, here is how the app picks the bars (or color):
-| Level | Bars | Criteria | Meaning |
-| ---------------- | ---- | ------------------------------------ | ---------------------------------------------------------------------------------------- |
-| Maith | 3 | SNR **above** the preset's `limit` | Signal is comfortably above the demodulation floor — healthy connection. |
-| Ceart go leor | 2 | within `5.5 dB` below the `limit` | Decodable, but getting close to the floor. |
-| Go dona | 1 | within `7.5 dB` below the `limit` | At the very edge of what the preset can recover. |
-| Ní dhéanfaidh sé | 0 | more than `7.5 dB` below the `limit` | Below the floor — transmission lost to noise. |
+| Level | Bars | Criteria | Meaning |
+| ---------------- | ---- | ----------------------------------------------- | ---------------------------------------------------------------------------------------- |
+| Maith | 3 | SNR **above** the preset's `limit` | Signal is comfortably above the demodulation floor — healthy connection. |
+| Ceart go leor | 2 | up to `5.5 dB` below the `limit` | Decodable, but getting close to the floor. |
+| Go dona | 1 | between `5.5 dB` and `7.5 dB` below the `limit` | At the very edge of what the preset can recover. |
+| Ní dhéanfaidh sé | 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.
diff --git a/docs/ga-rIE/user/telemetry-and-sensors.md b/docs/ga-rIE/user/telemetry-and-sensors.md
index 987abc322..29976b727 100644
--- a/docs/ga-rIE/user/telemetry-and-sensors.md
+++ b/docs/ga-rIE/user/telemetry-and-sensors.md
@@ -103,7 +103,9 @@ Nodes with particulate matter or CO₂ sensors report air quality data:
| PM10 | µg/m³ | Coarse particulate matter |
| CO₂ | ppm | Carbon dioxide concentration |
-The CO₂ reading is color-coded by severity (Good → Stuffy → Poor → Unsafe → Evacuate). See [Node Metrics — Air Quality](node-metrics#air-quality-metrics) for the exact ppm bands and colors.
+CO₂ sensors such as the SCD4x also report their own temperature and humidity, which appear alongside the readings above. From PM2.5 history the app additionally derives an **EPA NowCast AQI** value.
+
+The CO₂ reading is color-coded by severity (Good → Stuffy → Poor → Unsafe → Evacuate). See [Node Metrics — Air Quality](node-metrics#air-quality-metrics) for the exact ppm bands, colors, and AQI detail.
Air quality data can be viewed as info cards on the node detail screen, charted over time, and exported to CSV.
diff --git a/docs/ga-rIE/user/translate.md b/docs/ga-rIE/user/translate.md
index 25aa4693c..70c966fed 100644
--- a/docs/ga-rIE/user/translate.md
+++ b/docs/ga-rIE/user/translate.md
@@ -18,11 +18,11 @@ Contributing translations helps make Meshtastic accessible to a wider audience.
## What Gets Translated
-| Resource | Source Location | Notes |
-| ----------------- | ------------------------------------- | ---------------------------------------------------------------------- |
-| UI strings | `composeResources/values/strings.xml` | Buttons, labels, messages, and all user-visible text |
-| User Guide pages | `docs/user/*.md` | In-app documentation shown in Help & Documentation |
-| Fastlane metadata | `fastlane/metadata/android/en-US/` | App Store listing title, description, and changelogs |
+| Resource | Source Location | Notes |
+| ----------------- | ------------------------------------------------------------------- | ---------------------------------------------------------------------- |
+| UI strings | `core/resources/src/commonMain/composeResources/values/strings.xml` | Buttons, labels, messages, and all user-visible text |
+| User Guide pages | `docs/en/user/*.md` | In-app documentation shown in Help & Documentation |
+| Fastlane metadata | `fastlane/metadata/android/en-US/` | App Store listing title, description, and changelogs |
> ⚠️ **Note:** Developer Guide pages are English-only. Code-focused documentation targeting contributors is not translated.
diff --git a/docs/ga-rIE/user/units-and-locale.md b/docs/ga-rIE/user/units-and-locale.md
index 6c82b8b2e..ab4556caf 100644
--- a/docs/ga-rIE/user/units-and-locale.md
+++ b/docs/ga-rIE/user/units-and-locale.md
@@ -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 uses the `MetricFormatter` utility to convert and display values in whatever unit system your device's locale specifies.
+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.
On Android, your measurement preferences are determined by your system **Language & Region** settings. On Desktop (JVM), the app uses the JVM's default `Locale`.
@@ -115,12 +115,13 @@ On Android, your measurement system (metric vs imperial) is tied to your region
2. Change your **Region** or **Measurement units** preference
3. Return to Meshtastic — values update immediately
-> 💡 **Tip:** The app uses `MetricFormatter` from `core:common`. All measurement formatting is handled by a shared KMP utility that respects your platform's locale. Developers adding new measurement displays should use `MetricFormatter` rather than hard-coding unit conversions.
+> 💡 **Tip:** All measurement formatting is handled centrally and respects your platform's locale, so units stay consistent everywhere in the app.
## Related Topics
- [Node Metrics](node-metrics) — where temperature, distance, and sensor values are displayed
- [Telemetry & Sensors](telemetry-and-sensors) — the sensors that produce these measurements
+- [Measurement & Formatting](../developer/measurement) — developer reference for the formatting utilities
- [Settings — Radio & User](settings-radio-user) — region setting that drives unit selection
---
diff --git a/docs/gl-rES/user/android-auto.md b/docs/gl-rES/user/android-auto.md
index aeb53435d..b9ec6a2af 100644
--- a/docs/gl-rES/user/android-auto.md
+++ b/docs/gl-rES/user/android-auto.md
@@ -2,7 +2,7 @@
title: Android Auto
parent: User Guide
nav_order: 18
-last_updated: 2026-06-11
+last_updated: 2026-07-07
description: Use Meshtastic hands-free on an Android Auto head unit — read messages aloud, reply by voice, and check nodes and mesh status while driving.
aliases:
- android-auto
@@ -17,9 +17,11 @@ Meshtastic integrates with Android Auto so you can stay in touch with your mesh
> ⚠️ **Note:** Android Auto support is available on **Google-flavor Android builds only**. It is not included in the F-Droid build, and it is not available on Desktop or iOS.
+> ℹ️ **What ships today:** The Google Play build provides **notification-only** car messaging — incoming messages are announced on the head unit and you reply through its notification controls. The full tabbed **Messages / Nodes / Status** experience described below is a beta built on the Android Car App Library (Google's templated car UI is currently restricted to Closed/Internal Play tracks), so it appears only in builds compiled with `-PenableCarTemplates=true`. The rest of this page documents that beta experience.
+
## Overview
-When your phone is connected to an Android Auto head unit (or the Desktop Head Unit emulator used for development), Meshtastic appears as a messaging app built with the Android Car App Library. The car interface presents a tabbed Home screen optimized for driving-safe, glanceable use:
+When your phone is connected to an Android Auto head unit (or the Desktop Head Unit emulator used for development), the beta build presents Meshtastic as a messaging app built with the Android Car App Library, with a tabbed Home screen optimized for driving-safe, glanceable use:
- **Messages** — recent conversations, with hands-free reading and replies.
- **Nodes** — the mesh node list, with a node-detail view.
diff --git a/docs/gl-rES/user/connections.md b/docs/gl-rES/user/connections.md
index f528c0411..ce7d1128f 100644
--- a/docs/gl-rES/user/connections.md
+++ b/docs/gl-rES/user/connections.md
@@ -23,7 +23,7 @@ Bluetooth Low Energy is the default and most common connection method on Android
1. Ensure your Meshtastic radio is powered on and in pairing mode.
2. Open the app and navigate to the **Connect** tab.
-3. Tap **Scan for Devices** — nearby Meshtastic radios will appear.
+3. Tap **Scan for Bluetooth devices** — nearby Meshtastic radios will appear.
4. Select your device from the list.
5. Accept the Bluetooth pairing prompt if shown.
diff --git a/docs/gl-rES/user/desktop.md b/docs/gl-rES/user/desktop.md
index e69b44554..2ac96feda 100644
--- a/docs/gl-rES/user/desktop.md
+++ b/docs/gl-rES/user/desktop.md
@@ -2,7 +2,7 @@
title: Desktop App
parent: User Guide
nav_order: 14
-last_updated: 2026-06-11
+last_updated: 2026-07-07
description: Install and use the Meshtastic Desktop app on Linux, macOS, and Windows — connections, feature parity, and keyboard shortcuts.
aliases:
- desktop
@@ -60,19 +60,19 @@ Bluetooth Low Energy is supported on Desktop via the [Kable](https://github.com/
## Feature Parity
-| Feature | Android | Desktop | Notes |
-| -------------------------------------------- | ------- | ------- | ---------------------------------------------- |
-| Messaging | ✓ | ✓ | Full parity |
-| Node List | ✓ | ✓ | Full parity |
-| Map | ✓ | ✓ | Full parity |
-| Settings | ✓ | ✓ | Full parity |
-| Bluetooth (BLE) | ✓ | ✓ | Via Kable on desktop |
-| Firmware Update OTA | ✓ | ✗ | Use web flasher |
-| Notifications | ✓ | ✓ | Native OS notifications |
-| Widgets | ✓ | ✗ | Android-only |
-| Android Auto | ✓ | ✗ | Android-only — not available on Desktop or iOS |
-| AI Assistant (Chirpy) | ✓\* | ✗ | Google flavor Android only |
-| App Functions (system AI) | ✓† | ✗ | Google flavor Android only |
+| Feature | Android | Desktop | Notes |
+| -------------------------------------------- | ------- | ------- | -------------------------------------------------------------------------- |
+| Messaging | ✓ | ✓ | Full parity |
+| Node List | ✓ | ✓ | Full parity |
+| 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 |
+| Notifications | ✓ | ✓ | Native OS notifications |
+| Widgets | ✓ | ✗ | Android-only |
+| Android Auto | ✓ | ✗ | Android-only — not available on Desktop or iOS |
+| AI Assistant (Chirpy) | ✓\* | ✗ | Google flavor Android only |
+| App Functions (system AI) | ✓† | ✗ | Google flavor Android only |
\*Chirpy AI requires Android 14+ on Google flavor builds with supported hardware.
@@ -84,14 +84,17 @@ The Desktop app uses the same Compose Multiplatform UI with adaptations for larg
### Keyboard Shortcuts
-| Shortcut | Action |
-| ------------------- | ---------------------- |
-| **⌘Q** / **Ctrl+Q** | Quit the application |
-| **⌘,** / **Ctrl+,** | Open Settings |
-| **⌘1** / **Ctrl+1** | Switch to Messages tab |
-| **⌘2** / **Ctrl+2** | Switch to Nodes tab |
-| **⌘3** / **Ctrl+3** | Switch to Map tab |
-| **⌘4** / **Ctrl+4** | Switch to Connect tab |
+All shortcuts use the **Meta** key — that's ⌘ (Command) on macOS and the Super / Windows key on Linux and Windows. (`Ctrl` is not bound.)
+
+| Shortcut | Action |
+| ---------- | ---------------------- |
+| **Meta+Q** | Quit the application |
+| **Meta+,** | Open Settings |
+| **Meta+1** | Switch to Messages tab |
+| **Meta+2** | Switch to Nodes tab |
+| **Meta+3** | Switch to Map tab |
+| **Meta+4** | Switch to Connect tab |
+| **Meta+/** | Open About |
### Window & System Tray
@@ -123,7 +126,6 @@ Individual doc pages render with full formatting:
```bash
git clone https://github.com/meshtastic/Meshtastic-Android.git
cd Meshtastic-Android
-git submodule update --init
./gradlew :desktopApp:run
```
@@ -134,7 +136,8 @@ Requirements:
## Known Limitations
-- No OTA firmware updates (use web flasher)
+- 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
- BLE bonding is not yet supported on desktop (pairing works without bonding)
@@ -142,7 +145,7 @@ Requirements:
## Related Topics
- [Connections](connections) — connection methods overview
-- [Firmware Updates](firmware) — use the [Web Flasher](https://flasher.meshtastic.org) for desktop firmware updates
+- [Firmware Updates](firmware) — in-app USB update on desktop, or the [Web Flasher](https://flasher.meshtastic.org)
---
diff --git a/docs/gl-rES/user/discovery.md b/docs/gl-rES/user/discovery.md
index a018c98c4..ffb93959f 100644
--- a/docs/gl-rES/user/discovery.md
+++ b/docs/gl-rES/user/discovery.md
@@ -44,7 +44,6 @@ Before starting, configure these controls:
The **Start** button stays disabled — with an explanation of why — until the scan can run. Common reasons it's disabled:
- The device is **not connected**.
-- The current channel is using the **default channel key** (use a unique key first — see [Messages & Channels](messages-and-channels)).
- **No presets** have been selected to scan.
- The selected preset uses **2.4 GHz**, which your hardware doesn't support.
diff --git a/docs/gl-rES/user/firmware.md b/docs/gl-rES/user/firmware.md
index 5f53c0c19..22c4589b0 100644
--- a/docs/gl-rES/user/firmware.md
+++ b/docs/gl-rES/user/firmware.md
@@ -2,8 +2,8 @@
title: Firmware Updates
parent: User Guide
nav_order: 13
-last_updated: 2026-05-13
-description: Update your radio firmware over Bluetooth — OTA process, version channels, pre-flight checks, and recovery.
+last_updated: 2026-07-07
+description: Update your radio firmware over Bluetooth or USB — OTA process, version channels, pre-flight checks, and recovery.
aliases:
- firmware
- update
@@ -17,7 +17,7 @@ Keep your Meshtastic radio up to date with the latest firmware for new features,
## Checking for Updates
-1. Navigate to **Settings → Firmware Update** or tap the firmware notification if shown.
+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.
2. The app checks for available firmware versions.
3. Available updates show the version number and changelog summary.
@@ -39,19 +39,26 @@ The most common update method for Android users:

-### USB Flashing
+### In-App USB Update
-For recovery or when OTA is unavailable:
+When your radio is connected over **USB/serial** (rather than Bluetooth), the Firmware Update screen offers **USB File Transfer**. The app reboots the device into DFU mode, then prompts you to save the `.uf2` file to the device's DFU drive using the system file picker. This option appears only on a USB/serial connection — it is not available over Bluetooth.
+
+> ℹ️ **nRF bootloader note:** Some devices (e.g. RAK WisBlock RAK4631) need their bootloader flashed with the vendor's serial DFU tool (such as `adafruit-nrfutil`) — copying the `.uf2` alone won't update the bootloader. The app surfaces a hint when this applies.
+
+### Other Flashing Options
+
+For recovery or when neither OTA nor in-app USB is available:
- Use the [Meshtastic Web Flasher](https://flasher.meshtastic.org)
- Or the [Meshtastic CLI tool](https://meshtastic.org/docs/getting-started/flashing-firmware) on desktop
## Version Channels
-| Canle | Descrición |
-| ------ | ------------------------------------------- |
-| Stable | Recommended for most users; tested releases |
-| Alpha | Preview releases; may contain bugs |
+| Canle | Descrición |
+| ---------- | -------------------------------------------------------------------------- |
+| Stable | Recommended for most users; tested releases |
+| Alpha | Preview releases; may contain bugs |
+| Local File | Flash a firmware file you select yourself, instead of a downloaded release |
## Pre-Update Checklist
@@ -73,7 +80,7 @@ Once the update succeeds:
- The radio will reboot automatically
- Bluetooth connection will re-establish
- Verify your settings are intact
-- Check the firmware version in **Settings → About**
+- Confirm the new version under **Currently Installed** on the Firmware Update screen — it's also shown on the node's detail page and the Connections screen

diff --git a/docs/gl-rES/user/messages-and-channels.md b/docs/gl-rES/user/messages-and-channels.md
index 15763e478..f25be948f 100644
--- a/docs/gl-rES/user/messages-and-channels.md
+++ b/docs/gl-rES/user/messages-and-channels.md
@@ -116,12 +116,16 @@ You can search the full history of any conversation directly from the chat scree

-> 💡 **Tip:** Search is full-text and stays within the conversation you opened it from — it doesn't search across other channels or contacts. Matching is fast even on long histories because messages are indexed locally.
+> 💡 **Tip:** Search is full-text and stays within the conversation you opened it from — it doesn't search across other channels or contacts. It matches against the messages already stored on your device, so it works fully offline.
### Message Bubbles
Messages appear as chat bubbles — sent messages on the right, received messages on the left. Each bubble shows the sender, timestamp, and delivery status. Messages with replies include a quoted preview of the original message above the response.
+### Mentions
+
+Type `@` while composing to mention a node — a picker suggests matching contacts as you type. In a received message, a mention appears as a highlighted chip showing the node's name; tap it to jump straight to that node's detail page.
+
### Reactions
React to messages with emoji:
@@ -143,6 +147,7 @@ Long-press any message to access:
- **Copy** — copy message text to clipboard
- **Reply** — quote the message in your response
- **React** — add an emoji reaction
+- **Translate** — translate a received message into your device language and toggle between the original and translated text (Google Play build only; uses on-device translation)
- **Delete** — remove a message you sent (local deletion)
### Message Priority
diff --git a/docs/gl-rES/user/mqtt.md b/docs/gl-rES/user/mqtt.md
index b4bc495ad..ddde2653a 100644
--- a/docs/gl-rES/user/mqtt.md
+++ b/docs/gl-rES/user/mqtt.md
@@ -56,6 +56,8 @@ A gateway node with internet access (WiFi or Ethernet) publishes mesh messages t
The community maintains a public broker at `mqtt.meshtastic.org`. This is intended for general use and testing.
+> ℹ️ **Note:** Connections to `mqtt.meshtastic.org` always use TLS (port 8883), even if the TLS toggle is off. For any other broker, TLS is used only when you enable it (port 8883 with TLS, 1883 without).
+
> 🔒 **Privacy:** Messages on the public broker are readable by anyone subscribed. Always use channel encryption for private communications.
### Private Broker
diff --git a/docs/gl-rES/user/node-metrics.md b/docs/gl-rES/user/node-metrics.md
index b2f87f690..ca43a3a7d 100644
--- a/docs/gl-rES/user/node-metrics.md
+++ b/docs/gl-rES/user/node-metrics.md
@@ -55,12 +55,15 @@ The BME680 **IAQ (Indoor Air Quality)** index is a single 0–500+ value derived
Air Quality is a dedicated metrics view for nodes equipped with a particulate-matter and/or CO₂ sensor. It is **separate from the BME680 IAQ reading** listed under Environment Metrics — IAQ is a single gas-resistance-derived index, while the Air Quality view charts the underlying particulate and CO₂ measurements.
-| Metric | Unit | Descrición |
-| --------------------- | ----- | ---------------------------------------------------- |
-| PM1.0 | µg/m³ | Particulate matter up to 1.0 micron |
-| PM2.5 | µg/m³ | Particulate matter up to 2.5 microns |
-| PM10 | µg/m³ | Particulate matter up to 10 microns |
-| CO₂ | ppm | Carbon dioxide concentration |
+| Metric | Unit | Descrición |
+| --------------------- | --------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| PM1.0 | µg/m³ | Particulate matter up to 1.0 micron |
+| PM2.5 | µg/m³ | Particulate matter up to 2.5 microns |
+| PM10 | µg/m³ | Particulate matter up to 10 microns |
+| AQI | EPA index | EPA **NowCast** AQI computed from your recent PM2.5 history, with a color-coded severity label. Shown next to PM2.5 once enough readings have accumulated. |
+| CO₂ | ppm | Carbon dioxide concentration |
+| CO₂ temperature | °C / °F | Temperature reported by the CO₂ sensor itself (e.g. SCD4x) |
+| CO₂ humidity | % | Relative humidity reported by the CO₂ sensor |
CO₂ readings are color-coded by severity to make air quality easy to read at a glance:
@@ -98,12 +101,12 @@ Radio signal quality information:
Signal quality is rated from **SNR relative to the active LoRa modem preset's demodulation floor**, not from fixed thresholds — a given SNR means different things on different presets (e.g. −15 dB is fine on LongSlow but unusable on ShortFast). RSSI is shown but is not part of the rating. Letting `limit` be the preset's SNR limit:
-| Quality | Criteria |
-| ------- | ------------------------------------------------ |
-| Good | SNR above the preset's limit |
-| Fair | within 5.5 dB below the limit |
-| Bad | within 7.5 dB below the limit |
-| None | more than 7.5 dB below the limit |
+| 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 |
+| None | more than 7.5 dB below the limit |
See [Understanding the Signal Meter](signal-meter) for the full explanation.
diff --git a/docs/gl-rES/user/settings-radio-user.md b/docs/gl-rES/user/settings-radio-user.md
index 7e6e22129..ada66457f 100644
--- a/docs/gl-rES/user/settings-radio-user.md
+++ b/docs/gl-rES/user/settings-radio-user.md
@@ -74,6 +74,8 @@ After modifying settings, tap **Save** to write the configuration to your radio.
| ~~Long Slow~~ | ~30 km | 0.18 kbps | −17.5 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.
+
#### Choosing a Modem Preset
The modem preset controls the fundamental tradeoff between **range** and **data rate**:
diff --git a/docs/gl-rES/user/signal-meter.md b/docs/gl-rES/user/signal-meter.md
index 43f3aeae7..71741a4c2 100644
--- a/docs/gl-rES/user/signal-meter.md
+++ b/docs/gl-rES/user/signal-meter.md
@@ -52,12 +52,12 @@ The app rates your signal quality (None, Bad, Fair, or Good) from **SNR alone, m
Because the rating is relative to the preset limit, the _same_ SNR can rate differently on different presets — `-15 dB` is healthy on `LongSlow` but unusable on `ShortFast`. Letting `limit` be the active preset's SNR Limit, here is how the app picks the bars (or color):
-| Level | Bars | Criteria | Meaning |
-| ----- | ---- | ------------------------------------ | ---------------------------------------------------------------------------------------- |
-| Good | 3 | SNR **above** the preset's `limit` | Signal is comfortably above the demodulation floor — healthy connection. |
-| Fair | 2 | within `5.5 dB` below the `limit` | Decodable, but getting close to the floor. |
-| Bad | 1 | within `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. |
+| 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. |
+| 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.
diff --git a/docs/gl-rES/user/telemetry-and-sensors.md b/docs/gl-rES/user/telemetry-and-sensors.md
index c2c4e8d52..e2a0c9ea4 100644
--- a/docs/gl-rES/user/telemetry-and-sensors.md
+++ b/docs/gl-rES/user/telemetry-and-sensors.md
@@ -103,7 +103,9 @@ Nodes with particulate matter or CO₂ sensors report air quality data:
| PM10 | µg/m³ | Coarse particulate matter |
| CO₂ | ppm | Carbon dioxide concentration |
-The CO₂ reading is color-coded by severity (Good → Stuffy → Poor → Unsafe → Evacuate). See [Node Metrics — Air Quality](node-metrics#air-quality-metrics) for the exact ppm bands and colors.
+CO₂ sensors such as the SCD4x also report their own temperature and humidity, which appear alongside the readings above. From PM2.5 history the app additionally derives an **EPA NowCast AQI** value.
+
+The CO₂ reading is color-coded by severity (Good → Stuffy → Poor → Unsafe → Evacuate). See [Node Metrics — Air Quality](node-metrics#air-quality-metrics) for the exact ppm bands, colors, and AQI detail.
Air quality data can be viewed as info cards on the node detail screen, charted over time, and exported to CSV.
diff --git a/docs/gl-rES/user/translate.md b/docs/gl-rES/user/translate.md
index 25aa4693c..70c966fed 100644
--- a/docs/gl-rES/user/translate.md
+++ b/docs/gl-rES/user/translate.md
@@ -18,11 +18,11 @@ Contributing translations helps make Meshtastic accessible to a wider audience.
## What Gets Translated
-| Resource | Source Location | Notes |
-| ----------------- | ------------------------------------- | ---------------------------------------------------------------------- |
-| UI strings | `composeResources/values/strings.xml` | Buttons, labels, messages, and all user-visible text |
-| User Guide pages | `docs/user/*.md` | In-app documentation shown in Help & Documentation |
-| Fastlane metadata | `fastlane/metadata/android/en-US/` | App Store listing title, description, and changelogs |
+| Resource | Source Location | Notes |
+| ----------------- | ------------------------------------------------------------------- | ---------------------------------------------------------------------- |
+| UI strings | `core/resources/src/commonMain/composeResources/values/strings.xml` | Buttons, labels, messages, and all user-visible text |
+| User Guide pages | `docs/en/user/*.md` | In-app documentation shown in Help & Documentation |
+| Fastlane metadata | `fastlane/metadata/android/en-US/` | App Store listing title, description, and changelogs |
> ⚠️ **Note:** Developer Guide pages are English-only. Code-focused documentation targeting contributors is not translated.
diff --git a/docs/gl-rES/user/units-and-locale.md b/docs/gl-rES/user/units-and-locale.md
index feaf6f610..2ccaeb96e 100644
--- a/docs/gl-rES/user/units-and-locale.md
+++ b/docs/gl-rES/user/units-and-locale.md
@@ -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 uses the `MetricFormatter` utility to convert and display values in whatever unit system your device's locale specifies.
+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.
On Android, your measurement preferences are determined by your system **Language & Region** settings. On Desktop (JVM), the app uses the JVM's default `Locale`.
@@ -115,12 +115,13 @@ On Android, your measurement system (metric vs imperial) is tied to your region
2. Change your **Region** or **Measurement units** preference
3. Return to Meshtastic — values update immediately
-> 💡 **Tip:** The app uses `MetricFormatter` from `core:common`. All measurement formatting is handled by a shared KMP utility that respects your platform's locale. Developers adding new measurement displays should use `MetricFormatter` rather than hard-coding unit conversions.
+> 💡 **Tip:** All measurement formatting is handled centrally and respects your platform's locale, so units stay consistent everywhere in the app.
## Related Topics
- [Node Metrics](node-metrics) — where temperature, distance, and sensor values are displayed
- [Telemetry & Sensors](telemetry-and-sensors) — the sensors that produce these measurements
+- [Measurement & Formatting](../developer/measurement) — developer reference for the formatting utilities
- [Settings — Radio & User](settings-radio-user) — region setting that drives unit selection
---
diff --git a/docs/hr-rHR/user/android-auto.md b/docs/hr-rHR/user/android-auto.md
index aeb53435d..b9ec6a2af 100644
--- a/docs/hr-rHR/user/android-auto.md
+++ b/docs/hr-rHR/user/android-auto.md
@@ -2,7 +2,7 @@
title: Android Auto
parent: User Guide
nav_order: 18
-last_updated: 2026-06-11
+last_updated: 2026-07-07
description: Use Meshtastic hands-free on an Android Auto head unit — read messages aloud, reply by voice, and check nodes and mesh status while driving.
aliases:
- android-auto
@@ -17,9 +17,11 @@ Meshtastic integrates with Android Auto so you can stay in touch with your mesh
> ⚠️ **Note:** Android Auto support is available on **Google-flavor Android builds only**. It is not included in the F-Droid build, and it is not available on Desktop or iOS.
+> ℹ️ **What ships today:** The Google Play build provides **notification-only** car messaging — incoming messages are announced on the head unit and you reply through its notification controls. The full tabbed **Messages / Nodes / Status** experience described below is a beta built on the Android Car App Library (Google's templated car UI is currently restricted to Closed/Internal Play tracks), so it appears only in builds compiled with `-PenableCarTemplates=true`. The rest of this page documents that beta experience.
+
## Overview
-When your phone is connected to an Android Auto head unit (or the Desktop Head Unit emulator used for development), Meshtastic appears as a messaging app built with the Android Car App Library. The car interface presents a tabbed Home screen optimized for driving-safe, glanceable use:
+When your phone is connected to an Android Auto head unit (or the Desktop Head Unit emulator used for development), the beta build presents Meshtastic as a messaging app built with the Android Car App Library, with a tabbed Home screen optimized for driving-safe, glanceable use:
- **Messages** — recent conversations, with hands-free reading and replies.
- **Nodes** — the mesh node list, with a node-detail view.
diff --git a/docs/hr-rHR/user/connections.md b/docs/hr-rHR/user/connections.md
index 84efe25be..1642bab4d 100644
--- a/docs/hr-rHR/user/connections.md
+++ b/docs/hr-rHR/user/connections.md
@@ -23,7 +23,7 @@ Bluetooth Low Energy is the default and most common connection method on Android
1. Ensure your Meshtastic radio is powered on and in pairing mode.
2. Open the app and navigate to the **Connect** tab.
-3. Tap **Scan for Devices** — nearby Meshtastic radios will appear.
+3. Tap **Scan for Bluetooth devices** — nearby Meshtastic radios will appear.
4. Select your device from the list.
5. Accept the Bluetooth pairing prompt if shown.
diff --git a/docs/hr-rHR/user/desktop.md b/docs/hr-rHR/user/desktop.md
index e69b44554..2ac96feda 100644
--- a/docs/hr-rHR/user/desktop.md
+++ b/docs/hr-rHR/user/desktop.md
@@ -2,7 +2,7 @@
title: Desktop App
parent: User Guide
nav_order: 14
-last_updated: 2026-06-11
+last_updated: 2026-07-07
description: Install and use the Meshtastic Desktop app on Linux, macOS, and Windows — connections, feature parity, and keyboard shortcuts.
aliases:
- desktop
@@ -60,19 +60,19 @@ Bluetooth Low Energy is supported on Desktop via the [Kable](https://github.com/
## Feature Parity
-| Feature | Android | Desktop | Notes |
-| -------------------------------------------- | ------- | ------- | ---------------------------------------------- |
-| Messaging | ✓ | ✓ | Full parity |
-| Node List | ✓ | ✓ | Full parity |
-| Map | ✓ | ✓ | Full parity |
-| Settings | ✓ | ✓ | Full parity |
-| Bluetooth (BLE) | ✓ | ✓ | Via Kable on desktop |
-| Firmware Update OTA | ✓ | ✗ | Use web flasher |
-| Notifications | ✓ | ✓ | Native OS notifications |
-| Widgets | ✓ | ✗ | Android-only |
-| Android Auto | ✓ | ✗ | Android-only — not available on Desktop or iOS |
-| AI Assistant (Chirpy) | ✓\* | ✗ | Google flavor Android only |
-| App Functions (system AI) | ✓† | ✗ | Google flavor Android only |
+| Feature | Android | Desktop | Notes |
+| -------------------------------------------- | ------- | ------- | -------------------------------------------------------------------------- |
+| Messaging | ✓ | ✓ | Full parity |
+| Node List | ✓ | ✓ | Full parity |
+| 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 |
+| Notifications | ✓ | ✓ | Native OS notifications |
+| Widgets | ✓ | ✗ | Android-only |
+| Android Auto | ✓ | ✗ | Android-only — not available on Desktop or iOS |
+| AI Assistant (Chirpy) | ✓\* | ✗ | Google flavor Android only |
+| App Functions (system AI) | ✓† | ✗ | Google flavor Android only |
\*Chirpy AI requires Android 14+ on Google flavor builds with supported hardware.
@@ -84,14 +84,17 @@ The Desktop app uses the same Compose Multiplatform UI with adaptations for larg
### Keyboard Shortcuts
-| Shortcut | Action |
-| ------------------- | ---------------------- |
-| **⌘Q** / **Ctrl+Q** | Quit the application |
-| **⌘,** / **Ctrl+,** | Open Settings |
-| **⌘1** / **Ctrl+1** | Switch to Messages tab |
-| **⌘2** / **Ctrl+2** | Switch to Nodes tab |
-| **⌘3** / **Ctrl+3** | Switch to Map tab |
-| **⌘4** / **Ctrl+4** | Switch to Connect tab |
+All shortcuts use the **Meta** key — that's ⌘ (Command) on macOS and the Super / Windows key on Linux and Windows. (`Ctrl` is not bound.)
+
+| Shortcut | Action |
+| ---------- | ---------------------- |
+| **Meta+Q** | Quit the application |
+| **Meta+,** | Open Settings |
+| **Meta+1** | Switch to Messages tab |
+| **Meta+2** | Switch to Nodes tab |
+| **Meta+3** | Switch to Map tab |
+| **Meta+4** | Switch to Connect tab |
+| **Meta+/** | Open About |
### Window & System Tray
@@ -123,7 +126,6 @@ Individual doc pages render with full formatting:
```bash
git clone https://github.com/meshtastic/Meshtastic-Android.git
cd Meshtastic-Android
-git submodule update --init
./gradlew :desktopApp:run
```
@@ -134,7 +136,8 @@ Requirements:
## Known Limitations
-- No OTA firmware updates (use web flasher)
+- 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
- BLE bonding is not yet supported on desktop (pairing works without bonding)
@@ -142,7 +145,7 @@ Requirements:
## Related Topics
- [Connections](connections) — connection methods overview
-- [Firmware Updates](firmware) — use the [Web Flasher](https://flasher.meshtastic.org) for desktop firmware updates
+- [Firmware Updates](firmware) — in-app USB update on desktop, or the [Web Flasher](https://flasher.meshtastic.org)
---
diff --git a/docs/hr-rHR/user/discovery.md b/docs/hr-rHR/user/discovery.md
index 9f3c97cc4..9d4e7ab33 100644
--- a/docs/hr-rHR/user/discovery.md
+++ b/docs/hr-rHR/user/discovery.md
@@ -44,7 +44,6 @@ Before starting, configure these controls:
The **Start** button stays disabled — with an explanation of why — until the scan can run. Common reasons it's disabled:
- The device is **not connected**.
-- The current channel is using the **default channel key** (use a unique key first — see [Messages & Channels](messages-and-channels)).
- **No presets** have been selected to scan.
- The selected preset uses **2.4 GHz**, which your hardware doesn't support.
diff --git a/docs/hr-rHR/user/firmware.md b/docs/hr-rHR/user/firmware.md
index 6c09a08a8..25510bfed 100644
--- a/docs/hr-rHR/user/firmware.md
+++ b/docs/hr-rHR/user/firmware.md
@@ -2,8 +2,8 @@
title: Firmware Updates
parent: User Guide
nav_order: 13
-last_updated: 2026-05-13
-description: Update your radio firmware over Bluetooth — OTA process, version channels, pre-flight checks, and recovery.
+last_updated: 2026-07-07
+description: Update your radio firmware over Bluetooth or USB — OTA process, version channels, pre-flight checks, and recovery.
aliases:
- firmware
- update
@@ -17,7 +17,7 @@ Keep your Meshtastic radio up to date with the latest firmware for new features,
## Checking for Updates
-1. Navigate to **Settings → Firmware Update** or tap the firmware notification if shown.
+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.
2. The app checks for available firmware versions.
3. Available updates show the version number and changelog summary.
@@ -39,19 +39,26 @@ The most common update method for Android users:

-### USB Flashing
+### In-App USB Update
-For recovery or when OTA is unavailable:
+When your radio is connected over **USB/serial** (rather than Bluetooth), the Firmware Update screen offers **USB File Transfer**. The app reboots the device into DFU mode, then prompts you to save the `.uf2` file to the device's DFU drive using the system file picker. This option appears only on a USB/serial connection — it is not available over Bluetooth.
+
+> ℹ️ **nRF bootloader note:** Some devices (e.g. RAK WisBlock RAK4631) need their bootloader flashed with the vendor's serial DFU tool (such as `adafruit-nrfutil`) — copying the `.uf2` alone won't update the bootloader. The app surfaces a hint when this applies.
+
+### Other Flashing Options
+
+For recovery or when neither OTA nor in-app USB is available:
- Use the [Meshtastic Web Flasher](https://flasher.meshtastic.org)
- Or the [Meshtastic CLI tool](https://meshtastic.org/docs/getting-started/flashing-firmware) on desktop
## Version Channels
-| Kanal | Opis |
-| ------ | ------------------------------------------- |
-| Stable | Recommended for most users; tested releases |
-| Alpha | Preview releases; may contain bugs |
+| Kanal | Opis |
+| ---------- | -------------------------------------------------------------------------- |
+| Stable | Recommended for most users; tested releases |
+| Alpha | Preview releases; may contain bugs |
+| Local File | Flash a firmware file you select yourself, instead of a downloaded release |
## Pre-Update Checklist
@@ -73,7 +80,7 @@ Once the update succeeds:
- The radio will reboot automatically
- Bluetooth connection will re-establish
- Verify your settings are intact
-- Check the firmware version in **Settings → About**
+- Confirm the new version under **Currently Installed** on the Firmware Update screen — it's also shown on the node's detail page and the Connections screen

diff --git a/docs/hr-rHR/user/messages-and-channels.md b/docs/hr-rHR/user/messages-and-channels.md
index 677d6ac2a..a4ca205e5 100644
--- a/docs/hr-rHR/user/messages-and-channels.md
+++ b/docs/hr-rHR/user/messages-and-channels.md
@@ -116,12 +116,16 @@ You can search the full history of any conversation directly from the chat scree

-> 💡 **Tip:** Search is full-text and stays within the conversation you opened it from — it doesn't search across other channels or contacts. Matching is fast even on long histories because messages are indexed locally.
+> 💡 **Tip:** Search is full-text and stays within the conversation you opened it from — it doesn't search across other channels or contacts. It matches against the messages already stored on your device, so it works fully offline.
### Message Bubbles
Messages appear as chat bubbles — sent messages on the right, received messages on the left. Each bubble shows the sender, timestamp, and delivery status. Messages with replies include a quoted preview of the original message above the response.
+### Mentions
+
+Type `@` while composing to mention a node — a picker suggests matching contacts as you type. In a received message, a mention appears as a highlighted chip showing the node's name; tap it to jump straight to that node's detail page.
+
### Reactions
React to messages with emoji:
@@ -143,6 +147,7 @@ Long-press any message to access:
- **Copy** — copy message text to clipboard
- **Reply** — quote the message in your response
- **React** — add an emoji reaction
+- **Translate** — translate a received message into your device language and toggle between the original and translated text (Google Play build only; uses on-device translation)
- **Delete** — remove a message you sent (local deletion)
### Message Priority
diff --git a/docs/hr-rHR/user/mqtt.md b/docs/hr-rHR/user/mqtt.md
index 206cf08e0..01f33f004 100644
--- a/docs/hr-rHR/user/mqtt.md
+++ b/docs/hr-rHR/user/mqtt.md
@@ -56,6 +56,8 @@ A gateway node with internet access (WiFi or Ethernet) publishes mesh messages t
The community maintains a public broker at `mqtt.meshtastic.org`. This is intended for general use and testing.
+> ℹ️ **Note:** Connections to `mqtt.meshtastic.org` always use TLS (port 8883), even if the TLS toggle is off. For any other broker, TLS is used only when you enable it (port 8883 with TLS, 1883 without).
+
> 🔒 **Privacy:** Messages on the public broker are readable by anyone subscribed. Always use channel encryption for private communications.
### Private Broker
diff --git a/docs/hr-rHR/user/node-metrics.md b/docs/hr-rHR/user/node-metrics.md
index 468c5d350..11ba44499 100644
--- a/docs/hr-rHR/user/node-metrics.md
+++ b/docs/hr-rHR/user/node-metrics.md
@@ -55,12 +55,15 @@ The BME680 **IAQ (Indoor Air Quality)** index is a single 0–500+ value derived
Air Quality is a dedicated metrics view for nodes equipped with a particulate-matter and/or CO₂ sensor. It is **separate from the BME680 IAQ reading** listed under Environment Metrics — IAQ is a single gas-resistance-derived index, while the Air Quality view charts the underlying particulate and CO₂ measurements.
-| Metric | Unit | Opis |
-| --------------------- | ----- | ---------------------------------------------------- |
-| PM1.0 | µg/m³ | Particulate matter up to 1.0 micron |
-| PM2.5 | µg/m³ | Particulate matter up to 2.5 microns |
-| PM10 | µg/m³ | Particulate matter up to 10 microns |
-| CO₂ | ppm | Carbon dioxide concentration |
+| Metric | Unit | Opis |
+| --------------------- | --------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| PM1.0 | µg/m³ | Particulate matter up to 1.0 micron |
+| PM2.5 | µg/m³ | Particulate matter up to 2.5 microns |
+| PM10 | µg/m³ | Particulate matter up to 10 microns |
+| AQI | EPA index | EPA **NowCast** AQI computed from your recent PM2.5 history, with a color-coded severity label. Shown next to PM2.5 once enough readings have accumulated. |
+| CO₂ | ppm | Carbon dioxide concentration |
+| CO₂ temperature | °C / °F | Temperature reported by the CO₂ sensor itself (e.g. SCD4x) |
+| CO₂ humidity | % | Relative humidity reported by the CO₂ sensor |
CO₂ readings are color-coded by severity to make air quality easy to read at a glance:
@@ -98,12 +101,12 @@ Radio signal quality information:
Signal quality is rated from **SNR relative to the active LoRa modem preset's demodulation floor**, not from fixed thresholds — a given SNR means different things on different presets (e.g. −15 dB is fine on LongSlow but unusable on ShortFast). RSSI is shown but is not part of the rating. Letting `limit` be the preset's SNR limit:
-| Quality | Criteria |
-| ------- | ------------------------------------------------ |
-| Good | SNR above the preset's limit |
-| Fair | within 5.5 dB below the limit |
-| Bad | within 7.5 dB below the limit |
-| None | more than 7.5 dB below the limit |
+| 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 |
+| None | more than 7.5 dB below the limit |
See [Understanding the Signal Meter](signal-meter) for the full explanation.
diff --git a/docs/hr-rHR/user/settings-radio-user.md b/docs/hr-rHR/user/settings-radio-user.md
index 84a220488..63b61691c 100644
--- a/docs/hr-rHR/user/settings-radio-user.md
+++ b/docs/hr-rHR/user/settings-radio-user.md
@@ -74,6 +74,8 @@ After modifying settings, tap **Save** to write the configuration to your radio.
| ~~Long Slow~~ | ~30 km | 0.18 kbps | −17.5 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.
+
#### Choosing a Modem Preset
The modem preset controls the fundamental tradeoff between **range** and **data rate**:
diff --git a/docs/hr-rHR/user/signal-meter.md b/docs/hr-rHR/user/signal-meter.md
index 43f3aeae7..71741a4c2 100644
--- a/docs/hr-rHR/user/signal-meter.md
+++ b/docs/hr-rHR/user/signal-meter.md
@@ -52,12 +52,12 @@ The app rates your signal quality (None, Bad, Fair, or Good) from **SNR alone, m
Because the rating is relative to the preset limit, the _same_ SNR can rate differently on different presets — `-15 dB` is healthy on `LongSlow` but unusable on `ShortFast`. Letting `limit` be the active preset's SNR Limit, here is how the app picks the bars (or color):
-| Level | Bars | Criteria | Meaning |
-| ----- | ---- | ------------------------------------ | ---------------------------------------------------------------------------------------- |
-| Good | 3 | SNR **above** the preset's `limit` | Signal is comfortably above the demodulation floor — healthy connection. |
-| Fair | 2 | within `5.5 dB` below the `limit` | Decodable, but getting close to the floor. |
-| Bad | 1 | within `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. |
+| 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. |
+| 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.
diff --git a/docs/hr-rHR/user/telemetry-and-sensors.md b/docs/hr-rHR/user/telemetry-and-sensors.md
index 02d55a127..9cfc11457 100644
--- a/docs/hr-rHR/user/telemetry-and-sensors.md
+++ b/docs/hr-rHR/user/telemetry-and-sensors.md
@@ -103,7 +103,9 @@ Nodes with particulate matter or CO₂ sensors report air quality data:
| PM10 | µg/m³ | Coarse particulate matter |
| CO₂ | ppm | Carbon dioxide concentration |
-The CO₂ reading is color-coded by severity (Good → Stuffy → Poor → Unsafe → Evacuate). See [Node Metrics — Air Quality](node-metrics#air-quality-metrics) for the exact ppm bands and colors.
+CO₂ sensors such as the SCD4x also report their own temperature and humidity, which appear alongside the readings above. From PM2.5 history the app additionally derives an **EPA NowCast AQI** value.
+
+The CO₂ reading is color-coded by severity (Good → Stuffy → Poor → Unsafe → Evacuate). See [Node Metrics — Air Quality](node-metrics#air-quality-metrics) for the exact ppm bands, colors, and AQI detail.
Air quality data can be viewed as info cards on the node detail screen, charted over time, and exported to CSV.
diff --git a/docs/hr-rHR/user/translate.md b/docs/hr-rHR/user/translate.md
index 25aa4693c..70c966fed 100644
--- a/docs/hr-rHR/user/translate.md
+++ b/docs/hr-rHR/user/translate.md
@@ -18,11 +18,11 @@ Contributing translations helps make Meshtastic accessible to a wider audience.
## What Gets Translated
-| Resource | Source Location | Notes |
-| ----------------- | ------------------------------------- | ---------------------------------------------------------------------- |
-| UI strings | `composeResources/values/strings.xml` | Buttons, labels, messages, and all user-visible text |
-| User Guide pages | `docs/user/*.md` | In-app documentation shown in Help & Documentation |
-| Fastlane metadata | `fastlane/metadata/android/en-US/` | App Store listing title, description, and changelogs |
+| Resource | Source Location | Notes |
+| ----------------- | ------------------------------------------------------------------- | ---------------------------------------------------------------------- |
+| UI strings | `core/resources/src/commonMain/composeResources/values/strings.xml` | Buttons, labels, messages, and all user-visible text |
+| User Guide pages | `docs/en/user/*.md` | In-app documentation shown in Help & Documentation |
+| Fastlane metadata | `fastlane/metadata/android/en-US/` | App Store listing title, description, and changelogs |
> ⚠️ **Note:** Developer Guide pages are English-only. Code-focused documentation targeting contributors is not translated.
diff --git a/docs/hr-rHR/user/units-and-locale.md b/docs/hr-rHR/user/units-and-locale.md
index feaf6f610..2ccaeb96e 100644
--- a/docs/hr-rHR/user/units-and-locale.md
+++ b/docs/hr-rHR/user/units-and-locale.md
@@ -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 uses the `MetricFormatter` utility to convert and display values in whatever unit system your device's locale specifies.
+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.
On Android, your measurement preferences are determined by your system **Language & Region** settings. On Desktop (JVM), the app uses the JVM's default `Locale`.
@@ -115,12 +115,13 @@ On Android, your measurement system (metric vs imperial) is tied to your region
2. Change your **Region** or **Measurement units** preference
3. Return to Meshtastic — values update immediately
-> 💡 **Tip:** The app uses `MetricFormatter` from `core:common`. All measurement formatting is handled by a shared KMP utility that respects your platform's locale. Developers adding new measurement displays should use `MetricFormatter` rather than hard-coding unit conversions.
+> 💡 **Tip:** All measurement formatting is handled centrally and respects your platform's locale, so units stay consistent everywhere in the app.
## Related Topics
- [Node Metrics](node-metrics) — where temperature, distance, and sensor values are displayed
- [Telemetry & Sensors](telemetry-and-sensors) — the sensors that produce these measurements
+- [Measurement & Formatting](../developer/measurement) — developer reference for the formatting utilities
- [Settings — Radio & User](settings-radio-user) — region setting that drives unit selection
---
diff --git a/docs/ht-rHT/user/android-auto.md b/docs/ht-rHT/user/android-auto.md
index aeb53435d..b9ec6a2af 100644
--- a/docs/ht-rHT/user/android-auto.md
+++ b/docs/ht-rHT/user/android-auto.md
@@ -2,7 +2,7 @@
title: Android Auto
parent: User Guide
nav_order: 18
-last_updated: 2026-06-11
+last_updated: 2026-07-07
description: Use Meshtastic hands-free on an Android Auto head unit — read messages aloud, reply by voice, and check nodes and mesh status while driving.
aliases:
- android-auto
@@ -17,9 +17,11 @@ Meshtastic integrates with Android Auto so you can stay in touch with your mesh
> ⚠️ **Note:** Android Auto support is available on **Google-flavor Android builds only**. It is not included in the F-Droid build, and it is not available on Desktop or iOS.
+> ℹ️ **What ships today:** The Google Play build provides **notification-only** car messaging — incoming messages are announced on the head unit and you reply through its notification controls. The full tabbed **Messages / Nodes / Status** experience described below is a beta built on the Android Car App Library (Google's templated car UI is currently restricted to Closed/Internal Play tracks), so it appears only in builds compiled with `-PenableCarTemplates=true`. The rest of this page documents that beta experience.
+
## Overview
-When your phone is connected to an Android Auto head unit (or the Desktop Head Unit emulator used for development), Meshtastic appears as a messaging app built with the Android Car App Library. The car interface presents a tabbed Home screen optimized for driving-safe, glanceable use:
+When your phone is connected to an Android Auto head unit (or the Desktop Head Unit emulator used for development), the beta build presents Meshtastic as a messaging app built with the Android Car App Library, with a tabbed Home screen optimized for driving-safe, glanceable use:
- **Messages** — recent conversations, with hands-free reading and replies.
- **Nodes** — the mesh node list, with a node-detail view.
diff --git a/docs/ht-rHT/user/connections.md b/docs/ht-rHT/user/connections.md
index bdb63ae6a..29ba88e57 100644
--- a/docs/ht-rHT/user/connections.md
+++ b/docs/ht-rHT/user/connections.md
@@ -23,7 +23,7 @@ Bluetooth Low Energy is the default and most common connection method on Android
1. Ensure your Meshtastic radio is powered on and in pairing mode.
2. Open the app and navigate to the **Connect** tab.
-3. Tap **Scan for Devices** — nearby Meshtastic radios will appear.
+3. Tap **Scan for Bluetooth devices** — nearby Meshtastic radios will appear.
4. Select your device from the list.
5. Accept the Bluetooth pairing prompt if shown.
diff --git a/docs/ht-rHT/user/desktop.md b/docs/ht-rHT/user/desktop.md
index e69b44554..2ac96feda 100644
--- a/docs/ht-rHT/user/desktop.md
+++ b/docs/ht-rHT/user/desktop.md
@@ -2,7 +2,7 @@
title: Desktop App
parent: User Guide
nav_order: 14
-last_updated: 2026-06-11
+last_updated: 2026-07-07
description: Install and use the Meshtastic Desktop app on Linux, macOS, and Windows — connections, feature parity, and keyboard shortcuts.
aliases:
- desktop
@@ -60,19 +60,19 @@ Bluetooth Low Energy is supported on Desktop via the [Kable](https://github.com/
## Feature Parity
-| Feature | Android | Desktop | Notes |
-| -------------------------------------------- | ------- | ------- | ---------------------------------------------- |
-| Messaging | ✓ | ✓ | Full parity |
-| Node List | ✓ | ✓ | Full parity |
-| Map | ✓ | ✓ | Full parity |
-| Settings | ✓ | ✓ | Full parity |
-| Bluetooth (BLE) | ✓ | ✓ | Via Kable on desktop |
-| Firmware Update OTA | ✓ | ✗ | Use web flasher |
-| Notifications | ✓ | ✓ | Native OS notifications |
-| Widgets | ✓ | ✗ | Android-only |
-| Android Auto | ✓ | ✗ | Android-only — not available on Desktop or iOS |
-| AI Assistant (Chirpy) | ✓\* | ✗ | Google flavor Android only |
-| App Functions (system AI) | ✓† | ✗ | Google flavor Android only |
+| Feature | Android | Desktop | Notes |
+| -------------------------------------------- | ------- | ------- | -------------------------------------------------------------------------- |
+| Messaging | ✓ | ✓ | Full parity |
+| Node List | ✓ | ✓ | Full parity |
+| 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 |
+| Notifications | ✓ | ✓ | Native OS notifications |
+| Widgets | ✓ | ✗ | Android-only |
+| Android Auto | ✓ | ✗ | Android-only — not available on Desktop or iOS |
+| AI Assistant (Chirpy) | ✓\* | ✗ | Google flavor Android only |
+| App Functions (system AI) | ✓† | ✗ | Google flavor Android only |
\*Chirpy AI requires Android 14+ on Google flavor builds with supported hardware.
@@ -84,14 +84,17 @@ The Desktop app uses the same Compose Multiplatform UI with adaptations for larg
### Keyboard Shortcuts
-| Shortcut | Action |
-| ------------------- | ---------------------- |
-| **⌘Q** / **Ctrl+Q** | Quit the application |
-| **⌘,** / **Ctrl+,** | Open Settings |
-| **⌘1** / **Ctrl+1** | Switch to Messages tab |
-| **⌘2** / **Ctrl+2** | Switch to Nodes tab |
-| **⌘3** / **Ctrl+3** | Switch to Map tab |
-| **⌘4** / **Ctrl+4** | Switch to Connect tab |
+All shortcuts use the **Meta** key — that's ⌘ (Command) on macOS and the Super / Windows key on Linux and Windows. (`Ctrl` is not bound.)
+
+| Shortcut | Action |
+| ---------- | ---------------------- |
+| **Meta+Q** | Quit the application |
+| **Meta+,** | Open Settings |
+| **Meta+1** | Switch to Messages tab |
+| **Meta+2** | Switch to Nodes tab |
+| **Meta+3** | Switch to Map tab |
+| **Meta+4** | Switch to Connect tab |
+| **Meta+/** | Open About |
### Window & System Tray
@@ -123,7 +126,6 @@ Individual doc pages render with full formatting:
```bash
git clone https://github.com/meshtastic/Meshtastic-Android.git
cd Meshtastic-Android
-git submodule update --init
./gradlew :desktopApp:run
```
@@ -134,7 +136,8 @@ Requirements:
## Known Limitations
-- No OTA firmware updates (use web flasher)
+- 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
- BLE bonding is not yet supported on desktop (pairing works without bonding)
@@ -142,7 +145,7 @@ Requirements:
## Related Topics
- [Connections](connections) — connection methods overview
-- [Firmware Updates](firmware) — use the [Web Flasher](https://flasher.meshtastic.org) for desktop firmware updates
+- [Firmware Updates](firmware) — in-app USB update on desktop, or the [Web Flasher](https://flasher.meshtastic.org)
---
diff --git a/docs/ht-rHT/user/discovery.md b/docs/ht-rHT/user/discovery.md
index d7899595a..26e2baf33 100644
--- a/docs/ht-rHT/user/discovery.md
+++ b/docs/ht-rHT/user/discovery.md
@@ -44,7 +44,6 @@ Before starting, configure these controls:
The **Start** button stays disabled — with an explanation of why — until the scan can run. Common reasons it's disabled:
- The device is **not connected**.
-- The current channel is using the **default channel key** (use a unique key first — see [Messages & Channels](messages-and-channels)).
- **No presets** have been selected to scan.
- The selected preset uses **2.4 GHz**, which your hardware doesn't support.
diff --git a/docs/ht-rHT/user/firmware.md b/docs/ht-rHT/user/firmware.md
index 8c006a9ba..d1a653d8a 100644
--- a/docs/ht-rHT/user/firmware.md
+++ b/docs/ht-rHT/user/firmware.md
@@ -2,8 +2,8 @@
title: Firmware Updates
parent: User Guide
nav_order: 13
-last_updated: 2026-05-13
-description: Update your radio firmware over Bluetooth — OTA process, version channels, pre-flight checks, and recovery.
+last_updated: 2026-07-07
+description: Update your radio firmware over Bluetooth or USB — OTA process, version channels, pre-flight checks, and recovery.
aliases:
- firmware
- update
@@ -17,7 +17,7 @@ Keep your Meshtastic radio up to date with the latest firmware for new features,
## Checking for Updates
-1. Navigate to **Settings → Firmware Update** or tap the firmware notification if shown.
+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.
2. The app checks for available firmware versions.
3. Available updates show the version number and changelog summary.
@@ -39,19 +39,26 @@ The most common update method for Android users:

-### USB Flashing
+### In-App USB Update
-For recovery or when OTA is unavailable:
+When your radio is connected over **USB/serial** (rather than Bluetooth), the Firmware Update screen offers **USB File Transfer**. The app reboots the device into DFU mode, then prompts you to save the `.uf2` file to the device's DFU drive using the system file picker. This option appears only on a USB/serial connection — it is not available over Bluetooth.
+
+> ℹ️ **nRF bootloader note:** Some devices (e.g. RAK WisBlock RAK4631) need their bootloader flashed with the vendor's serial DFU tool (such as `adafruit-nrfutil`) — copying the `.uf2` alone won't update the bootloader. The app surfaces a hint when this applies.
+
+### Other Flashing Options
+
+For recovery or when neither OTA nor in-app USB is available:
- Use the [Meshtastic Web Flasher](https://flasher.meshtastic.org)
- Or the [Meshtastic CLI tool](https://meshtastic.org/docs/getting-started/flashing-firmware) on desktop
## Version Channels
-| kanal | Deskripsyon |
-| ------ | ------------------------------------------- |
-| Stable | Recommended for most users; tested releases |
-| Alpha | Preview releases; may contain bugs |
+| kanal | Deskripsyon |
+| ---------- | -------------------------------------------------------------------------- |
+| Stable | Recommended for most users; tested releases |
+| Alpha | Preview releases; may contain bugs |
+| Local File | Flash a firmware file you select yourself, instead of a downloaded release |
## Pre-Update Checklist
@@ -73,7 +80,7 @@ Once the update succeeds:
- The radio will reboot automatically
- Bluetooth connection will re-establish
- Verify your settings are intact
-- Check the firmware version in **Settings → About**
+- Confirm the new version under **Currently Installed** on the Firmware Update screen — it's also shown on the node's detail page and the Connections screen

diff --git a/docs/ht-rHT/user/messages-and-channels.md b/docs/ht-rHT/user/messages-and-channels.md
index 9d8ad2ae2..eec1bc371 100644
--- a/docs/ht-rHT/user/messages-and-channels.md
+++ b/docs/ht-rHT/user/messages-and-channels.md
@@ -116,12 +116,16 @@ You can search the full history of any conversation directly from the chat scree

-> 💡 **Tip:** Search is full-text and stays within the conversation you opened it from — it doesn't search across other channels or contacts. Matching is fast even on long histories because messages are indexed locally.
+> 💡 **Tip:** Search is full-text and stays within the conversation you opened it from — it doesn't search across other channels or contacts. It matches against the messages already stored on your device, so it works fully offline.
### Message Bubbles
Messages appear as chat bubbles — sent messages on the right, received messages on the left. Each bubble shows the sender, timestamp, and delivery status. Messages with replies include a quoted preview of the original message above the response.
+### Mentions
+
+Type `@` while composing to mention a node — a picker suggests matching contacts as you type. In a received message, a mention appears as a highlighted chip showing the node's name; tap it to jump straight to that node's detail page.
+
### Reactions
React to messages with emoji:
@@ -143,6 +147,7 @@ Long-press any message to access:
- **Copy** — copy message text to clipboard
- **Reply** — quote the message in your response
- **React** — add an emoji reaction
+- **Translate** — translate a received message into your device language and toggle between the original and translated text (Google Play build only; uses on-device translation)
- **Delete** — remove a message you sent (local deletion)
### Message Priority
diff --git a/docs/ht-rHT/user/mqtt.md b/docs/ht-rHT/user/mqtt.md
index 95105ecd2..6fcf93a42 100644
--- a/docs/ht-rHT/user/mqtt.md
+++ b/docs/ht-rHT/user/mqtt.md
@@ -56,6 +56,8 @@ A gateway node with internet access (WiFi or Ethernet) publishes mesh messages t
The community maintains a public broker at `mqtt.meshtastic.org`. This is intended for general use and testing.
+> ℹ️ **Note:** Connections to `mqtt.meshtastic.org` always use TLS (port 8883), even if the TLS toggle is off. For any other broker, TLS is used only when you enable it (port 8883 with TLS, 1883 without).
+
> 🔒 **Privacy:** Messages on the public broker are readable by anyone subscribed. Always use channel encryption for private communications.
### Private Broker
diff --git a/docs/ht-rHT/user/node-metrics.md b/docs/ht-rHT/user/node-metrics.md
index ff360a021..72419f735 100644
--- a/docs/ht-rHT/user/node-metrics.md
+++ b/docs/ht-rHT/user/node-metrics.md
@@ -55,12 +55,15 @@ The BME680 **IAQ (Indoor Air Quality)** index is a single 0–500+ value derived
Air Quality is a dedicated metrics view for nodes equipped with a particulate-matter and/or CO₂ sensor. It is **separate from the BME680 IAQ reading** listed under Environment Metrics — IAQ is a single gas-resistance-derived index, while the Air Quality view charts the underlying particulate and CO₂ measurements.
-| Metric | Unit | Deskripsyon |
-| --------------------- | ----- | ---------------------------------------------------- |
-| PM1.0 | µg/m³ | Particulate matter up to 1.0 micron |
-| PM2.5 | µg/m³ | Particulate matter up to 2.5 microns |
-| PM10 | µg/m³ | Particulate matter up to 10 microns |
-| CO₂ | ppm | Carbon dioxide concentration |
+| Metric | Unit | Deskripsyon |
+| --------------------- | --------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| PM1.0 | µg/m³ | Particulate matter up to 1.0 micron |
+| PM2.5 | µg/m³ | Particulate matter up to 2.5 microns |
+| PM10 | µg/m³ | Particulate matter up to 10 microns |
+| AQI | EPA index | EPA **NowCast** AQI computed from your recent PM2.5 history, with a color-coded severity label. Shown next to PM2.5 once enough readings have accumulated. |
+| CO₂ | ppm | Carbon dioxide concentration |
+| CO₂ temperature | °C / °F | Temperature reported by the CO₂ sensor itself (e.g. SCD4x) |
+| CO₂ humidity | % | Relative humidity reported by the CO₂ sensor |
CO₂ readings are color-coded by severity to make air quality easy to read at a glance:
@@ -98,12 +101,12 @@ Radio signal quality information:
Signal quality is rated from **SNR relative to the active LoRa modem preset's demodulation floor**, not from fixed thresholds — a given SNR means different things on different presets (e.g. −15 dB is fine on LongSlow but unusable on ShortFast). RSSI is shown but is not part of the rating. Letting `limit` be the preset's SNR limit:
-| Quality | Criteria |
-| ------- | ------------------------------------------------ |
-| Bon | SNR above the preset's limit |
-| Mwayen | within 5.5 dB below the limit |
-| Move | within 7.5 dB below the limit |
-| Pa gen | more than 7.5 dB below the limit |
+| Quality | Criteria |
+| ------- | ------------------------------------------------------------------------- |
+| Bon | SNR above the preset's limit |
+| Mwayen | up to 5.5 dB below the limit |
+| Move | between 5.5 dB and 7.5 dB below the limit |
+| Pa gen | more than 7.5 dB below the limit |
See [Understanding the Signal Meter](signal-meter) for the full explanation.
diff --git a/docs/ht-rHT/user/settings-radio-user.md b/docs/ht-rHT/user/settings-radio-user.md
index 28597fd27..c780a7597 100644
--- a/docs/ht-rHT/user/settings-radio-user.md
+++ b/docs/ht-rHT/user/settings-radio-user.md
@@ -74,6 +74,8 @@ After modifying settings, tap **Save** to write the configuration to your radio.
| ~~Long Slow~~ | ~30 km | 0.18 kbps | −17.5 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.
+
#### Choosing a Modem Preset
The modem preset controls the fundamental tradeoff between **range** and **data rate**:
diff --git a/docs/ht-rHT/user/signal-meter.md b/docs/ht-rHT/user/signal-meter.md
index 602e5aa6d..4b2b8676f 100644
--- a/docs/ht-rHT/user/signal-meter.md
+++ b/docs/ht-rHT/user/signal-meter.md
@@ -52,12 +52,12 @@ The app rates your signal quality (None, Bad, Fair, or Good) from **SNR alone, m
Because the rating is relative to the preset limit, the _same_ SNR can rate differently on different presets — `-15 dB` is healthy on `LongSlow` but unusable on `ShortFast`. Letting `limit` be the active preset's SNR Limit, here is how the app picks the bars (or color):
-| Level | Bars | Criteria | Meaning |
-| ------ | ---- | ------------------------------------ | ---------------------------------------------------------------------------------------- |
-| Bon | 3 | SNR **above** the preset's `limit` | Signal is comfortably above the demodulation floor — healthy connection. |
-| Mwayen | 2 | within `5.5 dB` below the `limit` | Decodable, but getting close to the floor. |
-| Move | 1 | within `7.5 dB` below the `limit` | At the very edge of what the preset can recover. |
-| Pa gen | 0 | more than `7.5 dB` below the `limit` | Below the floor — transmission lost to noise. |
+| Level | Bars | Criteria | Meaning |
+| ------ | ---- | ----------------------------------------------- | ---------------------------------------------------------------------------------------- |
+| Bon | 3 | SNR **above** the preset's `limit` | Signal is comfortably above the demodulation floor — healthy connection. |
+| Mwayen | 2 | up to `5.5 dB` below the `limit` | Decodable, but getting close to the floor. |
+| Move | 1 | between `5.5 dB` and `7.5 dB` below the `limit` | At the very edge of what the preset can recover. |
+| Pa gen | 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.
diff --git a/docs/ht-rHT/user/telemetry-and-sensors.md b/docs/ht-rHT/user/telemetry-and-sensors.md
index bc2228f36..6dbf9d8f7 100644
--- a/docs/ht-rHT/user/telemetry-and-sensors.md
+++ b/docs/ht-rHT/user/telemetry-and-sensors.md
@@ -103,7 +103,9 @@ Nodes with particulate matter or CO₂ sensors report air quality data:
| PM10 | µg/m³ | Coarse particulate matter |
| CO₂ | ppm | Carbon dioxide concentration |
-The CO₂ reading is color-coded by severity (Good → Stuffy → Poor → Unsafe → Evacuate). See [Node Metrics — Air Quality](node-metrics#air-quality-metrics) for the exact ppm bands and colors.
+CO₂ sensors such as the SCD4x also report their own temperature and humidity, which appear alongside the readings above. From PM2.5 history the app additionally derives an **EPA NowCast AQI** value.
+
+The CO₂ reading is color-coded by severity (Good → Stuffy → Poor → Unsafe → Evacuate). See [Node Metrics — Air Quality](node-metrics#air-quality-metrics) for the exact ppm bands, colors, and AQI detail.
Air quality data can be viewed as info cards on the node detail screen, charted over time, and exported to CSV.
diff --git a/docs/ht-rHT/user/translate.md b/docs/ht-rHT/user/translate.md
index 25aa4693c..70c966fed 100644
--- a/docs/ht-rHT/user/translate.md
+++ b/docs/ht-rHT/user/translate.md
@@ -18,11 +18,11 @@ Contributing translations helps make Meshtastic accessible to a wider audience.
## What Gets Translated
-| Resource | Source Location | Notes |
-| ----------------- | ------------------------------------- | ---------------------------------------------------------------------- |
-| UI strings | `composeResources/values/strings.xml` | Buttons, labels, messages, and all user-visible text |
-| User Guide pages | `docs/user/*.md` | In-app documentation shown in Help & Documentation |
-| Fastlane metadata | `fastlane/metadata/android/en-US/` | App Store listing title, description, and changelogs |
+| Resource | Source Location | Notes |
+| ----------------- | ------------------------------------------------------------------- | ---------------------------------------------------------------------- |
+| UI strings | `core/resources/src/commonMain/composeResources/values/strings.xml` | Buttons, labels, messages, and all user-visible text |
+| User Guide pages | `docs/en/user/*.md` | In-app documentation shown in Help & Documentation |
+| Fastlane metadata | `fastlane/metadata/android/en-US/` | App Store listing title, description, and changelogs |
> ⚠️ **Note:** Developer Guide pages are English-only. Code-focused documentation targeting contributors is not translated.
diff --git a/docs/ht-rHT/user/units-and-locale.md b/docs/ht-rHT/user/units-and-locale.md
index 342aac7ea..77b06e3a8 100644
--- a/docs/ht-rHT/user/units-and-locale.md
+++ b/docs/ht-rHT/user/units-and-locale.md
@@ -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 uses the `MetricFormatter` utility to convert and display values in whatever unit system your device's locale specifies.
+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.
On Android, your measurement preferences are determined by your system **Language & Region** settings. On Desktop (JVM), the app uses the JVM's default `Locale`.
@@ -115,12 +115,13 @@ On Android, your measurement system (metric vs imperial) is tied to your region
2. Change your **Region** or **Measurement units** preference
3. Return to Meshtastic — values update immediately
-> 💡 **Tip:** The app uses `MetricFormatter` from `core:common`. All measurement formatting is handled by a shared KMP utility that respects your platform's locale. Developers adding new measurement displays should use `MetricFormatter` rather than hard-coding unit conversions.
+> 💡 **Tip:** All measurement formatting is handled centrally and respects your platform's locale, so units stay consistent everywhere in the app.
## Related Topics
- [Node Metrics](node-metrics) — where temperature, distance, and sensor values are displayed
- [Telemetry & Sensors](telemetry-and-sensors) — the sensors that produce these measurements
+- [Measurement & Formatting](../developer/measurement) — developer reference for the formatting utilities
- [Settings — Radio & User](settings-radio-user) — region setting that drives unit selection
---
diff --git a/docs/hu-rHU/user/android-auto.md b/docs/hu-rHU/user/android-auto.md
index 56e8b050e..910beaa1e 100644
--- a/docs/hu-rHU/user/android-auto.md
+++ b/docs/hu-rHU/user/android-auto.md
@@ -2,7 +2,7 @@
title: Android Auto
parent: User Guide
nav_order: 18
-last_updated: 2026-06-11
+last_updated: 2026-07-07
description: Use Meshtastic hands-free on an Android Auto head unit — read messages aloud, reply by voice, and check nodes and mesh status while driving.
aliases:
- android-auto
@@ -17,9 +17,11 @@ Meshtastic integrates with Android Auto so you can stay in touch with your mesh
> ⚠️ **Note:** Android Auto support is available on **Google-flavor Android builds only**. It is not included in the F-Droid build, and it is not available on Desktop or iOS.
+> ℹ️ **What ships today:** The Google Play build provides **notification-only** car messaging — incoming messages are announced on the head unit and you reply through its notification controls. The full tabbed **Messages / Nodes / Status** experience described below is a beta built on the Android Car App Library (Google's templated car UI is currently restricted to Closed/Internal Play tracks), so it appears only in builds compiled with `-PenableCarTemplates=true`. The rest of this page documents that beta experience.
+
## Overview
-When your phone is connected to an Android Auto head unit (or the Desktop Head Unit emulator used for development), Meshtastic appears as a messaging app built with the Android Car App Library. The car interface presents a tabbed Home screen optimized for driving-safe, glanceable use:
+When your phone is connected to an Android Auto head unit (or the Desktop Head Unit emulator used for development), the beta build presents Meshtastic as a messaging app built with the Android Car App Library, with a tabbed Home screen optimized for driving-safe, glanceable use:
- **Messages** — recent conversations, with hands-free reading and replies.
- **Nodes** — the mesh node list, with a node-detail view.
diff --git a/docs/hu-rHU/user/connections.md b/docs/hu-rHU/user/connections.md
index 0105edda1..8189701ec 100644
--- a/docs/hu-rHU/user/connections.md
+++ b/docs/hu-rHU/user/connections.md
@@ -23,7 +23,7 @@ Bluetooth Low Energy is the default and most common connection method on Android
1. Ensure your Meshtastic radio is powered on and in pairing mode.
2. Open the app and navigate to the **Connect** tab.
-3. Tap **Scan for Devices** — nearby Meshtastic radios will appear.
+3. Tap **Scan for Bluetooth devices** — nearby Meshtastic radios will appear.
4. Select your device from the list.
5. Accept the Bluetooth pairing prompt if shown.
diff --git a/docs/hu-rHU/user/desktop.md b/docs/hu-rHU/user/desktop.md
index 77e3d29ed..33007e2a5 100644
--- a/docs/hu-rHU/user/desktop.md
+++ b/docs/hu-rHU/user/desktop.md
@@ -2,7 +2,7 @@
title: Desktop App
parent: User Guide
nav_order: 14
-last_updated: 2026-06-11
+last_updated: 2026-07-07
description: Install and use the Meshtastic Desktop app on Linux, macOS, and Windows — connections, feature parity, and keyboard shortcuts.
aliases:
- desktop
@@ -60,19 +60,19 @@ Bluetooth Low Energy is supported on Desktop via the [Kable](https://github.com/
## Feature Parity
-| Feature | Android | Desktop | Jegyzetek |
-| -------------------------------------------- | ------- | ------- | ---------------------------------------------- |
-| Messaging | ✓ | ✓ | Full parity |
-| Node List | ✓ | ✓ | Full parity |
-| Térkép | ✓ | ✓ | Full parity |
-| Beállítások | ✓ | ✓ | Full parity |
-| Bluetooth (BLE) | ✓ | ✓ | Via Kable on desktop |
-| Firmware Update OTA | ✓ | ✗ | Use web flasher |
-| Notifications | ✓ | ✓ | Native OS notifications |
-| Widgets | ✓ | ✗ | Android-only |
-| Android Auto | ✓ | ✗ | Android-only — not available on Desktop or iOS |
-| AI Assistant (Chirpy) | ✓\* | ✗ | Google flavor Android only |
-| App Functions (system AI) | ✓† | ✗ | Google flavor Android only |
+| Feature | Android | Desktop | Jegyzetek |
+| -------------------------------------------- | ------- | ------- | -------------------------------------------------------------------------- |
+| Messaging | ✓ | ✓ | Full parity |
+| Node List | ✓ | ✓ | Full parity |
+| Térkép | ✓ | ◐ | Map tab exists on desktop, but the interactive map view is Android-only |
+| Beállítások | ✓ | ✓ | Full parity |
+| Bluetooth (BLE) | ✓ | ✓ | Via Kable on desktop |
+| Firmware Update | ✓ | ◐ | Desktop supports in-app USB firmware update; BLE/Wi-Fi OTA is Android-only |
+| Notifications | ✓ | ✓ | Native OS notifications |
+| Widgets | ✓ | ✗ | Android-only |
+| Android Auto | ✓ | ✗ | Android-only — not available on Desktop or iOS |
+| AI Assistant (Chirpy) | ✓\* | ✗ | Google flavor Android only |
+| App Functions (system AI) | ✓† | ✗ | Google flavor Android only |
\*Chirpy AI requires Android 14+ on Google flavor builds with supported hardware.
@@ -84,14 +84,17 @@ The Desktop app uses the same Compose Multiplatform UI with adaptations for larg
### Keyboard Shortcuts
-| Shortcut | Action |
-| ------------------- | ---------------------- |
-| **⌘Q** / **Ctrl+Q** | Quit the application |
-| **⌘,** / **Ctrl+,** | Open Settings |
-| **⌘1** / **Ctrl+1** | Switch to Messages tab |
-| **⌘2** / **Ctrl+2** | Switch to Nodes tab |
-| **⌘3** / **Ctrl+3** | Switch to Map tab |
-| **⌘4** / **Ctrl+4** | Switch to Connect tab |
+All shortcuts use the **Meta** key — that's ⌘ (Command) on macOS and the Super / Windows key on Linux and Windows. (`Ctrl` is not bound.)
+
+| Shortcut | Action |
+| ---------- | ---------------------- |
+| **Meta+Q** | Quit the application |
+| **Meta+,** | Open Settings |
+| **Meta+1** | Switch to Messages tab |
+| **Meta+2** | Switch to Nodes tab |
+| **Meta+3** | Switch to Map tab |
+| **Meta+4** | Switch to Connect tab |
+| **Meta+/** | Open About |
### Window & System Tray
@@ -123,7 +126,6 @@ Individual doc pages render with full formatting:
```bash
git clone https://github.com/meshtastic/Meshtastic-Android.git
cd Meshtastic-Android
-git submodule update --init
./gradlew :desktopApp:run
```
@@ -134,7 +136,8 @@ Requirements:
## Known Limitations
-- No OTA firmware updates (use web flasher)
+- 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
- BLE bonding is not yet supported on desktop (pairing works without bonding)
@@ -142,7 +145,7 @@ Requirements:
## Related Topics
- [Connections](connections) — connection methods overview
-- [Firmware Updates](firmware) — use the [Web Flasher](https://flasher.meshtastic.org) for desktop firmware updates
+- [Firmware Updates](firmware) — in-app USB update on desktop, or the [Web Flasher](https://flasher.meshtastic.org)
---
diff --git a/docs/hu-rHU/user/discovery.md b/docs/hu-rHU/user/discovery.md
index e093caefa..d425b9d3d 100644
--- a/docs/hu-rHU/user/discovery.md
+++ b/docs/hu-rHU/user/discovery.md
@@ -44,7 +44,6 @@ Before starting, configure these controls:
The **Start** button stays disabled — with an explanation of why — until the scan can run. Common reasons it's disabled:
- The device is **not connected**.
-- The current channel is using the **default channel key** (use a unique key first — see [Messages & Channels](messages-and-channels)).
- **No presets** have been selected to scan.
- The selected preset uses **2.4 GHz**, which your hardware doesn't support.
diff --git a/docs/hu-rHU/user/firmware.md b/docs/hu-rHU/user/firmware.md
index 0f5fb443f..011018e86 100644
--- a/docs/hu-rHU/user/firmware.md
+++ b/docs/hu-rHU/user/firmware.md
@@ -2,8 +2,8 @@
title: Firmware Updates
parent: User Guide
nav_order: 13
-last_updated: 2026-05-13
-description: Update your radio firmware over Bluetooth — OTA process, version channels, pre-flight checks, and recovery.
+last_updated: 2026-07-07
+description: Update your radio firmware over Bluetooth or USB — OTA process, version channels, pre-flight checks, and recovery.
aliases:
- firmware
- update
@@ -17,7 +17,7 @@ Keep your Meshtastic radio up to date with the latest firmware for new features,
## Checking for Updates
-1. Navigate to **Settings → Firmware Update** or tap the firmware notification if shown.
+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.
2. The app checks for available firmware versions.
3. Available updates show the version number and changelog summary.
@@ -39,19 +39,26 @@ The most common update method for Android users:

-### USB Flashing
+### In-App USB Update
-For recovery or when OTA is unavailable:
+When your radio is connected over **USB/serial** (rather than Bluetooth), the Firmware Update screen offers **USB File Transfer**. The app reboots the device into DFU mode, then prompts you to save the `.uf2` file to the device's DFU drive using the system file picker. This option appears only on a USB/serial connection — it is not available over Bluetooth.
+
+> ℹ️ **nRF bootloader note:** Some devices (e.g. RAK WisBlock RAK4631) need their bootloader flashed with the vendor's serial DFU tool (such as `adafruit-nrfutil`) — copying the `.uf2` alone won't update the bootloader. The app surfaces a hint when this applies.
+
+### Other Flashing Options
+
+For recovery or when neither OTA nor in-app USB is available:
- Use the [Meshtastic Web Flasher](https://flasher.meshtastic.org)
- Or the [Meshtastic CLI tool](https://meshtastic.org/docs/getting-started/flashing-firmware) on desktop
## Version Channels
-| Csatorna | Leírás |
-| -------- | ------------------------------------------- |
-| Stable | Recommended for most users; tested releases |
-| Alpha | Preview releases; may contain bugs |
+| Csatorna | Leírás |
+| ---------- | -------------------------------------------------------------------------- |
+| Stable | Recommended for most users; tested releases |
+| Alpha | Preview releases; may contain bugs |
+| Local File | Flash a firmware file you select yourself, instead of a downloaded release |
## Pre-Update Checklist
@@ -73,7 +80,7 @@ Once the update succeeds:
- The radio will reboot automatically
- Bluetooth connection will re-establish
- Verify your settings are intact
-- Check the firmware version in **Settings → About**
+- Confirm the new version under **Currently Installed** on the Firmware Update screen — it's also shown on the node's detail page and the Connections screen

diff --git a/docs/hu-rHU/user/messages-and-channels.md b/docs/hu-rHU/user/messages-and-channels.md
index fbd55af71..7f1fa4afb 100644
--- a/docs/hu-rHU/user/messages-and-channels.md
+++ b/docs/hu-rHU/user/messages-and-channels.md
@@ -116,12 +116,16 @@ You can search the full history of any conversation directly from the chat scree

-> 💡 **Tip:** Search is full-text and stays within the conversation you opened it from — it doesn't search across other channels or contacts. Matching is fast even on long histories because messages are indexed locally.
+> 💡 **Tip:** Search is full-text and stays within the conversation you opened it from — it doesn't search across other channels or contacts. It matches against the messages already stored on your device, so it works fully offline.
### Message Bubbles
Messages appear as chat bubbles — sent messages on the right, received messages on the left. Each bubble shows the sender, timestamp, and delivery status. Messages with replies include a quoted preview of the original message above the response.
+### Mentions
+
+Type `@` while composing to mention a node — a picker suggests matching contacts as you type. In a received message, a mention appears as a highlighted chip showing the node's name; tap it to jump straight to that node's detail page.
+
### Reactions
React to messages with emoji:
@@ -143,6 +147,7 @@ Long-press any message to access:
- **Copy** — copy message text to clipboard
- **Reply** — quote the message in your response
- **React** — add an emoji reaction
+- **Translate** — translate a received message into your device language and toggle between the original and translated text (Google Play build only; uses on-device translation)
- **Delete** — remove a message you sent (local deletion)
### Message Priority
diff --git a/docs/hu-rHU/user/mqtt.md b/docs/hu-rHU/user/mqtt.md
index aa8753be6..27195c886 100644
--- a/docs/hu-rHU/user/mqtt.md
+++ b/docs/hu-rHU/user/mqtt.md
@@ -56,6 +56,8 @@ A gateway node with internet access (WiFi or Ethernet) publishes mesh messages t
The community maintains a public broker at `mqtt.meshtastic.org`. This is intended for general use and testing.
+> ℹ️ **Note:** Connections to `mqtt.meshtastic.org` always use TLS (port 8883), even if the TLS toggle is off. For any other broker, TLS is used only when you enable it (port 8883 with TLS, 1883 without).
+
> 🔒 **Privacy:** Messages on the public broker are readable by anyone subscribed. Always use channel encryption for private communications.
### Private Broker
diff --git a/docs/hu-rHU/user/node-metrics.md b/docs/hu-rHU/user/node-metrics.md
index 0481c7033..bd629d960 100644
--- a/docs/hu-rHU/user/node-metrics.md
+++ b/docs/hu-rHU/user/node-metrics.md
@@ -55,12 +55,15 @@ The BME680 **IAQ (Indoor Air Quality)** index is a single 0–500+ value derived
Air Quality is a dedicated metrics view for nodes equipped with a particulate-matter and/or CO₂ sensor. It is **separate from the BME680 IAQ reading** listed under Environment Metrics — IAQ is a single gas-resistance-derived index, while the Air Quality view charts the underlying particulate and CO₂ measurements.
-| Metric | Unit | Leírás |
-| --------------------- | ----- | ---------------------------------------------------- |
-| PM1.0 | µg/m³ | Particulate matter up to 1.0 micron |
-| PM2.5 | µg/m³ | Particulate matter up to 2.5 microns |
-| PM10 | µg/m³ | Particulate matter up to 10 microns |
-| CO₂ | ppm | Carbon dioxide concentration |
+| Metric | Unit | Leírás |
+| --------------------- | --------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| PM1.0 | µg/m³ | Particulate matter up to 1.0 micron |
+| PM2.5 | µg/m³ | Particulate matter up to 2.5 microns |
+| PM10 | µg/m³ | Particulate matter up to 10 microns |
+| AQI | EPA index | EPA **NowCast** AQI computed from your recent PM2.5 history, with a color-coded severity label. Shown next to PM2.5 once enough readings have accumulated. |
+| CO₂ | ppm | Carbon dioxide concentration |
+| CO₂ temperature | °C / °F | Temperature reported by the CO₂ sensor itself (e.g. SCD4x) |
+| CO₂ humidity | % | Relative humidity reported by the CO₂ sensor |
CO₂ readings are color-coded by severity to make air quality easy to read at a glance:
@@ -98,12 +101,12 @@ Radio signal quality information:
Signal quality is rated from **SNR relative to the active LoRa modem preset's demodulation floor**, not from fixed thresholds — a given SNR means different things on different presets (e.g. −15 dB is fine on LongSlow but unusable on ShortFast). RSSI is shown but is not part of the rating. Letting `limit` be the preset's SNR limit:
-| Quality | Criteria |
-| --------- | ------------------------------------------------ |
-| Jó | SNR above the preset's limit |
-| Megfelelő | within 5.5 dB below the limit |
-| Rossz | within 7.5 dB below the limit |
-| Semmi | more than 7.5 dB below the limit |
+| Quality | Criteria |
+| --------- | ------------------------------------------------------------------------- |
+| Jó | SNR above the preset's limit |
+| Megfelelő | up to 5.5 dB below the limit |
+| Rossz | between 5.5 dB and 7.5 dB below the limit |
+| Semmi | more than 7.5 dB below the limit |
See [Understanding the Signal Meter](signal-meter) for the full explanation.
diff --git a/docs/hu-rHU/user/settings-radio-user.md b/docs/hu-rHU/user/settings-radio-user.md
index 0f726ffc1..568fa5ca6 100644
--- a/docs/hu-rHU/user/settings-radio-user.md
+++ b/docs/hu-rHU/user/settings-radio-user.md
@@ -74,6 +74,8 @@ After modifying settings, tap **Save** to write the configuration to your radio.
| ~~Long Slow~~ | ~30 km | 0.18 kbps | −17.5 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.
+
#### Choosing a Modem Preset
The modem preset controls the fundamental tradeoff between **range** and **data rate**:
diff --git a/docs/hu-rHU/user/signal-meter.md b/docs/hu-rHU/user/signal-meter.md
index 14de0ebd8..c6a026a7c 100644
--- a/docs/hu-rHU/user/signal-meter.md
+++ b/docs/hu-rHU/user/signal-meter.md
@@ -52,12 +52,12 @@ The app rates your signal quality (None, Bad, Fair, or Good) from **SNR alone, m
Because the rating is relative to the preset limit, the _same_ SNR can rate differently on different presets — `-15 dB` is healthy on `LongSlow` but unusable on `ShortFast`. Letting `limit` be the active preset's SNR Limit, here is how the app picks the bars (or color):
-| Level | Bars | Criteria | Meaning |
-| --------- | ---- | ------------------------------------ | ---------------------------------------------------------------------------------------- |
-| Jó | 3 | SNR **above** the preset's `limit` | Signal is comfortably above the demodulation floor — healthy connection. |
-| Megfelelő | 2 | within `5.5 dB` below the `limit` | Decodable, but getting close to the floor. |
-| Rossz | 1 | within `7.5 dB` below the `limit` | At the very edge of what the preset can recover. |
-| Semmi | 0 | more than `7.5 dB` below the `limit` | Below the floor — transmission lost to noise. |
+| Level | Bars | Criteria | Meaning |
+| --------- | ---- | ----------------------------------------------- | ---------------------------------------------------------------------------------------- |
+| Jó | 3 | SNR **above** the preset's `limit` | Signal is comfortably above the demodulation floor — healthy connection. |
+| Megfelelő | 2 | up to `5.5 dB` below the `limit` | Decodable, but getting close to the floor. |
+| Rossz | 1 | between `5.5 dB` and `7.5 dB` below the `limit` | At the very edge of what the preset can recover. |
+| Semmi | 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.
diff --git a/docs/hu-rHU/user/telemetry-and-sensors.md b/docs/hu-rHU/user/telemetry-and-sensors.md
index 8b9a0df74..dca11ce99 100644
--- a/docs/hu-rHU/user/telemetry-and-sensors.md
+++ b/docs/hu-rHU/user/telemetry-and-sensors.md
@@ -103,7 +103,9 @@ Nodes with particulate matter or CO₂ sensors report air quality data:
| PM10 | µg/m³ | Coarse particulate matter |
| CO₂ | ppm | Carbon dioxide concentration |
-The CO₂ reading is color-coded by severity (Good → Stuffy → Poor → Unsafe → Evacuate). See [Node Metrics — Air Quality](node-metrics#air-quality-metrics) for the exact ppm bands and colors.
+CO₂ sensors such as the SCD4x also report their own temperature and humidity, which appear alongside the readings above. From PM2.5 history the app additionally derives an **EPA NowCast AQI** value.
+
+The CO₂ reading is color-coded by severity (Good → Stuffy → Poor → Unsafe → Evacuate). See [Node Metrics — Air Quality](node-metrics#air-quality-metrics) for the exact ppm bands, colors, and AQI detail.
Air quality data can be viewed as info cards on the node detail screen, charted over time, and exported to CSV.
diff --git a/docs/hu-rHU/user/translate.md b/docs/hu-rHU/user/translate.md
index 199fe7111..741282024 100644
--- a/docs/hu-rHU/user/translate.md
+++ b/docs/hu-rHU/user/translate.md
@@ -18,11 +18,11 @@ Contributing translations helps make Meshtastic accessible to a wider audience.
## What Gets Translated
-| Resource | Source Location | Jegyzetek |
-| ----------------- | ------------------------------------- | ---------------------------------------------------------------------- |
-| UI strings | `composeResources/values/strings.xml` | Buttons, labels, messages, and all user-visible text |
-| User Guide pages | `docs/user/*.md` | In-app documentation shown in Help & Documentation |
-| Fastlane metadata | `fastlane/metadata/android/en-US/` | App Store listing title, description, and changelogs |
+| Resource | Source Location | Jegyzetek |
+| ----------------- | ------------------------------------------------------------------- | ---------------------------------------------------------------------- |
+| UI strings | `core/resources/src/commonMain/composeResources/values/strings.xml` | Buttons, labels, messages, and all user-visible text |
+| User Guide pages | `docs/en/user/*.md` | In-app documentation shown in Help & Documentation |
+| Fastlane metadata | `fastlane/metadata/android/en-US/` | App Store listing title, description, and changelogs |
> ⚠️ **Note:** Developer Guide pages are English-only. Code-focused documentation targeting contributors is not translated.
diff --git a/docs/hu-rHU/user/units-and-locale.md b/docs/hu-rHU/user/units-and-locale.md
index 566f5e23d..fe850af9a 100644
--- a/docs/hu-rHU/user/units-and-locale.md
+++ b/docs/hu-rHU/user/units-and-locale.md
@@ -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 uses the `MetricFormatter` utility to convert and display values in whatever unit system your device's locale specifies.
+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.
On Android, your measurement preferences are determined by your system **Language & Region** settings. On Desktop (JVM), the app uses the JVM's default `Locale`.
@@ -115,12 +115,13 @@ On Android, your measurement system (metric vs imperial) is tied to your region
2. Change your **Region** or **Measurement units** preference
3. Return to Meshtastic — values update immediately
-> 💡 **Tip:** The app uses `MetricFormatter` from `core:common`. All measurement formatting is handled by a shared KMP utility that respects your platform's locale. Developers adding new measurement displays should use `MetricFormatter` rather than hard-coding unit conversions.
+> 💡 **Tip:** All measurement formatting is handled centrally and respects your platform's locale, so units stay consistent everywhere in the app.
## Related Topics
- [Node Metrics](node-metrics) — where temperature, distance, and sensor values are displayed
- [Telemetry & Sensors](telemetry-and-sensors) — the sensors that produce these measurements
+- [Measurement & Formatting](../developer/measurement) — developer reference for the formatting utilities
- [Settings — Radio & User](settings-radio-user) — region setting that drives unit selection
---
diff --git a/docs/is-rIS/user/android-auto.md b/docs/is-rIS/user/android-auto.md
index aeb53435d..b9ec6a2af 100644
--- a/docs/is-rIS/user/android-auto.md
+++ b/docs/is-rIS/user/android-auto.md
@@ -2,7 +2,7 @@
title: Android Auto
parent: User Guide
nav_order: 18
-last_updated: 2026-06-11
+last_updated: 2026-07-07
description: Use Meshtastic hands-free on an Android Auto head unit — read messages aloud, reply by voice, and check nodes and mesh status while driving.
aliases:
- android-auto
@@ -17,9 +17,11 @@ Meshtastic integrates with Android Auto so you can stay in touch with your mesh
> ⚠️ **Note:** Android Auto support is available on **Google-flavor Android builds only**. It is not included in the F-Droid build, and it is not available on Desktop or iOS.
+> ℹ️ **What ships today:** The Google Play build provides **notification-only** car messaging — incoming messages are announced on the head unit and you reply through its notification controls. The full tabbed **Messages / Nodes / Status** experience described below is a beta built on the Android Car App Library (Google's templated car UI is currently restricted to Closed/Internal Play tracks), so it appears only in builds compiled with `-PenableCarTemplates=true`. The rest of this page documents that beta experience.
+
## Overview
-When your phone is connected to an Android Auto head unit (or the Desktop Head Unit emulator used for development), Meshtastic appears as a messaging app built with the Android Car App Library. The car interface presents a tabbed Home screen optimized for driving-safe, glanceable use:
+When your phone is connected to an Android Auto head unit (or the Desktop Head Unit emulator used for development), the beta build presents Meshtastic as a messaging app built with the Android Car App Library, with a tabbed Home screen optimized for driving-safe, glanceable use:
- **Messages** — recent conversations, with hands-free reading and replies.
- **Nodes** — the mesh node list, with a node-detail view.
diff --git a/docs/is-rIS/user/connections.md b/docs/is-rIS/user/connections.md
index 9661571c6..6a4a87aec 100644
--- a/docs/is-rIS/user/connections.md
+++ b/docs/is-rIS/user/connections.md
@@ -23,7 +23,7 @@ Bluetooth Low Energy is the default and most common connection method on Android
1. Ensure your Meshtastic radio is powered on and in pairing mode.
2. Open the app and navigate to the **Connect** tab.
-3. Tap **Scan for Devices** — nearby Meshtastic radios will appear.
+3. Tap **Scan for Bluetooth devices** — nearby Meshtastic radios will appear.
4. Select your device from the list.
5. Accept the Bluetooth pairing prompt if shown.
diff --git a/docs/is-rIS/user/desktop.md b/docs/is-rIS/user/desktop.md
index e69b44554..2ac96feda 100644
--- a/docs/is-rIS/user/desktop.md
+++ b/docs/is-rIS/user/desktop.md
@@ -2,7 +2,7 @@
title: Desktop App
parent: User Guide
nav_order: 14
-last_updated: 2026-06-11
+last_updated: 2026-07-07
description: Install and use the Meshtastic Desktop app on Linux, macOS, and Windows — connections, feature parity, and keyboard shortcuts.
aliases:
- desktop
@@ -60,19 +60,19 @@ Bluetooth Low Energy is supported on Desktop via the [Kable](https://github.com/
## Feature Parity
-| Feature | Android | Desktop | Notes |
-| -------------------------------------------- | ------- | ------- | ---------------------------------------------- |
-| Messaging | ✓ | ✓ | Full parity |
-| Node List | ✓ | ✓ | Full parity |
-| Map | ✓ | ✓ | Full parity |
-| Settings | ✓ | ✓ | Full parity |
-| Bluetooth (BLE) | ✓ | ✓ | Via Kable on desktop |
-| Firmware Update OTA | ✓ | ✗ | Use web flasher |
-| Notifications | ✓ | ✓ | Native OS notifications |
-| Widgets | ✓ | ✗ | Android-only |
-| Android Auto | ✓ | ✗ | Android-only — not available on Desktop or iOS |
-| AI Assistant (Chirpy) | ✓\* | ✗ | Google flavor Android only |
-| App Functions (system AI) | ✓† | ✗ | Google flavor Android only |
+| Feature | Android | Desktop | Notes |
+| -------------------------------------------- | ------- | ------- | -------------------------------------------------------------------------- |
+| Messaging | ✓ | ✓ | Full parity |
+| Node List | ✓ | ✓ | Full parity |
+| 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 |
+| Notifications | ✓ | ✓ | Native OS notifications |
+| Widgets | ✓ | ✗ | Android-only |
+| Android Auto | ✓ | ✗ | Android-only — not available on Desktop or iOS |
+| AI Assistant (Chirpy) | ✓\* | ✗ | Google flavor Android only |
+| App Functions (system AI) | ✓† | ✗ | Google flavor Android only |
\*Chirpy AI requires Android 14+ on Google flavor builds with supported hardware.
@@ -84,14 +84,17 @@ The Desktop app uses the same Compose Multiplatform UI with adaptations for larg
### Keyboard Shortcuts
-| Shortcut | Action |
-| ------------------- | ---------------------- |
-| **⌘Q** / **Ctrl+Q** | Quit the application |
-| **⌘,** / **Ctrl+,** | Open Settings |
-| **⌘1** / **Ctrl+1** | Switch to Messages tab |
-| **⌘2** / **Ctrl+2** | Switch to Nodes tab |
-| **⌘3** / **Ctrl+3** | Switch to Map tab |
-| **⌘4** / **Ctrl+4** | Switch to Connect tab |
+All shortcuts use the **Meta** key — that's ⌘ (Command) on macOS and the Super / Windows key on Linux and Windows. (`Ctrl` is not bound.)
+
+| Shortcut | Action |
+| ---------- | ---------------------- |
+| **Meta+Q** | Quit the application |
+| **Meta+,** | Open Settings |
+| **Meta+1** | Switch to Messages tab |
+| **Meta+2** | Switch to Nodes tab |
+| **Meta+3** | Switch to Map tab |
+| **Meta+4** | Switch to Connect tab |
+| **Meta+/** | Open About |
### Window & System Tray
@@ -123,7 +126,6 @@ Individual doc pages render with full formatting:
```bash
git clone https://github.com/meshtastic/Meshtastic-Android.git
cd Meshtastic-Android
-git submodule update --init
./gradlew :desktopApp:run
```
@@ -134,7 +136,8 @@ Requirements:
## Known Limitations
-- No OTA firmware updates (use web flasher)
+- 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
- BLE bonding is not yet supported on desktop (pairing works without bonding)
@@ -142,7 +145,7 @@ Requirements:
## Related Topics
- [Connections](connections) — connection methods overview
-- [Firmware Updates](firmware) — use the [Web Flasher](https://flasher.meshtastic.org) for desktop firmware updates
+- [Firmware Updates](firmware) — in-app USB update on desktop, or the [Web Flasher](https://flasher.meshtastic.org)
---
diff --git a/docs/is-rIS/user/discovery.md b/docs/is-rIS/user/discovery.md
index e39f1acc6..ddd68556e 100644
--- a/docs/is-rIS/user/discovery.md
+++ b/docs/is-rIS/user/discovery.md
@@ -44,7 +44,6 @@ Before starting, configure these controls:
The **Start** button stays disabled — with an explanation of why — until the scan can run. Common reasons it's disabled:
- The device is **not connected**.
-- The current channel is using the **default channel key** (use a unique key first — see [Messages & Channels](messages-and-channels)).
- **No presets** have been selected to scan.
- The selected preset uses **2.4 GHz**, which your hardware doesn't support.
diff --git a/docs/is-rIS/user/firmware.md b/docs/is-rIS/user/firmware.md
index b77d8e7f8..ee6321a44 100644
--- a/docs/is-rIS/user/firmware.md
+++ b/docs/is-rIS/user/firmware.md
@@ -2,8 +2,8 @@
title: Firmware Updates
parent: User Guide
nav_order: 13
-last_updated: 2026-05-13
-description: Update your radio firmware over Bluetooth — OTA process, version channels, pre-flight checks, and recovery.
+last_updated: 2026-07-07
+description: Update your radio firmware over Bluetooth or USB — OTA process, version channels, pre-flight checks, and recovery.
aliases:
- firmware
- update
@@ -17,7 +17,7 @@ Keep your Meshtastic radio up to date with the latest firmware for new features,
## Checking for Updates
-1. Navigate to **Settings → Firmware Update** or tap the firmware notification if shown.
+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.
2. The app checks for available firmware versions.
3. Available updates show the version number and changelog summary.
@@ -39,19 +39,26 @@ The most common update method for Android users:

-### USB Flashing
+### In-App USB Update
-For recovery or when OTA is unavailable:
+When your radio is connected over **USB/serial** (rather than Bluetooth), the Firmware Update screen offers **USB File Transfer**. The app reboots the device into DFU mode, then prompts you to save the `.uf2` file to the device's DFU drive using the system file picker. This option appears only on a USB/serial connection — it is not available over Bluetooth.
+
+> ℹ️ **nRF bootloader note:** Some devices (e.g. RAK WisBlock RAK4631) need their bootloader flashed with the vendor's serial DFU tool (such as `adafruit-nrfutil`) — copying the `.uf2` alone won't update the bootloader. The app surfaces a hint when this applies.
+
+### Other Flashing Options
+
+For recovery or when neither OTA nor in-app USB is available:
- Use the [Meshtastic Web Flasher](https://flasher.meshtastic.org)
- Or the [Meshtastic CLI tool](https://meshtastic.org/docs/getting-started/flashing-firmware) on desktop
## Version Channels
-| Channel | Lýsing |
-| ------- | ------------------------------------------- |
-| Stable | Recommended for most users; tested releases |
-| Alpha | Preview releases; may contain bugs |
+| Channel | Lýsing |
+| ---------- | -------------------------------------------------------------------------- |
+| Stable | Recommended for most users; tested releases |
+| Alpha | Preview releases; may contain bugs |
+| Local File | Flash a firmware file you select yourself, instead of a downloaded release |
## Pre-Update Checklist
@@ -73,7 +80,7 @@ Once the update succeeds:
- The radio will reboot automatically
- Bluetooth connection will re-establish
- Verify your settings are intact
-- Check the firmware version in **Settings → About**
+- Confirm the new version under **Currently Installed** on the Firmware Update screen — it's also shown on the node's detail page and the Connections screen

diff --git a/docs/is-rIS/user/messages-and-channels.md b/docs/is-rIS/user/messages-and-channels.md
index 9deea9fae..0fe05de10 100644
--- a/docs/is-rIS/user/messages-and-channels.md
+++ b/docs/is-rIS/user/messages-and-channels.md
@@ -116,12 +116,16 @@ You can search the full history of any conversation directly from the chat scree

-> 💡 **Tip:** Search is full-text and stays within the conversation you opened it from — it doesn't search across other channels or contacts. Matching is fast even on long histories because messages are indexed locally.
+> 💡 **Tip:** Search is full-text and stays within the conversation you opened it from — it doesn't search across other channels or contacts. It matches against the messages already stored on your device, so it works fully offline.
### Message Bubbles
Messages appear as chat bubbles — sent messages on the right, received messages on the left. Each bubble shows the sender, timestamp, and delivery status. Messages with replies include a quoted preview of the original message above the response.
+### Mentions
+
+Type `@` while composing to mention a node — a picker suggests matching contacts as you type. In a received message, a mention appears as a highlighted chip showing the node's name; tap it to jump straight to that node's detail page.
+
### Reactions
React to messages with emoji:
@@ -143,6 +147,7 @@ Long-press any message to access:
- **Copy** — copy message text to clipboard
- **Reply** — quote the message in your response
- **React** — add an emoji reaction
+- **Translate** — translate a received message into your device language and toggle between the original and translated text (Google Play build only; uses on-device translation)
- **Delete** — remove a message you sent (local deletion)
### Message Priority
diff --git a/docs/is-rIS/user/mqtt.md b/docs/is-rIS/user/mqtt.md
index 33cc76aec..9e25b28c2 100644
--- a/docs/is-rIS/user/mqtt.md
+++ b/docs/is-rIS/user/mqtt.md
@@ -56,6 +56,8 @@ A gateway node with internet access (WiFi or Ethernet) publishes mesh messages t
The community maintains a public broker at `mqtt.meshtastic.org`. This is intended for general use and testing.
+> ℹ️ **Note:** Connections to `mqtt.meshtastic.org` always use TLS (port 8883), even if the TLS toggle is off. For any other broker, TLS is used only when you enable it (port 8883 with TLS, 1883 without).
+
> 🔒 **Privacy:** Messages on the public broker are readable by anyone subscribed. Always use channel encryption for private communications.
### Private Broker
diff --git a/docs/is-rIS/user/node-metrics.md b/docs/is-rIS/user/node-metrics.md
index 0485f8e76..488c30cb2 100644
--- a/docs/is-rIS/user/node-metrics.md
+++ b/docs/is-rIS/user/node-metrics.md
@@ -55,12 +55,15 @@ The BME680 **IAQ (Indoor Air Quality)** index is a single 0–500+ value derived
Air Quality is a dedicated metrics view for nodes equipped with a particulate-matter and/or CO₂ sensor. It is **separate from the BME680 IAQ reading** listed under Environment Metrics — IAQ is a single gas-resistance-derived index, while the Air Quality view charts the underlying particulate and CO₂ measurements.
-| Metric | Unit | Lýsing |
-| --------------------- | ----- | ---------------------------------------------------- |
-| PM1.0 | µg/m³ | Particulate matter up to 1.0 micron |
-| PM2.5 | µg/m³ | Particulate matter up to 2.5 microns |
-| PM10 | µg/m³ | Particulate matter up to 10 microns |
-| CO₂ | ppm | Carbon dioxide concentration |
+| Metric | Unit | Lýsing |
+| --------------------- | --------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| PM1.0 | µg/m³ | Particulate matter up to 1.0 micron |
+| PM2.5 | µg/m³ | Particulate matter up to 2.5 microns |
+| PM10 | µg/m³ | Particulate matter up to 10 microns |
+| AQI | EPA index | EPA **NowCast** AQI computed from your recent PM2.5 history, with a color-coded severity label. Shown next to PM2.5 once enough readings have accumulated. |
+| CO₂ | ppm | Carbon dioxide concentration |
+| CO₂ temperature | °C / °F | Temperature reported by the CO₂ sensor itself (e.g. SCD4x) |
+| CO₂ humidity | % | Relative humidity reported by the CO₂ sensor |
CO₂ readings are color-coded by severity to make air quality easy to read at a glance:
@@ -98,12 +101,12 @@ Radio signal quality information:
Signal quality is rated from **SNR relative to the active LoRa modem preset's demodulation floor**, not from fixed thresholds — a given SNR means different things on different presets (e.g. −15 dB is fine on LongSlow but unusable on ShortFast). RSSI is shown but is not part of the rating. Letting `limit` be the preset's SNR limit:
-| Quality | Criteria |
-| ------- | ------------------------------------------------ |
-| Good | SNR above the preset's limit |
-| Fair | within 5.5 dB below the limit |
-| Bad | within 7.5 dB below the limit |
-| None | more than 7.5 dB below the limit |
+| 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 |
+| None | more than 7.5 dB below the limit |
See [Understanding the Signal Meter](signal-meter) for the full explanation.
diff --git a/docs/is-rIS/user/settings-radio-user.md b/docs/is-rIS/user/settings-radio-user.md
index c93d76255..a4215afbe 100644
--- a/docs/is-rIS/user/settings-radio-user.md
+++ b/docs/is-rIS/user/settings-radio-user.md
@@ -74,6 +74,8 @@ After modifying settings, tap **Save** to write the configuration to your radio.
| ~~Long Slow~~ | ~30 km | 0.18 kbps | −17.5 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.
+
#### Choosing a Modem Preset
The modem preset controls the fundamental tradeoff between **range** and **data rate**:
diff --git a/docs/is-rIS/user/signal-meter.md b/docs/is-rIS/user/signal-meter.md
index 43f3aeae7..71741a4c2 100644
--- a/docs/is-rIS/user/signal-meter.md
+++ b/docs/is-rIS/user/signal-meter.md
@@ -52,12 +52,12 @@ The app rates your signal quality (None, Bad, Fair, or Good) from **SNR alone, m
Because the rating is relative to the preset limit, the _same_ SNR can rate differently on different presets — `-15 dB` is healthy on `LongSlow` but unusable on `ShortFast`. Letting `limit` be the active preset's SNR Limit, here is how the app picks the bars (or color):
-| Level | Bars | Criteria | Meaning |
-| ----- | ---- | ------------------------------------ | ---------------------------------------------------------------------------------------- |
-| Good | 3 | SNR **above** the preset's `limit` | Signal is comfortably above the demodulation floor — healthy connection. |
-| Fair | 2 | within `5.5 dB` below the `limit` | Decodable, but getting close to the floor. |
-| Bad | 1 | within `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. |
+| 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. |
+| 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.
diff --git a/docs/is-rIS/user/telemetry-and-sensors.md b/docs/is-rIS/user/telemetry-and-sensors.md
index 1e78f2f79..740e96bac 100644
--- a/docs/is-rIS/user/telemetry-and-sensors.md
+++ b/docs/is-rIS/user/telemetry-and-sensors.md
@@ -103,7 +103,9 @@ Nodes with particulate matter or CO₂ sensors report air quality data:
| PM10 | µg/m³ | Coarse particulate matter |
| CO₂ | ppm | Carbon dioxide concentration |
-The CO₂ reading is color-coded by severity (Good → Stuffy → Poor → Unsafe → Evacuate). See [Node Metrics — Air Quality](node-metrics#air-quality-metrics) for the exact ppm bands and colors.
+CO₂ sensors such as the SCD4x also report their own temperature and humidity, which appear alongside the readings above. From PM2.5 history the app additionally derives an **EPA NowCast AQI** value.
+
+The CO₂ reading is color-coded by severity (Good → Stuffy → Poor → Unsafe → Evacuate). See [Node Metrics — Air Quality](node-metrics#air-quality-metrics) for the exact ppm bands, colors, and AQI detail.
Air quality data can be viewed as info cards on the node detail screen, charted over time, and exported to CSV.
diff --git a/docs/is-rIS/user/translate.md b/docs/is-rIS/user/translate.md
index 25aa4693c..70c966fed 100644
--- a/docs/is-rIS/user/translate.md
+++ b/docs/is-rIS/user/translate.md
@@ -18,11 +18,11 @@ Contributing translations helps make Meshtastic accessible to a wider audience.
## What Gets Translated
-| Resource | Source Location | Notes |
-| ----------------- | ------------------------------------- | ---------------------------------------------------------------------- |
-| UI strings | `composeResources/values/strings.xml` | Buttons, labels, messages, and all user-visible text |
-| User Guide pages | `docs/user/*.md` | In-app documentation shown in Help & Documentation |
-| Fastlane metadata | `fastlane/metadata/android/en-US/` | App Store listing title, description, and changelogs |
+| Resource | Source Location | Notes |
+| ----------------- | ------------------------------------------------------------------- | ---------------------------------------------------------------------- |
+| UI strings | `core/resources/src/commonMain/composeResources/values/strings.xml` | Buttons, labels, messages, and all user-visible text |
+| User Guide pages | `docs/en/user/*.md` | In-app documentation shown in Help & Documentation |
+| Fastlane metadata | `fastlane/metadata/android/en-US/` | App Store listing title, description, and changelogs |
> ⚠️ **Note:** Developer Guide pages are English-only. Code-focused documentation targeting contributors is not translated.
diff --git a/docs/is-rIS/user/units-and-locale.md b/docs/is-rIS/user/units-and-locale.md
index feaf6f610..2ccaeb96e 100644
--- a/docs/is-rIS/user/units-and-locale.md
+++ b/docs/is-rIS/user/units-and-locale.md
@@ -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 uses the `MetricFormatter` utility to convert and display values in whatever unit system your device's locale specifies.
+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.
On Android, your measurement preferences are determined by your system **Language & Region** settings. On Desktop (JVM), the app uses the JVM's default `Locale`.
@@ -115,12 +115,13 @@ On Android, your measurement system (metric vs imperial) is tied to your region
2. Change your **Region** or **Measurement units** preference
3. Return to Meshtastic — values update immediately
-> 💡 **Tip:** The app uses `MetricFormatter` from `core:common`. All measurement formatting is handled by a shared KMP utility that respects your platform's locale. Developers adding new measurement displays should use `MetricFormatter` rather than hard-coding unit conversions.
+> 💡 **Tip:** All measurement formatting is handled centrally and respects your platform's locale, so units stay consistent everywhere in the app.
## Related Topics
- [Node Metrics](node-metrics) — where temperature, distance, and sensor values are displayed
- [Telemetry & Sensors](telemetry-and-sensors) — the sensors that produce these measurements
+- [Measurement & Formatting](../developer/measurement) — developer reference for the formatting utilities
- [Settings — Radio & User](settings-radio-user) — region setting that drives unit selection
---
diff --git a/docs/it-rIT/user/android-auto.md b/docs/it-rIT/user/android-auto.md
index fa3ba9857..66e22d77a 100644
--- a/docs/it-rIT/user/android-auto.md
+++ b/docs/it-rIT/user/android-auto.md
@@ -2,7 +2,7 @@
title: Android Auto
parent: User Guide
nav_order: 18
-last_updated: 2026-06-11
+last_updated: 2026-07-07
description: Use Meshtastic hands-free on an Android Auto head unit — read messages aloud, reply by voice, and check nodes and mesh status while driving.
aliases:
- android-auto
@@ -17,9 +17,11 @@ Meshtastic integrates with Android Auto so you can stay in touch with your mesh
> ⚠️ **Note:** Android Auto support is available on **Google-flavor Android builds only**. It is not included in the F-Droid build, and it is not available on Desktop or iOS.
+> ℹ️ **What ships today:** The Google Play build provides **notification-only** car messaging — incoming messages are announced on the head unit and you reply through its notification controls. The full tabbed **Messages / Nodes / Status** experience described below is a beta built on the Android Car App Library (Google's templated car UI is currently restricted to Closed/Internal Play tracks), so it appears only in builds compiled with `-PenableCarTemplates=true`. The rest of this page documents that beta experience.
+
## Panoramica
-When your phone is connected to an Android Auto head unit (or the Desktop Head Unit emulator used for development), Meshtastic appears as a messaging app built with the Android Car App Library. The car interface presents a tabbed Home screen optimized for driving-safe, glanceable use:
+When your phone is connected to an Android Auto head unit (or the Desktop Head Unit emulator used for development), the beta build presents Meshtastic as a messaging app built with the Android Car App Library, with a tabbed Home screen optimized for driving-safe, glanceable use:
- **Messages** — recent conversations, with hands-free reading and replies.
- **Nodes** — the mesh node list, with a node-detail view.
diff --git a/docs/it-rIT/user/connections.md b/docs/it-rIT/user/connections.md
index dc59d7cb8..b7a6dcff2 100644
--- a/docs/it-rIT/user/connections.md
+++ b/docs/it-rIT/user/connections.md
@@ -23,7 +23,7 @@ Bluetooth Low Energy is the default and most common connection method on Android
1. Ensure your Meshtastic radio is powered on and in pairing mode.
2. Open the app and navigate to the **Connect** tab.
-3. Tap **Scan for Devices** — nearby Meshtastic radios will appear.
+3. Tap **Scan for Bluetooth devices** — nearby Meshtastic radios will appear.
4. Select your device from the list.
5. Accept the Bluetooth pairing prompt if shown.
diff --git a/docs/it-rIT/user/desktop.md b/docs/it-rIT/user/desktop.md
index eae1617e5..ca7a08633 100644
--- a/docs/it-rIT/user/desktop.md
+++ b/docs/it-rIT/user/desktop.md
@@ -2,7 +2,7 @@
title: Desktop App
parent: User Guide
nav_order: 14
-last_updated: 2026-06-11
+last_updated: 2026-07-07
description: Install and use the Meshtastic Desktop app on Linux, macOS, and Windows — connections, feature parity, and keyboard shortcuts.
aliases:
- desktop
@@ -60,19 +60,19 @@ Bluetooth Low Energy is supported on Desktop via the [Kable](https://github.com/
## Feature Parity
-| Feature | Android | Desktop | Note |
-| -------------------------------------------- | ------- | ------- | ---------------------------------------------- |
-| Messaging | ✓ | ✓ | Full parity |
-| Node List | ✓ | ✓ | Full parity |
-| Mappa | ✓ | ✓ | Full parity |
-| Impostazioni | ✓ | ✓ | Full parity |
-| Bluetooth (BLE) | ✓ | ✓ | Via Kable on desktop |
-| Firmware Update OTA | ✓ | ✗ | Use web flasher |
-| Notifications | ✓ | ✓ | Native OS notifications |
-| Widgets | ✓ | ✗ | Android-only |
-| Android Auto | ✓ | ✗ | Android-only — not available on Desktop or iOS |
-| AI Assistant (Chirpy) | ✓\* | ✗ | Google flavor Android only |
-| App Functions (system AI) | ✓† | ✗ | Google flavor Android only |
+| Feature | Android | Desktop | Note |
+| -------------------------------------------- | ------- | ------- | -------------------------------------------------------------------------- |
+| Messaging | ✓ | ✓ | Full parity |
+| Node List | ✓ | ✓ | Full parity |
+| Mappa | ✓ | ◐ | Map tab exists on desktop, but the interactive map view is Android-only |
+| Impostazioni | ✓ | ✓ | Full parity |
+| Bluetooth (BLE) | ✓ | ✓ | Via Kable on desktop |
+| Aggiornamento Firmware | ✓ | ◐ | Desktop supports in-app USB firmware update; BLE/Wi-Fi OTA is Android-only |
+| Notifications | ✓ | ✓ | Native OS notifications |
+| Widgets | ✓ | ✗ | Android-only |
+| Android Auto | ✓ | ✗ | Android-only — not available on Desktop or iOS |
+| AI Assistant (Chirpy) | ✓\* | ✗ | Google flavor Android only |
+| App Functions (system AI) | ✓† | ✗ | Google flavor Android only |
\*Chirpy AI requires Android 14+ on Google flavor builds with supported hardware.
@@ -84,14 +84,17 @@ The Desktop app uses the same Compose Multiplatform UI with adaptations for larg
### Keyboard Shortcuts
-| Shortcut | Action |
-| ------------------- | ---------------------- |
-| **⌘Q** / **Ctrl+Q** | Quit the application |
-| **⌘,** / **Ctrl+,** | Open Settings |
-| **⌘1** / **Ctrl+1** | Switch to Messages tab |
-| **⌘2** / **Ctrl+2** | Switch to Nodes tab |
-| **⌘3** / **Ctrl+3** | Switch to Map tab |
-| **⌘4** / **Ctrl+4** | Switch to Connect tab |
+All shortcuts use the **Meta** key — that's ⌘ (Command) on macOS and the Super / Windows key on Linux and Windows. (`Ctrl` is not bound.)
+
+| Shortcut | Action |
+| ---------- | ---------------------- |
+| **Meta+Q** | Quit the application |
+| **Meta+,** | Open Settings |
+| **Meta+1** | Switch to Messages tab |
+| **Meta+2** | Switch to Nodes tab |
+| **Meta+3** | Switch to Map tab |
+| **Meta+4** | Switch to Connect tab |
+| **Meta+/** | Open About |
### Window & System Tray
@@ -123,7 +126,6 @@ Individual doc pages render with full formatting:
```bash
git clone https://github.com/meshtastic/Meshtastic-Android.git
cd Meshtastic-Android
-git submodule update --init
./gradlew :desktopApp:run
```
@@ -134,7 +136,8 @@ Requisiti:
## Limitazioni conosciute
-- No OTA firmware updates (use web flasher)
+- 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
- BLE bonding is not yet supported on desktop (pairing works without bonding)
@@ -142,7 +145,7 @@ Requisiti:
## Related Topics
- [Connections](connections) — connection methods overview
-- [Firmware Updates](firmware) — use the [Web Flasher](https://flasher.meshtastic.org) for desktop firmware updates
+- [Firmware Updates](firmware) — in-app USB update on desktop, or the [Web Flasher](https://flasher.meshtastic.org)
---
diff --git a/docs/it-rIT/user/discovery.md b/docs/it-rIT/user/discovery.md
index 53269593b..ee993e779 100644
--- a/docs/it-rIT/user/discovery.md
+++ b/docs/it-rIT/user/discovery.md
@@ -44,7 +44,6 @@ Before starting, configure these controls:
The **Start** button stays disabled — with an explanation of why — until the scan can run. Common reasons it's disabled:
- The device is **not connected**.
-- The current channel is using the **default channel key** (use a unique key first — see [Messages & Channels](messages-and-channels)).
- **No presets** have been selected to scan.
- The selected preset uses **2.4 GHz**, which your hardware doesn't support.
diff --git a/docs/it-rIT/user/firmware.md b/docs/it-rIT/user/firmware.md
index d086ba81a..1ae5b7fee 100644
--- a/docs/it-rIT/user/firmware.md
+++ b/docs/it-rIT/user/firmware.md
@@ -2,8 +2,8 @@
title: Firmware Updates
parent: User Guide
nav_order: 13
-last_updated: 2026-05-13
-description: Update your radio firmware over Bluetooth — OTA process, version channels, pre-flight checks, and recovery.
+last_updated: 2026-07-07
+description: Update your radio firmware over Bluetooth or USB — OTA process, version channels, pre-flight checks, and recovery.
aliases:
- firmware
- update
@@ -17,7 +17,7 @@ Keep your Meshtastic radio up to date with the latest firmware for new features,
## Checking for Updates
-1. Navigate to **Settings → Firmware Update** or tap the firmware notification if shown.
+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.
2. The app checks for available firmware versions.
3. Available updates show the version number and changelog summary.
@@ -39,19 +39,26 @@ The most common update method for Android users:

-### USB Flashing
+### In-App USB Update
-For recovery or when OTA is unavailable:
+When your radio is connected over **USB/serial** (rather than Bluetooth), the Firmware Update screen offers **USB File Transfer**. The app reboots the device into DFU mode, then prompts you to save the `.uf2` file to the device's DFU drive using the system file picker. This option appears only on a USB/serial connection — it is not available over Bluetooth.
+
+> ℹ️ **nRF bootloader note:** Some devices (e.g. RAK WisBlock RAK4631) need their bootloader flashed with the vendor's serial DFU tool (such as `adafruit-nrfutil`) — copying the `.uf2` alone won't update the bootloader. The app surfaces a hint when this applies.
+
+### Other Flashing Options
+
+For recovery or when neither OTA nor in-app USB is available:
- Use the [Meshtastic Web Flasher](https://flasher.meshtastic.org)
- Or the [Meshtastic CLI tool](https://meshtastic.org/docs/getting-started/flashing-firmware) on desktop
## Version Channels
-| Canale | Descrizione |
-| ------- | ------------------------------------------- |
-| Stabile | Recommended for most users; tested releases |
-| Alfa | Preview releases; may contain bugs |
+| Canale | Descrizione |
+| ---------- | -------------------------------------------------------------------------- |
+| Stabile | Recommended for most users; tested releases |
+| Alfa | Preview releases; may contain bugs |
+| Local File | Flash a firmware file you select yourself, instead of a downloaded release |
## Pre-Update Checklist
@@ -73,7 +80,7 @@ Once the update succeeds:
- The radio will reboot automatically
- Bluetooth connection will re-establish
- Verify your settings are intact
-- Check the firmware version in **Settings → About**
+- Confirm the new version under **Currently Installed** on the Firmware Update screen — it's also shown on the node's detail page and the Connections screen

diff --git a/docs/it-rIT/user/messages-and-channels.md b/docs/it-rIT/user/messages-and-channels.md
index db72597b5..d6c665a83 100644
--- a/docs/it-rIT/user/messages-and-channels.md
+++ b/docs/it-rIT/user/messages-and-channels.md
@@ -116,12 +116,16 @@ You can search the full history of any conversation directly from the chat scree

-> 💡 **Tip:** Search is full-text and stays within the conversation you opened it from — it doesn't search across other channels or contacts. Matching is fast even on long histories because messages are indexed locally.
+> 💡 **Tip:** Search is full-text and stays within the conversation you opened it from — it doesn't search across other channels or contacts. It matches against the messages already stored on your device, so it works fully offline.
### Message Bubbles
Messages appear as chat bubbles — sent messages on the right, received messages on the left. Each bubble shows the sender, timestamp, and delivery status. Messages with replies include a quoted preview of the original message above the response.
+### Mentions
+
+Type `@` while composing to mention a node — a picker suggests matching contacts as you type. In a received message, a mention appears as a highlighted chip showing the node's name; tap it to jump straight to that node's detail page.
+
### Reactions
React to messages with emoji:
@@ -143,6 +147,7 @@ Long-press any message to access:
- **Copy** — copy message text to clipboard
- **Reply** — quote the message in your response
- **React** — add an emoji reaction
+- **Translate** — translate a received message into your device language and toggle between the original and translated text (Google Play build only; uses on-device translation)
- **Delete** — remove a message you sent (local deletion)
### Message Priority
diff --git a/docs/it-rIT/user/mqtt.md b/docs/it-rIT/user/mqtt.md
index ef7253071..8576b934a 100644
--- a/docs/it-rIT/user/mqtt.md
+++ b/docs/it-rIT/user/mqtt.md
@@ -56,6 +56,8 @@ A gateway node with internet access (WiFi or Ethernet) publishes mesh messages t
The community maintains a public broker at `mqtt.meshtastic.org`. This is intended for general use and testing.
+> ℹ️ **Note:** Connections to `mqtt.meshtastic.org` always use TLS (port 8883), even if the TLS toggle is off. For any other broker, TLS is used only when you enable it (port 8883 with TLS, 1883 without).
+
> 🔒 **Privacy:** Messages on the public broker are readable by anyone subscribed. Always use channel encryption for private communications.
### Private Broker
diff --git a/docs/it-rIT/user/node-metrics.md b/docs/it-rIT/user/node-metrics.md
index f74d222e6..a17863053 100644
--- a/docs/it-rIT/user/node-metrics.md
+++ b/docs/it-rIT/user/node-metrics.md
@@ -55,12 +55,15 @@ The BME680 **IAQ (Indoor Air Quality)** index is a single 0–500+ value derived
Air Quality is a dedicated metrics view for nodes equipped with a particulate-matter and/or CO₂ sensor. It is **separate from the BME680 IAQ reading** listed under Environment Metrics — IAQ is a single gas-resistance-derived index, while the Air Quality view charts the underlying particulate and CO₂ measurements.
-| Metrico | Unit | Descrizione |
-| --------------------- | ----- | ---------------------------------------------------- |
-| PM1.0 | µg/m³ | Particulate matter up to 1.0 micron |
-| PM2.5 | µg/m³ | Particulate matter up to 2.5 microns |
-| PM10 | µg/m³ | Particulate matter up to 10 microns |
-| CO₂ | ppm | Carbon dioxide concentration |
+| Metrico | Unit | Descrizione |
+| --------------------- | --------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| PM1.0 | µg/m³ | Particulate matter up to 1.0 micron |
+| PM2.5 | µg/m³ | Particulate matter up to 2.5 microns |
+| PM10 | µg/m³ | Particulate matter up to 10 microns |
+| AQI | EPA index | EPA **NowCast** AQI computed from your recent PM2.5 history, with a color-coded severity label. Shown next to PM2.5 once enough readings have accumulated. |
+| CO₂ | ppm | Carbon dioxide concentration |
+| CO₂ temperature | °C / °F | Temperature reported by the CO₂ sensor itself (e.g. SCD4x) |
+| CO₂ humidity | % | Relative humidity reported by the CO₂ sensor |
CO₂ readings are color-coded by severity to make air quality easy to read at a glance:
@@ -98,12 +101,12 @@ Radio signal quality information:
Signal quality is rated from **SNR relative to the active LoRa modem preset's demodulation floor**, not from fixed thresholds — a given SNR means different things on different presets (e.g. −15 dB is fine on LongSlow but unusable on ShortFast). RSSI is shown but is not part of the rating. Letting `limit` be the preset's SNR limit:
-| Quality | Criteria |
-| -------- | ------------------------------------------------ |
-| Buono | SNR above the preset's limit |
-| Discreto | within 5.5 dB below the limit |
-| Scarso | within 7.5 dB below the limit |
-| Nessuno | more than 7.5 dB below the limit |
+| Quality | Criteria |
+| -------- | ------------------------------------------------------------------------- |
+| Buono | SNR above the preset's limit |
+| Discreto | up to 5.5 dB below the limit |
+| Scarso | between 5.5 dB and 7.5 dB below the limit |
+| Nessuno | more than 7.5 dB below the limit |
See [Understanding the Signal Meter](signal-meter) for the full explanation.
diff --git a/docs/it-rIT/user/settings-radio-user.md b/docs/it-rIT/user/settings-radio-user.md
index 575552b2d..34ff78362 100644
--- a/docs/it-rIT/user/settings-radio-user.md
+++ b/docs/it-rIT/user/settings-radio-user.md
@@ -74,6 +74,8 @@ After modifying settings, tap **Save** to write the configuration to your radio.
| ~~Long Slow~~ | ~30 km | 0,18 kbps | −17.5 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.
+
#### Choosing a Modem Preset
The modem preset controls the fundamental tradeoff between **range** and **data rate**:
diff --git a/docs/it-rIT/user/signal-meter.md b/docs/it-rIT/user/signal-meter.md
index afc31c1a4..1ea1dbc67 100644
--- a/docs/it-rIT/user/signal-meter.md
+++ b/docs/it-rIT/user/signal-meter.md
@@ -52,12 +52,12 @@ The app rates your signal quality (None, Bad, Fair, or Good) from **SNR alone, m
Because the rating is relative to the preset limit, the _same_ SNR can rate differently on different presets — `-15 dB` is healthy on `LongSlow` but unusable on `ShortFast`. Letting `limit` be the active preset's SNR Limit, here is how the app picks the bars (or color):
-| Level | Bars | Criteria | Meaning |
-| -------- | ---- | ------------------------------------ | ---------------------------------------------------------------------------------------- |
-| Buono | 3 | SNR **above** the preset's `limit` | Signal is comfortably above the demodulation floor — healthy connection. |
-| Discreto | 2 | within `5.5 dB` below the `limit` | Decodable, but getting close to the floor. |
-| Scarso | 1 | within `7.5 dB` below the `limit` | At the very edge of what the preset can recover. |
-| Nessuno | 0 | more than `7.5 dB` below the `limit` | Below the floor — transmission lost to noise. |
+| Level | Bars | Criteria | Meaning |
+| -------- | ---- | ----------------------------------------------- | ---------------------------------------------------------------------------------------- |
+| Buono | 3 | SNR **above** the preset's `limit` | Signal is comfortably above the demodulation floor — healthy connection. |
+| Discreto | 2 | up to `5.5 dB` below the `limit` | Decodable, but getting close to the floor. |
+| Scarso | 1 | between `5.5 dB` and `7.5 dB` below the `limit` | At the very edge of what the preset can recover. |
+| Nessuno | 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.
diff --git a/docs/it-rIT/user/telemetry-and-sensors.md b/docs/it-rIT/user/telemetry-and-sensors.md
index d8cea774f..6ba05324f 100644
--- a/docs/it-rIT/user/telemetry-and-sensors.md
+++ b/docs/it-rIT/user/telemetry-and-sensors.md
@@ -103,7 +103,9 @@ Nodes with particulate matter or CO₂ sensors report air quality data:
| PM10 | µg/m³ | Coarse particulate matter |
| CO₂ | ppm | Carbon dioxide concentration |
-The CO₂ reading is color-coded by severity (Good → Stuffy → Poor → Unsafe → Evacuate). See [Node Metrics — Air Quality](node-metrics#air-quality-metrics) for the exact ppm bands and colors.
+CO₂ sensors such as the SCD4x also report their own temperature and humidity, which appear alongside the readings above. From PM2.5 history the app additionally derives an **EPA NowCast AQI** value.
+
+The CO₂ reading is color-coded by severity (Good → Stuffy → Poor → Unsafe → Evacuate). See [Node Metrics — Air Quality](node-metrics#air-quality-metrics) for the exact ppm bands, colors, and AQI detail.
Air quality data can be viewed as info cards on the node detail screen, charted over time, and exported to CSV.
diff --git a/docs/it-rIT/user/translate.md b/docs/it-rIT/user/translate.md
index 0dd7318a5..4f5d7ca2a 100644
--- a/docs/it-rIT/user/translate.md
+++ b/docs/it-rIT/user/translate.md
@@ -18,11 +18,11 @@ Contributing translations helps make Meshtastic accessible to a wider audience.
## What Gets Translated
-| Resource | Source Location | Note |
-| ----------------- | ------------------------------------- | ---------------------------------------------------------------------- |
-| UI strings | `composeResources/values/strings.xml` | Buttons, labels, messages, and all user-visible text |
-| User Guide pages | `docs/user/*.md` | In-app documentation shown in Help & Documentation |
-| Fastlane metadata | `fastlane/metadata/android/en-US/` | App Store listing title, description, and changelogs |
+| Resource | Source Location | Note |
+| ----------------- | ------------------------------------------------------------------- | ---------------------------------------------------------------------- |
+| UI strings | `core/resources/src/commonMain/composeResources/values/strings.xml` | Buttons, labels, messages, and all user-visible text |
+| User Guide pages | `docs/en/user/*.md` | In-app documentation shown in Help & Documentation |
+| Fastlane metadata | `fastlane/metadata/android/en-US/` | App Store listing title, description, and changelogs |
> ⚠️ **Note:** Developer Guide pages are English-only. Code-focused documentation targeting contributors is not translated.
diff --git a/docs/it-rIT/user/units-and-locale.md b/docs/it-rIT/user/units-and-locale.md
index eb6d3fce3..0a4923eff 100644
--- a/docs/it-rIT/user/units-and-locale.md
+++ b/docs/it-rIT/user/units-and-locale.md
@@ -14,7 +14,7 @@ The Meshtastic app automatically displays temperatures, distances, speeds, and t
## Come funziona
-Meshtastic radios always transmit data in **metric units** (meters, °C, km/h, hPa, etc.). When the app receives this data, it uses the `MetricFormatter` utility to convert and display values in whatever unit system your device's locale specifies.
+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.
On Android, your measurement preferences are determined by your system **Language & Region** settings. On Desktop (JVM), the app uses the JVM's default `Locale`.
@@ -115,12 +115,13 @@ On Android, your measurement system (metric vs imperial) is tied to your region
2. Change your **Region** or **Measurement units** preference
3. Return to Meshtastic — values update immediately
-> 💡 **Tip:** The app uses `MetricFormatter` from `core:common`. All measurement formatting is handled by a shared KMP utility that respects your platform's locale. Developers adding new measurement displays should use `MetricFormatter` rather than hard-coding unit conversions.
+> 💡 **Tip:** All measurement formatting is handled centrally and respects your platform's locale, so units stay consistent everywhere in the app.
## Related Topics
- [Node Metrics](node-metrics) — where temperature, distance, and sensor values are displayed
- [Telemetry & Sensors](telemetry-and-sensors) — the sensors that produce these measurements
+- [Measurement & Formatting](../developer/measurement) — developer reference for the formatting utilities
- [Settings — Radio & User](settings-radio-user) — region setting that drives unit selection
---
diff --git a/docs/iw-rIL/user/android-auto.md b/docs/iw-rIL/user/android-auto.md
index c56b0a8d0..7e997abd5 100644
--- a/docs/iw-rIL/user/android-auto.md
+++ b/docs/iw-rIL/user/android-auto.md
@@ -2,7 +2,7 @@
title: Android Auto
parent: User Guide
nav_order: 18
-last_updated: 2026-06-11
+last_updated: 2026-07-07
description: Use Meshtastic hands-free on an Android Auto head unit — read messages aloud, reply by voice, and check nodes and mesh status while driving.
aliases:
- android-auto
@@ -17,9 +17,11 @@ Meshtastic integrates with Android Auto so you can stay in touch with your mesh
> ⚠️ **Note:** Android Auto support is available on **Google-flavor Android builds only**. It is not included in the F-Droid build, and it is not available on Desktop or iOS.
+> ℹ️ **What ships today:** The Google Play build provides **notification-only** car messaging — incoming messages are announced on the head unit and you reply through its notification controls. The full tabbed **Messages / Nodes / Status** experience described below is a beta built on the Android Car App Library (Google's templated car UI is currently restricted to Closed/Internal Play tracks), so it appears only in builds compiled with `-PenableCarTemplates=true`. The rest of this page documents that beta experience.
+
## Overview
-When your phone is connected to an Android Auto head unit (or the Desktop Head Unit emulator used for development), Meshtastic appears as a messaging app built with the Android Car App Library. The car interface presents a tabbed Home screen optimized for driving-safe, glanceable use:
+When your phone is connected to an Android Auto head unit (or the Desktop Head Unit emulator used for development), the beta build presents Meshtastic as a messaging app built with the Android Car App Library, with a tabbed Home screen optimized for driving-safe, glanceable use:
- **Messages** — recent conversations, with hands-free reading and replies.
- **Nodes** — the mesh node list, with a node-detail view.
diff --git a/docs/iw-rIL/user/connections.md b/docs/iw-rIL/user/connections.md
index 07f4ce2c8..0a8227153 100644
--- a/docs/iw-rIL/user/connections.md
+++ b/docs/iw-rIL/user/connections.md
@@ -23,7 +23,7 @@ Bluetooth Low Energy is the default and most common connection method on Android
1. Ensure your Meshtastic radio is powered on and in pairing mode.
2. Open the app and navigate to the **Connect** tab.
-3. Tap **Scan for Devices** — nearby Meshtastic radios will appear.
+3. Tap **Scan for Bluetooth devices** — nearby Meshtastic radios will appear.
4. Select your device from the list.
5. Accept the Bluetooth pairing prompt if shown.
diff --git a/docs/iw-rIL/user/desktop.md b/docs/iw-rIL/user/desktop.md
index cad604034..1dcd2ce50 100644
--- a/docs/iw-rIL/user/desktop.md
+++ b/docs/iw-rIL/user/desktop.md
@@ -2,7 +2,7 @@
title: Desktop App
parent: User Guide
nav_order: 14
-last_updated: 2026-06-11
+last_updated: 2026-07-07
description: Install and use the Meshtastic Desktop app on Linux, macOS, and Windows — connections, feature parity, and keyboard shortcuts.
aliases:
- desktop
@@ -60,19 +60,19 @@ Bluetooth Low Energy is supported on Desktop via the [Kable](https://github.com/
## Feature Parity
-| Feature | Android | Desktop | Notes |
-| -------------------------------------------- | ------- | ------- | ---------------------------------------------- |
-| Messaging | ✓ | ✓ | Full parity |
-| Node List | ✓ | ✓ | Full parity |
-| מפה | ✓ | ✓ | Full parity |
-| הגדרות | ✓ | ✓ | Full parity |
-| Bluetooth (BLE) | ✓ | ✓ | Via Kable on desktop |
-| Firmware Update OTA | ✓ | ✗ | Use web flasher |
-| Notifications | ✓ | ✓ | Native OS notifications |
-| Widgets | ✓ | ✗ | Android-only |
-| Android Auto | ✓ | ✗ | Android-only — not available on Desktop or iOS |
-| AI Assistant (Chirpy) | ✓\* | ✗ | Google flavor Android only |
-| App Functions (system AI) | ✓† | ✗ | Google flavor Android only |
+| Feature | Android | Desktop | Notes |
+| -------------------------------------------- | ------- | ------- | -------------------------------------------------------------------------- |
+| Messaging | ✓ | ✓ | Full parity |
+| Node List | ✓ | ✓ | Full parity |
+| מפה | ✓ | ◐ | Map tab exists on desktop, but the interactive map view is Android-only |
+| הגדרות | ✓ | ✓ | Full parity |
+| Bluetooth (BLE) | ✓ | ✓ | Via Kable on desktop |
+| Firmware Update | ✓ | ◐ | Desktop supports in-app USB firmware update; BLE/Wi-Fi OTA is Android-only |
+| Notifications | ✓ | ✓ | Native OS notifications |
+| Widgets | ✓ | ✗ | Android-only |
+| Android Auto | ✓ | ✗ | Android-only — not available on Desktop or iOS |
+| AI Assistant (Chirpy) | ✓\* | ✗ | Google flavor Android only |
+| App Functions (system AI) | ✓† | ✗ | Google flavor Android only |
\*Chirpy AI requires Android 14+ on Google flavor builds with supported hardware.
@@ -84,14 +84,17 @@ The Desktop app uses the same Compose Multiplatform UI with adaptations for larg
### Keyboard Shortcuts
-| Shortcut | Action |
-| ------------------- | ---------------------- |
-| **⌘Q** / **Ctrl+Q** | Quit the application |
-| **⌘,** / **Ctrl+,** | Open Settings |
-| **⌘1** / **Ctrl+1** | Switch to Messages tab |
-| **⌘2** / **Ctrl+2** | Switch to Nodes tab |
-| **⌘3** / **Ctrl+3** | Switch to Map tab |
-| **⌘4** / **Ctrl+4** | Switch to Connect tab |
+All shortcuts use the **Meta** key — that's ⌘ (Command) on macOS and the Super / Windows key on Linux and Windows. (`Ctrl` is not bound.)
+
+| Shortcut | Action |
+| ---------- | ---------------------- |
+| **Meta+Q** | Quit the application |
+| **Meta+,** | Open Settings |
+| **Meta+1** | Switch to Messages tab |
+| **Meta+2** | Switch to Nodes tab |
+| **Meta+3** | Switch to Map tab |
+| **Meta+4** | Switch to Connect tab |
+| **Meta+/** | Open About |
### Window & System Tray
@@ -123,7 +126,6 @@ Individual doc pages render with full formatting:
```bash
git clone https://github.com/meshtastic/Meshtastic-Android.git
cd Meshtastic-Android
-git submodule update --init
./gradlew :desktopApp:run
```
@@ -134,7 +136,8 @@ Requirements:
## Known Limitations
-- No OTA firmware updates (use web flasher)
+- 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
- BLE bonding is not yet supported on desktop (pairing works without bonding)
@@ -142,7 +145,7 @@ Requirements:
## Related Topics
- [Connections](connections) — connection methods overview
-- [Firmware Updates](firmware) — use the [Web Flasher](https://flasher.meshtastic.org) for desktop firmware updates
+- [Firmware Updates](firmware) — in-app USB update on desktop, or the [Web Flasher](https://flasher.meshtastic.org)
---
diff --git a/docs/iw-rIL/user/discovery.md b/docs/iw-rIL/user/discovery.md
index 9be27891b..4750fec7b 100644
--- a/docs/iw-rIL/user/discovery.md
+++ b/docs/iw-rIL/user/discovery.md
@@ -44,7 +44,6 @@ Before starting, configure these controls:
The **Start** button stays disabled — with an explanation of why — until the scan can run. Common reasons it's disabled:
- The device is **not connected**.
-- The current channel is using the **default channel key** (use a unique key first — see [Messages & Channels](messages-and-channels)).
- **No presets** have been selected to scan.
- The selected preset uses **2.4 GHz**, which your hardware doesn't support.
diff --git a/docs/iw-rIL/user/firmware.md b/docs/iw-rIL/user/firmware.md
index f081c09d9..78d920812 100644
--- a/docs/iw-rIL/user/firmware.md
+++ b/docs/iw-rIL/user/firmware.md
@@ -2,8 +2,8 @@
title: Firmware Updates
parent: User Guide
nav_order: 13
-last_updated: 2026-05-13
-description: Update your radio firmware over Bluetooth — OTA process, version channels, pre-flight checks, and recovery.
+last_updated: 2026-07-07
+description: Update your radio firmware over Bluetooth or USB — OTA process, version channels, pre-flight checks, and recovery.
aliases:
- firmware
- update
@@ -17,7 +17,7 @@ Keep your Meshtastic radio up to date with the latest firmware for new features,
## Checking for Updates
-1. Navigate to **Settings → Firmware Update** or tap the firmware notification if shown.
+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.
2. The app checks for available firmware versions.
3. Available updates show the version number and changelog summary.
@@ -39,19 +39,26 @@ The most common update method for Android users:

-### USB Flashing
+### In-App USB Update
-For recovery or when OTA is unavailable:
+When your radio is connected over **USB/serial** (rather than Bluetooth), the Firmware Update screen offers **USB File Transfer**. The app reboots the device into DFU mode, then prompts you to save the `.uf2` file to the device's DFU drive using the system file picker. This option appears only on a USB/serial connection — it is not available over Bluetooth.
+
+> ℹ️ **nRF bootloader note:** Some devices (e.g. RAK WisBlock RAK4631) need their bootloader flashed with the vendor's serial DFU tool (such as `adafruit-nrfutil`) — copying the `.uf2` alone won't update the bootloader. The app surfaces a hint when this applies.
+
+### Other Flashing Options
+
+For recovery or when neither OTA nor in-app USB is available:
- Use the [Meshtastic Web Flasher](https://flasher.meshtastic.org)
- Or the [Meshtastic CLI tool](https://meshtastic.org/docs/getting-started/flashing-firmware) on desktop
## Version Channels
-| ערוץ | תיאור |
-| ------ | ------------------------------------------- |
-| Stable | Recommended for most users; tested releases |
-| Alpha | Preview releases; may contain bugs |
+| ערוץ | תיאור |
+| ---------- | -------------------------------------------------------------------------- |
+| Stable | Recommended for most users; tested releases |
+| Alpha | Preview releases; may contain bugs |
+| Local File | Flash a firmware file you select yourself, instead of a downloaded release |
## Pre-Update Checklist
@@ -73,7 +80,7 @@ Once the update succeeds:
- The radio will reboot automatically
- Bluetooth connection will re-establish
- Verify your settings are intact
-- Check the firmware version in **Settings → About**
+- Confirm the new version under **Currently Installed** on the Firmware Update screen — it's also shown on the node's detail page and the Connections screen

diff --git a/docs/iw-rIL/user/messages-and-channels.md b/docs/iw-rIL/user/messages-and-channels.md
index a3ea14b35..4ff284fd2 100644
--- a/docs/iw-rIL/user/messages-and-channels.md
+++ b/docs/iw-rIL/user/messages-and-channels.md
@@ -116,12 +116,16 @@ You can search the full history of any conversation directly from the chat scree

-> 💡 **Tip:** Search is full-text and stays within the conversation you opened it from — it doesn't search across other channels or contacts. Matching is fast even on long histories because messages are indexed locally.
+> 💡 **Tip:** Search is full-text and stays within the conversation you opened it from — it doesn't search across other channels or contacts. It matches against the messages already stored on your device, so it works fully offline.
### Message Bubbles
Messages appear as chat bubbles — sent messages on the right, received messages on the left. Each bubble shows the sender, timestamp, and delivery status. Messages with replies include a quoted preview of the original message above the response.
+### Mentions
+
+Type `@` while composing to mention a node — a picker suggests matching contacts as you type. In a received message, a mention appears as a highlighted chip showing the node's name; tap it to jump straight to that node's detail page.
+
### Reactions
React to messages with emoji:
@@ -143,6 +147,7 @@ Long-press any message to access:
- **Copy** — copy message text to clipboard
- **Reply** — quote the message in your response
- **React** — add an emoji reaction
+- **Translate** — translate a received message into your device language and toggle between the original and translated text (Google Play build only; uses on-device translation)
- **Delete** — remove a message you sent (local deletion)
### Message Priority
diff --git a/docs/iw-rIL/user/mqtt.md b/docs/iw-rIL/user/mqtt.md
index 08b86ba3f..c17e5cfde 100644
--- a/docs/iw-rIL/user/mqtt.md
+++ b/docs/iw-rIL/user/mqtt.md
@@ -56,6 +56,8 @@ A gateway node with internet access (WiFi or Ethernet) publishes mesh messages t
The community maintains a public broker at `mqtt.meshtastic.org`. This is intended for general use and testing.
+> ℹ️ **Note:** Connections to `mqtt.meshtastic.org` always use TLS (port 8883), even if the TLS toggle is off. For any other broker, TLS is used only when you enable it (port 8883 with TLS, 1883 without).
+
> 🔒 **Privacy:** Messages on the public broker are readable by anyone subscribed. Always use channel encryption for private communications.
### Private Broker
diff --git a/docs/iw-rIL/user/node-metrics.md b/docs/iw-rIL/user/node-metrics.md
index 4c3d67596..32e47b949 100644
--- a/docs/iw-rIL/user/node-metrics.md
+++ b/docs/iw-rIL/user/node-metrics.md
@@ -55,12 +55,15 @@ The BME680 **IAQ (Indoor Air Quality)** index is a single 0–500+ value derived
Air Quality is a dedicated metrics view for nodes equipped with a particulate-matter and/or CO₂ sensor. It is **separate from the BME680 IAQ reading** listed under Environment Metrics — IAQ is a single gas-resistance-derived index, while the Air Quality view charts the underlying particulate and CO₂ measurements.
-| Metric | Unit | תיאור |
-| --------------------- | ----- | ---------------------------------------------------- |
-| PM1.0 | µg/m³ | Particulate matter up to 1.0 micron |
-| PM2.5 | µg/m³ | Particulate matter up to 2.5 microns |
-| PM10 | µg/m³ | Particulate matter up to 10 microns |
-| CO₂ | ppm | Carbon dioxide concentration |
+| Metric | Unit | תיאור |
+| --------------------- | --------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| PM1.0 | µg/m³ | Particulate matter up to 1.0 micron |
+| PM2.5 | µg/m³ | Particulate matter up to 2.5 microns |
+| PM10 | µg/m³ | Particulate matter up to 10 microns |
+| AQI | EPA index | EPA **NowCast** AQI computed from your recent PM2.5 history, with a color-coded severity label. Shown next to PM2.5 once enough readings have accumulated. |
+| CO₂ | ppm | Carbon dioxide concentration |
+| CO₂ temperature | °C / °F | Temperature reported by the CO₂ sensor itself (e.g. SCD4x) |
+| CO₂ humidity | % | Relative humidity reported by the CO₂ sensor |
CO₂ readings are color-coded by severity to make air quality easy to read at a glance:
@@ -98,12 +101,12 @@ Radio signal quality information:
Signal quality is rated from **SNR relative to the active LoRa modem preset's demodulation floor**, not from fixed thresholds — a given SNR means different things on different presets (e.g. −15 dB is fine on LongSlow but unusable on ShortFast). RSSI is shown but is not part of the rating. Letting `limit` be the preset's SNR limit:
-| Quality | Criteria |
-| ------- | ------------------------------------------------ |
-| Good | SNR above the preset's limit |
-| Fair | within 5.5 dB below the limit |
-| Bad | within 7.5 dB below the limit |
-| None | more than 7.5 dB below the limit |
+| 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 |
+| None | more than 7.5 dB below the limit |
See [Understanding the Signal Meter](signal-meter) for the full explanation.
diff --git a/docs/iw-rIL/user/settings-radio-user.md b/docs/iw-rIL/user/settings-radio-user.md
index 5b435b7b9..8e4015024 100644
--- a/docs/iw-rIL/user/settings-radio-user.md
+++ b/docs/iw-rIL/user/settings-radio-user.md
@@ -74,6 +74,8 @@ After modifying settings, tap **Save** to write the configuration to your radio.
| ~~Long Slow~~ | ~30 km | 0.18 kbps | −17.5 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.
+
#### Choosing a Modem Preset
The modem preset controls the fundamental tradeoff between **range** and **data rate**:
diff --git a/docs/iw-rIL/user/signal-meter.md b/docs/iw-rIL/user/signal-meter.md
index 43f3aeae7..71741a4c2 100644
--- a/docs/iw-rIL/user/signal-meter.md
+++ b/docs/iw-rIL/user/signal-meter.md
@@ -52,12 +52,12 @@ The app rates your signal quality (None, Bad, Fair, or Good) from **SNR alone, m
Because the rating is relative to the preset limit, the _same_ SNR can rate differently on different presets — `-15 dB` is healthy on `LongSlow` but unusable on `ShortFast`. Letting `limit` be the active preset's SNR Limit, here is how the app picks the bars (or color):
-| Level | Bars | Criteria | Meaning |
-| ----- | ---- | ------------------------------------ | ---------------------------------------------------------------------------------------- |
-| Good | 3 | SNR **above** the preset's `limit` | Signal is comfortably above the demodulation floor — healthy connection. |
-| Fair | 2 | within `5.5 dB` below the `limit` | Decodable, but getting close to the floor. |
-| Bad | 1 | within `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. |
+| 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. |
+| 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.
diff --git a/docs/iw-rIL/user/telemetry-and-sensors.md b/docs/iw-rIL/user/telemetry-and-sensors.md
index a8d61edf9..387559760 100644
--- a/docs/iw-rIL/user/telemetry-and-sensors.md
+++ b/docs/iw-rIL/user/telemetry-and-sensors.md
@@ -103,7 +103,9 @@ Nodes with particulate matter or CO₂ sensors report air quality data:
| PM10 | µg/m³ | Coarse particulate matter |
| CO₂ | ppm | Carbon dioxide concentration |
-The CO₂ reading is color-coded by severity (Good → Stuffy → Poor → Unsafe → Evacuate). See [Node Metrics — Air Quality](node-metrics#air-quality-metrics) for the exact ppm bands and colors.
+CO₂ sensors such as the SCD4x also report their own temperature and humidity, which appear alongside the readings above. From PM2.5 history the app additionally derives an **EPA NowCast AQI** value.
+
+The CO₂ reading is color-coded by severity (Good → Stuffy → Poor → Unsafe → Evacuate). See [Node Metrics — Air Quality](node-metrics#air-quality-metrics) for the exact ppm bands, colors, and AQI detail.
Air quality data can be viewed as info cards on the node detail screen, charted over time, and exported to CSV.
diff --git a/docs/iw-rIL/user/translate.md b/docs/iw-rIL/user/translate.md
index 25aa4693c..70c966fed 100644
--- a/docs/iw-rIL/user/translate.md
+++ b/docs/iw-rIL/user/translate.md
@@ -18,11 +18,11 @@ Contributing translations helps make Meshtastic accessible to a wider audience.
## What Gets Translated
-| Resource | Source Location | Notes |
-| ----------------- | ------------------------------------- | ---------------------------------------------------------------------- |
-| UI strings | `composeResources/values/strings.xml` | Buttons, labels, messages, and all user-visible text |
-| User Guide pages | `docs/user/*.md` | In-app documentation shown in Help & Documentation |
-| Fastlane metadata | `fastlane/metadata/android/en-US/` | App Store listing title, description, and changelogs |
+| Resource | Source Location | Notes |
+| ----------------- | ------------------------------------------------------------------- | ---------------------------------------------------------------------- |
+| UI strings | `core/resources/src/commonMain/composeResources/values/strings.xml` | Buttons, labels, messages, and all user-visible text |
+| User Guide pages | `docs/en/user/*.md` | In-app documentation shown in Help & Documentation |
+| Fastlane metadata | `fastlane/metadata/android/en-US/` | App Store listing title, description, and changelogs |
> ⚠️ **Note:** Developer Guide pages are English-only. Code-focused documentation targeting contributors is not translated.
diff --git a/docs/iw-rIL/user/units-and-locale.md b/docs/iw-rIL/user/units-and-locale.md
index feaf6f610..2ccaeb96e 100644
--- a/docs/iw-rIL/user/units-and-locale.md
+++ b/docs/iw-rIL/user/units-and-locale.md
@@ -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 uses the `MetricFormatter` utility to convert and display values in whatever unit system your device's locale specifies.
+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.
On Android, your measurement preferences are determined by your system **Language & Region** settings. On Desktop (JVM), the app uses the JVM's default `Locale`.
@@ -115,12 +115,13 @@ On Android, your measurement system (metric vs imperial) is tied to your region
2. Change your **Region** or **Measurement units** preference
3. Return to Meshtastic — values update immediately
-> 💡 **Tip:** The app uses `MetricFormatter` from `core:common`. All measurement formatting is handled by a shared KMP utility that respects your platform's locale. Developers adding new measurement displays should use `MetricFormatter` rather than hard-coding unit conversions.
+> 💡 **Tip:** All measurement formatting is handled centrally and respects your platform's locale, so units stay consistent everywhere in the app.
## Related Topics
- [Node Metrics](node-metrics) — where temperature, distance, and sensor values are displayed
- [Telemetry & Sensors](telemetry-and-sensors) — the sensors that produce these measurements
+- [Measurement & Formatting](../developer/measurement) — developer reference for the formatting utilities
- [Settings — Radio & User](settings-radio-user) — region setting that drives unit selection
---
diff --git a/docs/ja-rJP/user/android-auto.md b/docs/ja-rJP/user/android-auto.md
index a95d39a87..801462f19 100644
--- a/docs/ja-rJP/user/android-auto.md
+++ b/docs/ja-rJP/user/android-auto.md
@@ -2,7 +2,7 @@
title: Android Auto
parent: User Guide
nav_order: 18
-last_updated: 2026-06-11
+last_updated: 2026-07-07
description: Use Meshtastic hands-free on an Android Auto head unit — read messages aloud, reply by voice, and check nodes and mesh status while driving.
aliases:
- android-auto
@@ -17,9 +17,11 @@ Meshtastic integrates with Android Auto so you can stay in touch with your mesh
> ⚠️ **Note:** Android Auto support is available on **Google-flavor Android builds only**. It is not included in the F-Droid build, and it is not available on Desktop or iOS.
+> ℹ️ **What ships today:** The Google Play build provides **notification-only** car messaging — incoming messages are announced on the head unit and you reply through its notification controls. The full tabbed **Messages / Nodes / Status** experience described below is a beta built on the Android Car App Library (Google's templated car UI is currently restricted to Closed/Internal Play tracks), so it appears only in builds compiled with `-PenableCarTemplates=true`. The rest of this page documents that beta experience.
+
## Overview
-When your phone is connected to an Android Auto head unit (or the Desktop Head Unit emulator used for development), Meshtastic appears as a messaging app built with the Android Car App Library. The car interface presents a tabbed Home screen optimized for driving-safe, glanceable use:
+When your phone is connected to an Android Auto head unit (or the Desktop Head Unit emulator used for development), the beta build presents Meshtastic as a messaging app built with the Android Car App Library, with a tabbed Home screen optimized for driving-safe, glanceable use:
- **Messages** — recent conversations, with hands-free reading and replies.
- **Nodes** — the mesh node list, with a node-detail view.
diff --git a/docs/ja-rJP/user/connections.md b/docs/ja-rJP/user/connections.md
index c443dd748..ef6cd9fc1 100644
--- a/docs/ja-rJP/user/connections.md
+++ b/docs/ja-rJP/user/connections.md
@@ -23,7 +23,7 @@ Bluetooth Low Energy は、Android で標準的かつ最も一般的な接続方
1. Meshtastic 無線機の電源が入っていて、ペアリングモードになっていることを確認します。
2. アプリを開き、「**接続**」タブに移動します。
-3. 「**デバイスをスキャン**」をタップすると、近くの Meshtastic 無線機が表示されます。
+3. Tap **Scan for Bluetooth devices** — nearby Meshtastic radios will appear.
4. リストからデバイスを選択します。
5. Bluetooth のペアリング確認が表示されたら承認します。
diff --git a/docs/ja-rJP/user/desktop.md b/docs/ja-rJP/user/desktop.md
index f6401df8b..e9fe20f52 100644
--- a/docs/ja-rJP/user/desktop.md
+++ b/docs/ja-rJP/user/desktop.md
@@ -2,7 +2,7 @@
title: Desktop App
parent: User Guide
nav_order: 14
-last_updated: 2026-06-11
+last_updated: 2026-07-07
description: Install and use the Meshtastic Desktop app on Linux, macOS, and Windows — connections, feature parity, and keyboard shortcuts.
aliases:
- desktop
@@ -60,19 +60,19 @@ Bluetooth Low Energy is supported on Desktop via the [Kable](https://github.com/
## Feature Parity
-| Feature | Android | Desktop | Notes |
-| -------------------------------------------- | ------- | ------- | ---------------------------------------------- |
-| Messaging | ✓ | ✓ | Full parity |
-| Node List | ✓ | ✓ | Full parity |
-| 地図 | ✓ | ✓ | Full parity |
-| 設定 | ✓ | ✓ | Full parity |
-| Bluetooth (BLE) | ✓ | ✓ | Via Kable on desktop |
-| Firmware Update OTA | ✓ | ✗ | Use web flasher |
-| Notifications | ✓ | ✓ | Native OS notifications |
-| Widgets | ✓ | ✗ | Android-only |
-| Android Auto | ✓ | ✗ | Android-only — not available on Desktop or iOS |
-| AI Assistant (Chirpy) | ✓\* | ✗ | Google flavor Android only |
-| App Functions (system AI) | ✓† | ✗ | Google flavor Android only |
+| Feature | Android | Desktop | Notes |
+| -------------------------------------------- | ------- | ------- | -------------------------------------------------------------------------- |
+| Messaging | ✓ | ✓ | Full parity |
+| Node List | ✓ | ✓ | Full parity |
+| 地図 | ✓ | ◐ | Map tab exists on desktop, but the interactive map view is Android-only |
+| 設定 | ✓ | ✓ | Full parity |
+| Bluetooth (BLE) | ✓ | ✓ | Via Kable on desktop |
+| ファームウェアの更新 | ✓ | ◐ | Desktop supports in-app USB firmware update; BLE/Wi-Fi OTA is Android-only |
+| Notifications | ✓ | ✓ | Native OS notifications |
+| Widgets | ✓ | ✗ | Android-only |
+| Android Auto | ✓ | ✗ | Android-only — not available on Desktop or iOS |
+| AI Assistant (Chirpy) | ✓\* | ✗ | Google flavor Android only |
+| App Functions (system AI) | ✓† | ✗ | Google flavor Android only |
\*Chirpy AI requires Android 14+ on Google flavor builds with supported hardware.
@@ -84,14 +84,17 @@ The Desktop app uses the same Compose Multiplatform UI with adaptations for larg
### Keyboard Shortcuts
-| Shortcut | Action |
-| ------------------- | ---------------------- |
-| **⌘Q** / **Ctrl+Q** | Quit the application |
-| **⌘,** / **Ctrl+,** | Open Settings |
-| **⌘1** / **Ctrl+1** | Switch to Messages tab |
-| **⌘2** / **Ctrl+2** | Switch to Nodes tab |
-| **⌘3** / **Ctrl+3** | Switch to Map tab |
-| **⌘4** / **Ctrl+4** | Switch to Connect tab |
+All shortcuts use the **Meta** key — that's ⌘ (Command) on macOS and the Super / Windows key on Linux and Windows. (`Ctrl` is not bound.)
+
+| Shortcut | Action |
+| ---------- | ---------------------- |
+| **Meta+Q** | Quit the application |
+| **Meta+,** | Open Settings |
+| **Meta+1** | Switch to Messages tab |
+| **Meta+2** | Switch to Nodes tab |
+| **Meta+3** | Switch to Map tab |
+| **Meta+4** | Switch to Connect tab |
+| **Meta+/** | Open About |
### Window & System Tray
@@ -123,7 +126,6 @@ Individual doc pages render with full formatting:
```bash
git clone https://github.com/meshtastic/Meshtastic-Android.git
cd Meshtastic-Android
-git submodule update --init
./gradlew :desktopApp:run
```
@@ -134,7 +136,8 @@ Requirements:
## Known Limitations
-- No OTA firmware updates (use web flasher)
+- 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
- BLE bonding is not yet supported on desktop (pairing works without bonding)
@@ -142,7 +145,7 @@ Requirements:
## Related Topics
- [Connections](connections) — connection methods overview
-- [Firmware Updates](firmware) — use the [Web Flasher](https://flasher.meshtastic.org) for desktop firmware updates
+- [Firmware Updates](firmware) — in-app USB update on desktop, or the [Web Flasher](https://flasher.meshtastic.org)
---
diff --git a/docs/ja-rJP/user/discovery.md b/docs/ja-rJP/user/discovery.md
index 8c45d6a8c..bb56a3ace 100644
--- a/docs/ja-rJP/user/discovery.md
+++ b/docs/ja-rJP/user/discovery.md
@@ -44,7 +44,6 @@ Before starting, configure these controls:
The **Start** button stays disabled — with an explanation of why — until the scan can run. Common reasons it's disabled:
- The device is **not connected**.
-- The current channel is using the **default channel key** (use a unique key first — see [Messages & Channels](messages-and-channels)).
- **No presets** have been selected to scan.
- The selected preset uses **2.4 GHz**, which your hardware doesn't support.
diff --git a/docs/ja-rJP/user/firmware.md b/docs/ja-rJP/user/firmware.md
index aa03c4040..d0a7a14e7 100644
--- a/docs/ja-rJP/user/firmware.md
+++ b/docs/ja-rJP/user/firmware.md
@@ -2,8 +2,8 @@
title: Firmware Updates
parent: User Guide
nav_order: 13
-last_updated: 2026-05-13
-description: Update your radio firmware over Bluetooth — OTA process, version channels, pre-flight checks, and recovery.
+last_updated: 2026-07-07
+description: Update your radio firmware over Bluetooth or USB — OTA process, version channels, pre-flight checks, and recovery.
aliases:
- firmware
- update
@@ -17,7 +17,7 @@ Keep your Meshtastic radio up to date with the latest firmware for new features,
## Checking for Updates
-1. Navigate to **Settings → Firmware Update** or tap the firmware notification if shown.
+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.
2. The app checks for available firmware versions.
3. Available updates show the version number and changelog summary.
@@ -39,19 +39,26 @@ The most common update method for Android users:

-### USB Flashing
+### In-App USB Update
-For recovery or when OTA is unavailable:
+When your radio is connected over **USB/serial** (rather than Bluetooth), the Firmware Update screen offers **USB File Transfer**. The app reboots the device into DFU mode, then prompts you to save the `.uf2` file to the device's DFU drive using the system file picker. This option appears only on a USB/serial connection — it is not available over Bluetooth.
+
+> ℹ️ **nRF bootloader note:** Some devices (e.g. RAK WisBlock RAK4631) need their bootloader flashed with the vendor's serial DFU tool (such as `adafruit-nrfutil`) — copying the `.uf2` alone won't update the bootloader. The app surfaces a hint when this applies.
+
+### Other Flashing Options
+
+For recovery or when neither OTA nor in-app USB is available:
- Use the [Meshtastic Web Flasher](https://flasher.meshtastic.org)
- Or the [Meshtastic CLI tool](https://meshtastic.org/docs/getting-started/flashing-firmware) on desktop
## Version Channels
-| チャンネル | 説明 |
-| ------ | ------------------------------------------- |
-| Stable | Recommended for most users; tested releases |
-| Alpha | Preview releases; may contain bugs |
+| チャンネル | 説明 |
+| -------- | -------------------------------------------------------------------------- |
+| Stable | Recommended for most users; tested releases |
+| Alpha | Preview releases; may contain bugs |
+| ローカルファイル | Flash a firmware file you select yourself, instead of a downloaded release |
## Pre-Update Checklist
@@ -73,7 +80,7 @@ Once the update succeeds:
- The radio will reboot automatically
- Bluetooth connection will re-establish
- Verify your settings are intact
-- Check the firmware version in **Settings → About**
+- Confirm the new version under **Currently Installed** on the Firmware Update screen — it's also shown on the node's detail page and the Connections screen

diff --git a/docs/ja-rJP/user/messages-and-channels.md b/docs/ja-rJP/user/messages-and-channels.md
index 5732fe52c..a6a8dae0d 100644
--- a/docs/ja-rJP/user/messages-and-channels.md
+++ b/docs/ja-rJP/user/messages-and-channels.md
@@ -116,12 +116,16 @@ You can search the full history of any conversation directly from the chat scree

-> 💡 **Tip:** Search is full-text and stays within the conversation you opened it from — it doesn't search across other channels or contacts. Matching is fast even on long histories because messages are indexed locally.
+> 💡 **Tip:** Search is full-text and stays within the conversation you opened it from — it doesn't search across other channels or contacts. It matches against the messages already stored on your device, so it works fully offline.
### Message Bubbles
Messages appear as chat bubbles — sent messages on the right, received messages on the left. Each bubble shows the sender, timestamp, and delivery status. Messages with replies include a quoted preview of the original message above the response.
+### Mentions
+
+Type `@` while composing to mention a node — a picker suggests matching contacts as you type. In a received message, a mention appears as a highlighted chip showing the node's name; tap it to jump straight to that node's detail page.
+
### Reactions
React to messages with emoji:
@@ -143,6 +147,7 @@ Long-press any message to access:
- **Copy** — copy message text to clipboard
- **Reply** — quote the message in your response
- **React** — add an emoji reaction
+- **Translate** — translate a received message into your device language and toggle between the original and translated text (Google Play build only; uses on-device translation)
- **Delete** — remove a message you sent (local deletion)
### Message Priority
diff --git a/docs/ja-rJP/user/mqtt.md b/docs/ja-rJP/user/mqtt.md
index 4d8399705..c2d5a3ac2 100644
--- a/docs/ja-rJP/user/mqtt.md
+++ b/docs/ja-rJP/user/mqtt.md
@@ -56,6 +56,8 @@ A gateway node with internet access (WiFi or Ethernet) publishes mesh messages t
The community maintains a public broker at `mqtt.meshtastic.org`. This is intended for general use and testing.
+> ℹ️ **Note:** Connections to `mqtt.meshtastic.org` always use TLS (port 8883), even if the TLS toggle is off. For any other broker, TLS is used only when you enable it (port 8883 with TLS, 1883 without).
+
> 🔒 **Privacy:** Messages on the public broker are readable by anyone subscribed. Always use channel encryption for private communications.
### Private Broker
diff --git a/docs/ja-rJP/user/node-metrics.md b/docs/ja-rJP/user/node-metrics.md
index 045e5e8a6..ecf9430f3 100644
--- a/docs/ja-rJP/user/node-metrics.md
+++ b/docs/ja-rJP/user/node-metrics.md
@@ -55,12 +55,15 @@ The BME680 **IAQ (Indoor Air Quality)** index is a single 0–500+ value derived
Air Quality is a dedicated metrics view for nodes equipped with a particulate-matter and/or CO₂ sensor. It is **separate from the BME680 IAQ reading** listed under Environment Metrics — IAQ is a single gas-resistance-derived index, while the Air Quality view charts the underlying particulate and CO₂ measurements.
-| Metric | Unit | 説明 |
-| --------------------- | ----- | ---------------------------------------------------- |
-| PM1.0 | µg/m³ | Particulate matter up to 1.0 micron |
-| PM2.5 | µg/m³ | Particulate matter up to 2.5 microns |
-| PM10 | µg/m³ | Particulate matter up to 10 microns |
-| CO₂ | ppm | Carbon dioxide concentration |
+| Metric | Unit | 説明 |
+| --------------------- | --------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| PM1.0 | µg/m³ | Particulate matter up to 1.0 micron |
+| PM2.5 | µg/m³ | Particulate matter up to 2.5 microns |
+| PM10 | µg/m³ | Particulate matter up to 10 microns |
+| AQI | EPA index | EPA **NowCast** AQI computed from your recent PM2.5 history, with a color-coded severity label. Shown next to PM2.5 once enough readings have accumulated. |
+| CO₂ | ppm | Carbon dioxide concentration |
+| CO₂ temperature | °C / °F | Temperature reported by the CO₂ sensor itself (e.g. SCD4x) |
+| CO₂ humidity | % | Relative humidity reported by the CO₂ sensor |
CO₂ readings are color-coded by severity to make air quality easy to read at a glance:
@@ -98,12 +101,12 @@ Radio signal quality information:
Signal quality is rated from **SNR relative to the active LoRa modem preset's demodulation floor**, not from fixed thresholds — a given SNR means different things on different presets (e.g. −15 dB is fine on LongSlow but unusable on ShortFast). RSSI is shown but is not part of the rating. Letting `limit` be the preset's SNR limit:
-| Quality | Criteria |
-| ------- | ------------------------------------------------ |
-| 良 | SNR above the preset's limit |
-| 普通 | within 5.5 dB below the limit |
-| 不良 | within 7.5 dB below the limit |
-| なし | more than 7.5 dB below the limit |
+| Quality | Criteria |
+| ------- | ------------------------------------------------------------------------- |
+| 良 | SNR above the preset's limit |
+| 普通 | up to 5.5 dB below the limit |
+| 不良 | between 5.5 dB and 7.5 dB below the limit |
+| なし | more than 7.5 dB below the limit |
See [Understanding the Signal Meter](signal-meter) for the full explanation.
diff --git a/docs/ja-rJP/user/settings-radio-user.md b/docs/ja-rJP/user/settings-radio-user.md
index b5063a468..fcab45dd7 100644
--- a/docs/ja-rJP/user/settings-radio-user.md
+++ b/docs/ja-rJP/user/settings-radio-user.md
@@ -74,6 +74,8 @@ After modifying settings, tap **Save** to write the configuration to your radio.
| ~~Long Slow~~ | ~30 km | 0.18 kbps | −17.5 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.
+
#### Choosing a Modem Preset
The modem preset controls the fundamental tradeoff between **range** and **data rate**:
diff --git a/docs/ja-rJP/user/signal-meter.md b/docs/ja-rJP/user/signal-meter.md
index ba2f9a65f..d15526716 100644
--- a/docs/ja-rJP/user/signal-meter.md
+++ b/docs/ja-rJP/user/signal-meter.md
@@ -52,12 +52,12 @@ The app rates your signal quality (None, Bad, Fair, or Good) from **SNR alone, m
Because the rating is relative to the preset limit, the _same_ SNR can rate differently on different presets — `-15 dB` is healthy on `LongSlow` but unusable on `ShortFast`. Letting `limit` be the active preset's SNR Limit, here is how the app picks the bars (or color):
-| Level | Bars | Criteria | Meaning |
-| ----- | ---- | ------------------------------------ | ---------------------------------------------------------------------------------------- |
-| 良 | 3 | SNR **above** the preset's `limit` | Signal is comfortably above the demodulation floor — healthy connection. |
-| 普通 | 2 | within `5.5 dB` below the `limit` | Decodable, but getting close to the floor. |
-| 不良 | 1 | within `7.5 dB` below the `limit` | At the very edge of what the preset can recover. |
-| なし | 0 | more than `7.5 dB` below the `limit` | Below the floor — transmission lost to noise. |
+| Level | Bars | Criteria | Meaning |
+| ----- | ---- | ----------------------------------------------- | ---------------------------------------------------------------------------------------- |
+| 良 | 3 | SNR **above** the preset's `limit` | Signal is comfortably above the demodulation floor — healthy connection. |
+| 普通 | 2 | up to `5.5 dB` below the `limit` | Decodable, but getting close to the floor. |
+| 不良 | 1 | between `5.5 dB` and `7.5 dB` below the `limit` | At the very edge of what the preset can recover. |
+| なし | 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.
diff --git a/docs/ja-rJP/user/telemetry-and-sensors.md b/docs/ja-rJP/user/telemetry-and-sensors.md
index b7838d00f..0ba15f92e 100644
--- a/docs/ja-rJP/user/telemetry-and-sensors.md
+++ b/docs/ja-rJP/user/telemetry-and-sensors.md
@@ -103,7 +103,9 @@ Nodes with particulate matter or CO₂ sensors report air quality data:
| PM10 | µg/m³ | Coarse particulate matter |
| CO₂ | ppm | Carbon dioxide concentration |
-The CO₂ reading is color-coded by severity (Good → Stuffy → Poor → Unsafe → Evacuate). See [Node Metrics — Air Quality](node-metrics#air-quality-metrics) for the exact ppm bands and colors.
+CO₂ sensors such as the SCD4x also report their own temperature and humidity, which appear alongside the readings above. From PM2.5 history the app additionally derives an **EPA NowCast AQI** value.
+
+The CO₂ reading is color-coded by severity (Good → Stuffy → Poor → Unsafe → Evacuate). See [Node Metrics — Air Quality](node-metrics#air-quality-metrics) for the exact ppm bands, colors, and AQI detail.
Air quality data can be viewed as info cards on the node detail screen, charted over time, and exported to CSV.
diff --git a/docs/ja-rJP/user/translate.md b/docs/ja-rJP/user/translate.md
index 25aa4693c..70c966fed 100644
--- a/docs/ja-rJP/user/translate.md
+++ b/docs/ja-rJP/user/translate.md
@@ -18,11 +18,11 @@ Contributing translations helps make Meshtastic accessible to a wider audience.
## What Gets Translated
-| Resource | Source Location | Notes |
-| ----------------- | ------------------------------------- | ---------------------------------------------------------------------- |
-| UI strings | `composeResources/values/strings.xml` | Buttons, labels, messages, and all user-visible text |
-| User Guide pages | `docs/user/*.md` | In-app documentation shown in Help & Documentation |
-| Fastlane metadata | `fastlane/metadata/android/en-US/` | App Store listing title, description, and changelogs |
+| Resource | Source Location | Notes |
+| ----------------- | ------------------------------------------------------------------- | ---------------------------------------------------------------------- |
+| UI strings | `core/resources/src/commonMain/composeResources/values/strings.xml` | Buttons, labels, messages, and all user-visible text |
+| User Guide pages | `docs/en/user/*.md` | In-app documentation shown in Help & Documentation |
+| Fastlane metadata | `fastlane/metadata/android/en-US/` | App Store listing title, description, and changelogs |
> ⚠️ **Note:** Developer Guide pages are English-only. Code-focused documentation targeting contributors is not translated.
diff --git a/docs/ja-rJP/user/units-and-locale.md b/docs/ja-rJP/user/units-and-locale.md
index f42ce671c..078140523 100644
--- a/docs/ja-rJP/user/units-and-locale.md
+++ b/docs/ja-rJP/user/units-and-locale.md
@@ -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 uses the `MetricFormatter` utility to convert and display values in whatever unit system your device's locale specifies.
+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.
On Android, your measurement preferences are determined by your system **Language & Region** settings. On Desktop (JVM), the app uses the JVM's default `Locale`.
@@ -115,12 +115,13 @@ On Android, your measurement system (metric vs imperial) is tied to your region
2. Change your **Region** or **Measurement units** preference
3. Return to Meshtastic — values update immediately
-> 💡 **Tip:** The app uses `MetricFormatter` from `core:common`. All measurement formatting is handled by a shared KMP utility that respects your platform's locale. Developers adding new measurement displays should use `MetricFormatter` rather than hard-coding unit conversions.
+> 💡 **Tip:** All measurement formatting is handled centrally and respects your platform's locale, so units stay consistent everywhere in the app.
## Related Topics
- [Node Metrics](node-metrics) — where temperature, distance, and sensor values are displayed
- [Telemetry & Sensors](telemetry-and-sensors) — the sensors that produce these measurements
+- [Measurement & Formatting](../developer/measurement) — developer reference for the formatting utilities
- [Settings — Radio & User](settings-radio-user) — region setting that drives unit selection
---
diff --git a/docs/ko-rKR/user/android-auto.md b/docs/ko-rKR/user/android-auto.md
index 3c1476086..2c81ce94f 100644
--- a/docs/ko-rKR/user/android-auto.md
+++ b/docs/ko-rKR/user/android-auto.md
@@ -2,7 +2,7 @@
title: Android Auto
parent: User Guide
nav_order: 18
-last_updated: 2026-06-11
+last_updated: 2026-07-07
description: Use Meshtastic hands-free on an Android Auto head unit — read messages aloud, reply by voice, and check nodes and mesh status while driving.
aliases:
- android-auto
@@ -17,9 +17,11 @@ Meshtastic integrates with Android Auto so you can stay in touch with your mesh
> ⚠️ **Note:** Android Auto support is available on **Google-flavor Android builds only**. It is not included in the F-Droid build, and it is not available on Desktop or iOS.
+> ℹ️ **What ships today:** The Google Play build provides **notification-only** car messaging — incoming messages are announced on the head unit and you reply through its notification controls. The full tabbed **Messages / Nodes / Status** experience described below is a beta built on the Android Car App Library (Google's templated car UI is currently restricted to Closed/Internal Play tracks), so it appears only in builds compiled with `-PenableCarTemplates=true`. The rest of this page documents that beta experience.
+
## Overview
-When your phone is connected to an Android Auto head unit (or the Desktop Head Unit emulator used for development), Meshtastic appears as a messaging app built with the Android Car App Library. The car interface presents a tabbed Home screen optimized for driving-safe, glanceable use:
+When your phone is connected to an Android Auto head unit (or the Desktop Head Unit emulator used for development), the beta build presents Meshtastic as a messaging app built with the Android Car App Library, with a tabbed Home screen optimized for driving-safe, glanceable use:
- **Messages** — recent conversations, with hands-free reading and replies.
- **Nodes** — the mesh node list, with a node-detail view.
diff --git a/docs/ko-rKR/user/connections.md b/docs/ko-rKR/user/connections.md
index 97c1a14d4..3b1f2c293 100644
--- a/docs/ko-rKR/user/connections.md
+++ b/docs/ko-rKR/user/connections.md
@@ -23,7 +23,7 @@ Bluetooth Low Energy is the default and most common connection method on Android
1. Ensure your Meshtastic radio is powered on and in pairing mode.
2. Open the app and navigate to the **Connect** tab.
-3. Tap **Scan for Devices** — nearby Meshtastic radios will appear.
+3. Tap **Scan for Bluetooth devices** — nearby Meshtastic radios will appear.
4. Select your device from the list.
5. Accept the Bluetooth pairing prompt if shown.
diff --git a/docs/ko-rKR/user/desktop.md b/docs/ko-rKR/user/desktop.md
index 182554556..141d60725 100644
--- a/docs/ko-rKR/user/desktop.md
+++ b/docs/ko-rKR/user/desktop.md
@@ -2,7 +2,7 @@
title: Desktop App
parent: User Guide
nav_order: 14
-last_updated: 2026-06-11
+last_updated: 2026-07-07
description: Install and use the Meshtastic Desktop app on Linux, macOS, and Windows — connections, feature parity, and keyboard shortcuts.
aliases:
- desktop
@@ -60,19 +60,19 @@ Bluetooth Low Energy is supported on Desktop via the [Kable](https://github.com/
## Feature Parity
-| Feature | Android | Desktop | Notes |
-| -------------------------------------------- | ------- | ------- | ---------------------------------------------- |
-| Messaging | ✓ | ✓ | Full parity |
-| Node List | ✓ | ✓ | Full parity |
-| 지도 | ✓ | ✓ | Full parity |
-| 설정 | ✓ | ✓ | Full parity |
-| Bluetooth (BLE) | ✓ | ✓ | Via Kable on desktop |
-| Firmware Update OTA | ✓ | ✗ | Use web flasher |
-| Notifications | ✓ | ✓ | Native OS notifications |
-| Widgets | ✓ | ✗ | Android-only |
-| Android Auto | ✓ | ✗ | Android-only — not available on Desktop or iOS |
-| AI Assistant (Chirpy) | ✓\* | ✗ | Google flavor Android only |
-| App Functions (system AI) | ✓† | ✗ | Google flavor Android only |
+| Feature | Android | Desktop | Notes |
+| -------------------------------------------- | ------- | ------- | -------------------------------------------------------------------------- |
+| Messaging | ✓ | ✓ | Full parity |
+| Node List | ✓ | ✓ | Full parity |
+| 지도 | ✓ | ◐ | Map tab exists on desktop, but the interactive map view is Android-only |
+| 설정 | ✓ | ✓ | Full parity |
+| Bluetooth (BLE) | ✓ | ✓ | Via Kable on desktop |
+| Firmware Update | ✓ | ◐ | Desktop supports in-app USB firmware update; BLE/Wi-Fi OTA is Android-only |
+| Notifications | ✓ | ✓ | Native OS notifications |
+| Widgets | ✓ | ✗ | Android-only |
+| Android Auto | ✓ | ✗ | Android-only — not available on Desktop or iOS |
+| AI Assistant (Chirpy) | ✓\* | ✗ | Google flavor Android only |
+| App Functions (system AI) | ✓† | ✗ | Google flavor Android only |
\*Chirpy AI requires Android 14+ on Google flavor builds with supported hardware.
@@ -84,14 +84,17 @@ The Desktop app uses the same Compose Multiplatform UI with adaptations for larg
### Keyboard Shortcuts
-| Shortcut | Action |
-| ------------------- | ---------------------- |
-| **⌘Q** / **Ctrl+Q** | Quit the application |
-| **⌘,** / **Ctrl+,** | Open Settings |
-| **⌘1** / **Ctrl+1** | Switch to Messages tab |
-| **⌘2** / **Ctrl+2** | Switch to Nodes tab |
-| **⌘3** / **Ctrl+3** | Switch to Map tab |
-| **⌘4** / **Ctrl+4** | Switch to Connect tab |
+All shortcuts use the **Meta** key — that's ⌘ (Command) on macOS and the Super / Windows key on Linux and Windows. (`Ctrl` is not bound.)
+
+| Shortcut | Action |
+| ---------- | ---------------------- |
+| **Meta+Q** | Quit the application |
+| **Meta+,** | Open Settings |
+| **Meta+1** | Switch to Messages tab |
+| **Meta+2** | Switch to Nodes tab |
+| **Meta+3** | Switch to Map tab |
+| **Meta+4** | Switch to Connect tab |
+| **Meta+/** | Open About |
### Window & System Tray
@@ -123,7 +126,6 @@ Individual doc pages render with full formatting:
```bash
git clone https://github.com/meshtastic/Meshtastic-Android.git
cd Meshtastic-Android
-git submodule update --init
./gradlew :desktopApp:run
```
@@ -134,7 +136,8 @@ Requirements:
## Known Limitations
-- No OTA firmware updates (use web flasher)
+- 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
- BLE bonding is not yet supported on desktop (pairing works without bonding)
@@ -142,7 +145,7 @@ Requirements:
## Related Topics
- [Connections](connections) — connection methods overview
-- [Firmware Updates](firmware) — use the [Web Flasher](https://flasher.meshtastic.org) for desktop firmware updates
+- [Firmware Updates](firmware) — in-app USB update on desktop, or the [Web Flasher](https://flasher.meshtastic.org)
---
diff --git a/docs/ko-rKR/user/discovery.md b/docs/ko-rKR/user/discovery.md
index 21beccd98..0d5be93b2 100644
--- a/docs/ko-rKR/user/discovery.md
+++ b/docs/ko-rKR/user/discovery.md
@@ -44,7 +44,6 @@ Before starting, configure these controls:
The **Start** button stays disabled — with an explanation of why — until the scan can run. Common reasons it's disabled:
- The device is **not connected**.
-- The current channel is using the **default channel key** (use a unique key first — see [Messages & Channels](messages-and-channels)).
- **No presets** have been selected to scan.
- The selected preset uses **2.4 GHz**, which your hardware doesn't support.
diff --git a/docs/ko-rKR/user/firmware.md b/docs/ko-rKR/user/firmware.md
index 0676a2591..28a5d8763 100644
--- a/docs/ko-rKR/user/firmware.md
+++ b/docs/ko-rKR/user/firmware.md
@@ -2,8 +2,8 @@
title: Firmware Updates
parent: User Guide
nav_order: 13
-last_updated: 2026-05-13
-description: Update your radio firmware over Bluetooth — OTA process, version channels, pre-flight checks, and recovery.
+last_updated: 2026-07-07
+description: Update your radio firmware over Bluetooth or USB — OTA process, version channels, pre-flight checks, and recovery.
aliases:
- firmware
- update
@@ -17,7 +17,7 @@ Keep your Meshtastic radio up to date with the latest firmware for new features,
## Checking for Updates
-1. Navigate to **Settings → Firmware Update** or tap the firmware notification if shown.
+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.
2. The app checks for available firmware versions.
3. Available updates show the version number and changelog summary.
@@ -39,19 +39,26 @@ The most common update method for Android users:

-### USB Flashing
+### In-App USB Update
-For recovery or when OTA is unavailable:
+When your radio is connected over **USB/serial** (rather than Bluetooth), the Firmware Update screen offers **USB File Transfer**. The app reboots the device into DFU mode, then prompts you to save the `.uf2` file to the device's DFU drive using the system file picker. This option appears only on a USB/serial connection — it is not available over Bluetooth.
+
+> ℹ️ **nRF bootloader note:** Some devices (e.g. RAK WisBlock RAK4631) need their bootloader flashed with the vendor's serial DFU tool (such as `adafruit-nrfutil`) — copying the `.uf2` alone won't update the bootloader. The app surfaces a hint when this applies.
+
+### Other Flashing Options
+
+For recovery or when neither OTA nor in-app USB is available:
- Use the [Meshtastic Web Flasher](https://flasher.meshtastic.org)
- Or the [Meshtastic CLI tool](https://meshtastic.org/docs/getting-started/flashing-firmware) on desktop
## Version Channels
-| 채널 | 설명 |
-| ------ | ------------------------------------------- |
-| Stable | Recommended for most users; tested releases |
-| Alpha | Preview releases; may contain bugs |
+| 채널 | 설명 |
+| ---------- | -------------------------------------------------------------------------- |
+| Stable | Recommended for most users; tested releases |
+| Alpha | Preview releases; may contain bugs |
+| Local File | Flash a firmware file you select yourself, instead of a downloaded release |
## Pre-Update Checklist
@@ -73,7 +80,7 @@ Once the update succeeds:
- The radio will reboot automatically
- Bluetooth connection will re-establish
- Verify your settings are intact
-- Check the firmware version in **Settings → About**
+- Confirm the new version under **Currently Installed** on the Firmware Update screen — it's also shown on the node's detail page and the Connections screen

diff --git a/docs/ko-rKR/user/messages-and-channels.md b/docs/ko-rKR/user/messages-and-channels.md
index c2c1f8ab0..f6d26bc2d 100644
--- a/docs/ko-rKR/user/messages-and-channels.md
+++ b/docs/ko-rKR/user/messages-and-channels.md
@@ -116,12 +116,16 @@ You can search the full history of any conversation directly from the chat scree

-> 💡 **Tip:** Search is full-text and stays within the conversation you opened it from — it doesn't search across other channels or contacts. Matching is fast even on long histories because messages are indexed locally.
+> 💡 **Tip:** Search is full-text and stays within the conversation you opened it from — it doesn't search across other channels or contacts. It matches against the messages already stored on your device, so it works fully offline.
### Message Bubbles
Messages appear as chat bubbles — sent messages on the right, received messages on the left. Each bubble shows the sender, timestamp, and delivery status. Messages with replies include a quoted preview of the original message above the response.
+### Mentions
+
+Type `@` while composing to mention a node — a picker suggests matching contacts as you type. In a received message, a mention appears as a highlighted chip showing the node's name; tap it to jump straight to that node's detail page.
+
### Reactions
React to messages with emoji:
@@ -143,6 +147,7 @@ Long-press any message to access:
- **Copy** — copy message text to clipboard
- **Reply** — quote the message in your response
- **React** — add an emoji reaction
+- **Translate** — translate a received message into your device language and toggle between the original and translated text (Google Play build only; uses on-device translation)
- **Delete** — remove a message you sent (local deletion)
### Message Priority
diff --git a/docs/ko-rKR/user/mqtt.md b/docs/ko-rKR/user/mqtt.md
index 2cccd865a..60f42dfe7 100644
--- a/docs/ko-rKR/user/mqtt.md
+++ b/docs/ko-rKR/user/mqtt.md
@@ -56,6 +56,8 @@ A gateway node with internet access (WiFi or Ethernet) publishes mesh messages t
The community maintains a public broker at `mqtt.meshtastic.org`. This is intended for general use and testing.
+> ℹ️ **Note:** Connections to `mqtt.meshtastic.org` always use TLS (port 8883), even if the TLS toggle is off. For any other broker, TLS is used only when you enable it (port 8883 with TLS, 1883 without).
+
> 🔒 **Privacy:** Messages on the public broker are readable by anyone subscribed. Always use channel encryption for private communications.
### Private Broker
diff --git a/docs/ko-rKR/user/node-metrics.md b/docs/ko-rKR/user/node-metrics.md
index dbfe1d45f..f9a937c84 100644
--- a/docs/ko-rKR/user/node-metrics.md
+++ b/docs/ko-rKR/user/node-metrics.md
@@ -55,12 +55,15 @@ The BME680 **IAQ (Indoor Air Quality)** index is a single 0–500+ value derived
Air Quality is a dedicated metrics view for nodes equipped with a particulate-matter and/or CO₂ sensor. It is **separate from the BME680 IAQ reading** listed under Environment Metrics — IAQ is a single gas-resistance-derived index, while the Air Quality view charts the underlying particulate and CO₂ measurements.
-| Metric | Unit | 설명 |
-| --------------------- | ----- | ---------------------------------------------------- |
-| PM1.0 | µg/m³ | Particulate matter up to 1.0 micron |
-| PM2.5 | µg/m³ | Particulate matter up to 2.5 microns |
-| PM10 | µg/m³ | Particulate matter up to 10 microns |
-| CO₂ | ppm | Carbon dioxide concentration |
+| Metric | Unit | 설명 |
+| --------------------- | --------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| PM1.0 | µg/m³ | Particulate matter up to 1.0 micron |
+| PM2.5 | µg/m³ | Particulate matter up to 2.5 microns |
+| PM10 | µg/m³ | Particulate matter up to 10 microns |
+| AQI | EPA index | EPA **NowCast** AQI computed from your recent PM2.5 history, with a color-coded severity label. Shown next to PM2.5 once enough readings have accumulated. |
+| CO₂ | ppm | Carbon dioxide concentration |
+| CO₂ temperature | °C / °F | Temperature reported by the CO₂ sensor itself (e.g. SCD4x) |
+| CO₂ humidity | % | Relative humidity reported by the CO₂ sensor |
CO₂ readings are color-coded by severity to make air quality easy to read at a glance:
@@ -98,12 +101,12 @@ Radio signal quality information:
Signal quality is rated from **SNR relative to the active LoRa modem preset's demodulation floor**, not from fixed thresholds — a given SNR means different things on different presets (e.g. −15 dB is fine on LongSlow but unusable on ShortFast). RSSI is shown but is not part of the rating. Letting `limit` be the preset's SNR limit:
-| Quality | Criteria |
-| ------- | ------------------------------------------------ |
-| 좋음 | SNR above the preset's limit |
-| 보통 | within 5.5 dB below the limit |
-| 나쁨 | within 7.5 dB below the limit |
-| 없음 | more than 7.5 dB below the limit |
+| Quality | Criteria |
+| ------- | ------------------------------------------------------------------------- |
+| 좋음 | SNR above the preset's limit |
+| 보통 | up to 5.5 dB below the limit |
+| 나쁨 | between 5.5 dB and 7.5 dB below the limit |
+| 없음 | more than 7.5 dB below the limit |
See [Understanding the Signal Meter](signal-meter) for the full explanation.
diff --git a/docs/ko-rKR/user/settings-radio-user.md b/docs/ko-rKR/user/settings-radio-user.md
index ec7577fbf..e9c06effa 100644
--- a/docs/ko-rKR/user/settings-radio-user.md
+++ b/docs/ko-rKR/user/settings-radio-user.md
@@ -74,6 +74,8 @@ After modifying settings, tap **Save** to write the configuration to your radio.
| ~~Long Slow~~ | ~30 km | 0.18 kbps | −17.5 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.
+
#### Choosing a Modem Preset
The modem preset controls the fundamental tradeoff between **range** and **data rate**:
diff --git a/docs/ko-rKR/user/signal-meter.md b/docs/ko-rKR/user/signal-meter.md
index 43cb6b47c..69bf3bbdf 100644
--- a/docs/ko-rKR/user/signal-meter.md
+++ b/docs/ko-rKR/user/signal-meter.md
@@ -52,12 +52,12 @@ The app rates your signal quality (None, Bad, Fair, or Good) from **SNR alone, m
Because the rating is relative to the preset limit, the _same_ SNR can rate differently on different presets — `-15 dB` is healthy on `LongSlow` but unusable on `ShortFast`. Letting `limit` be the active preset's SNR Limit, here is how the app picks the bars (or color):
-| Level | Bars | Criteria | Meaning |
-| ----- | ---- | ------------------------------------ | ---------------------------------------------------------------------------------------- |
-| 좋음 | 3 | SNR **above** the preset's `limit` | Signal is comfortably above the demodulation floor — healthy connection. |
-| 보통 | 2 | within `5.5 dB` below the `limit` | Decodable, but getting close to the floor. |
-| 나쁨 | 1 | within `7.5 dB` below the `limit` | At the very edge of what the preset can recover. |
-| 없음 | 0 | more than `7.5 dB` below the `limit` | Below the floor — transmission lost to noise. |
+| Level | Bars | Criteria | Meaning |
+| ----- | ---- | ----------------------------------------------- | ---------------------------------------------------------------------------------------- |
+| 좋음 | 3 | SNR **above** the preset's `limit` | Signal is comfortably above the demodulation floor — healthy connection. |
+| 보통 | 2 | up to `5.5 dB` below the `limit` | Decodable, but getting close to the floor. |
+| 나쁨 | 1 | between `5.5 dB` and `7.5 dB` below the `limit` | At the very edge of what the preset can recover. |
+| 없음 | 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.
diff --git a/docs/ko-rKR/user/telemetry-and-sensors.md b/docs/ko-rKR/user/telemetry-and-sensors.md
index 18b8ddc47..a5f2a5ad8 100644
--- a/docs/ko-rKR/user/telemetry-and-sensors.md
+++ b/docs/ko-rKR/user/telemetry-and-sensors.md
@@ -103,7 +103,9 @@ Nodes with particulate matter or CO₂ sensors report air quality data:
| PM10 | µg/m³ | Coarse particulate matter |
| CO₂ | ppm | Carbon dioxide concentration |
-The CO₂ reading is color-coded by severity (Good → Stuffy → Poor → Unsafe → Evacuate). See [Node Metrics — Air Quality](node-metrics#air-quality-metrics) for the exact ppm bands and colors.
+CO₂ sensors such as the SCD4x also report their own temperature and humidity, which appear alongside the readings above. From PM2.5 history the app additionally derives an **EPA NowCast AQI** value.
+
+The CO₂ reading is color-coded by severity (Good → Stuffy → Poor → Unsafe → Evacuate). See [Node Metrics — Air Quality](node-metrics#air-quality-metrics) for the exact ppm bands, colors, and AQI detail.
Air quality data can be viewed as info cards on the node detail screen, charted over time, and exported to CSV.
diff --git a/docs/ko-rKR/user/translate.md b/docs/ko-rKR/user/translate.md
index 25aa4693c..70c966fed 100644
--- a/docs/ko-rKR/user/translate.md
+++ b/docs/ko-rKR/user/translate.md
@@ -18,11 +18,11 @@ Contributing translations helps make Meshtastic accessible to a wider audience.
## What Gets Translated
-| Resource | Source Location | Notes |
-| ----------------- | ------------------------------------- | ---------------------------------------------------------------------- |
-| UI strings | `composeResources/values/strings.xml` | Buttons, labels, messages, and all user-visible text |
-| User Guide pages | `docs/user/*.md` | In-app documentation shown in Help & Documentation |
-| Fastlane metadata | `fastlane/metadata/android/en-US/` | App Store listing title, description, and changelogs |
+| Resource | Source Location | Notes |
+| ----------------- | ------------------------------------------------------------------- | ---------------------------------------------------------------------- |
+| UI strings | `core/resources/src/commonMain/composeResources/values/strings.xml` | Buttons, labels, messages, and all user-visible text |
+| User Guide pages | `docs/en/user/*.md` | In-app documentation shown in Help & Documentation |
+| Fastlane metadata | `fastlane/metadata/android/en-US/` | App Store listing title, description, and changelogs |
> ⚠️ **Note:** Developer Guide pages are English-only. Code-focused documentation targeting contributors is not translated.
diff --git a/docs/ko-rKR/user/units-and-locale.md b/docs/ko-rKR/user/units-and-locale.md
index afa3fce3a..12e7b8515 100644
--- a/docs/ko-rKR/user/units-and-locale.md
+++ b/docs/ko-rKR/user/units-and-locale.md
@@ -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 uses the `MetricFormatter` utility to convert and display values in whatever unit system your device's locale specifies.
+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.
On Android, your measurement preferences are determined by your system **Language & Region** settings. On Desktop (JVM), the app uses the JVM's default `Locale`.
@@ -115,12 +115,13 @@ On Android, your measurement system (metric vs imperial) is tied to your region
2. Change your **Region** or **Measurement units** preference
3. Return to Meshtastic — values update immediately
-> 💡 **Tip:** The app uses `MetricFormatter` from `core:common`. All measurement formatting is handled by a shared KMP utility that respects your platform's locale. Developers adding new measurement displays should use `MetricFormatter` rather than hard-coding unit conversions.
+> 💡 **Tip:** All measurement formatting is handled centrally and respects your platform's locale, so units stay consistent everywhere in the app.
## Related Topics
- [Node Metrics](node-metrics) — where temperature, distance, and sensor values are displayed
- [Telemetry & Sensors](telemetry-and-sensors) — the sensors that produce these measurements
+- [Measurement & Formatting](../developer/measurement) — developer reference for the formatting utilities
- [Settings — Radio & User](settings-radio-user) — region setting that drives unit selection
---
diff --git a/docs/lt-rLT/user/android-auto.md b/docs/lt-rLT/user/android-auto.md
index aeb53435d..b9ec6a2af 100644
--- a/docs/lt-rLT/user/android-auto.md
+++ b/docs/lt-rLT/user/android-auto.md
@@ -2,7 +2,7 @@
title: Android Auto
parent: User Guide
nav_order: 18
-last_updated: 2026-06-11
+last_updated: 2026-07-07
description: Use Meshtastic hands-free on an Android Auto head unit — read messages aloud, reply by voice, and check nodes and mesh status while driving.
aliases:
- android-auto
@@ -17,9 +17,11 @@ Meshtastic integrates with Android Auto so you can stay in touch with your mesh
> ⚠️ **Note:** Android Auto support is available on **Google-flavor Android builds only**. It is not included in the F-Droid build, and it is not available on Desktop or iOS.
+> ℹ️ **What ships today:** The Google Play build provides **notification-only** car messaging — incoming messages are announced on the head unit and you reply through its notification controls. The full tabbed **Messages / Nodes / Status** experience described below is a beta built on the Android Car App Library (Google's templated car UI is currently restricted to Closed/Internal Play tracks), so it appears only in builds compiled with `-PenableCarTemplates=true`. The rest of this page documents that beta experience.
+
## Overview
-When your phone is connected to an Android Auto head unit (or the Desktop Head Unit emulator used for development), Meshtastic appears as a messaging app built with the Android Car App Library. The car interface presents a tabbed Home screen optimized for driving-safe, glanceable use:
+When your phone is connected to an Android Auto head unit (or the Desktop Head Unit emulator used for development), the beta build presents Meshtastic as a messaging app built with the Android Car App Library, with a tabbed Home screen optimized for driving-safe, glanceable use:
- **Messages** — recent conversations, with hands-free reading and replies.
- **Nodes** — the mesh node list, with a node-detail view.
diff --git a/docs/lt-rLT/user/connections.md b/docs/lt-rLT/user/connections.md
index fb30d32a7..00b3eb140 100644
--- a/docs/lt-rLT/user/connections.md
+++ b/docs/lt-rLT/user/connections.md
@@ -23,7 +23,7 @@ Bluetooth Low Energy is the default and most common connection method on Android
1. Ensure your Meshtastic radio is powered on and in pairing mode.
2. Open the app and navigate to the **Connect** tab.
-3. Tap **Scan for Devices** — nearby Meshtastic radios will appear.
+3. Tap **Scan for Bluetooth devices** — nearby Meshtastic radios will appear.
4. Select your device from the list.
5. Accept the Bluetooth pairing prompt if shown.
diff --git a/docs/lt-rLT/user/desktop.md b/docs/lt-rLT/user/desktop.md
index e69b44554..2ac96feda 100644
--- a/docs/lt-rLT/user/desktop.md
+++ b/docs/lt-rLT/user/desktop.md
@@ -2,7 +2,7 @@
title: Desktop App
parent: User Guide
nav_order: 14
-last_updated: 2026-06-11
+last_updated: 2026-07-07
description: Install and use the Meshtastic Desktop app on Linux, macOS, and Windows — connections, feature parity, and keyboard shortcuts.
aliases:
- desktop
@@ -60,19 +60,19 @@ Bluetooth Low Energy is supported on Desktop via the [Kable](https://github.com/
## Feature Parity
-| Feature | Android | Desktop | Notes |
-| -------------------------------------------- | ------- | ------- | ---------------------------------------------- |
-| Messaging | ✓ | ✓ | Full parity |
-| Node List | ✓ | ✓ | Full parity |
-| Map | ✓ | ✓ | Full parity |
-| Settings | ✓ | ✓ | Full parity |
-| Bluetooth (BLE) | ✓ | ✓ | Via Kable on desktop |
-| Firmware Update OTA | ✓ | ✗ | Use web flasher |
-| Notifications | ✓ | ✓ | Native OS notifications |
-| Widgets | ✓ | ✗ | Android-only |
-| Android Auto | ✓ | ✗ | Android-only — not available on Desktop or iOS |
-| AI Assistant (Chirpy) | ✓\* | ✗ | Google flavor Android only |
-| App Functions (system AI) | ✓† | ✗ | Google flavor Android only |
+| Feature | Android | Desktop | Notes |
+| -------------------------------------------- | ------- | ------- | -------------------------------------------------------------------------- |
+| Messaging | ✓ | ✓ | Full parity |
+| Node List | ✓ | ✓ | Full parity |
+| 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 |
+| Notifications | ✓ | ✓ | Native OS notifications |
+| Widgets | ✓ | ✗ | Android-only |
+| Android Auto | ✓ | ✗ | Android-only — not available on Desktop or iOS |
+| AI Assistant (Chirpy) | ✓\* | ✗ | Google flavor Android only |
+| App Functions (system AI) | ✓† | ✗ | Google flavor Android only |
\*Chirpy AI requires Android 14+ on Google flavor builds with supported hardware.
@@ -84,14 +84,17 @@ The Desktop app uses the same Compose Multiplatform UI with adaptations for larg
### Keyboard Shortcuts
-| Shortcut | Action |
-| ------------------- | ---------------------- |
-| **⌘Q** / **Ctrl+Q** | Quit the application |
-| **⌘,** / **Ctrl+,** | Open Settings |
-| **⌘1** / **Ctrl+1** | Switch to Messages tab |
-| **⌘2** / **Ctrl+2** | Switch to Nodes tab |
-| **⌘3** / **Ctrl+3** | Switch to Map tab |
-| **⌘4** / **Ctrl+4** | Switch to Connect tab |
+All shortcuts use the **Meta** key — that's ⌘ (Command) on macOS and the Super / Windows key on Linux and Windows. (`Ctrl` is not bound.)
+
+| Shortcut | Action |
+| ---------- | ---------------------- |
+| **Meta+Q** | Quit the application |
+| **Meta+,** | Open Settings |
+| **Meta+1** | Switch to Messages tab |
+| **Meta+2** | Switch to Nodes tab |
+| **Meta+3** | Switch to Map tab |
+| **Meta+4** | Switch to Connect tab |
+| **Meta+/** | Open About |
### Window & System Tray
@@ -123,7 +126,6 @@ Individual doc pages render with full formatting:
```bash
git clone https://github.com/meshtastic/Meshtastic-Android.git
cd Meshtastic-Android
-git submodule update --init
./gradlew :desktopApp:run
```
@@ -134,7 +136,8 @@ Requirements:
## Known Limitations
-- No OTA firmware updates (use web flasher)
+- 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
- BLE bonding is not yet supported on desktop (pairing works without bonding)
@@ -142,7 +145,7 @@ Requirements:
## Related Topics
- [Connections](connections) — connection methods overview
-- [Firmware Updates](firmware) — use the [Web Flasher](https://flasher.meshtastic.org) for desktop firmware updates
+- [Firmware Updates](firmware) — in-app USB update on desktop, or the [Web Flasher](https://flasher.meshtastic.org)
---
diff --git a/docs/lt-rLT/user/discovery.md b/docs/lt-rLT/user/discovery.md
index 8703f9bdf..5343cfeb3 100644
--- a/docs/lt-rLT/user/discovery.md
+++ b/docs/lt-rLT/user/discovery.md
@@ -44,7 +44,6 @@ Before starting, configure these controls:
The **Start** button stays disabled — with an explanation of why — until the scan can run. Common reasons it's disabled:
- The device is **not connected**.
-- The current channel is using the **default channel key** (use a unique key first — see [Messages & Channels](messages-and-channels)).
- **No presets** have been selected to scan.
- The selected preset uses **2.4 GHz**, which your hardware doesn't support.
diff --git a/docs/lt-rLT/user/firmware.md b/docs/lt-rLT/user/firmware.md
index d793aeedb..9c4fed2ff 100644
--- a/docs/lt-rLT/user/firmware.md
+++ b/docs/lt-rLT/user/firmware.md
@@ -2,8 +2,8 @@
title: Firmware Updates
parent: User Guide
nav_order: 13
-last_updated: 2026-05-13
-description: Update your radio firmware over Bluetooth — OTA process, version channels, pre-flight checks, and recovery.
+last_updated: 2026-07-07
+description: Update your radio firmware over Bluetooth or USB — OTA process, version channels, pre-flight checks, and recovery.
aliases:
- firmware
- update
@@ -17,7 +17,7 @@ Keep your Meshtastic radio up to date with the latest firmware for new features,
## Checking for Updates
-1. Navigate to **Settings → Firmware Update** or tap the firmware notification if shown.
+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.
2. The app checks for available firmware versions.
3. Available updates show the version number and changelog summary.
@@ -39,19 +39,26 @@ The most common update method for Android users:

-### USB Flashing
+### In-App USB Update
-For recovery or when OTA is unavailable:
+When your radio is connected over **USB/serial** (rather than Bluetooth), the Firmware Update screen offers **USB File Transfer**. The app reboots the device into DFU mode, then prompts you to save the `.uf2` file to the device's DFU drive using the system file picker. This option appears only on a USB/serial connection — it is not available over Bluetooth.
+
+> ℹ️ **nRF bootloader note:** Some devices (e.g. RAK WisBlock RAK4631) need their bootloader flashed with the vendor's serial DFU tool (such as `adafruit-nrfutil`) — copying the `.uf2` alone won't update the bootloader. The app surfaces a hint when this applies.
+
+### Other Flashing Options
+
+For recovery or when neither OTA nor in-app USB is available:
- Use the [Meshtastic Web Flasher](https://flasher.meshtastic.org)
- Or the [Meshtastic CLI tool](https://meshtastic.org/docs/getting-started/flashing-firmware) on desktop
## Version Channels
-| Kanalas | Aprašymas |
-| ------- | ------------------------------------------- |
-| Stable | Recommended for most users; tested releases |
-| Alpha | Preview releases; may contain bugs |
+| Kanalas | Aprašymas |
+| ---------- | -------------------------------------------------------------------------- |
+| Stable | Recommended for most users; tested releases |
+| Alpha | Preview releases; may contain bugs |
+| Local File | Flash a firmware file you select yourself, instead of a downloaded release |
## Pre-Update Checklist
@@ -73,7 +80,7 @@ Once the update succeeds:
- The radio will reboot automatically
- Bluetooth connection will re-establish
- Verify your settings are intact
-- Check the firmware version in **Settings → About**
+- Confirm the new version under **Currently Installed** on the Firmware Update screen — it's also shown on the node's detail page and the Connections screen

diff --git a/docs/lt-rLT/user/messages-and-channels.md b/docs/lt-rLT/user/messages-and-channels.md
index 2d9335978..56aecbd20 100644
--- a/docs/lt-rLT/user/messages-and-channels.md
+++ b/docs/lt-rLT/user/messages-and-channels.md
@@ -116,12 +116,16 @@ You can search the full history of any conversation directly from the chat scree

-> 💡 **Tip:** Search is full-text and stays within the conversation you opened it from — it doesn't search across other channels or contacts. Matching is fast even on long histories because messages are indexed locally.
+> 💡 **Tip:** Search is full-text and stays within the conversation you opened it from — it doesn't search across other channels or contacts. It matches against the messages already stored on your device, so it works fully offline.
### Message Bubbles
Messages appear as chat bubbles — sent messages on the right, received messages on the left. Each bubble shows the sender, timestamp, and delivery status. Messages with replies include a quoted preview of the original message above the response.
+### Mentions
+
+Type `@` while composing to mention a node — a picker suggests matching contacts as you type. In a received message, a mention appears as a highlighted chip showing the node's name; tap it to jump straight to that node's detail page.
+
### Reactions
React to messages with emoji:
@@ -143,6 +147,7 @@ Long-press any message to access:
- **Copy** — copy message text to clipboard
- **Reply** — quote the message in your response
- **React** — add an emoji reaction
+- **Translate** — translate a received message into your device language and toggle between the original and translated text (Google Play build only; uses on-device translation)
- **Delete** — remove a message you sent (local deletion)
### Message Priority
diff --git a/docs/lt-rLT/user/mqtt.md b/docs/lt-rLT/user/mqtt.md
index 503175a71..501db301c 100644
--- a/docs/lt-rLT/user/mqtt.md
+++ b/docs/lt-rLT/user/mqtt.md
@@ -56,6 +56,8 @@ A gateway node with internet access (WiFi or Ethernet) publishes mesh messages t
The community maintains a public broker at `mqtt.meshtastic.org`. This is intended for general use and testing.
+> ℹ️ **Note:** Connections to `mqtt.meshtastic.org` always use TLS (port 8883), even if the TLS toggle is off. For any other broker, TLS is used only when you enable it (port 8883 with TLS, 1883 without).
+
> 🔒 **Privacy:** Messages on the public broker are readable by anyone subscribed. Always use channel encryption for private communications.
### Private Broker
diff --git a/docs/lt-rLT/user/node-metrics.md b/docs/lt-rLT/user/node-metrics.md
index ba7e0c89b..c0d3fce88 100644
--- a/docs/lt-rLT/user/node-metrics.md
+++ b/docs/lt-rLT/user/node-metrics.md
@@ -55,12 +55,15 @@ The BME680 **IAQ (Indoor Air Quality)** index is a single 0–500+ value derived
Air Quality is a dedicated metrics view for nodes equipped with a particulate-matter and/or CO₂ sensor. It is **separate from the BME680 IAQ reading** listed under Environment Metrics — IAQ is a single gas-resistance-derived index, while the Air Quality view charts the underlying particulate and CO₂ measurements.
-| Metric | Unit | Aprašymas |
-| --------------------- | ----- | ---------------------------------------------------- |
-| PM1.0 | µg/m³ | Particulate matter up to 1.0 micron |
-| PM2.5 | µg/m³ | Particulate matter up to 2.5 microns |
-| PM10 | µg/m³ | Particulate matter up to 10 microns |
-| CO₂ | ppm | Carbon dioxide concentration |
+| Metric | Unit | Aprašymas |
+| --------------------- | --------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| PM1.0 | µg/m³ | Particulate matter up to 1.0 micron |
+| PM2.5 | µg/m³ | Particulate matter up to 2.5 microns |
+| PM10 | µg/m³ | Particulate matter up to 10 microns |
+| AQI | EPA index | EPA **NowCast** AQI computed from your recent PM2.5 history, with a color-coded severity label. Shown next to PM2.5 once enough readings have accumulated. |
+| CO₂ | ppm | Carbon dioxide concentration |
+| CO₂ temperature | °C / °F | Temperature reported by the CO₂ sensor itself (e.g. SCD4x) |
+| CO₂ humidity | % | Relative humidity reported by the CO₂ sensor |
CO₂ readings are color-coded by severity to make air quality easy to read at a glance:
@@ -98,12 +101,12 @@ Radio signal quality information:
Signal quality is rated from **SNR relative to the active LoRa modem preset's demodulation floor**, not from fixed thresholds — a given SNR means different things on different presets (e.g. −15 dB is fine on LongSlow but unusable on ShortFast). RSSI is shown but is not part of the rating. Letting `limit` be the preset's SNR limit:
-| Quality | Criteria |
-| ---------- | ------------------------------------------------ |
-| Geras | SNR above the preset's limit |
-| Pakankamas | within 5.5 dB below the limit |
-| Silpnas | within 7.5 dB below the limit |
-| Nėra | more than 7.5 dB below the limit |
+| Quality | Criteria |
+| ---------- | ------------------------------------------------------------------------- |
+| Geras | SNR above the preset's limit |
+| Pakankamas | up to 5.5 dB below the limit |
+| Silpnas | between 5.5 dB and 7.5 dB below the limit |
+| Nėra | more than 7.5 dB below the limit |
See [Understanding the Signal Meter](signal-meter) for the full explanation.
diff --git a/docs/lt-rLT/user/settings-radio-user.md b/docs/lt-rLT/user/settings-radio-user.md
index d77bb8697..11bc68e1b 100644
--- a/docs/lt-rLT/user/settings-radio-user.md
+++ b/docs/lt-rLT/user/settings-radio-user.md
@@ -74,6 +74,8 @@ After modifying settings, tap **Save** to write the configuration to your radio.
| ~~Long Slow~~ | ~30 km | 0.18 kbps | −17.5 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.
+
#### Choosing a Modem Preset
The modem preset controls the fundamental tradeoff between **range** and **data rate**:
diff --git a/docs/lt-rLT/user/signal-meter.md b/docs/lt-rLT/user/signal-meter.md
index c9f2263db..d7ef3d80a 100644
--- a/docs/lt-rLT/user/signal-meter.md
+++ b/docs/lt-rLT/user/signal-meter.md
@@ -52,12 +52,12 @@ The app rates your signal quality (None, Bad, Fair, or Good) from **SNR alone, m
Because the rating is relative to the preset limit, the _same_ SNR can rate differently on different presets — `-15 dB` is healthy on `LongSlow` but unusable on `ShortFast`. Letting `limit` be the active preset's SNR Limit, here is how the app picks the bars (or color):
-| Level | Bars | Criteria | Meaning |
-| ---------- | ---- | ------------------------------------ | ---------------------------------------------------------------------------------------- |
-| Geras | 3 | SNR **above** the preset's `limit` | Signal is comfortably above the demodulation floor — healthy connection. |
-| Pakankamas | 2 | within `5.5 dB` below the `limit` | Decodable, but getting close to the floor. |
-| Silpnas | 1 | within `7.5 dB` below the `limit` | At the very edge of what the preset can recover. |
-| Nėra | 0 | more than `7.5 dB` below the `limit` | Below the floor — transmission lost to noise. |
+| Level | Bars | Criteria | Meaning |
+| ---------- | ---- | ----------------------------------------------- | ---------------------------------------------------------------------------------------- |
+| Geras | 3 | SNR **above** the preset's `limit` | Signal is comfortably above the demodulation floor — healthy connection. |
+| Pakankamas | 2 | up to `5.5 dB` below the `limit` | Decodable, but getting close to the floor. |
+| Silpnas | 1 | between `5.5 dB` and `7.5 dB` below the `limit` | At the very edge of what the preset can recover. |
+| Nėra | 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.
diff --git a/docs/lt-rLT/user/telemetry-and-sensors.md b/docs/lt-rLT/user/telemetry-and-sensors.md
index f08a5e7ca..3aa6de269 100644
--- a/docs/lt-rLT/user/telemetry-and-sensors.md
+++ b/docs/lt-rLT/user/telemetry-and-sensors.md
@@ -103,7 +103,9 @@ Nodes with particulate matter or CO₂ sensors report air quality data:
| PM10 | µg/m³ | Coarse particulate matter |
| CO₂ | ppm | Carbon dioxide concentration |
-The CO₂ reading is color-coded by severity (Good → Stuffy → Poor → Unsafe → Evacuate). See [Node Metrics — Air Quality](node-metrics#air-quality-metrics) for the exact ppm bands and colors.
+CO₂ sensors such as the SCD4x also report their own temperature and humidity, which appear alongside the readings above. From PM2.5 history the app additionally derives an **EPA NowCast AQI** value.
+
+The CO₂ reading is color-coded by severity (Good → Stuffy → Poor → Unsafe → Evacuate). See [Node Metrics — Air Quality](node-metrics#air-quality-metrics) for the exact ppm bands, colors, and AQI detail.
Air quality data can be viewed as info cards on the node detail screen, charted over time, and exported to CSV.
diff --git a/docs/lt-rLT/user/translate.md b/docs/lt-rLT/user/translate.md
index 25aa4693c..70c966fed 100644
--- a/docs/lt-rLT/user/translate.md
+++ b/docs/lt-rLT/user/translate.md
@@ -18,11 +18,11 @@ Contributing translations helps make Meshtastic accessible to a wider audience.
## What Gets Translated
-| Resource | Source Location | Notes |
-| ----------------- | ------------------------------------- | ---------------------------------------------------------------------- |
-| UI strings | `composeResources/values/strings.xml` | Buttons, labels, messages, and all user-visible text |
-| User Guide pages | `docs/user/*.md` | In-app documentation shown in Help & Documentation |
-| Fastlane metadata | `fastlane/metadata/android/en-US/` | App Store listing title, description, and changelogs |
+| Resource | Source Location | Notes |
+| ----------------- | ------------------------------------------------------------------- | ---------------------------------------------------------------------- |
+| UI strings | `core/resources/src/commonMain/composeResources/values/strings.xml` | Buttons, labels, messages, and all user-visible text |
+| User Guide pages | `docs/en/user/*.md` | In-app documentation shown in Help & Documentation |
+| Fastlane metadata | `fastlane/metadata/android/en-US/` | App Store listing title, description, and changelogs |
> ⚠️ **Note:** Developer Guide pages are English-only. Code-focused documentation targeting contributors is not translated.
diff --git a/docs/lt-rLT/user/units-and-locale.md b/docs/lt-rLT/user/units-and-locale.md
index 508229223..34f485e67 100644
--- a/docs/lt-rLT/user/units-and-locale.md
+++ b/docs/lt-rLT/user/units-and-locale.md
@@ -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 uses the `MetricFormatter` utility to convert and display values in whatever unit system your device's locale specifies.
+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.
On Android, your measurement preferences are determined by your system **Language & Region** settings. On Desktop (JVM), the app uses the JVM's default `Locale`.
@@ -115,12 +115,13 @@ On Android, your measurement system (metric vs imperial) is tied to your region
2. Change your **Region** or **Measurement units** preference
3. Return to Meshtastic — values update immediately
-> 💡 **Tip:** The app uses `MetricFormatter` from `core:common`. All measurement formatting is handled by a shared KMP utility that respects your platform's locale. Developers adding new measurement displays should use `MetricFormatter` rather than hard-coding unit conversions.
+> 💡 **Tip:** All measurement formatting is handled centrally and respects your platform's locale, so units stay consistent everywhere in the app.
## Related Topics
- [Node Metrics](node-metrics) — where temperature, distance, and sensor values are displayed
- [Telemetry & Sensors](telemetry-and-sensors) — the sensors that produce these measurements
+- [Measurement & Formatting](../developer/measurement) — developer reference for the formatting utilities
- [Settings — Radio & User](settings-radio-user) — region setting that drives unit selection
---
diff --git a/docs/nl-rNL/user/android-auto.md b/docs/nl-rNL/user/android-auto.md
index 4ba72818a..a1a7d98b0 100644
--- a/docs/nl-rNL/user/android-auto.md
+++ b/docs/nl-rNL/user/android-auto.md
@@ -2,7 +2,7 @@
title: Android Auto
parent: User Guide
nav_order: 18
-last_updated: 2026-06-11
+last_updated: 2026-07-07
description: Use Meshtastic hands-free on an Android Auto head unit — read messages aloud, reply by voice, and check nodes and mesh status while driving.
aliases:
- android-auto
@@ -17,9 +17,11 @@ Meshtastic integrates with Android Auto so you can stay in touch with your mesh
> ⚠️ **Note:** Android Auto support is available on **Google-flavor Android builds only**. It is not included in the F-Droid build, and it is not available on Desktop or iOS.
+> ℹ️ **What ships today:** The Google Play build provides **notification-only** car messaging — incoming messages are announced on the head unit and you reply through its notification controls. The full tabbed **Messages / Nodes / Status** experience described below is a beta built on the Android Car App Library (Google's templated car UI is currently restricted to Closed/Internal Play tracks), so it appears only in builds compiled with `-PenableCarTemplates=true`. The rest of this page documents that beta experience.
+
## Overview
-When your phone is connected to an Android Auto head unit (or the Desktop Head Unit emulator used for development), Meshtastic appears as a messaging app built with the Android Car App Library. The car interface presents a tabbed Home screen optimized for driving-safe, glanceable use:
+When your phone is connected to an Android Auto head unit (or the Desktop Head Unit emulator used for development), the beta build presents Meshtastic as a messaging app built with the Android Car App Library, with a tabbed Home screen optimized for driving-safe, glanceable use:
- **Messages** — recent conversations, with hands-free reading and replies.
- **Nodes** — the mesh node list, with a node-detail view.
diff --git a/docs/nl-rNL/user/connections.md b/docs/nl-rNL/user/connections.md
index 99b142025..b39e0b9a6 100644
--- a/docs/nl-rNL/user/connections.md
+++ b/docs/nl-rNL/user/connections.md
@@ -23,7 +23,7 @@ Bluetooth Low Energy is the default and most common connection method on Android
1. Ensure your Meshtastic radio is powered on and in pairing mode.
2. Open the app and navigate to the **Connect** tab.
-3. Tap **Scan for Devices** — nearby Meshtastic radios will appear.
+3. Tap **Scan for Bluetooth devices** — nearby Meshtastic radios will appear.
4. Select your device from the list.
5. Accept the Bluetooth pairing prompt if shown.
diff --git a/docs/nl-rNL/user/desktop.md b/docs/nl-rNL/user/desktop.md
index c469a5fa1..813aa4d92 100644
--- a/docs/nl-rNL/user/desktop.md
+++ b/docs/nl-rNL/user/desktop.md
@@ -2,7 +2,7 @@
title: Desktop App
parent: User Guide
nav_order: 14
-last_updated: 2026-06-11
+last_updated: 2026-07-07
description: Install and use the Meshtastic Desktop app on Linux, macOS, and Windows — connections, feature parity, and keyboard shortcuts.
aliases:
- desktop
@@ -60,19 +60,19 @@ Bluetooth Low Energy is supported on Desktop via the [Kable](https://github.com/
## Feature Parity
-| Feature | Android | Desktop | Notes |
-| -------------------------------------------- | ------- | ------- | ---------------------------------------------- |
-| Messaging | ✓ | ✓ | Full parity |
-| Node List | ✓ | ✓ | Full parity |
-| Kaart | ✓ | ✓ | Full parity |
-| Instellingen | ✓ | ✓ | Full parity |
-| Bluetooth (BLE) | ✓ | ✓ | Via Kable on desktop |
-| Firmware Update OTA | ✓ | ✗ | Use web flasher |
-| Notifications | ✓ | ✓ | Native OS notifications |
-| Widgets | ✓ | ✗ | Android-only |
-| Android Auto | ✓ | ✗ | Android-only — not available on Desktop or iOS |
-| AI Assistant (Chirpy) | ✓\* | ✗ | Google flavor Android only |
-| App Functions (system AI) | ✓† | ✗ | Google flavor Android only |
+| Feature | Android | Desktop | Notes |
+| -------------------------------------------- | ------- | ------- | -------------------------------------------------------------------------- |
+| Messaging | ✓ | ✓ | Full parity |
+| Node List | ✓ | ✓ | Full parity |
+| Kaart | ✓ | ◐ | Map tab exists on desktop, but the interactive map view is Android-only |
+| Instellingen | ✓ | ✓ | Full parity |
+| Bluetooth (BLE) | ✓ | ✓ | Via Kable on desktop |
+| Firmware Update | ✓ | ◐ | Desktop supports in-app USB firmware update; BLE/Wi-Fi OTA is Android-only |
+| Notifications | ✓ | ✓ | Native OS notifications |
+| Widgets | ✓ | ✗ | Android-only |
+| Android Auto | ✓ | ✗ | Android-only — not available on Desktop or iOS |
+| AI Assistant (Chirpy) | ✓\* | ✗ | Google flavor Android only |
+| App Functions (system AI) | ✓† | ✗ | Google flavor Android only |
\*Chirpy AI requires Android 14+ on Google flavor builds with supported hardware.
@@ -84,14 +84,17 @@ The Desktop app uses the same Compose Multiplatform UI with adaptations for larg
### Keyboard Shortcuts
-| Shortcut | Action |
-| ------------------- | ---------------------- |
-| **⌘Q** / **Ctrl+Q** | Quit the application |
-| **⌘,** / **Ctrl+,** | Open Settings |
-| **⌘1** / **Ctrl+1** | Switch to Messages tab |
-| **⌘2** / **Ctrl+2** | Switch to Nodes tab |
-| **⌘3** / **Ctrl+3** | Switch to Map tab |
-| **⌘4** / **Ctrl+4** | Switch to Connect tab |
+All shortcuts use the **Meta** key — that's ⌘ (Command) on macOS and the Super / Windows key on Linux and Windows. (`Ctrl` is not bound.)
+
+| Shortcut | Action |
+| ---------- | ---------------------- |
+| **Meta+Q** | Quit the application |
+| **Meta+,** | Open Settings |
+| **Meta+1** | Switch to Messages tab |
+| **Meta+2** | Switch to Nodes tab |
+| **Meta+3** | Switch to Map tab |
+| **Meta+4** | Switch to Connect tab |
+| **Meta+/** | Open About |
### Window & System Tray
@@ -123,7 +126,6 @@ Individual doc pages render with full formatting:
```bash
git clone https://github.com/meshtastic/Meshtastic-Android.git
cd Meshtastic-Android
-git submodule update --init
./gradlew :desktopApp:run
```
@@ -134,7 +136,8 @@ Requirements:
## Known Limitations
-- No OTA firmware updates (use web flasher)
+- 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
- BLE bonding is not yet supported on desktop (pairing works without bonding)
@@ -142,7 +145,7 @@ Requirements:
## Related Topics
- [Connections](connections) — connection methods overview
-- [Firmware Updates](firmware) — use the [Web Flasher](https://flasher.meshtastic.org) for desktop firmware updates
+- [Firmware Updates](firmware) — in-app USB update on desktop, or the [Web Flasher](https://flasher.meshtastic.org)
---
diff --git a/docs/nl-rNL/user/discovery.md b/docs/nl-rNL/user/discovery.md
index da2b83f90..e9e1c13da 100644
--- a/docs/nl-rNL/user/discovery.md
+++ b/docs/nl-rNL/user/discovery.md
@@ -44,7 +44,6 @@ Before starting, configure these controls:
The **Start** button stays disabled — with an explanation of why — until the scan can run. Common reasons it's disabled:
- The device is **not connected**.
-- The current channel is using the **default channel key** (use a unique key first — see [Messages & Channels](messages-and-channels)).
- **No presets** have been selected to scan.
- The selected preset uses **2.4 GHz**, which your hardware doesn't support.
diff --git a/docs/nl-rNL/user/firmware.md b/docs/nl-rNL/user/firmware.md
index 52a1147d5..199f6364d 100644
--- a/docs/nl-rNL/user/firmware.md
+++ b/docs/nl-rNL/user/firmware.md
@@ -2,8 +2,8 @@
title: Firmware Updates
parent: User Guide
nav_order: 13
-last_updated: 2026-05-13
-description: Update your radio firmware over Bluetooth — OTA process, version channels, pre-flight checks, and recovery.
+last_updated: 2026-07-07
+description: Update your radio firmware over Bluetooth or USB — OTA process, version channels, pre-flight checks, and recovery.
aliases:
- firmware
- update
@@ -17,7 +17,7 @@ Keep your Meshtastic radio up to date with the latest firmware for new features,
## Checking for Updates
-1. Navigate to **Settings → Firmware Update** or tap the firmware notification if shown.
+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.
2. The app checks for available firmware versions.
3. Available updates show the version number and changelog summary.
@@ -39,19 +39,26 @@ The most common update method for Android users:

-### USB Flashing
+### In-App USB Update
-For recovery or when OTA is unavailable:
+When your radio is connected over **USB/serial** (rather than Bluetooth), the Firmware Update screen offers **USB File Transfer**. The app reboots the device into DFU mode, then prompts you to save the `.uf2` file to the device's DFU drive using the system file picker. This option appears only on a USB/serial connection — it is not available over Bluetooth.
+
+> ℹ️ **nRF bootloader note:** Some devices (e.g. RAK WisBlock RAK4631) need their bootloader flashed with the vendor's serial DFU tool (such as `adafruit-nrfutil`) — copying the `.uf2` alone won't update the bootloader. The app surfaces a hint when this applies.
+
+### Other Flashing Options
+
+For recovery or when neither OTA nor in-app USB is available:
- Use the [Meshtastic Web Flasher](https://flasher.meshtastic.org)
- Or the [Meshtastic CLI tool](https://meshtastic.org/docs/getting-started/flashing-firmware) on desktop
## Version Channels
-| Kanaal | Beschrijving |
-| ------ | ------------------------------------------- |
-| Stable | Recommended for most users; tested releases |
-| Alpha | Preview releases; may contain bugs |
+| Kanaal | Beschrijving |
+| ---------- | -------------------------------------------------------------------------- |
+| Stable | Recommended for most users; tested releases |
+| Alpha | Preview releases; may contain bugs |
+| Local File | Flash a firmware file you select yourself, instead of a downloaded release |
## Pre-Update Checklist
@@ -73,7 +80,7 @@ Once the update succeeds:
- The radio will reboot automatically
- Bluetooth connection will re-establish
- Verify your settings are intact
-- Check the firmware version in **Settings → About**
+- Confirm the new version under **Currently Installed** on the Firmware Update screen — it's also shown on the node's detail page and the Connections screen

diff --git a/docs/nl-rNL/user/messages-and-channels.md b/docs/nl-rNL/user/messages-and-channels.md
index 3cf1ba727..7e57adb40 100644
--- a/docs/nl-rNL/user/messages-and-channels.md
+++ b/docs/nl-rNL/user/messages-and-channels.md
@@ -116,12 +116,16 @@ You can search the full history of any conversation directly from the chat scree

-> 💡 **Tip:** Search is full-text and stays within the conversation you opened it from — it doesn't search across other channels or contacts. Matching is fast even on long histories because messages are indexed locally.
+> 💡 **Tip:** Search is full-text and stays within the conversation you opened it from — it doesn't search across other channels or contacts. It matches against the messages already stored on your device, so it works fully offline.
### Message Bubbles
Messages appear as chat bubbles — sent messages on the right, received messages on the left. Each bubble shows the sender, timestamp, and delivery status. Messages with replies include a quoted preview of the original message above the response.
+### Mentions
+
+Type `@` while composing to mention a node — a picker suggests matching contacts as you type. In a received message, a mention appears as a highlighted chip showing the node's name; tap it to jump straight to that node's detail page.
+
### Reactions
React to messages with emoji:
@@ -143,6 +147,7 @@ Long-press any message to access:
- **Copy** — copy message text to clipboard
- **Reply** — quote the message in your response
- **React** — add an emoji reaction
+- **Translate** — translate a received message into your device language and toggle between the original and translated text (Google Play build only; uses on-device translation)
- **Delete** — remove a message you sent (local deletion)
### Message Priority
diff --git a/docs/nl-rNL/user/mqtt.md b/docs/nl-rNL/user/mqtt.md
index 877ef9936..bb3c2dffd 100644
--- a/docs/nl-rNL/user/mqtt.md
+++ b/docs/nl-rNL/user/mqtt.md
@@ -56,6 +56,8 @@ A gateway node with internet access (WiFi or Ethernet) publishes mesh messages t
The community maintains a public broker at `mqtt.meshtastic.org`. This is intended for general use and testing.
+> ℹ️ **Note:** Connections to `mqtt.meshtastic.org` always use TLS (port 8883), even if the TLS toggle is off. For any other broker, TLS is used only when you enable it (port 8883 with TLS, 1883 without).
+
> 🔒 **Privacy:** Messages on the public broker are readable by anyone subscribed. Always use channel encryption for private communications.
### Private Broker
diff --git a/docs/nl-rNL/user/node-metrics.md b/docs/nl-rNL/user/node-metrics.md
index 29c281655..46fc46b52 100644
--- a/docs/nl-rNL/user/node-metrics.md
+++ b/docs/nl-rNL/user/node-metrics.md
@@ -55,12 +55,15 @@ The BME680 **IAQ (Indoor Air Quality)** index is a single 0–500+ value derived
Air Quality is a dedicated metrics view for nodes equipped with a particulate-matter and/or CO₂ sensor. It is **separate from the BME680 IAQ reading** listed under Environment Metrics — IAQ is a single gas-resistance-derived index, while the Air Quality view charts the underlying particulate and CO₂ measurements.
-| Metric | Unit | Beschrijving |
-| --------------------- | ----- | ---------------------------------------------------- |
-| PM1.0 | µg/m³ | Particulate matter up to 1.0 micron |
-| PM2.5 | µg/m³ | Particulate matter up to 2.5 microns |
-| PM10 | µg/m³ | Particulate matter up to 10 microns |
-| CO₂ | ppm | Carbon dioxide concentration |
+| Metric | Unit | Beschrijving |
+| --------------------- | --------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| PM1.0 | µg/m³ | Particulate matter up to 1.0 micron |
+| PM2.5 | µg/m³ | Particulate matter up to 2.5 microns |
+| PM10 | µg/m³ | Particulate matter up to 10 microns |
+| AQI | EPA index | EPA **NowCast** AQI computed from your recent PM2.5 history, with a color-coded severity label. Shown next to PM2.5 once enough readings have accumulated. |
+| CO₂ | ppm | Carbon dioxide concentration |
+| CO₂ temperature | °C / °F | Temperature reported by the CO₂ sensor itself (e.g. SCD4x) |
+| CO₂ humidity | % | Relative humidity reported by the CO₂ sensor |
CO₂ readings are color-coded by severity to make air quality easy to read at a glance:
@@ -98,12 +101,12 @@ Radio signal quality information:
Signal quality is rated from **SNR relative to the active LoRa modem preset's demodulation floor**, not from fixed thresholds — a given SNR means different things on different presets (e.g. −15 dB is fine on LongSlow but unusable on ShortFast). RSSI is shown but is not part of the rating. Letting `limit` be the preset's SNR limit:
-| Quality | Criteria |
-| ------- | ------------------------------------------------ |
-| Goed | SNR above the preset's limit |
-| Matig | within 5.5 dB below the limit |
-| Slecht | within 7.5 dB below the limit |
-| Geen | more than 7.5 dB below the limit |
+| Quality | Criteria |
+| ------- | ------------------------------------------------------------------------- |
+| Goed | SNR above the preset's limit |
+| Matig | up to 5.5 dB below the limit |
+| Slecht | between 5.5 dB and 7.5 dB below the limit |
+| Geen | more than 7.5 dB below the limit |
See [Understanding the Signal Meter](signal-meter) for the full explanation.
diff --git a/docs/nl-rNL/user/settings-radio-user.md b/docs/nl-rNL/user/settings-radio-user.md
index 9f5d2f177..13bce1e7c 100644
--- a/docs/nl-rNL/user/settings-radio-user.md
+++ b/docs/nl-rNL/user/settings-radio-user.md
@@ -74,6 +74,8 @@ After modifying settings, tap **Save** to write the configuration to your radio.
| ~~Long Slow~~ | ~30 km | 0.18 kbps | −17.5 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.
+
#### Choosing a Modem Preset
The modem preset controls the fundamental tradeoff between **range** and **data rate**:
diff --git a/docs/nl-rNL/user/signal-meter.md b/docs/nl-rNL/user/signal-meter.md
index c90f9194a..f32732c75 100644
--- a/docs/nl-rNL/user/signal-meter.md
+++ b/docs/nl-rNL/user/signal-meter.md
@@ -52,12 +52,12 @@ The app rates your signal quality (None, Bad, Fair, or Good) from **SNR alone, m
Because the rating is relative to the preset limit, the _same_ SNR can rate differently on different presets — `-15 dB` is healthy on `LongSlow` but unusable on `ShortFast`. Letting `limit` be the active preset's SNR Limit, here is how the app picks the bars (or color):
-| Level | Bars | Criteria | Meaning |
-| ------ | ---- | ------------------------------------ | ---------------------------------------------------------------------------------------- |
-| Goed | 3 | SNR **above** the preset's `limit` | Signal is comfortably above the demodulation floor — healthy connection. |
-| Matig | 2 | within `5.5 dB` below the `limit` | Decodable, but getting close to the floor. |
-| Slecht | 1 | within `7.5 dB` below the `limit` | At the very edge of what the preset can recover. |
-| Geen | 0 | more than `7.5 dB` below the `limit` | Below the floor — transmission lost to noise. |
+| Level | Bars | Criteria | Meaning |
+| ------ | ---- | ----------------------------------------------- | ---------------------------------------------------------------------------------------- |
+| Goed | 3 | SNR **above** the preset's `limit` | Signal is comfortably above the demodulation floor — healthy connection. |
+| Matig | 2 | up to `5.5 dB` below the `limit` | Decodable, but getting close to the floor. |
+| Slecht | 1 | between `5.5 dB` and `7.5 dB` below the `limit` | At the very edge of what the preset can recover. |
+| Geen | 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.
diff --git a/docs/nl-rNL/user/telemetry-and-sensors.md b/docs/nl-rNL/user/telemetry-and-sensors.md
index 20255dad5..ac68f12de 100644
--- a/docs/nl-rNL/user/telemetry-and-sensors.md
+++ b/docs/nl-rNL/user/telemetry-and-sensors.md
@@ -103,7 +103,9 @@ Nodes with particulate matter or CO₂ sensors report air quality data:
| PM10 | µg/m³ | Coarse particulate matter |
| CO₂ | ppm | Carbon dioxide concentration |
-The CO₂ reading is color-coded by severity (Good → Stuffy → Poor → Unsafe → Evacuate). See [Node Metrics — Air Quality](node-metrics#air-quality-metrics) for the exact ppm bands and colors.
+CO₂ sensors such as the SCD4x also report their own temperature and humidity, which appear alongside the readings above. From PM2.5 history the app additionally derives an **EPA NowCast AQI** value.
+
+The CO₂ reading is color-coded by severity (Good → Stuffy → Poor → Unsafe → Evacuate). See [Node Metrics — Air Quality](node-metrics#air-quality-metrics) for the exact ppm bands, colors, and AQI detail.
Air quality data can be viewed as info cards on the node detail screen, charted over time, and exported to CSV.
diff --git a/docs/nl-rNL/user/translate.md b/docs/nl-rNL/user/translate.md
index 25aa4693c..70c966fed 100644
--- a/docs/nl-rNL/user/translate.md
+++ b/docs/nl-rNL/user/translate.md
@@ -18,11 +18,11 @@ Contributing translations helps make Meshtastic accessible to a wider audience.
## What Gets Translated
-| Resource | Source Location | Notes |
-| ----------------- | ------------------------------------- | ---------------------------------------------------------------------- |
-| UI strings | `composeResources/values/strings.xml` | Buttons, labels, messages, and all user-visible text |
-| User Guide pages | `docs/user/*.md` | In-app documentation shown in Help & Documentation |
-| Fastlane metadata | `fastlane/metadata/android/en-US/` | App Store listing title, description, and changelogs |
+| Resource | Source Location | Notes |
+| ----------------- | ------------------------------------------------------------------- | ---------------------------------------------------------------------- |
+| UI strings | `core/resources/src/commonMain/composeResources/values/strings.xml` | Buttons, labels, messages, and all user-visible text |
+| User Guide pages | `docs/en/user/*.md` | In-app documentation shown in Help & Documentation |
+| Fastlane metadata | `fastlane/metadata/android/en-US/` | App Store listing title, description, and changelogs |
> ⚠️ **Note:** Developer Guide pages are English-only. Code-focused documentation targeting contributors is not translated.
diff --git a/docs/nl-rNL/user/units-and-locale.md b/docs/nl-rNL/user/units-and-locale.md
index 07865a799..791a6e31c 100644
--- a/docs/nl-rNL/user/units-and-locale.md
+++ b/docs/nl-rNL/user/units-and-locale.md
@@ -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 uses the `MetricFormatter` utility to convert and display values in whatever unit system your device's locale specifies.
+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.
On Android, your measurement preferences are determined by your system **Language & Region** settings. On Desktop (JVM), the app uses the JVM's default `Locale`.
@@ -115,12 +115,13 @@ On Android, your measurement system (metric vs imperial) is tied to your region
2. Change your **Region** or **Measurement units** preference
3. Return to Meshtastic — values update immediately
-> 💡 **Tip:** The app uses `MetricFormatter` from `core:common`. All measurement formatting is handled by a shared KMP utility that respects your platform's locale. Developers adding new measurement displays should use `MetricFormatter` rather than hard-coding unit conversions.
+> 💡 **Tip:** All measurement formatting is handled centrally and respects your platform's locale, so units stay consistent everywhere in the app.
## Related Topics
- [Node Metrics](node-metrics) — where temperature, distance, and sensor values are displayed
- [Telemetry & Sensors](telemetry-and-sensors) — the sensors that produce these measurements
+- [Measurement & Formatting](../developer/measurement) — developer reference for the formatting utilities
- [Settings — Radio & User](settings-radio-user) — region setting that drives unit selection
---
diff --git a/docs/no-rNO/user/android-auto.md b/docs/no-rNO/user/android-auto.md
index aeb53435d..b9ec6a2af 100644
--- a/docs/no-rNO/user/android-auto.md
+++ b/docs/no-rNO/user/android-auto.md
@@ -2,7 +2,7 @@
title: Android Auto
parent: User Guide
nav_order: 18
-last_updated: 2026-06-11
+last_updated: 2026-07-07
description: Use Meshtastic hands-free on an Android Auto head unit — read messages aloud, reply by voice, and check nodes and mesh status while driving.
aliases:
- android-auto
@@ -17,9 +17,11 @@ Meshtastic integrates with Android Auto so you can stay in touch with your mesh
> ⚠️ **Note:** Android Auto support is available on **Google-flavor Android builds only**. It is not included in the F-Droid build, and it is not available on Desktop or iOS.
+> ℹ️ **What ships today:** The Google Play build provides **notification-only** car messaging — incoming messages are announced on the head unit and you reply through its notification controls. The full tabbed **Messages / Nodes / Status** experience described below is a beta built on the Android Car App Library (Google's templated car UI is currently restricted to Closed/Internal Play tracks), so it appears only in builds compiled with `-PenableCarTemplates=true`. The rest of this page documents that beta experience.
+
## Overview
-When your phone is connected to an Android Auto head unit (or the Desktop Head Unit emulator used for development), Meshtastic appears as a messaging app built with the Android Car App Library. The car interface presents a tabbed Home screen optimized for driving-safe, glanceable use:
+When your phone is connected to an Android Auto head unit (or the Desktop Head Unit emulator used for development), the beta build presents Meshtastic as a messaging app built with the Android Car App Library, with a tabbed Home screen optimized for driving-safe, glanceable use:
- **Messages** — recent conversations, with hands-free reading and replies.
- **Nodes** — the mesh node list, with a node-detail view.
diff --git a/docs/no-rNO/user/connections.md b/docs/no-rNO/user/connections.md
index afc0afb41..0c96e8b01 100644
--- a/docs/no-rNO/user/connections.md
+++ b/docs/no-rNO/user/connections.md
@@ -23,7 +23,7 @@ Bluetooth Low Energy is the default and most common connection method on Android
1. Ensure your Meshtastic radio is powered on and in pairing mode.
2. Open the app and navigate to the **Connect** tab.
-3. Tap **Scan for Devices** — nearby Meshtastic radios will appear.
+3. Tap **Scan for Bluetooth devices** — nearby Meshtastic radios will appear.
4. Select your device from the list.
5. Accept the Bluetooth pairing prompt if shown.
diff --git a/docs/no-rNO/user/desktop.md b/docs/no-rNO/user/desktop.md
index e69b44554..2ac96feda 100644
--- a/docs/no-rNO/user/desktop.md
+++ b/docs/no-rNO/user/desktop.md
@@ -2,7 +2,7 @@
title: Desktop App
parent: User Guide
nav_order: 14
-last_updated: 2026-06-11
+last_updated: 2026-07-07
description: Install and use the Meshtastic Desktop app on Linux, macOS, and Windows — connections, feature parity, and keyboard shortcuts.
aliases:
- desktop
@@ -60,19 +60,19 @@ Bluetooth Low Energy is supported on Desktop via the [Kable](https://github.com/
## Feature Parity
-| Feature | Android | Desktop | Notes |
-| -------------------------------------------- | ------- | ------- | ---------------------------------------------- |
-| Messaging | ✓ | ✓ | Full parity |
-| Node List | ✓ | ✓ | Full parity |
-| Map | ✓ | ✓ | Full parity |
-| Settings | ✓ | ✓ | Full parity |
-| Bluetooth (BLE) | ✓ | ✓ | Via Kable on desktop |
-| Firmware Update OTA | ✓ | ✗ | Use web flasher |
-| Notifications | ✓ | ✓ | Native OS notifications |
-| Widgets | ✓ | ✗ | Android-only |
-| Android Auto | ✓ | ✗ | Android-only — not available on Desktop or iOS |
-| AI Assistant (Chirpy) | ✓\* | ✗ | Google flavor Android only |
-| App Functions (system AI) | ✓† | ✗ | Google flavor Android only |
+| Feature | Android | Desktop | Notes |
+| -------------------------------------------- | ------- | ------- | -------------------------------------------------------------------------- |
+| Messaging | ✓ | ✓ | Full parity |
+| Node List | ✓ | ✓ | Full parity |
+| 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 |
+| Notifications | ✓ | ✓ | Native OS notifications |
+| Widgets | ✓ | ✗ | Android-only |
+| Android Auto | ✓ | ✗ | Android-only — not available on Desktop or iOS |
+| AI Assistant (Chirpy) | ✓\* | ✗ | Google flavor Android only |
+| App Functions (system AI) | ✓† | ✗ | Google flavor Android only |
\*Chirpy AI requires Android 14+ on Google flavor builds with supported hardware.
@@ -84,14 +84,17 @@ The Desktop app uses the same Compose Multiplatform UI with adaptations for larg
### Keyboard Shortcuts
-| Shortcut | Action |
-| ------------------- | ---------------------- |
-| **⌘Q** / **Ctrl+Q** | Quit the application |
-| **⌘,** / **Ctrl+,** | Open Settings |
-| **⌘1** / **Ctrl+1** | Switch to Messages tab |
-| **⌘2** / **Ctrl+2** | Switch to Nodes tab |
-| **⌘3** / **Ctrl+3** | Switch to Map tab |
-| **⌘4** / **Ctrl+4** | Switch to Connect tab |
+All shortcuts use the **Meta** key — that's ⌘ (Command) on macOS and the Super / Windows key on Linux and Windows. (`Ctrl` is not bound.)
+
+| Shortcut | Action |
+| ---------- | ---------------------- |
+| **Meta+Q** | Quit the application |
+| **Meta+,** | Open Settings |
+| **Meta+1** | Switch to Messages tab |
+| **Meta+2** | Switch to Nodes tab |
+| **Meta+3** | Switch to Map tab |
+| **Meta+4** | Switch to Connect tab |
+| **Meta+/** | Open About |
### Window & System Tray
@@ -123,7 +126,6 @@ Individual doc pages render with full formatting:
```bash
git clone https://github.com/meshtastic/Meshtastic-Android.git
cd Meshtastic-Android
-git submodule update --init
./gradlew :desktopApp:run
```
@@ -134,7 +136,8 @@ Requirements:
## Known Limitations
-- No OTA firmware updates (use web flasher)
+- 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
- BLE bonding is not yet supported on desktop (pairing works without bonding)
@@ -142,7 +145,7 @@ Requirements:
## Related Topics
- [Connections](connections) — connection methods overview
-- [Firmware Updates](firmware) — use the [Web Flasher](https://flasher.meshtastic.org) for desktop firmware updates
+- [Firmware Updates](firmware) — in-app USB update on desktop, or the [Web Flasher](https://flasher.meshtastic.org)
---
diff --git a/docs/no-rNO/user/discovery.md b/docs/no-rNO/user/discovery.md
index 3f3a1d194..241f91602 100644
--- a/docs/no-rNO/user/discovery.md
+++ b/docs/no-rNO/user/discovery.md
@@ -44,7 +44,6 @@ Before starting, configure these controls:
The **Start** button stays disabled — with an explanation of why — until the scan can run. Common reasons it's disabled:
- The device is **not connected**.
-- The current channel is using the **default channel key** (use a unique key first — see [Messages & Channels](messages-and-channels)).
- **No presets** have been selected to scan.
- The selected preset uses **2.4 GHz**, which your hardware doesn't support.
diff --git a/docs/no-rNO/user/firmware.md b/docs/no-rNO/user/firmware.md
index f0a0a20f4..691023ecb 100644
--- a/docs/no-rNO/user/firmware.md
+++ b/docs/no-rNO/user/firmware.md
@@ -2,8 +2,8 @@
title: Firmware Updates
parent: User Guide
nav_order: 13
-last_updated: 2026-05-13
-description: Update your radio firmware over Bluetooth — OTA process, version channels, pre-flight checks, and recovery.
+last_updated: 2026-07-07
+description: Update your radio firmware over Bluetooth or USB — OTA process, version channels, pre-flight checks, and recovery.
aliases:
- firmware
- update
@@ -17,7 +17,7 @@ Keep your Meshtastic radio up to date with the latest firmware for new features,
## Checking for Updates
-1. Navigate to **Settings → Firmware Update** or tap the firmware notification if shown.
+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.
2. The app checks for available firmware versions.
3. Available updates show the version number and changelog summary.
@@ -39,19 +39,26 @@ The most common update method for Android users:

-### USB Flashing
+### In-App USB Update
-For recovery or when OTA is unavailable:
+When your radio is connected over **USB/serial** (rather than Bluetooth), the Firmware Update screen offers **USB File Transfer**. The app reboots the device into DFU mode, then prompts you to save the `.uf2` file to the device's DFU drive using the system file picker. This option appears only on a USB/serial connection — it is not available over Bluetooth.
+
+> ℹ️ **nRF bootloader note:** Some devices (e.g. RAK WisBlock RAK4631) need their bootloader flashed with the vendor's serial DFU tool (such as `adafruit-nrfutil`) — copying the `.uf2` alone won't update the bootloader. The app surfaces a hint when this applies.
+
+### Other Flashing Options
+
+For recovery or when neither OTA nor in-app USB is available:
- Use the [Meshtastic Web Flasher](https://flasher.meshtastic.org)
- Or the [Meshtastic CLI tool](https://meshtastic.org/docs/getting-started/flashing-firmware) on desktop
## Version Channels
-| Kanal | Beskrivelse |
-| ------ | ------------------------------------------- |
-| Stable | Recommended for most users; tested releases |
-| Alpha | Preview releases; may contain bugs |
+| Kanal | Beskrivelse |
+| ---------- | -------------------------------------------------------------------------- |
+| Stable | Recommended for most users; tested releases |
+| Alpha | Preview releases; may contain bugs |
+| Local File | Flash a firmware file you select yourself, instead of a downloaded release |
## Pre-Update Checklist
@@ -73,7 +80,7 @@ Once the update succeeds:
- The radio will reboot automatically
- Bluetooth connection will re-establish
- Verify your settings are intact
-- Check the firmware version in **Settings → About**
+- Confirm the new version under **Currently Installed** on the Firmware Update screen — it's also shown on the node's detail page and the Connections screen

diff --git a/docs/no-rNO/user/messages-and-channels.md b/docs/no-rNO/user/messages-and-channels.md
index 962f44e8e..62d3b6e62 100644
--- a/docs/no-rNO/user/messages-and-channels.md
+++ b/docs/no-rNO/user/messages-and-channels.md
@@ -116,12 +116,16 @@ You can search the full history of any conversation directly from the chat scree

-> 💡 **Tip:** Search is full-text and stays within the conversation you opened it from — it doesn't search across other channels or contacts. Matching is fast even on long histories because messages are indexed locally.
+> 💡 **Tip:** Search is full-text and stays within the conversation you opened it from — it doesn't search across other channels or contacts. It matches against the messages already stored on your device, so it works fully offline.
### Message Bubbles
Messages appear as chat bubbles — sent messages on the right, received messages on the left. Each bubble shows the sender, timestamp, and delivery status. Messages with replies include a quoted preview of the original message above the response.
+### Mentions
+
+Type `@` while composing to mention a node — a picker suggests matching contacts as you type. In a received message, a mention appears as a highlighted chip showing the node's name; tap it to jump straight to that node's detail page.
+
### Reactions
React to messages with emoji:
@@ -143,6 +147,7 @@ Long-press any message to access:
- **Copy** — copy message text to clipboard
- **Reply** — quote the message in your response
- **React** — add an emoji reaction
+- **Translate** — translate a received message into your device language and toggle between the original and translated text (Google Play build only; uses on-device translation)
- **Delete** — remove a message you sent (local deletion)
### Message Priority
diff --git a/docs/no-rNO/user/mqtt.md b/docs/no-rNO/user/mqtt.md
index ec33ca3fa..5baa5f795 100644
--- a/docs/no-rNO/user/mqtt.md
+++ b/docs/no-rNO/user/mqtt.md
@@ -56,6 +56,8 @@ A gateway node with internet access (WiFi or Ethernet) publishes mesh messages t
The community maintains a public broker at `mqtt.meshtastic.org`. This is intended for general use and testing.
+> ℹ️ **Note:** Connections to `mqtt.meshtastic.org` always use TLS (port 8883), even if the TLS toggle is off. For any other broker, TLS is used only when you enable it (port 8883 with TLS, 1883 without).
+
> 🔒 **Privacy:** Messages on the public broker are readable by anyone subscribed. Always use channel encryption for private communications.
### Private Broker
diff --git a/docs/no-rNO/user/node-metrics.md b/docs/no-rNO/user/node-metrics.md
index 409f52417..8956039ab 100644
--- a/docs/no-rNO/user/node-metrics.md
+++ b/docs/no-rNO/user/node-metrics.md
@@ -55,12 +55,15 @@ The BME680 **IAQ (Indoor Air Quality)** index is a single 0–500+ value derived
Air Quality is a dedicated metrics view for nodes equipped with a particulate-matter and/or CO₂ sensor. It is **separate from the BME680 IAQ reading** listed under Environment Metrics — IAQ is a single gas-resistance-derived index, while the Air Quality view charts the underlying particulate and CO₂ measurements.
-| Metric | Unit | Beskrivelse |
-| --------------------- | ----- | ---------------------------------------------------- |
-| PM1.0 | µg/m³ | Particulate matter up to 1.0 micron |
-| PM2.5 | µg/m³ | Particulate matter up to 2.5 microns |
-| PM10 | µg/m³ | Particulate matter up to 10 microns |
-| CO₂ | ppm | Carbon dioxide concentration |
+| Metric | Unit | Beskrivelse |
+| --------------------- | --------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| PM1.0 | µg/m³ | Particulate matter up to 1.0 micron |
+| PM2.5 | µg/m³ | Particulate matter up to 2.5 microns |
+| PM10 | µg/m³ | Particulate matter up to 10 microns |
+| AQI | EPA index | EPA **NowCast** AQI computed from your recent PM2.5 history, with a color-coded severity label. Shown next to PM2.5 once enough readings have accumulated. |
+| CO₂ | ppm | Carbon dioxide concentration |
+| CO₂ temperature | °C / °F | Temperature reported by the CO₂ sensor itself (e.g. SCD4x) |
+| CO₂ humidity | % | Relative humidity reported by the CO₂ sensor |
CO₂ readings are color-coded by severity to make air quality easy to read at a glance:
@@ -98,12 +101,12 @@ Radio signal quality information:
Signal quality is rated from **SNR relative to the active LoRa modem preset's demodulation floor**, not from fixed thresholds — a given SNR means different things on different presets (e.g. −15 dB is fine on LongSlow but unusable on ShortFast). RSSI is shown but is not part of the rating. Letting `limit` be the preset's SNR limit:
-| Quality | Criteria |
-| ----------- | ------------------------------------------------ |
-| Godt | SNR above the preset's limit |
-| Middelmådig | within 5.5 dB below the limit |
-| Dårlig | within 7.5 dB below the limit |
-| Ingen | more than 7.5 dB below the limit |
+| Quality | Criteria |
+| ----------- | ------------------------------------------------------------------------- |
+| Godt | SNR above the preset's limit |
+| Middelmådig | up to 5.5 dB below the limit |
+| Dårlig | between 5.5 dB and 7.5 dB below the limit |
+| Ingen | more than 7.5 dB below the limit |
See [Understanding the Signal Meter](signal-meter) for the full explanation.
diff --git a/docs/no-rNO/user/settings-radio-user.md b/docs/no-rNO/user/settings-radio-user.md
index cc46d72fa..70775bcc2 100644
--- a/docs/no-rNO/user/settings-radio-user.md
+++ b/docs/no-rNO/user/settings-radio-user.md
@@ -74,6 +74,8 @@ After modifying settings, tap **Save** to write the configuration to your radio.
| ~~Long Slow~~ | ~30 km | 0.18 kbps | −17.5 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.
+
#### Choosing a Modem Preset
The modem preset controls the fundamental tradeoff between **range** and **data rate**:
diff --git a/docs/no-rNO/user/signal-meter.md b/docs/no-rNO/user/signal-meter.md
index 67ef0507a..3f47d48a5 100644
--- a/docs/no-rNO/user/signal-meter.md
+++ b/docs/no-rNO/user/signal-meter.md
@@ -52,12 +52,12 @@ The app rates your signal quality (None, Bad, Fair, or Good) from **SNR alone, m
Because the rating is relative to the preset limit, the _same_ SNR can rate differently on different presets — `-15 dB` is healthy on `LongSlow` but unusable on `ShortFast`. Letting `limit` be the active preset's SNR Limit, here is how the app picks the bars (or color):
-| Level | Bars | Criteria | Meaning |
-| ----------- | ---- | ------------------------------------ | ---------------------------------------------------------------------------------------- |
-| Godt | 3 | SNR **above** the preset's `limit` | Signal is comfortably above the demodulation floor — healthy connection. |
-| Middelmådig | 2 | within `5.5 dB` below the `limit` | Decodable, but getting close to the floor. |
-| Dårlig | 1 | within `7.5 dB` below the `limit` | At the very edge of what the preset can recover. |
-| Ingen | 0 | more than `7.5 dB` below the `limit` | Below the floor — transmission lost to noise. |
+| Level | Bars | Criteria | Meaning |
+| ----------- | ---- | ----------------------------------------------- | ---------------------------------------------------------------------------------------- |
+| Godt | 3 | SNR **above** the preset's `limit` | Signal is comfortably above the demodulation floor — healthy connection. |
+| Middelmådig | 2 | up to `5.5 dB` below the `limit` | Decodable, but getting close to the floor. |
+| Dårlig | 1 | between `5.5 dB` and `7.5 dB` below the `limit` | At the very edge of what the preset can recover. |
+| Ingen | 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.
diff --git a/docs/no-rNO/user/telemetry-and-sensors.md b/docs/no-rNO/user/telemetry-and-sensors.md
index 39e67e267..f82d08230 100644
--- a/docs/no-rNO/user/telemetry-and-sensors.md
+++ b/docs/no-rNO/user/telemetry-and-sensors.md
@@ -103,7 +103,9 @@ Nodes with particulate matter or CO₂ sensors report air quality data:
| PM10 | µg/m³ | Coarse particulate matter |
| CO₂ | ppm | Carbon dioxide concentration |
-The CO₂ reading is color-coded by severity (Good → Stuffy → Poor → Unsafe → Evacuate). See [Node Metrics — Air Quality](node-metrics#air-quality-metrics) for the exact ppm bands and colors.
+CO₂ sensors such as the SCD4x also report their own temperature and humidity, which appear alongside the readings above. From PM2.5 history the app additionally derives an **EPA NowCast AQI** value.
+
+The CO₂ reading is color-coded by severity (Good → Stuffy → Poor → Unsafe → Evacuate). See [Node Metrics — Air Quality](node-metrics#air-quality-metrics) for the exact ppm bands, colors, and AQI detail.
Air quality data can be viewed as info cards on the node detail screen, charted over time, and exported to CSV.
diff --git a/docs/no-rNO/user/translate.md b/docs/no-rNO/user/translate.md
index 25aa4693c..70c966fed 100644
--- a/docs/no-rNO/user/translate.md
+++ b/docs/no-rNO/user/translate.md
@@ -18,11 +18,11 @@ Contributing translations helps make Meshtastic accessible to a wider audience.
## What Gets Translated
-| Resource | Source Location | Notes |
-| ----------------- | ------------------------------------- | ---------------------------------------------------------------------- |
-| UI strings | `composeResources/values/strings.xml` | Buttons, labels, messages, and all user-visible text |
-| User Guide pages | `docs/user/*.md` | In-app documentation shown in Help & Documentation |
-| Fastlane metadata | `fastlane/metadata/android/en-US/` | App Store listing title, description, and changelogs |
+| Resource | Source Location | Notes |
+| ----------------- | ------------------------------------------------------------------- | ---------------------------------------------------------------------- |
+| UI strings | `core/resources/src/commonMain/composeResources/values/strings.xml` | Buttons, labels, messages, and all user-visible text |
+| User Guide pages | `docs/en/user/*.md` | In-app documentation shown in Help & Documentation |
+| Fastlane metadata | `fastlane/metadata/android/en-US/` | App Store listing title, description, and changelogs |
> ⚠️ **Note:** Developer Guide pages are English-only. Code-focused documentation targeting contributors is not translated.
diff --git a/docs/no-rNO/user/units-and-locale.md b/docs/no-rNO/user/units-and-locale.md
index 812417bc0..b2819137c 100644
--- a/docs/no-rNO/user/units-and-locale.md
+++ b/docs/no-rNO/user/units-and-locale.md
@@ -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 uses the `MetricFormatter` utility to convert and display values in whatever unit system your device's locale specifies.
+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.
On Android, your measurement preferences are determined by your system **Language & Region** settings. On Desktop (JVM), the app uses the JVM's default `Locale`.
@@ -115,12 +115,13 @@ On Android, your measurement system (metric vs imperial) is tied to your region
2. Change your **Region** or **Measurement units** preference
3. Return to Meshtastic — values update immediately
-> 💡 **Tip:** The app uses `MetricFormatter` from `core:common`. All measurement formatting is handled by a shared KMP utility that respects your platform's locale. Developers adding new measurement displays should use `MetricFormatter` rather than hard-coding unit conversions.
+> 💡 **Tip:** All measurement formatting is handled centrally and respects your platform's locale, so units stay consistent everywhere in the app.
## Related Topics
- [Node Metrics](node-metrics) — where temperature, distance, and sensor values are displayed
- [Telemetry & Sensors](telemetry-and-sensors) — the sensors that produce these measurements
+- [Measurement & Formatting](../developer/measurement) — developer reference for the formatting utilities
- [Settings — Radio & User](settings-radio-user) — region setting that drives unit selection
---
diff --git a/docs/pl-rPL/user/android-auto.md b/docs/pl-rPL/user/android-auto.md
index df413309e..7c778a62c 100644
--- a/docs/pl-rPL/user/android-auto.md
+++ b/docs/pl-rPL/user/android-auto.md
@@ -2,7 +2,7 @@
title: Android Auto
parent: User Guide
nav_order: 18
-last_updated: 2026-06-11
+last_updated: 2026-07-07
description: Use Meshtastic hands-free on an Android Auto head unit — read messages aloud, reply by voice, and check nodes and mesh status while driving.
aliases:
- android-auto
@@ -17,9 +17,11 @@ Meshtastic integrates with Android Auto so you can stay in touch with your mesh
> ⚠️ **Note:** Android Auto support is available on **Google-flavor Android builds only**. It is not included in the F-Droid build, and it is not available on Desktop or iOS.
+> ℹ️ **What ships today:** The Google Play build provides **notification-only** car messaging — incoming messages are announced on the head unit and you reply through its notification controls. The full tabbed **Messages / Nodes / Status** experience described below is a beta built on the Android Car App Library (Google's templated car UI is currently restricted to Closed/Internal Play tracks), so it appears only in builds compiled with `-PenableCarTemplates=true`. The rest of this page documents that beta experience.
+
## Overview
-When your phone is connected to an Android Auto head unit (or the Desktop Head Unit emulator used for development), Meshtastic appears as a messaging app built with the Android Car App Library. The car interface presents a tabbed Home screen optimized for driving-safe, glanceable use:
+When your phone is connected to an Android Auto head unit (or the Desktop Head Unit emulator used for development), the beta build presents Meshtastic as a messaging app built with the Android Car App Library, with a tabbed Home screen optimized for driving-safe, glanceable use:
- **Messages** — recent conversations, with hands-free reading and replies.
- **Nodes** — the mesh node list, with a node-detail view.
diff --git a/docs/pl-rPL/user/connections.md b/docs/pl-rPL/user/connections.md
index bf9c4be94..415253e73 100644
--- a/docs/pl-rPL/user/connections.md
+++ b/docs/pl-rPL/user/connections.md
@@ -23,7 +23,7 @@ Bluetooth Low Energy is the default and most common connection method on Android
1. Ensure your Meshtastic radio is powered on and in pairing mode.
2. Open the app and navigate to the **Connect** tab.
-3. Tap **Scan for Devices** — nearby Meshtastic radios will appear.
+3. Tap **Scan for Bluetooth devices** — nearby Meshtastic radios will appear.
4. Select your device from the list.
5. Accept the Bluetooth pairing prompt if shown.
diff --git a/docs/pl-rPL/user/desktop.md b/docs/pl-rPL/user/desktop.md
index 22ddb8d68..a1d0bc890 100644
--- a/docs/pl-rPL/user/desktop.md
+++ b/docs/pl-rPL/user/desktop.md
@@ -2,7 +2,7 @@
title: Desktop App
parent: User Guide
nav_order: 14
-last_updated: 2026-06-11
+last_updated: 2026-07-07
description: Install and use the Meshtastic Desktop app on Linux, macOS, and Windows — connections, feature parity, and keyboard shortcuts.
aliases:
- desktop
@@ -60,19 +60,19 @@ Bluetooth Low Energy is supported on Desktop via the [Kable](https://github.com/
## Feature Parity
-| Feature | Android | Desktop | Notatki |
-| -------------------------------------------- | ------- | ------- | ---------------------------------------------- |
-| Messaging | ✓ | ✓ | Full parity |
-| Node List | ✓ | ✓ | Full parity |
-| Mapa | ✓ | ✓ | Full parity |
-| Ustawienia | ✓ | ✓ | Full parity |
-| Bluetooth (BLE) | ✓ | ✓ | Via Kable on desktop |
-| Firmware Update OTA | ✓ | ✗ | Use web flasher |
-| Notifications | ✓ | ✓ | Native OS notifications |
-| Widgets | ✓ | ✗ | Android-only |
-| Android Auto | ✓ | ✗ | Android-only — not available on Desktop or iOS |
-| AI Assistant (Chirpy) | ✓\* | ✗ | Google flavor Android only |
-| App Functions (system AI) | ✓† | ✗ | Google flavor Android only |
+| Feature | Android | Desktop | Notatki |
+| -------------------------------------------- | ------- | ------- | -------------------------------------------------------------------------- |
+| Messaging | ✓ | ✓ | Full parity |
+| Node List | ✓ | ✓ | Full parity |
+| Mapa | ✓ | ◐ | Map tab exists on desktop, but the interactive map view is Android-only |
+| Ustawienia | ✓ | ✓ | Full parity |
+| Bluetooth (BLE) | ✓ | ✓ | Via Kable on desktop |
+| Aktualizacja oprogramowania | ✓ | ◐ | Desktop supports in-app USB firmware update; BLE/Wi-Fi OTA is Android-only |
+| Notifications | ✓ | ✓ | Native OS notifications |
+| Widgets | ✓ | ✗ | Android-only |
+| Android Auto | ✓ | ✗ | Android-only — not available on Desktop or iOS |
+| AI Assistant (Chirpy) | ✓\* | ✗ | Google flavor Android only |
+| App Functions (system AI) | ✓† | ✗ | Google flavor Android only |
\*Chirpy AI requires Android 14+ on Google flavor builds with supported hardware.
@@ -84,14 +84,17 @@ The Desktop app uses the same Compose Multiplatform UI with adaptations for larg
### Keyboard Shortcuts
-| Shortcut | Action |
-| ------------------- | ---------------------- |
-| **⌘Q** / **Ctrl+Q** | Quit the application |
-| **⌘,** / **Ctrl+,** | Open Settings |
-| **⌘1** / **Ctrl+1** | Switch to Messages tab |
-| **⌘2** / **Ctrl+2** | Switch to Nodes tab |
-| **⌘3** / **Ctrl+3** | Switch to Map tab |
-| **⌘4** / **Ctrl+4** | Switch to Connect tab |
+All shortcuts use the **Meta** key — that's ⌘ (Command) on macOS and the Super / Windows key on Linux and Windows. (`Ctrl` is not bound.)
+
+| Shortcut | Action |
+| ---------- | ---------------------- |
+| **Meta+Q** | Quit the application |
+| **Meta+,** | Open Settings |
+| **Meta+1** | Switch to Messages tab |
+| **Meta+2** | Switch to Nodes tab |
+| **Meta+3** | Switch to Map tab |
+| **Meta+4** | Switch to Connect tab |
+| **Meta+/** | Open About |
### Window & System Tray
@@ -123,7 +126,6 @@ Individual doc pages render with full formatting:
```bash
git clone https://github.com/meshtastic/Meshtastic-Android.git
cd Meshtastic-Android
-git submodule update --init
./gradlew :desktopApp:run
```
@@ -134,7 +136,8 @@ Requirements:
## Known Limitations
-- No OTA firmware updates (use web flasher)
+- 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
- BLE bonding is not yet supported on desktop (pairing works without bonding)
@@ -142,7 +145,7 @@ Requirements:
## Related Topics
- [Connections](connections) — connection methods overview
-- [Firmware Updates](firmware) — use the [Web Flasher](https://flasher.meshtastic.org) for desktop firmware updates
+- [Firmware Updates](firmware) — in-app USB update on desktop, or the [Web Flasher](https://flasher.meshtastic.org)
---
diff --git a/docs/pl-rPL/user/discovery.md b/docs/pl-rPL/user/discovery.md
index 97fa109dc..7c1b2ca1c 100644
--- a/docs/pl-rPL/user/discovery.md
+++ b/docs/pl-rPL/user/discovery.md
@@ -44,7 +44,6 @@ Before starting, configure these controls:
The **Start** button stays disabled — with an explanation of why — until the scan can run. Common reasons it's disabled:
- The device is **not connected**.
-- The current channel is using the **default channel key** (use a unique key first — see [Messages & Channels](messages-and-channels)).
- **No presets** have been selected to scan.
- The selected preset uses **2.4 GHz**, which your hardware doesn't support.
diff --git a/docs/pl-rPL/user/firmware.md b/docs/pl-rPL/user/firmware.md
index c18d1449c..9c8b560d6 100644
--- a/docs/pl-rPL/user/firmware.md
+++ b/docs/pl-rPL/user/firmware.md
@@ -2,8 +2,8 @@
title: Firmware Updates
parent: User Guide
nav_order: 13
-last_updated: 2026-05-13
-description: Update your radio firmware over Bluetooth — OTA process, version channels, pre-flight checks, and recovery.
+last_updated: 2026-07-07
+description: Update your radio firmware over Bluetooth or USB — OTA process, version channels, pre-flight checks, and recovery.
aliases:
- firmware
- update
@@ -17,7 +17,7 @@ Keep your Meshtastic radio up to date with the latest firmware for new features,
## Checking for Updates
-1. Navigate to **Settings → Firmware Update** or tap the firmware notification if shown.
+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.
2. The app checks for available firmware versions.
3. Available updates show the version number and changelog summary.
@@ -39,19 +39,26 @@ The most common update method for Android users:

-### USB Flashing
+### In-App USB Update
-For recovery or when OTA is unavailable:
+When your radio is connected over **USB/serial** (rather than Bluetooth), the Firmware Update screen offers **USB File Transfer**. The app reboots the device into DFU mode, then prompts you to save the `.uf2` file to the device's DFU drive using the system file picker. This option appears only on a USB/serial connection — it is not available over Bluetooth.
+
+> ℹ️ **nRF bootloader note:** Some devices (e.g. RAK WisBlock RAK4631) need their bootloader flashed with the vendor's serial DFU tool (such as `adafruit-nrfutil`) — copying the `.uf2` alone won't update the bootloader. The app surfaces a hint when this applies.
+
+### Other Flashing Options
+
+For recovery or when neither OTA nor in-app USB is available:
- Use the [Meshtastic Web Flasher](https://flasher.meshtastic.org)
- Or the [Meshtastic CLI tool](https://meshtastic.org/docs/getting-started/flashing-firmware) on desktop
## Version Channels
-| Kanał | Opis |
-| -------- | ------------------------------------------- |
-| Stabilna | Recommended for most users; tested releases |
-| Alpha | Preview releases; may contain bugs |
+| Kanał | Opis |
+| ---------- | -------------------------------------------------------------------------- |
+| Stabilna | Recommended for most users; tested releases |
+| Alpha | Preview releases; may contain bugs |
+| Local File | Flash a firmware file you select yourself, instead of a downloaded release |
## Pre-Update Checklist
@@ -73,7 +80,7 @@ Once the update succeeds:
- The radio will reboot automatically
- Bluetooth connection will re-establish
- Verify your settings are intact
-- Check the firmware version in **Settings → About**
+- Confirm the new version under **Currently Installed** on the Firmware Update screen — it's also shown on the node's detail page and the Connections screen

diff --git a/docs/pl-rPL/user/messages-and-channels.md b/docs/pl-rPL/user/messages-and-channels.md
index 041e70f34..b38187412 100644
--- a/docs/pl-rPL/user/messages-and-channels.md
+++ b/docs/pl-rPL/user/messages-and-channels.md
@@ -116,12 +116,16 @@ You can search the full history of any conversation directly from the chat scree

-> 💡 **Tip:** Search is full-text and stays within the conversation you opened it from — it doesn't search across other channels or contacts. Matching is fast even on long histories because messages are indexed locally.
+> 💡 **Tip:** Search is full-text and stays within the conversation you opened it from — it doesn't search across other channels or contacts. It matches against the messages already stored on your device, so it works fully offline.
### Message Bubbles
Messages appear as chat bubbles — sent messages on the right, received messages on the left. Each bubble shows the sender, timestamp, and delivery status. Messages with replies include a quoted preview of the original message above the response.
+### Mentions
+
+Type `@` while composing to mention a node — a picker suggests matching contacts as you type. In a received message, a mention appears as a highlighted chip showing the node's name; tap it to jump straight to that node's detail page.
+
### Reactions
React to messages with emoji:
@@ -143,6 +147,7 @@ Long-press any message to access:
- **Copy** — copy message text to clipboard
- **Reply** — quote the message in your response
- **React** — add an emoji reaction
+- **Translate** — translate a received message into your device language and toggle between the original and translated text (Google Play build only; uses on-device translation)
- **Delete** — remove a message you sent (local deletion)
### Message Priority
diff --git a/docs/pl-rPL/user/mqtt.md b/docs/pl-rPL/user/mqtt.md
index 198545a9b..74ca064da 100644
--- a/docs/pl-rPL/user/mqtt.md
+++ b/docs/pl-rPL/user/mqtt.md
@@ -56,6 +56,8 @@ A gateway node with internet access (WiFi or Ethernet) publishes mesh messages t
The community maintains a public broker at `mqtt.meshtastic.org`. This is intended for general use and testing.
+> ℹ️ **Note:** Connections to `mqtt.meshtastic.org` always use TLS (port 8883), even if the TLS toggle is off. For any other broker, TLS is used only when you enable it (port 8883 with TLS, 1883 without).
+
> 🔒 **Privacy:** Messages on the public broker are readable by anyone subscribed. Always use channel encryption for private communications.
### Private Broker
diff --git a/docs/pl-rPL/user/node-metrics.md b/docs/pl-rPL/user/node-metrics.md
index 12891271a..47e7ca486 100644
--- a/docs/pl-rPL/user/node-metrics.md
+++ b/docs/pl-rPL/user/node-metrics.md
@@ -55,12 +55,15 @@ The BME680 **IAQ (Indoor Air Quality)** index is a single 0–500+ value derived
Air Quality is a dedicated metrics view for nodes equipped with a particulate-matter and/or CO₂ sensor. It is **separate from the BME680 IAQ reading** listed under Environment Metrics — IAQ is a single gas-resistance-derived index, while the Air Quality view charts the underlying particulate and CO₂ measurements.
-| Metric | Unit | Opis |
-| --------------------- | ----- | ---------------------------------------------------- |
-| PM1.0 | µg/m³ | Particulate matter up to 1.0 micron |
-| PM2.5 | µg/m³ | Particulate matter up to 2.5 microns |
-| PM10 | µg/m³ | Particulate matter up to 10 microns |
-| CO₂ | ppm | Carbon dioxide concentration |
+| Metric | Unit | Opis |
+| --------------------- | --------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| PM1.0 | µg/m³ | Particulate matter up to 1.0 micron |
+| PM2.5 | µg/m³ | Particulate matter up to 2.5 microns |
+| PM10 | µg/m³ | Particulate matter up to 10 microns |
+| AQI | EPA index | EPA **NowCast** AQI computed from your recent PM2.5 history, with a color-coded severity label. Shown next to PM2.5 once enough readings have accumulated. |
+| CO₂ | ppm | Carbon dioxide concentration |
+| CO₂ temperature | °C / °F | Temperature reported by the CO₂ sensor itself (e.g. SCD4x) |
+| CO₂ humidity | % | Relative humidity reported by the CO₂ sensor |
CO₂ readings are color-coded by severity to make air quality easy to read at a glance:
@@ -98,12 +101,12 @@ Radio signal quality information:
Signal quality is rated from **SNR relative to the active LoRa modem preset's demodulation floor**, not from fixed thresholds — a given SNR means different things on different presets (e.g. −15 dB is fine on LongSlow but unusable on ShortFast). RSSI is shown but is not part of the rating. Letting `limit` be the preset's SNR limit:
-| Quality | Criteria |
-| ------------- | ------------------------------------------------ |
-| dobry | SNR above the preset's limit |
-| wystarczający | within 5.5 dB below the limit |
-| słaby | within 7.5 dB below the limit |
-| Brak | more than 7.5 dB below the limit |
+| Quality | Criteria |
+| ------------- | ------------------------------------------------------------------------- |
+| dobry | SNR above the preset's limit |
+| wystarczający | up to 5.5 dB below the limit |
+| słaby | between 5.5 dB and 7.5 dB below the limit |
+| Brak | more than 7.5 dB below the limit |
See [Understanding the Signal Meter](signal-meter) for the full explanation.
diff --git a/docs/pl-rPL/user/settings-radio-user.md b/docs/pl-rPL/user/settings-radio-user.md
index ecbe2ae66..06789229c 100644
--- a/docs/pl-rPL/user/settings-radio-user.md
+++ b/docs/pl-rPL/user/settings-radio-user.md
@@ -74,6 +74,8 @@ After modifying settings, tap **Save** to write the configuration to your radio.
| ~~Long Slow~~ | ~30 km | 0.18 kbps | −17.5 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.
+
#### Choosing a Modem Preset
The modem preset controls the fundamental tradeoff between **range** and **data rate**:
diff --git a/docs/pl-rPL/user/signal-meter.md b/docs/pl-rPL/user/signal-meter.md
index 08bbe3037..8de3edd3d 100644
--- a/docs/pl-rPL/user/signal-meter.md
+++ b/docs/pl-rPL/user/signal-meter.md
@@ -52,12 +52,12 @@ The app rates your signal quality (None, Bad, Fair, or Good) from **SNR alone, m
Because the rating is relative to the preset limit, the _same_ SNR can rate differently on different presets — `-15 dB` is healthy on `LongSlow` but unusable on `ShortFast`. Letting `limit` be the active preset's SNR Limit, here is how the app picks the bars (or color):
-| Level | Bars | Criteria | Meaning |
-| ------------- | ---- | ------------------------------------ | ---------------------------------------------------------------------------------------- |
-| dobry | 3 | SNR **above** the preset's `limit` | Signal is comfortably above the demodulation floor — healthy connection. |
-| wystarczający | 2 | within `5.5 dB` below the `limit` | Decodable, but getting close to the floor. |
-| słaby | 1 | within `7.5 dB` below the `limit` | At the very edge of what the preset can recover. |
-| Brak | 0 | more than `7.5 dB` below the `limit` | Below the floor — transmission lost to noise. |
+| Level | Bars | Criteria | Meaning |
+| ------------- | ---- | ----------------------------------------------- | ---------------------------------------------------------------------------------------- |
+| dobry | 3 | SNR **above** the preset's `limit` | Signal is comfortably above the demodulation floor — healthy connection. |
+| wystarczający | 2 | up to `5.5 dB` below the `limit` | Decodable, but getting close to the floor. |
+| słaby | 1 | between `5.5 dB` and `7.5 dB` below the `limit` | At the very edge of what the preset can recover. |
+| Brak | 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.
diff --git a/docs/pl-rPL/user/telemetry-and-sensors.md b/docs/pl-rPL/user/telemetry-and-sensors.md
index 9199bfcba..d02d3572a 100644
--- a/docs/pl-rPL/user/telemetry-and-sensors.md
+++ b/docs/pl-rPL/user/telemetry-and-sensors.md
@@ -103,7 +103,9 @@ Nodes with particulate matter or CO₂ sensors report air quality data:
| PM10 | µg/m³ | Coarse particulate matter |
| CO₂ | ppm | Carbon dioxide concentration |
-The CO₂ reading is color-coded by severity (Good → Stuffy → Poor → Unsafe → Evacuate). See [Node Metrics — Air Quality](node-metrics#air-quality-metrics) for the exact ppm bands and colors.
+CO₂ sensors such as the SCD4x also report their own temperature and humidity, which appear alongside the readings above. From PM2.5 history the app additionally derives an **EPA NowCast AQI** value.
+
+The CO₂ reading is color-coded by severity (Good → Stuffy → Poor → Unsafe → Evacuate). See [Node Metrics — Air Quality](node-metrics#air-quality-metrics) for the exact ppm bands, colors, and AQI detail.
Air quality data can be viewed as info cards on the node detail screen, charted over time, and exported to CSV.
diff --git a/docs/pl-rPL/user/translate.md b/docs/pl-rPL/user/translate.md
index 8dd682c18..085418939 100644
--- a/docs/pl-rPL/user/translate.md
+++ b/docs/pl-rPL/user/translate.md
@@ -18,11 +18,11 @@ Contributing translations helps make Meshtastic accessible to a wider audience.
## What Gets Translated
-| Resource | Source Location | Notatki |
-| ----------------- | ------------------------------------- | ---------------------------------------------------------------------- |
-| UI strings | `composeResources/values/strings.xml` | Buttons, labels, messages, and all user-visible text |
-| User Guide pages | `docs/user/*.md` | In-app documentation shown in Help & Documentation |
-| Fastlane metadata | `fastlane/metadata/android/en-US/` | App Store listing title, description, and changelogs |
+| Resource | Source Location | Notatki |
+| ----------------- | ------------------------------------------------------------------- | ---------------------------------------------------------------------- |
+| UI strings | `core/resources/src/commonMain/composeResources/values/strings.xml` | Buttons, labels, messages, and all user-visible text |
+| User Guide pages | `docs/en/user/*.md` | In-app documentation shown in Help & Documentation |
+| Fastlane metadata | `fastlane/metadata/android/en-US/` | App Store listing title, description, and changelogs |
> ⚠️ **Note:** Developer Guide pages are English-only. Code-focused documentation targeting contributors is not translated.
diff --git a/docs/pl-rPL/user/units-and-locale.md b/docs/pl-rPL/user/units-and-locale.md
index 293d9d261..a6c2b45cf 100644
--- a/docs/pl-rPL/user/units-and-locale.md
+++ b/docs/pl-rPL/user/units-and-locale.md
@@ -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 uses the `MetricFormatter` utility to convert and display values in whatever unit system your device's locale specifies.
+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.
On Android, your measurement preferences are determined by your system **Language & Region** settings. On Desktop (JVM), the app uses the JVM's default `Locale`.
@@ -115,12 +115,13 @@ On Android, your measurement system (metric vs imperial) is tied to your region
2. Change your **Region** or **Measurement units** preference
3. Return to Meshtastic — values update immediately
-> 💡 **Tip:** The app uses `MetricFormatter` from `core:common`. All measurement formatting is handled by a shared KMP utility that respects your platform's locale. Developers adding new measurement displays should use `MetricFormatter` rather than hard-coding unit conversions.
+> 💡 **Tip:** All measurement formatting is handled centrally and respects your platform's locale, so units stay consistent everywhere in the app.
## Related Topics
- [Node Metrics](node-metrics) — where temperature, distance, and sensor values are displayed
- [Telemetry & Sensors](telemetry-and-sensors) — the sensors that produce these measurements
+- [Measurement & Formatting](../developer/measurement) — developer reference for the formatting utilities
- [Settings — Radio & User](settings-radio-user) — region setting that drives unit selection
---
diff --git a/docs/pt-rBR/user/android-auto.md b/docs/pt-rBR/user/android-auto.md
index c29a6075e..279a8e26d 100644
--- a/docs/pt-rBR/user/android-auto.md
+++ b/docs/pt-rBR/user/android-auto.md
@@ -2,7 +2,7 @@
title: Android Auto
parent: User Guide
nav_order: 18
-last_updated: 2026-06-11
+last_updated: 2026-07-07
description: Use Meshtastic hands-free on an Android Auto head unit — read messages aloud, reply by voice, and check nodes and mesh status while driving.
aliases:
- android-auto
@@ -17,9 +17,11 @@ Meshtastic integrates with Android Auto so you can stay in touch with your mesh
> ⚠️ **Note:** Android Auto support is available on **Google-flavor Android builds only**. It is not included in the F-Droid build, and it is not available on Desktop or iOS.
+> ℹ️ **What ships today:** The Google Play build provides **notification-only** car messaging — incoming messages are announced on the head unit and you reply through its notification controls. The full tabbed **Messages / Nodes / Status** experience described below is a beta built on the Android Car App Library (Google's templated car UI is currently restricted to Closed/Internal Play tracks), so it appears only in builds compiled with `-PenableCarTemplates=true`. The rest of this page documents that beta experience.
+
## Overview
-When your phone is connected to an Android Auto head unit (or the Desktop Head Unit emulator used for development), Meshtastic appears as a messaging app built with the Android Car App Library. The car interface presents a tabbed Home screen optimized for driving-safe, glanceable use:
+When your phone is connected to an Android Auto head unit (or the Desktop Head Unit emulator used for development), the beta build presents Meshtastic as a messaging app built with the Android Car App Library, with a tabbed Home screen optimized for driving-safe, glanceable use:
- **Messages** — recent conversations, with hands-free reading and replies.
- **Nodes** — the mesh node list, with a node-detail view.
diff --git a/docs/pt-rBR/user/connections.md b/docs/pt-rBR/user/connections.md
index f410fff11..2133a75e4 100644
--- a/docs/pt-rBR/user/connections.md
+++ b/docs/pt-rBR/user/connections.md
@@ -23,7 +23,7 @@ Bluetooth Low Energy is the default and most common connection method on Android
1. Ensure your Meshtastic radio is powered on and in pairing mode.
2. Open the app and navigate to the **Connect** tab.
-3. Tap **Scan for Devices** — nearby Meshtastic radios will appear.
+3. Tap **Scan for Bluetooth devices** — nearby Meshtastic radios will appear.
4. Select your device from the list.
5. Accept the Bluetooth pairing prompt if shown.
diff --git a/docs/pt-rBR/user/desktop.md b/docs/pt-rBR/user/desktop.md
index 944d898c8..5168d837a 100644
--- a/docs/pt-rBR/user/desktop.md
+++ b/docs/pt-rBR/user/desktop.md
@@ -2,7 +2,7 @@
title: Desktop App
parent: User Guide
nav_order: 14
-last_updated: 2026-06-11
+last_updated: 2026-07-07
description: Install and use the Meshtastic Desktop app on Linux, macOS, and Windows — connections, feature parity, and keyboard shortcuts.
aliases:
- desktop
@@ -60,19 +60,19 @@ Bluetooth Low Energy is supported on Desktop via the [Kable](https://github.com/
## Feature Parity
-| Feature | Android | Desktop | Notes |
-| -------------------------------------------- | ------- | ------- | ---------------------------------------------- |
-| Messaging | ✓ | ✓ | Full parity |
-| Node List | ✓ | ✓ | Full parity |
-| Mapa | ✓ | ✓ | Full parity |
-| Configurações | ✓ | ✓ | Full parity |
-| Bluetooth (BLE) | ✓ | ✓ | Via Kable on desktop |
-| Firmware Update OTA | ✓ | ✗ | Use web flasher |
-| Notifications | ✓ | ✓ | Native OS notifications |
-| Widgets | ✓ | ✗ | Android-only |
-| Android Auto | ✓ | ✗ | Android-only — not available on Desktop or iOS |
-| AI Assistant (Chirpy) | ✓\* | ✗ | Google flavor Android only |
-| App Functions (system AI) | ✓† | ✗ | Google flavor Android only |
+| Feature | Android | Desktop | Notes |
+| -------------------------------------------- | ------- | ------- | -------------------------------------------------------------------------- |
+| Messaging | ✓ | ✓ | Full parity |
+| Node List | ✓ | ✓ | Full parity |
+| Mapa | ✓ | ◐ | Map tab exists on desktop, but the interactive map view is Android-only |
+| Configurações | ✓ | ✓ | Full parity |
+| Bluetooth (BLE) | ✓ | ✓ | Via Kable on desktop |
+| Firmware Update | ✓ | ◐ | Desktop supports in-app USB firmware update; BLE/Wi-Fi OTA is Android-only |
+| Notifications | ✓ | ✓ | Native OS notifications |
+| Widgets | ✓ | ✗ | Android-only |
+| Android Auto | ✓ | ✗ | Android-only — not available on Desktop or iOS |
+| AI Assistant (Chirpy) | ✓\* | ✗ | Google flavor Android only |
+| App Functions (system AI) | ✓† | ✗ | Google flavor Android only |
\*Chirpy AI requires Android 14+ on Google flavor builds with supported hardware.
@@ -84,14 +84,17 @@ The Desktop app uses the same Compose Multiplatform UI with adaptations for larg
### Keyboard Shortcuts
-| Shortcut | Action |
-| ------------------- | ---------------------- |
-| **⌘Q** / **Ctrl+Q** | Quit the application |
-| **⌘,** / **Ctrl+,** | Open Settings |
-| **⌘1** / **Ctrl+1** | Switch to Messages tab |
-| **⌘2** / **Ctrl+2** | Switch to Nodes tab |
-| **⌘3** / **Ctrl+3** | Switch to Map tab |
-| **⌘4** / **Ctrl+4** | Switch to Connect tab |
+All shortcuts use the **Meta** key — that's ⌘ (Command) on macOS and the Super / Windows key on Linux and Windows. (`Ctrl` is not bound.)
+
+| Shortcut | Action |
+| ---------- | ---------------------- |
+| **Meta+Q** | Quit the application |
+| **Meta+,** | Open Settings |
+| **Meta+1** | Switch to Messages tab |
+| **Meta+2** | Switch to Nodes tab |
+| **Meta+3** | Switch to Map tab |
+| **Meta+4** | Switch to Connect tab |
+| **Meta+/** | Open About |
### Window & System Tray
@@ -123,7 +126,6 @@ Individual doc pages render with full formatting:
```bash
git clone https://github.com/meshtastic/Meshtastic-Android.git
cd Meshtastic-Android
-git submodule update --init
./gradlew :desktopApp:run
```
@@ -134,7 +136,8 @@ Requirements:
## Known Limitations
-- No OTA firmware updates (use web flasher)
+- 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
- BLE bonding is not yet supported on desktop (pairing works without bonding)
@@ -142,7 +145,7 @@ Requirements:
## Related Topics
- [Connections](connections) — connection methods overview
-- [Firmware Updates](firmware) — use the [Web Flasher](https://flasher.meshtastic.org) for desktop firmware updates
+- [Firmware Updates](firmware) — in-app USB update on desktop, or the [Web Flasher](https://flasher.meshtastic.org)
---
diff --git a/docs/pt-rBR/user/discovery.md b/docs/pt-rBR/user/discovery.md
index 26fcdd78d..d0907235a 100644
--- a/docs/pt-rBR/user/discovery.md
+++ b/docs/pt-rBR/user/discovery.md
@@ -44,7 +44,6 @@ Before starting, configure these controls:
The **Start** button stays disabled — with an explanation of why — until the scan can run. Common reasons it's disabled:
- The device is **not connected**.
-- The current channel is using the **default channel key** (use a unique key first — see [Messages & Channels](messages-and-channels)).
- **No presets** have been selected to scan.
- The selected preset uses **2.4 GHz**, which your hardware doesn't support.
diff --git a/docs/pt-rBR/user/firmware.md b/docs/pt-rBR/user/firmware.md
index c24393b20..e3eb3fdcd 100644
--- a/docs/pt-rBR/user/firmware.md
+++ b/docs/pt-rBR/user/firmware.md
@@ -2,8 +2,8 @@
title: Firmware Updates
parent: User Guide
nav_order: 13
-last_updated: 2026-05-13
-description: Update your radio firmware over Bluetooth — OTA process, version channels, pre-flight checks, and recovery.
+last_updated: 2026-07-07
+description: Update your radio firmware over Bluetooth or USB — OTA process, version channels, pre-flight checks, and recovery.
aliases:
- firmware
- update
@@ -17,7 +17,7 @@ Keep your Meshtastic radio up to date with the latest firmware for new features,
## Checking for Updates
-1. Navigate to **Settings → Firmware Update** or tap the firmware notification if shown.
+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.
2. The app checks for available firmware versions.
3. Available updates show the version number and changelog summary.
@@ -39,19 +39,26 @@ The most common update method for Android users:

-### USB Flashing
+### In-App USB Update
-For recovery or when OTA is unavailable:
+When your radio is connected over **USB/serial** (rather than Bluetooth), the Firmware Update screen offers **USB File Transfer**. The app reboots the device into DFU mode, then prompts you to save the `.uf2` file to the device's DFU drive using the system file picker. This option appears only on a USB/serial connection — it is not available over Bluetooth.
+
+> ℹ️ **nRF bootloader note:** Some devices (e.g. RAK WisBlock RAK4631) need their bootloader flashed with the vendor's serial DFU tool (such as `adafruit-nrfutil`) — copying the `.uf2` alone won't update the bootloader. The app surfaces a hint when this applies.
+
+### Other Flashing Options
+
+For recovery or when neither OTA nor in-app USB is available:
- Use the [Meshtastic Web Flasher](https://flasher.meshtastic.org)
- Or the [Meshtastic CLI tool](https://meshtastic.org/docs/getting-started/flashing-firmware) on desktop
## Version Channels
-| Canal | Descrição |
-| ------ | ------------------------------------------- |
-| Stable | Recommended for most users; tested releases |
-| Alpha | Preview releases; may contain bugs |
+| Canal | Descrição |
+| ---------- | -------------------------------------------------------------------------- |
+| Stable | Recommended for most users; tested releases |
+| Alpha | Preview releases; may contain bugs |
+| Local File | Flash a firmware file you select yourself, instead of a downloaded release |
## Pre-Update Checklist
@@ -73,7 +80,7 @@ Once the update succeeds:
- The radio will reboot automatically
- Bluetooth connection will re-establish
- Verify your settings are intact
-- Check the firmware version in **Settings → About**
+- Confirm the new version under **Currently Installed** on the Firmware Update screen — it's also shown on the node's detail page and the Connections screen

diff --git a/docs/pt-rBR/user/messages-and-channels.md b/docs/pt-rBR/user/messages-and-channels.md
index 205b1531e..bc9004ffd 100644
--- a/docs/pt-rBR/user/messages-and-channels.md
+++ b/docs/pt-rBR/user/messages-and-channels.md
@@ -116,12 +116,16 @@ You can search the full history of any conversation directly from the chat scree

-> 💡 **Tip:** Search is full-text and stays within the conversation you opened it from — it doesn't search across other channels or contacts. Matching is fast even on long histories because messages are indexed locally.
+> 💡 **Tip:** Search is full-text and stays within the conversation you opened it from — it doesn't search across other channels or contacts. It matches against the messages already stored on your device, so it works fully offline.
### Message Bubbles
Messages appear as chat bubbles — sent messages on the right, received messages on the left. Each bubble shows the sender, timestamp, and delivery status. Messages with replies include a quoted preview of the original message above the response.
+### Mentions
+
+Type `@` while composing to mention a node — a picker suggests matching contacts as you type. In a received message, a mention appears as a highlighted chip showing the node's name; tap it to jump straight to that node's detail page.
+
### Reactions
React to messages with emoji:
@@ -143,6 +147,7 @@ Long-press any message to access:
- **Copy** — copy message text to clipboard
- **Reply** — quote the message in your response
- **React** — add an emoji reaction
+- **Translate** — translate a received message into your device language and toggle between the original and translated text (Google Play build only; uses on-device translation)
- **Delete** — remove a message you sent (local deletion)
### Message Priority
diff --git a/docs/pt-rBR/user/mqtt.md b/docs/pt-rBR/user/mqtt.md
index c3ffdcc45..6c36cfd6c 100644
--- a/docs/pt-rBR/user/mqtt.md
+++ b/docs/pt-rBR/user/mqtt.md
@@ -56,6 +56,8 @@ A gateway node with internet access (WiFi or Ethernet) publishes mesh messages t
The community maintains a public broker at `mqtt.meshtastic.org`. This is intended for general use and testing.
+> ℹ️ **Note:** Connections to `mqtt.meshtastic.org` always use TLS (port 8883), even if the TLS toggle is off. For any other broker, TLS is used only when you enable it (port 8883 with TLS, 1883 without).
+
> 🔒 **Privacy:** Messages on the public broker are readable by anyone subscribed. Always use channel encryption for private communications.
### Private Broker
diff --git a/docs/pt-rBR/user/node-metrics.md b/docs/pt-rBR/user/node-metrics.md
index 86254d8ef..4cbdcf17e 100644
--- a/docs/pt-rBR/user/node-metrics.md
+++ b/docs/pt-rBR/user/node-metrics.md
@@ -55,12 +55,15 @@ The BME680 **IAQ (Indoor Air Quality)** index is a single 0–500+ value derived
Air Quality is a dedicated metrics view for nodes equipped with a particulate-matter and/or CO₂ sensor. It is **separate from the BME680 IAQ reading** listed under Environment Metrics — IAQ is a single gas-resistance-derived index, while the Air Quality view charts the underlying particulate and CO₂ measurements.
-| Metric | Unit | Descrição |
-| --------------------- | ----- | ---------------------------------------------------- |
-| PM1.0 | µg/m³ | Particulate matter up to 1.0 micron |
-| PM2.5 | µg/m³ | Particulate matter up to 2.5 microns |
-| PM10 | µg/m³ | Particulate matter up to 10 microns |
-| CO₂ | ppm | Carbon dioxide concentration |
+| Metric | Unit | Descrição |
+| --------------------- | --------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| PM1.0 | µg/m³ | Particulate matter up to 1.0 micron |
+| PM2.5 | µg/m³ | Particulate matter up to 2.5 microns |
+| PM10 | µg/m³ | Particulate matter up to 10 microns |
+| AQI | EPA index | EPA **NowCast** AQI computed from your recent PM2.5 history, with a color-coded severity label. Shown next to PM2.5 once enough readings have accumulated. |
+| CO₂ | ppm | Carbon dioxide concentration |
+| CO₂ temperature | °C / °F | Temperature reported by the CO₂ sensor itself (e.g. SCD4x) |
+| CO₂ humidity | % | Relative humidity reported by the CO₂ sensor |
CO₂ readings are color-coded by severity to make air quality easy to read at a glance:
@@ -98,12 +101,12 @@ Radio signal quality information:
Signal quality is rated from **SNR relative to the active LoRa modem preset's demodulation floor**, not from fixed thresholds — a given SNR means different things on different presets (e.g. −15 dB is fine on LongSlow but unusable on ShortFast). RSSI is shown but is not part of the rating. Letting `limit` be the preset's SNR limit:
-| Quality | Criteria |
-| ------- | ------------------------------------------------ |
-| Bom | SNR above the preset's limit |
-| Média | within 5.5 dB below the limit |
-| Ruim | within 7.5 dB below the limit |
-| Nenhum | more than 7.5 dB below the limit |
+| Quality | Criteria |
+| ------- | ------------------------------------------------------------------------- |
+| Bom | SNR above the preset's limit |
+| Média | up to 5.5 dB below the limit |
+| Ruim | between 5.5 dB and 7.5 dB below the limit |
+| Nenhum | more than 7.5 dB below the limit |
See [Understanding the Signal Meter](signal-meter) for the full explanation.
diff --git a/docs/pt-rBR/user/settings-radio-user.md b/docs/pt-rBR/user/settings-radio-user.md
index e8472993f..e0875a5fd 100644
--- a/docs/pt-rBR/user/settings-radio-user.md
+++ b/docs/pt-rBR/user/settings-radio-user.md
@@ -74,6 +74,8 @@ After modifying settings, tap **Save** to write the configuration to your radio.
| ~~Long Slow~~ | ~30 km | 0.18 kbps | −17.5 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.
+
#### Choosing a Modem Preset
The modem preset controls the fundamental tradeoff between **range** and **data rate**:
diff --git a/docs/pt-rBR/user/signal-meter.md b/docs/pt-rBR/user/signal-meter.md
index 5cdd78ab1..956bc496d 100644
--- a/docs/pt-rBR/user/signal-meter.md
+++ b/docs/pt-rBR/user/signal-meter.md
@@ -52,12 +52,12 @@ The app rates your signal quality (None, Bad, Fair, or Good) from **SNR alone, m
Because the rating is relative to the preset limit, the _same_ SNR can rate differently on different presets — `-15 dB` is healthy on `LongSlow` but unusable on `ShortFast`. Letting `limit` be the active preset's SNR Limit, here is how the app picks the bars (or color):
-| Level | Bars | Criteria | Meaning |
-| ------ | ---- | ------------------------------------ | ---------------------------------------------------------------------------------------- |
-| Bom | 3 | SNR **above** the preset's `limit` | Signal is comfortably above the demodulation floor — healthy connection. |
-| Média | 2 | within `5.5 dB` below the `limit` | Decodable, but getting close to the floor. |
-| Ruim | 1 | within `7.5 dB` below the `limit` | At the very edge of what the preset can recover. |
-| Nenhum | 0 | more than `7.5 dB` below the `limit` | Below the floor — transmission lost to noise. |
+| Level | Bars | Criteria | Meaning |
+| ------ | ---- | ----------------------------------------------- | ---------------------------------------------------------------------------------------- |
+| Bom | 3 | SNR **above** the preset's `limit` | Signal is comfortably above the demodulation floor — healthy connection. |
+| Média | 2 | up to `5.5 dB` below the `limit` | Decodable, but getting close to the floor. |
+| Ruim | 1 | between `5.5 dB` and `7.5 dB` below the `limit` | At the very edge of what the preset can recover. |
+| Nenhum | 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.
diff --git a/docs/pt-rBR/user/telemetry-and-sensors.md b/docs/pt-rBR/user/telemetry-and-sensors.md
index 89f12bdfd..9d5651716 100644
--- a/docs/pt-rBR/user/telemetry-and-sensors.md
+++ b/docs/pt-rBR/user/telemetry-and-sensors.md
@@ -103,7 +103,9 @@ Nodes with particulate matter or CO₂ sensors report air quality data:
| PM10 | µg/m³ | Coarse particulate matter |
| CO₂ | ppm | Carbon dioxide concentration |
-The CO₂ reading is color-coded by severity (Good → Stuffy → Poor → Unsafe → Evacuate). See [Node Metrics — Air Quality](node-metrics#air-quality-metrics) for the exact ppm bands and colors.
+CO₂ sensors such as the SCD4x also report their own temperature and humidity, which appear alongside the readings above. From PM2.5 history the app additionally derives an **EPA NowCast AQI** value.
+
+The CO₂ reading is color-coded by severity (Good → Stuffy → Poor → Unsafe → Evacuate). See [Node Metrics — Air Quality](node-metrics#air-quality-metrics) for the exact ppm bands, colors, and AQI detail.
Air quality data can be viewed as info cards on the node detail screen, charted over time, and exported to CSV.
diff --git a/docs/pt-rBR/user/translate.md b/docs/pt-rBR/user/translate.md
index 25aa4693c..70c966fed 100644
--- a/docs/pt-rBR/user/translate.md
+++ b/docs/pt-rBR/user/translate.md
@@ -18,11 +18,11 @@ Contributing translations helps make Meshtastic accessible to a wider audience.
## What Gets Translated
-| Resource | Source Location | Notes |
-| ----------------- | ------------------------------------- | ---------------------------------------------------------------------- |
-| UI strings | `composeResources/values/strings.xml` | Buttons, labels, messages, and all user-visible text |
-| User Guide pages | `docs/user/*.md` | In-app documentation shown in Help & Documentation |
-| Fastlane metadata | `fastlane/metadata/android/en-US/` | App Store listing title, description, and changelogs |
+| Resource | Source Location | Notes |
+| ----------------- | ------------------------------------------------------------------- | ---------------------------------------------------------------------- |
+| UI strings | `core/resources/src/commonMain/composeResources/values/strings.xml` | Buttons, labels, messages, and all user-visible text |
+| User Guide pages | `docs/en/user/*.md` | In-app documentation shown in Help & Documentation |
+| Fastlane metadata | `fastlane/metadata/android/en-US/` | App Store listing title, description, and changelogs |
> ⚠️ **Note:** Developer Guide pages are English-only. Code-focused documentation targeting contributors is not translated.
diff --git a/docs/pt-rBR/user/units-and-locale.md b/docs/pt-rBR/user/units-and-locale.md
index 5c476a62a..343944977 100644
--- a/docs/pt-rBR/user/units-and-locale.md
+++ b/docs/pt-rBR/user/units-and-locale.md
@@ -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 uses the `MetricFormatter` utility to convert and display values in whatever unit system your device's locale specifies.
+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.
On Android, your measurement preferences are determined by your system **Language & Region** settings. On Desktop (JVM), the app uses the JVM's default `Locale`.
@@ -115,12 +115,13 @@ On Android, your measurement system (metric vs imperial) is tied to your region
2. Change your **Region** or **Measurement units** preference
3. Return to Meshtastic — values update immediately
-> 💡 **Tip:** The app uses `MetricFormatter` from `core:common`. All measurement formatting is handled by a shared KMP utility that respects your platform's locale. Developers adding new measurement displays should use `MetricFormatter` rather than hard-coding unit conversions.
+> 💡 **Tip:** All measurement formatting is handled centrally and respects your platform's locale, so units stay consistent everywhere in the app.
## Related Topics
- [Node Metrics](node-metrics) — where temperature, distance, and sensor values are displayed
- [Telemetry & Sensors](telemetry-and-sensors) — the sensors that produce these measurements
+- [Measurement & Formatting](../developer/measurement) — developer reference for the formatting utilities
- [Settings — Radio & User](settings-radio-user) — region setting that drives unit selection
---
diff --git a/docs/pt-rPT/user/android-auto.md b/docs/pt-rPT/user/android-auto.md
index aa03f2a18..3234a9249 100644
--- a/docs/pt-rPT/user/android-auto.md
+++ b/docs/pt-rPT/user/android-auto.md
@@ -2,7 +2,7 @@
title: Android Auto
parent: User Guide
nav_order: 18
-last_updated: 2026-06-11
+last_updated: 2026-07-07
description: Use Meshtastic hands-free on an Android Auto head unit — read messages aloud, reply by voice, and check nodes and mesh status while driving.
aliases:
- android-auto
@@ -17,9 +17,11 @@ Meshtastic integrates with Android Auto so you can stay in touch with your mesh
> ⚠️ **Note:** Android Auto support is available on **Google-flavor Android builds only**. It is not included in the F-Droid build, and it is not available on Desktop or iOS.
+> ℹ️ **What ships today:** The Google Play build provides **notification-only** car messaging — incoming messages are announced on the head unit and you reply through its notification controls. The full tabbed **Messages / Nodes / Status** experience described below is a beta built on the Android Car App Library (Google's templated car UI is currently restricted to Closed/Internal Play tracks), so it appears only in builds compiled with `-PenableCarTemplates=true`. The rest of this page documents that beta experience.
+
## Overview
-When your phone is connected to an Android Auto head unit (or the Desktop Head Unit emulator used for development), Meshtastic appears as a messaging app built with the Android Car App Library. The car interface presents a tabbed Home screen optimized for driving-safe, glanceable use:
+When your phone is connected to an Android Auto head unit (or the Desktop Head Unit emulator used for development), the beta build presents Meshtastic as a messaging app built with the Android Car App Library, with a tabbed Home screen optimized for driving-safe, glanceable use:
- **Messages** — recent conversations, with hands-free reading and replies.
- **Nodes** — the mesh node list, with a node-detail view.
diff --git a/docs/pt-rPT/user/connections.md b/docs/pt-rPT/user/connections.md
index fc68efef5..8c9838df7 100644
--- a/docs/pt-rPT/user/connections.md
+++ b/docs/pt-rPT/user/connections.md
@@ -23,7 +23,7 @@ Bluetooth Low Energy is the default and most common connection method on Android
1. Ensure your Meshtastic radio is powered on and in pairing mode.
2. Open the app and navigate to the **Connect** tab.
-3. Tap **Scan for Devices** — nearby Meshtastic radios will appear.
+3. Tap **Scan for Bluetooth devices** — nearby Meshtastic radios will appear.
4. Select your device from the list.
5. Accept the Bluetooth pairing prompt if shown.
diff --git a/docs/pt-rPT/user/desktop.md b/docs/pt-rPT/user/desktop.md
index 8d1a1ead1..f0dabe207 100644
--- a/docs/pt-rPT/user/desktop.md
+++ b/docs/pt-rPT/user/desktop.md
@@ -2,7 +2,7 @@
title: Desktop App
parent: User Guide
nav_order: 14
-last_updated: 2026-06-11
+last_updated: 2026-07-07
description: Install and use the Meshtastic Desktop app on Linux, macOS, and Windows — connections, feature parity, and keyboard shortcuts.
aliases:
- desktop
@@ -60,19 +60,19 @@ Bluetooth Low Energy is supported on Desktop via the [Kable](https://github.com/
## Feature Parity
-| Feature | Android | Desktop | Notes |
-| -------------------------------------------- | ------- | ------- | ---------------------------------------------- |
-| Messaging | ✓ | ✓ | Full parity |
-| Node List | ✓ | ✓ | Full parity |
-| Mapa | ✓ | ✓ | Full parity |
-| Definições | ✓ | ✓ | Full parity |
-| Bluetooth (BLE) | ✓ | ✓ | Via Kable on desktop |
-| Firmware Update OTA | ✓ | ✗ | Use web flasher |
-| Notifications | ✓ | ✓ | Native OS notifications |
-| Widgets | ✓ | ✗ | Android-only |
-| Android Auto | ✓ | ✗ | Android-only — not available on Desktop or iOS |
-| AI Assistant (Chirpy) | ✓\* | ✗ | Google flavor Android only |
-| App Functions (system AI) | ✓† | ✗ | Google flavor Android only |
+| Feature | Android | Desktop | Notes |
+| -------------------------------------------- | ------- | ------- | -------------------------------------------------------------------------- |
+| Messaging | ✓ | ✓ | Full parity |
+| Node List | ✓ | ✓ | Full parity |
+| Mapa | ✓ | ◐ | Map tab exists on desktop, but the interactive map view is Android-only |
+| Definições | ✓ | ✓ | Full parity |
+| Bluetooth (BLE) | ✓ | ✓ | Via Kable on desktop |
+| Firmware Update | ✓ | ◐ | Desktop supports in-app USB firmware update; BLE/Wi-Fi OTA is Android-only |
+| Notifications | ✓ | ✓ | Native OS notifications |
+| Widgets | ✓ | ✗ | Android-only |
+| Android Auto | ✓ | ✗ | Android-only — not available on Desktop or iOS |
+| AI Assistant (Chirpy) | ✓\* | ✗ | Google flavor Android only |
+| App Functions (system AI) | ✓† | ✗ | Google flavor Android only |
\*Chirpy AI requires Android 14+ on Google flavor builds with supported hardware.
@@ -84,14 +84,17 @@ The Desktop app uses the same Compose Multiplatform UI with adaptations for larg
### Keyboard Shortcuts
-| Shortcut | Action |
-| ------------------- | ---------------------- |
-| **⌘Q** / **Ctrl+Q** | Quit the application |
-| **⌘,** / **Ctrl+,** | Open Settings |
-| **⌘1** / **Ctrl+1** | Switch to Messages tab |
-| **⌘2** / **Ctrl+2** | Switch to Nodes tab |
-| **⌘3** / **Ctrl+3** | Switch to Map tab |
-| **⌘4** / **Ctrl+4** | Switch to Connect tab |
+All shortcuts use the **Meta** key — that's ⌘ (Command) on macOS and the Super / Windows key on Linux and Windows. (`Ctrl` is not bound.)
+
+| Shortcut | Action |
+| ---------- | ---------------------- |
+| **Meta+Q** | Quit the application |
+| **Meta+,** | Open Settings |
+| **Meta+1** | Switch to Messages tab |
+| **Meta+2** | Switch to Nodes tab |
+| **Meta+3** | Switch to Map tab |
+| **Meta+4** | Switch to Connect tab |
+| **Meta+/** | Open About |
### Window & System Tray
@@ -123,7 +126,6 @@ Individual doc pages render with full formatting:
```bash
git clone https://github.com/meshtastic/Meshtastic-Android.git
cd Meshtastic-Android
-git submodule update --init
./gradlew :desktopApp:run
```
@@ -134,7 +136,8 @@ Requirements:
## Known Limitations
-- No OTA firmware updates (use web flasher)
+- 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
- BLE bonding is not yet supported on desktop (pairing works without bonding)
@@ -142,7 +145,7 @@ Requirements:
## Related Topics
- [Connections](connections) — connection methods overview
-- [Firmware Updates](firmware) — use the [Web Flasher](https://flasher.meshtastic.org) for desktop firmware updates
+- [Firmware Updates](firmware) — in-app USB update on desktop, or the [Web Flasher](https://flasher.meshtastic.org)
---
diff --git a/docs/pt-rPT/user/discovery.md b/docs/pt-rPT/user/discovery.md
index 49576f33b..7da1c5807 100644
--- a/docs/pt-rPT/user/discovery.md
+++ b/docs/pt-rPT/user/discovery.md
@@ -44,7 +44,6 @@ Before starting, configure these controls:
The **Start** button stays disabled — with an explanation of why — until the scan can run. Common reasons it's disabled:
- The device is **not connected**.
-- The current channel is using the **default channel key** (use a unique key first — see [Messages & Channels](messages-and-channels)).
- **No presets** have been selected to scan.
- The selected preset uses **2.4 GHz**, which your hardware doesn't support.
diff --git a/docs/pt-rPT/user/firmware.md b/docs/pt-rPT/user/firmware.md
index c24393b20..e3eb3fdcd 100644
--- a/docs/pt-rPT/user/firmware.md
+++ b/docs/pt-rPT/user/firmware.md
@@ -2,8 +2,8 @@
title: Firmware Updates
parent: User Guide
nav_order: 13
-last_updated: 2026-05-13
-description: Update your radio firmware over Bluetooth — OTA process, version channels, pre-flight checks, and recovery.
+last_updated: 2026-07-07
+description: Update your radio firmware over Bluetooth or USB — OTA process, version channels, pre-flight checks, and recovery.
aliases:
- firmware
- update
@@ -17,7 +17,7 @@ Keep your Meshtastic radio up to date with the latest firmware for new features,
## Checking for Updates
-1. Navigate to **Settings → Firmware Update** or tap the firmware notification if shown.
+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.
2. The app checks for available firmware versions.
3. Available updates show the version number and changelog summary.
@@ -39,19 +39,26 @@ The most common update method for Android users:

-### USB Flashing
+### In-App USB Update
-For recovery or when OTA is unavailable:
+When your radio is connected over **USB/serial** (rather than Bluetooth), the Firmware Update screen offers **USB File Transfer**. The app reboots the device into DFU mode, then prompts you to save the `.uf2` file to the device's DFU drive using the system file picker. This option appears only on a USB/serial connection — it is not available over Bluetooth.
+
+> ℹ️ **nRF bootloader note:** Some devices (e.g. RAK WisBlock RAK4631) need their bootloader flashed with the vendor's serial DFU tool (such as `adafruit-nrfutil`) — copying the `.uf2` alone won't update the bootloader. The app surfaces a hint when this applies.
+
+### Other Flashing Options
+
+For recovery or when neither OTA nor in-app USB is available:
- Use the [Meshtastic Web Flasher](https://flasher.meshtastic.org)
- Or the [Meshtastic CLI tool](https://meshtastic.org/docs/getting-started/flashing-firmware) on desktop
## Version Channels
-| Canal | Descrição |
-| ------ | ------------------------------------------- |
-| Stable | Recommended for most users; tested releases |
-| Alpha | Preview releases; may contain bugs |
+| Canal | Descrição |
+| ---------- | -------------------------------------------------------------------------- |
+| Stable | Recommended for most users; tested releases |
+| Alpha | Preview releases; may contain bugs |
+| Local File | Flash a firmware file you select yourself, instead of a downloaded release |
## Pre-Update Checklist
@@ -73,7 +80,7 @@ Once the update succeeds:
- The radio will reboot automatically
- Bluetooth connection will re-establish
- Verify your settings are intact
-- Check the firmware version in **Settings → About**
+- Confirm the new version under **Currently Installed** on the Firmware Update screen — it's also shown on the node's detail page and the Connections screen

diff --git a/docs/pt-rPT/user/messages-and-channels.md b/docs/pt-rPT/user/messages-and-channels.md
index c58d957f4..a18d32067 100644
--- a/docs/pt-rPT/user/messages-and-channels.md
+++ b/docs/pt-rPT/user/messages-and-channels.md
@@ -116,12 +116,16 @@ You can search the full history of any conversation directly from the chat scree

-> 💡 **Tip:** Search is full-text and stays within the conversation you opened it from — it doesn't search across other channels or contacts. Matching is fast even on long histories because messages are indexed locally.
+> 💡 **Tip:** Search is full-text and stays within the conversation you opened it from — it doesn't search across other channels or contacts. It matches against the messages already stored on your device, so it works fully offline.
### Message Bubbles
Messages appear as chat bubbles — sent messages on the right, received messages on the left. Each bubble shows the sender, timestamp, and delivery status. Messages with replies include a quoted preview of the original message above the response.
+### Mentions
+
+Type `@` while composing to mention a node — a picker suggests matching contacts as you type. In a received message, a mention appears as a highlighted chip showing the node's name; tap it to jump straight to that node's detail page.
+
### Reactions
React to messages with emoji:
@@ -143,6 +147,7 @@ Long-press any message to access:
- **Copy** — copy message text to clipboard
- **Reply** — quote the message in your response
- **React** — add an emoji reaction
+- **Translate** — translate a received message into your device language and toggle between the original and translated text (Google Play build only; uses on-device translation)
- **Delete** — remove a message you sent (local deletion)
### Message Priority
diff --git a/docs/pt-rPT/user/mqtt.md b/docs/pt-rPT/user/mqtt.md
index 333fa8c7f..bb27c93a0 100644
--- a/docs/pt-rPT/user/mqtt.md
+++ b/docs/pt-rPT/user/mqtt.md
@@ -56,6 +56,8 @@ A gateway node with internet access (WiFi or Ethernet) publishes mesh messages t
The community maintains a public broker at `mqtt.meshtastic.org`. This is intended for general use and testing.
+> ℹ️ **Note:** Connections to `mqtt.meshtastic.org` always use TLS (port 8883), even if the TLS toggle is off. For any other broker, TLS is used only when you enable it (port 8883 with TLS, 1883 without).
+
> 🔒 **Privacy:** Messages on the public broker are readable by anyone subscribed. Always use channel encryption for private communications.
### Private Broker
diff --git a/docs/pt-rPT/user/node-metrics.md b/docs/pt-rPT/user/node-metrics.md
index cd14c1158..70f43fc40 100644
--- a/docs/pt-rPT/user/node-metrics.md
+++ b/docs/pt-rPT/user/node-metrics.md
@@ -55,12 +55,15 @@ The BME680 **IAQ (Indoor Air Quality)** index is a single 0–500+ value derived
Air Quality is a dedicated metrics view for nodes equipped with a particulate-matter and/or CO₂ sensor. It is **separate from the BME680 IAQ reading** listed under Environment Metrics — IAQ is a single gas-resistance-derived index, while the Air Quality view charts the underlying particulate and CO₂ measurements.
-| Metric | Unit | Descrição |
-| --------------------- | ----- | ---------------------------------------------------- |
-| PM1.0 | µg/m³ | Particulate matter up to 1.0 micron |
-| PM2.5 | µg/m³ | Particulate matter up to 2.5 microns |
-| PM10 | µg/m³ | Particulate matter up to 10 microns |
-| CO₂ | ppm | Carbon dioxide concentration |
+| Metric | Unit | Descrição |
+| --------------------- | --------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| PM1.0 | µg/m³ | Particulate matter up to 1.0 micron |
+| PM2.5 | µg/m³ | Particulate matter up to 2.5 microns |
+| PM10 | µg/m³ | Particulate matter up to 10 microns |
+| AQI | EPA index | EPA **NowCast** AQI computed from your recent PM2.5 history, with a color-coded severity label. Shown next to PM2.5 once enough readings have accumulated. |
+| CO₂ | ppm | Carbon dioxide concentration |
+| CO₂ temperature | °C / °F | Temperature reported by the CO₂ sensor itself (e.g. SCD4x) |
+| CO₂ humidity | % | Relative humidity reported by the CO₂ sensor |
CO₂ readings are color-coded by severity to make air quality easy to read at a glance:
@@ -98,12 +101,12 @@ Radio signal quality information:
Signal quality is rated from **SNR relative to the active LoRa modem preset's demodulation floor**, not from fixed thresholds — a given SNR means different things on different presets (e.g. −15 dB is fine on LongSlow but unusable on ShortFast). RSSI is shown but is not part of the rating. Letting `limit` be the preset's SNR limit:
-| Quality | Criteria |
-| -------- | ------------------------------------------------ |
-| Bom | SNR above the preset's limit |
-| Razoável | within 5.5 dB below the limit |
-| Mau | within 7.5 dB below the limit |
-| Nenhum | more than 7.5 dB below the limit |
+| Quality | Criteria |
+| -------- | ------------------------------------------------------------------------- |
+| Bom | SNR above the preset's limit |
+| Razoável | up to 5.5 dB below the limit |
+| Mau | between 5.5 dB and 7.5 dB below the limit |
+| Nenhum | more than 7.5 dB below the limit |
See [Understanding the Signal Meter](signal-meter) for the full explanation.
diff --git a/docs/pt-rPT/user/settings-radio-user.md b/docs/pt-rPT/user/settings-radio-user.md
index 22cca101c..239331bf8 100644
--- a/docs/pt-rPT/user/settings-radio-user.md
+++ b/docs/pt-rPT/user/settings-radio-user.md
@@ -74,6 +74,8 @@ After modifying settings, tap **Save** to write the configuration to your radio.
| ~~Long Slow~~ | ~30 km | 0.18 kbps | −17.5 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.
+
#### Choosing a Modem Preset
The modem preset controls the fundamental tradeoff between **range** and **data rate**:
diff --git a/docs/pt-rPT/user/signal-meter.md b/docs/pt-rPT/user/signal-meter.md
index 16343fdf2..0f0168ab4 100644
--- a/docs/pt-rPT/user/signal-meter.md
+++ b/docs/pt-rPT/user/signal-meter.md
@@ -52,12 +52,12 @@ The app rates your signal quality (None, Bad, Fair, or Good) from **SNR alone, m
Because the rating is relative to the preset limit, the _same_ SNR can rate differently on different presets — `-15 dB` is healthy on `LongSlow` but unusable on `ShortFast`. Letting `limit` be the active preset's SNR Limit, here is how the app picks the bars (or color):
-| Level | Bars | Criteria | Meaning |
-| -------- | ---- | ------------------------------------ | ---------------------------------------------------------------------------------------- |
-| Bom | 3 | SNR **above** the preset's `limit` | Signal is comfortably above the demodulation floor — healthy connection. |
-| Razoável | 2 | within `5.5 dB` below the `limit` | Decodable, but getting close to the floor. |
-| Mau | 1 | within `7.5 dB` below the `limit` | At the very edge of what the preset can recover. |
-| Nenhum | 0 | more than `7.5 dB` below the `limit` | Below the floor — transmission lost to noise. |
+| Level | Bars | Criteria | Meaning |
+| -------- | ---- | ----------------------------------------------- | ---------------------------------------------------------------------------------------- |
+| Bom | 3 | SNR **above** the preset's `limit` | Signal is comfortably above the demodulation floor — healthy connection. |
+| Razoável | 2 | up to `5.5 dB` below the `limit` | Decodable, but getting close to the floor. |
+| Mau | 1 | between `5.5 dB` and `7.5 dB` below the `limit` | At the very edge of what the preset can recover. |
+| Nenhum | 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.
diff --git a/docs/pt-rPT/user/telemetry-and-sensors.md b/docs/pt-rPT/user/telemetry-and-sensors.md
index 42fee3838..9f003b561 100644
--- a/docs/pt-rPT/user/telemetry-and-sensors.md
+++ b/docs/pt-rPT/user/telemetry-and-sensors.md
@@ -103,7 +103,9 @@ Nodes with particulate matter or CO₂ sensors report air quality data:
| PM10 | µg/m³ | Coarse particulate matter |
| CO₂ | ppm | Carbon dioxide concentration |
-The CO₂ reading is color-coded by severity (Good → Stuffy → Poor → Unsafe → Evacuate). See [Node Metrics — Air Quality](node-metrics#air-quality-metrics) for the exact ppm bands and colors.
+CO₂ sensors such as the SCD4x also report their own temperature and humidity, which appear alongside the readings above. From PM2.5 history the app additionally derives an **EPA NowCast AQI** value.
+
+The CO₂ reading is color-coded by severity (Good → Stuffy → Poor → Unsafe → Evacuate). See [Node Metrics — Air Quality](node-metrics#air-quality-metrics) for the exact ppm bands, colors, and AQI detail.
Air quality data can be viewed as info cards on the node detail screen, charted over time, and exported to CSV.
diff --git a/docs/pt-rPT/user/translate.md b/docs/pt-rPT/user/translate.md
index 25aa4693c..70c966fed 100644
--- a/docs/pt-rPT/user/translate.md
+++ b/docs/pt-rPT/user/translate.md
@@ -18,11 +18,11 @@ Contributing translations helps make Meshtastic accessible to a wider audience.
## What Gets Translated
-| Resource | Source Location | Notes |
-| ----------------- | ------------------------------------- | ---------------------------------------------------------------------- |
-| UI strings | `composeResources/values/strings.xml` | Buttons, labels, messages, and all user-visible text |
-| User Guide pages | `docs/user/*.md` | In-app documentation shown in Help & Documentation |
-| Fastlane metadata | `fastlane/metadata/android/en-US/` | App Store listing title, description, and changelogs |
+| Resource | Source Location | Notes |
+| ----------------- | ------------------------------------------------------------------- | ---------------------------------------------------------------------- |
+| UI strings | `core/resources/src/commonMain/composeResources/values/strings.xml` | Buttons, labels, messages, and all user-visible text |
+| User Guide pages | `docs/en/user/*.md` | In-app documentation shown in Help & Documentation |
+| Fastlane metadata | `fastlane/metadata/android/en-US/` | App Store listing title, description, and changelogs |
> ⚠️ **Note:** Developer Guide pages are English-only. Code-focused documentation targeting contributors is not translated.
diff --git a/docs/pt-rPT/user/units-and-locale.md b/docs/pt-rPT/user/units-and-locale.md
index 319810901..7e89ae6ed 100644
--- a/docs/pt-rPT/user/units-and-locale.md
+++ b/docs/pt-rPT/user/units-and-locale.md
@@ -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 uses the `MetricFormatter` utility to convert and display values in whatever unit system your device's locale specifies.
+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.
On Android, your measurement preferences are determined by your system **Language & Region** settings. On Desktop (JVM), the app uses the JVM's default `Locale`.
@@ -115,12 +115,13 @@ On Android, your measurement system (metric vs imperial) is tied to your region
2. Change your **Region** or **Measurement units** preference
3. Return to Meshtastic — values update immediately
-> 💡 **Tip:** The app uses `MetricFormatter` from `core:common`. All measurement formatting is handled by a shared KMP utility that respects your platform's locale. Developers adding new measurement displays should use `MetricFormatter` rather than hard-coding unit conversions.
+> 💡 **Tip:** All measurement formatting is handled centrally and respects your platform's locale, so units stay consistent everywhere in the app.
## Related Topics
- [Node Metrics](node-metrics) — where temperature, distance, and sensor values are displayed
- [Telemetry & Sensors](telemetry-and-sensors) — the sensors that produce these measurements
+- [Measurement & Formatting](../developer/measurement) — developer reference for the formatting utilities
- [Settings — Radio & User](settings-radio-user) — region setting that drives unit selection
---
diff --git a/docs/ro-rRO/user/android-auto.md b/docs/ro-rRO/user/android-auto.md
index 275ebc22e..6b272432e 100644
--- a/docs/ro-rRO/user/android-auto.md
+++ b/docs/ro-rRO/user/android-auto.md
@@ -2,7 +2,7 @@
title: Android Auto
parent: User Guide
nav_order: 18
-last_updated: 2026-06-11
+last_updated: 2026-07-07
description: Use Meshtastic hands-free on an Android Auto head unit — read messages aloud, reply by voice, and check nodes and mesh status while driving.
aliases:
- android-auto
@@ -17,9 +17,11 @@ Meshtastic integrates with Android Auto so you can stay in touch with your mesh
> ⚠️ **Note:** Android Auto support is available on **Google-flavor Android builds only**. It is not included in the F-Droid build, and it is not available on Desktop or iOS.
+> ℹ️ **What ships today:** The Google Play build provides **notification-only** car messaging — incoming messages are announced on the head unit and you reply through its notification controls. The full tabbed **Messages / Nodes / Status** experience described below is a beta built on the Android Car App Library (Google's templated car UI is currently restricted to Closed/Internal Play tracks), so it appears only in builds compiled with `-PenableCarTemplates=true`. The rest of this page documents that beta experience.
+
## Overview
-When your phone is connected to an Android Auto head unit (or the Desktop Head Unit emulator used for development), Meshtastic appears as a messaging app built with the Android Car App Library. The car interface presents a tabbed Home screen optimized for driving-safe, glanceable use:
+When your phone is connected to an Android Auto head unit (or the Desktop Head Unit emulator used for development), the beta build presents Meshtastic as a messaging app built with the Android Car App Library, with a tabbed Home screen optimized for driving-safe, glanceable use:
- **Messages** — recent conversations, with hands-free reading and replies.
- **Nodes** — the mesh node list, with a node-detail view.
diff --git a/docs/ro-rRO/user/connections.md b/docs/ro-rRO/user/connections.md
index 5ef0333de..69d33b011 100644
--- a/docs/ro-rRO/user/connections.md
+++ b/docs/ro-rRO/user/connections.md
@@ -23,7 +23,7 @@ Bluetooth Low Energy is the default and most common connection method on Android
1. Ensure your Meshtastic radio is powered on and in pairing mode.
2. Open the app and navigate to the **Connect** tab.
-3. Tap **Scan for Devices** — nearby Meshtastic radios will appear.
+3. Tap **Scan for Bluetooth devices** — nearby Meshtastic radios will appear.
4. Select your device from the list.
5. Accept the Bluetooth pairing prompt if shown.
diff --git a/docs/ro-rRO/user/desktop.md b/docs/ro-rRO/user/desktop.md
index f1db6316c..e44e1c5f5 100644
--- a/docs/ro-rRO/user/desktop.md
+++ b/docs/ro-rRO/user/desktop.md
@@ -2,7 +2,7 @@
title: Desktop App
parent: User Guide
nav_order: 14
-last_updated: 2026-06-11
+last_updated: 2026-07-07
description: Install and use the Meshtastic Desktop app on Linux, macOS, and Windows — connections, feature parity, and keyboard shortcuts.
aliases:
- desktop
@@ -60,19 +60,19 @@ Bluetooth Low Energy is supported on Desktop via the [Kable](https://github.com/
## Feature Parity
-| Feature | Android | Desktop | Notițe |
-| -------------------------------------------- | ------- | ------- | ---------------------------------------------- |
-| Messaging | ✓ | ✓ | Full parity |
-| Node List | ✓ | ✓ | Full parity |
-| Map | ✓ | ✓ | Full parity |
-| Setări | ✓ | ✓ | Full parity |
-| Bluetooth (BLE) | ✓ | ✓ | Via Kable on desktop |
-| Firmware Update OTA | ✓ | ✗ | Use web flasher |
-| Notifications | ✓ | ✓ | Native OS notifications |
-| Widgets | ✓ | ✗ | Android-only |
-| Android Auto | ✓ | ✗ | Android-only — not available on Desktop or iOS |
-| AI Assistant (Chirpy) | ✓\* | ✗ | Google flavor Android only |
-| App Functions (system AI) | ✓† | ✗ | Google flavor Android only |
+| Feature | Android | Desktop | Notițe |
+| -------------------------------------------- | ------- | ------- | -------------------------------------------------------------------------- |
+| Messaging | ✓ | ✓ | Full parity |
+| Node List | ✓ | ✓ | Full parity |
+| Map | ✓ | ◐ | Map tab exists on desktop, but the interactive map view is Android-only |
+| Setări | ✓ | ✓ | Full parity |
+| Bluetooth (BLE) | ✓ | ✓ | Via Kable on desktop |
+| Actualizare firmware | ✓ | ◐ | Desktop supports in-app USB firmware update; BLE/Wi-Fi OTA is Android-only |
+| Notifications | ✓ | ✓ | Native OS notifications |
+| Widgets | ✓ | ✗ | Android-only |
+| Android Auto | ✓ | ✗ | Android-only — not available on Desktop or iOS |
+| AI Assistant (Chirpy) | ✓\* | ✗ | Google flavor Android only |
+| App Functions (system AI) | ✓† | ✗ | Google flavor Android only |
\*Chirpy AI requires Android 14+ on Google flavor builds with supported hardware.
@@ -84,14 +84,17 @@ The Desktop app uses the same Compose Multiplatform UI with adaptations for larg
### Keyboard Shortcuts
-| Shortcut | Action |
-| ------------------- | ---------------------- |
-| **⌘Q** / **Ctrl+Q** | Quit the application |
-| **⌘,** / **Ctrl+,** | Open Settings |
-| **⌘1** / **Ctrl+1** | Switch to Messages tab |
-| **⌘2** / **Ctrl+2** | Switch to Nodes tab |
-| **⌘3** / **Ctrl+3** | Switch to Map tab |
-| **⌘4** / **Ctrl+4** | Switch to Connect tab |
+All shortcuts use the **Meta** key — that's ⌘ (Command) on macOS and the Super / Windows key on Linux and Windows. (`Ctrl` is not bound.)
+
+| Shortcut | Action |
+| ---------- | ---------------------- |
+| **Meta+Q** | Quit the application |
+| **Meta+,** | Open Settings |
+| **Meta+1** | Switch to Messages tab |
+| **Meta+2** | Switch to Nodes tab |
+| **Meta+3** | Switch to Map tab |
+| **Meta+4** | Switch to Connect tab |
+| **Meta+/** | Open About |
### Window & System Tray
@@ -123,7 +126,6 @@ Individual doc pages render with full formatting:
```bash
git clone https://github.com/meshtastic/Meshtastic-Android.git
cd Meshtastic-Android
-git submodule update --init
./gradlew :desktopApp:run
```
@@ -134,7 +136,8 @@ Requirements:
## Known Limitations
-- No OTA firmware updates (use web flasher)
+- 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
- BLE bonding is not yet supported on desktop (pairing works without bonding)
@@ -142,7 +145,7 @@ Requirements:
## Related Topics
- [Connections](connections) — connection methods overview
-- [Firmware Updates](firmware) — use the [Web Flasher](https://flasher.meshtastic.org) for desktop firmware updates
+- [Firmware Updates](firmware) — in-app USB update on desktop, or the [Web Flasher](https://flasher.meshtastic.org)
---
diff --git a/docs/ro-rRO/user/discovery.md b/docs/ro-rRO/user/discovery.md
index 393038e44..e37eb28df 100644
--- a/docs/ro-rRO/user/discovery.md
+++ b/docs/ro-rRO/user/discovery.md
@@ -44,7 +44,6 @@ Before starting, configure these controls:
The **Start** button stays disabled — with an explanation of why — until the scan can run. Common reasons it's disabled:
- The device is **not connected**.
-- The current channel is using the **default channel key** (use a unique key first — see [Messages & Channels](messages-and-channels)).
- **No presets** have been selected to scan.
- The selected preset uses **2.4 GHz**, which your hardware doesn't support.
diff --git a/docs/ro-rRO/user/firmware.md b/docs/ro-rRO/user/firmware.md
index ac0def9f8..d8f83f2f8 100644
--- a/docs/ro-rRO/user/firmware.md
+++ b/docs/ro-rRO/user/firmware.md
@@ -2,8 +2,8 @@
title: Firmware Updates
parent: User Guide
nav_order: 13
-last_updated: 2026-05-13
-description: Update your radio firmware over Bluetooth — OTA process, version channels, pre-flight checks, and recovery.
+last_updated: 2026-07-07
+description: Update your radio firmware over Bluetooth or USB — OTA process, version channels, pre-flight checks, and recovery.
aliases:
- firmware
- update
@@ -17,7 +17,7 @@ Keep your Meshtastic radio up to date with the latest firmware for new features,
## Checking for Updates
-1. Navigate to **Settings → Firmware Update** or tap the firmware notification if shown.
+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.
2. The app checks for available firmware versions.
3. Available updates show the version number and changelog summary.
@@ -39,19 +39,26 @@ The most common update method for Android users:

-### USB Flashing
+### In-App USB Update
-For recovery or when OTA is unavailable:
+When your radio is connected over **USB/serial** (rather than Bluetooth), the Firmware Update screen offers **USB File Transfer**. The app reboots the device into DFU mode, then prompts you to save the `.uf2` file to the device's DFU drive using the system file picker. This option appears only on a USB/serial connection — it is not available over Bluetooth.
+
+> ℹ️ **nRF bootloader note:** Some devices (e.g. RAK WisBlock RAK4631) need their bootloader flashed with the vendor's serial DFU tool (such as `adafruit-nrfutil`) — copying the `.uf2` alone won't update the bootloader. The app surfaces a hint when this applies.
+
+### Other Flashing Options
+
+For recovery or when neither OTA nor in-app USB is available:
- Use the [Meshtastic Web Flasher](https://flasher.meshtastic.org)
- Or the [Meshtastic CLI tool](https://meshtastic.org/docs/getting-started/flashing-firmware) on desktop
## Version Channels
-| Canal | Descriere |
-| ------ | ------------------------------------------- |
-| Stabil | Recommended for most users; tested releases |
-| Alpha | Preview releases; may contain bugs |
+| Canal | Descriere |
+| ------------ | -------------------------------------------------------------------------- |
+| Stabil | Recommended for most users; tested releases |
+| Alpha | Preview releases; may contain bugs |
+| Fișier local | Flash a firmware file you select yourself, instead of a downloaded release |
## Pre-Update Checklist
@@ -73,7 +80,7 @@ Once the update succeeds:
- The radio will reboot automatically
- Bluetooth connection will re-establish
- Verify your settings are intact
-- Check the firmware version in **Settings → About**
+- Confirm the new version under **Currently Installed** on the Firmware Update screen — it's also shown on the node's detail page and the Connections screen

diff --git a/docs/ro-rRO/user/messages-and-channels.md b/docs/ro-rRO/user/messages-and-channels.md
index 477a787b0..b8dbd11a7 100644
--- a/docs/ro-rRO/user/messages-and-channels.md
+++ b/docs/ro-rRO/user/messages-and-channels.md
@@ -116,12 +116,16 @@ You can search the full history of any conversation directly from the chat scree

-> 💡 **Tip:** Search is full-text and stays within the conversation you opened it from — it doesn't search across other channels or contacts. Matching is fast even on long histories because messages are indexed locally.
+> 💡 **Tip:** Search is full-text and stays within the conversation you opened it from — it doesn't search across other channels or contacts. It matches against the messages already stored on your device, so it works fully offline.
### Message Bubbles
Messages appear as chat bubbles — sent messages on the right, received messages on the left. Each bubble shows the sender, timestamp, and delivery status. Messages with replies include a quoted preview of the original message above the response.
+### Mentions
+
+Type `@` while composing to mention a node — a picker suggests matching contacts as you type. In a received message, a mention appears as a highlighted chip showing the node's name; tap it to jump straight to that node's detail page.
+
### Reactions
React to messages with emoji:
@@ -143,6 +147,7 @@ Long-press any message to access:
- **Copy** — copy message text to clipboard
- **Reply** — quote the message in your response
- **React** — add an emoji reaction
+- **Translate** — translate a received message into your device language and toggle between the original and translated text (Google Play build only; uses on-device translation)
- **Delete** — remove a message you sent (local deletion)
### Message Priority
diff --git a/docs/ro-rRO/user/mqtt.md b/docs/ro-rRO/user/mqtt.md
index a686042a6..14ceef9e4 100644
--- a/docs/ro-rRO/user/mqtt.md
+++ b/docs/ro-rRO/user/mqtt.md
@@ -56,6 +56,8 @@ A gateway node with internet access (WiFi or Ethernet) publishes mesh messages t
The community maintains a public broker at `mqtt.meshtastic.org`. This is intended for general use and testing.
+> ℹ️ **Note:** Connections to `mqtt.meshtastic.org` always use TLS (port 8883), even if the TLS toggle is off. For any other broker, TLS is used only when you enable it (port 8883 with TLS, 1883 without).
+
> 🔒 **Privacy:** Messages on the public broker are readable by anyone subscribed. Always use channel encryption for private communications.
### Private Broker
diff --git a/docs/ro-rRO/user/node-metrics.md b/docs/ro-rRO/user/node-metrics.md
index 2d76183f1..1a37e9039 100644
--- a/docs/ro-rRO/user/node-metrics.md
+++ b/docs/ro-rRO/user/node-metrics.md
@@ -55,12 +55,15 @@ The BME680 **IAQ (Indoor Air Quality)** index is a single 0–500+ value derived
Air Quality is a dedicated metrics view for nodes equipped with a particulate-matter and/or CO₂ sensor. It is **separate from the BME680 IAQ reading** listed under Environment Metrics — IAQ is a single gas-resistance-derived index, while the Air Quality view charts the underlying particulate and CO₂ measurements.
-| Metric | Unit | Descriere |
-| --------------------- | ----- | ---------------------------------------------------- |
-| PM1.0 | µg/m³ | Particulate matter up to 1.0 micron |
-| PM2.5 | µg/m³ | Particulate matter up to 2.5 microns |
-| PM10 | µg/m³ | Particulate matter up to 10 microns |
-| CO₂ | ppm | Carbon dioxide concentration |
+| Metric | Unit | Descriere |
+| --------------------- | --------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| PM1.0 | µg/m³ | Particulate matter up to 1.0 micron |
+| PM2.5 | µg/m³ | Particulate matter up to 2.5 microns |
+| PM10 | µg/m³ | Particulate matter up to 10 microns |
+| AQI | EPA index | EPA **NowCast** AQI computed from your recent PM2.5 history, with a color-coded severity label. Shown next to PM2.5 once enough readings have accumulated. |
+| CO₂ | ppm | Carbon dioxide concentration |
+| CO₂ temperature | °C / °F | Temperature reported by the CO₂ sensor itself (e.g. SCD4x) |
+| CO₂ humidity | % | Relative humidity reported by the CO₂ sensor |
CO₂ readings are color-coded by severity to make air quality easy to read at a glance:
@@ -98,12 +101,12 @@ Radio signal quality information:
Signal quality is rated from **SNR relative to the active LoRa modem preset's demodulation floor**, not from fixed thresholds — a given SNR means different things on different presets (e.g. −15 dB is fine on LongSlow but unusable on ShortFast). RSSI is shown but is not part of the rating. Letting `limit` be the preset's SNR limit:
-| Quality | Criteria |
-| ---------- | ------------------------------------------------ |
-| Bun | SNR above the preset's limit |
-| Acceptabil | within 5.5 dB below the limit |
-| Slab | within 7.5 dB below the limit |
-| Niciunul | more than 7.5 dB below the limit |
+| Quality | Criteria |
+| ---------- | ------------------------------------------------------------------------- |
+| Bun | SNR above the preset's limit |
+| Acceptabil | up to 5.5 dB below the limit |
+| Slab | between 5.5 dB and 7.5 dB below the limit |
+| Niciunul | more than 7.5 dB below the limit |
See [Understanding the Signal Meter](signal-meter) for the full explanation.
diff --git a/docs/ro-rRO/user/settings-radio-user.md b/docs/ro-rRO/user/settings-radio-user.md
index 4c1619a2e..e9df22d3c 100644
--- a/docs/ro-rRO/user/settings-radio-user.md
+++ b/docs/ro-rRO/user/settings-radio-user.md
@@ -74,6 +74,8 @@ After modifying settings, tap **Save** to write the configuration to your radio.
| ~~Long Slow~~ | ~30 km | 0.18 kbps | −17.5 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.
+
#### Choosing a Modem Preset
The modem preset controls the fundamental tradeoff between **range** and **data rate**:
diff --git a/docs/ro-rRO/user/signal-meter.md b/docs/ro-rRO/user/signal-meter.md
index 896c4b5a6..f5240e9a7 100644
--- a/docs/ro-rRO/user/signal-meter.md
+++ b/docs/ro-rRO/user/signal-meter.md
@@ -52,12 +52,12 @@ The app rates your signal quality (None, Bad, Fair, or Good) from **SNR alone, m
Because the rating is relative to the preset limit, the _same_ SNR can rate differently on different presets — `-15 dB` is healthy on `LongSlow` but unusable on `ShortFast`. Letting `limit` be the active preset's SNR Limit, here is how the app picks the bars (or color):
-| Level | Bars | Criteria | Meaning |
-| ---------- | ---- | ------------------------------------ | ---------------------------------------------------------------------------------------- |
-| Bun | 3 | SNR **above** the preset's `limit` | Signal is comfortably above the demodulation floor — healthy connection. |
-| Acceptabil | 2 | within `5.5 dB` below the `limit` | Decodable, but getting close to the floor. |
-| Slab | 1 | within `7.5 dB` below the `limit` | At the very edge of what the preset can recover. |
-| Niciunul | 0 | more than `7.5 dB` below the `limit` | Below the floor — transmission lost to noise. |
+| Level | Bars | Criteria | Meaning |
+| ---------- | ---- | ----------------------------------------------- | ---------------------------------------------------------------------------------------- |
+| Bun | 3 | SNR **above** the preset's `limit` | Signal is comfortably above the demodulation floor — healthy connection. |
+| Acceptabil | 2 | up to `5.5 dB` below the `limit` | Decodable, but getting close to the floor. |
+| Slab | 1 | between `5.5 dB` and `7.5 dB` below the `limit` | At the very edge of what the preset can recover. |
+| Niciunul | 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.
diff --git a/docs/ro-rRO/user/telemetry-and-sensors.md b/docs/ro-rRO/user/telemetry-and-sensors.md
index 7b6299436..c26dd45f6 100644
--- a/docs/ro-rRO/user/telemetry-and-sensors.md
+++ b/docs/ro-rRO/user/telemetry-and-sensors.md
@@ -103,7 +103,9 @@ Nodes with particulate matter or CO₂ sensors report air quality data:
| PM10 | µg/m³ | Coarse particulate matter |
| CO₂ | ppm | Carbon dioxide concentration |
-The CO₂ reading is color-coded by severity (Good → Stuffy → Poor → Unsafe → Evacuate). See [Node Metrics — Air Quality](node-metrics#air-quality-metrics) for the exact ppm bands and colors.
+CO₂ sensors such as the SCD4x also report their own temperature and humidity, which appear alongside the readings above. From PM2.5 history the app additionally derives an **EPA NowCast AQI** value.
+
+The CO₂ reading is color-coded by severity (Good → Stuffy → Poor → Unsafe → Evacuate). See [Node Metrics — Air Quality](node-metrics#air-quality-metrics) for the exact ppm bands, colors, and AQI detail.
Air quality data can be viewed as info cards on the node detail screen, charted over time, and exported to CSV.
diff --git a/docs/ro-rRO/user/translate.md b/docs/ro-rRO/user/translate.md
index 8f2e878f6..c61173ab2 100644
--- a/docs/ro-rRO/user/translate.md
+++ b/docs/ro-rRO/user/translate.md
@@ -18,11 +18,11 @@ Contributing translations helps make Meshtastic accessible to a wider audience.
## What Gets Translated
-| Resource | Source Location | Notițe |
-| ----------------- | ------------------------------------- | ---------------------------------------------------------------------- |
-| UI strings | `composeResources/values/strings.xml` | Buttons, labels, messages, and all user-visible text |
-| User Guide pages | `docs/user/*.md` | In-app documentation shown in Help & Documentation |
-| Fastlane metadata | `fastlane/metadata/android/en-US/` | App Store listing title, description, and changelogs |
+| Resource | Source Location | Notițe |
+| ----------------- | ------------------------------------------------------------------- | ---------------------------------------------------------------------- |
+| UI strings | `core/resources/src/commonMain/composeResources/values/strings.xml` | Buttons, labels, messages, and all user-visible text |
+| User Guide pages | `docs/en/user/*.md` | In-app documentation shown in Help & Documentation |
+| Fastlane metadata | `fastlane/metadata/android/en-US/` | App Store listing title, description, and changelogs |
> ⚠️ **Note:** Developer Guide pages are English-only. Code-focused documentation targeting contributors is not translated.
diff --git a/docs/ro-rRO/user/units-and-locale.md b/docs/ro-rRO/user/units-and-locale.md
index 9d70b5887..a3e918bd0 100644
--- a/docs/ro-rRO/user/units-and-locale.md
+++ b/docs/ro-rRO/user/units-and-locale.md
@@ -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 uses the `MetricFormatter` utility to convert and display values in whatever unit system your device's locale specifies.
+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.
On Android, your measurement preferences are determined by your system **Language & Region** settings. On Desktop (JVM), the app uses the JVM's default `Locale`.
@@ -115,12 +115,13 @@ On Android, your measurement system (metric vs imperial) is tied to your region
2. Change your **Region** or **Measurement units** preference
3. Return to Meshtastic — values update immediately
-> 💡 **Tip:** The app uses `MetricFormatter` from `core:common`. All measurement formatting is handled by a shared KMP utility that respects your platform's locale. Developers adding new measurement displays should use `MetricFormatter` rather than hard-coding unit conversions.
+> 💡 **Tip:** All measurement formatting is handled centrally and respects your platform's locale, so units stay consistent everywhere in the app.
## Related Topics
- [Node Metrics](node-metrics) — where temperature, distance, and sensor values are displayed
- [Telemetry & Sensors](telemetry-and-sensors) — the sensors that produce these measurements
+- [Measurement & Formatting](../developer/measurement) — developer reference for the formatting utilities
- [Settings — Radio & User](settings-radio-user) — region setting that drives unit selection
---
diff --git a/docs/ru-rRU/user/android-auto.md b/docs/ru-rRU/user/android-auto.md
index f976b9a2c..e6c4e059b 100644
--- a/docs/ru-rRU/user/android-auto.md
+++ b/docs/ru-rRU/user/android-auto.md
@@ -2,7 +2,7 @@
title: Android Auto
parent: Руководство пользователя
nav_order: 18
-last_updated: 2026-06-11
+last_updated: 2026-07-07
description: Используй Meshtastic без рук на головном устройстве Android Auto — читай сообщения вслух, отвечай голосом и проверяй ноды и состояние сети, пока ты за рулем.
aliases:
- android-auto
@@ -17,9 +17,11 @@ Meshtastic интегрируется с Android Auto, так что ты мож
> ⚠️ **Примечание:** поддержка Android Auto доступна только на **Android-сборках от Google**. Она не включена в сборку F-Droid и недоступна на ПК или iOS.
+> ℹ️ **What ships today:** The Google Play build provides **notification-only** car messaging — incoming messages are announced on the head unit and you reply through its notification controls. The full tabbed **Messages / Nodes / Status** experience described below is a beta built on the Android Car App Library (Google's templated car UI is currently restricted to Closed/Internal Play tracks), so it appears only in builds compiled with `-PenableCarTemplates=true`. The rest of this page documents that beta experience.
+
## Обзор
-Когда твой телефон подключен к головному устройству Android Auto (или к эмулятору Desktop Head Unit, используемому для разработки), Meshtastic появляется как приложение для обмена сообщениями, созданное с помощью библиотеки Android Car App. Интерфейс автомобиля представляет собой экран «Домой» с вкладками, оптимизированный для безопасного использования за рулем и быстрого просмотра:
+When your phone is connected to an Android Auto head unit (or the Desktop Head Unit emulator used for development), the beta build presents Meshtastic as a messaging app built with the Android Car App Library, with a tabbed Home screen optimized for driving-safe, glanceable use:
- **Сообщения** — недавние разговоры с возможностью чтения и ответов без рук.
- **Узлы** — список нод сети с подробным просмотром каждой ноды.
diff --git a/docs/ru-rRU/user/connections.md b/docs/ru-rRU/user/connections.md
index 0f2e7e75d..f8f7144a1 100644
--- a/docs/ru-rRU/user/connections.md
+++ b/docs/ru-rRU/user/connections.md
@@ -23,7 +23,7 @@ Bluetooth Low Energy является наиболее распростране
1. Убедитесь, что устройство Meshtastic включено и находится в режиме сопряжения.
2. Откройте приложение и перейдите на вкладку **Подключение**.
-3. Нажмите **Сканировать устройства** — появятся ближайшие устройства Meshtastic.
+3. Tap **Scan for Bluetooth devices** — nearby Meshtastic radios will appear.
4. Выберите ваше устройство из списка.
5. Примите запрос на соединение Bluetooth, если показано.
diff --git a/docs/ru-rRU/user/desktop.md b/docs/ru-rRU/user/desktop.md
index a6bfe8627..3bf8fa048 100644
--- a/docs/ru-rRU/user/desktop.md
+++ b/docs/ru-rRU/user/desktop.md
@@ -2,7 +2,7 @@
title: Настольное приложение
parent: Руководство пользователя
nav_order: 14
-last_updated: 2026-06-11
+last_updated: 2026-07-07
description: Install and use the Meshtastic Desktop app on Linux, macOS, and Windows — connections, feature parity, and keyboard shortcuts.
aliases:
- desktop
@@ -60,19 +60,19 @@ Bluetooth Low Energy is supported on Desktop via the [Kable](https://github.com/
## Feature Parity
-| Feature | Android | Desktop | Заметки |
-| -------------------------------------------- | ------- | ------- | ---------------------------------------------- |
-| Обмен сообщениями | ✓ | ✓ | Полное равенство |
-| Список узлов | ✓ | ✓ | Полное равенство |
-| Карта | ✓ | ✓ | Полное равенство |
-| Настройки | ✓ | ✓ | Полное равенство |
-| Bluetooth (BLE) | ✓ | ✓ | Via Kable on desktop |
-| Firmware Update OTA | ✓ | ✗ | Use web flasher |
-| Notifications | ✓ | ✓ | Native OS notifications |
-| Виджеты | ✓ | ✗ | Android-only |
-| Android Auto | ✓ | ✗ | Android-only — not available on Desktop or iOS |
-| AI Assistant (Chirpy) | ✓\* | ✗ | Google flavor Android only |
-| App Functions (system AI) | ✓† | ✗ | Google flavor Android only |
+| Feature | Android | Desktop | Заметки |
+| -------------------------------------------- | ------- | ------- | -------------------------------------------------------------------------- |
+| Обмен сообщениями | ✓ | ✓ | Полное равенство |
+| Список узлов | ✓ | ✓ | Полное равенство |
+| Карта | ✓ | ◐ | Map tab exists on desktop, but the interactive map view is Android-only |
+| Настройки | ✓ | ✓ | Полное равенство |
+| Bluetooth (BLE) | ✓ | ✓ | Via Kable on desktop |
+| Обновление прошивки | ✓ | ◐ | Desktop supports in-app USB firmware update; BLE/Wi-Fi OTA is Android-only |
+| Notifications | ✓ | ✓ | Native OS notifications |
+| Виджеты | ✓ | ✗ | Android-only |
+| Android Auto | ✓ | ✗ | Android-only — not available on Desktop or iOS |
+| AI Assistant (Chirpy) | ✓\* | ✗ | Google flavor Android only |
+| App Functions (system AI) | ✓† | ✗ | Google flavor Android only |
\*Chirpy AI requires Android 14+ on Google flavor builds with supported hardware.
@@ -84,14 +84,17 @@ The Desktop app uses the same Compose Multiplatform UI with adaptations for larg
### Keyboard Shortcuts
-| Shortcut | Action |
-| ------------------- | ---------------------- |
-| **⌘Q** / **Ctrl+Q** | Quit the application |
-| **⌘,** / **Ctrl+,** | Open Settings |
-| **⌘1** / **Ctrl+1** | Switch to Messages tab |
-| **⌘2** / **Ctrl+2** | Switch to Nodes tab |
-| **⌘3** / **Ctrl+3** | Switch to Map tab |
-| **⌘4** / **Ctrl+4** | Switch to Connect tab |
+All shortcuts use the **Meta** key — that's ⌘ (Command) on macOS and the Super / Windows key on Linux and Windows. (`Ctrl` is not bound.)
+
+| Shortcut | Action |
+| ---------- | ---------------------- |
+| **Meta+Q** | Quit the application |
+| **Meta+,** | Open Settings |
+| **Meta+1** | Switch to Messages tab |
+| **Meta+2** | Switch to Nodes tab |
+| **Meta+3** | Switch to Map tab |
+| **Meta+4** | Switch to Connect tab |
+| **Meta+/** | Open About |
### Window & System Tray
@@ -123,7 +126,6 @@ Individual doc pages render with full formatting:
```bash
git clone https://github.com/meshtastic/Meshtastic-Android.git
cd Meshtastic-Android
-git submodule update --init
./gradlew :desktopApp:run
```
@@ -134,7 +136,8 @@ Requirements:
## Known Limitations
-- No OTA firmware updates (use web flasher)
+- 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
- BLE bonding is not yet supported on desktop (pairing works without bonding)
@@ -142,7 +145,7 @@ Requirements:
## Related Topics
- [Connections](connections) — connection methods overview
-- [Firmware Updates](firmware) — use the [Web Flasher](https://flasher.meshtastic.org) for desktop firmware updates
+- [Firmware Updates](firmware) — in-app USB update on desktop, or the [Web Flasher](https://flasher.meshtastic.org)
---
diff --git a/docs/ru-rRU/user/discovery.md b/docs/ru-rRU/user/discovery.md
index 92c568a30..fb515f686 100644
--- a/docs/ru-rRU/user/discovery.md
+++ b/docs/ru-rRU/user/discovery.md
@@ -44,7 +44,6 @@ Before starting, configure these controls:
The **Start** button stays disabled — with an explanation of why — until the scan can run. Common reasons it's disabled:
- The device is **not connected**.
-- The current channel is using the **default channel key** (use a unique key first — see [Messages & Channels](messages-and-channels)).
- **No presets** have been selected to scan.
- The selected preset uses **2.4 GHz**, which your hardware doesn't support.
diff --git a/docs/ru-rRU/user/firmware.md b/docs/ru-rRU/user/firmware.md
index 935c3168b..cd3d70b2c 100644
--- a/docs/ru-rRU/user/firmware.md
+++ b/docs/ru-rRU/user/firmware.md
@@ -2,8 +2,8 @@
title: Обновления прошивки
parent: Руководство пользователя
nav_order: 13
-last_updated: 2026-05-13
-description: Update your radio firmware over Bluetooth — OTA process, version channels, pre-flight checks, and recovery.
+last_updated: 2026-07-07
+description: Update your radio firmware over Bluetooth or USB — OTA process, version channels, pre-flight checks, and recovery.
aliases:
- firmware
- update
@@ -17,7 +17,7 @@ Keep your Meshtastic radio up to date with the latest firmware for new features,
## Checking for Updates
-1. Navigate to **Settings → Firmware Update** or tap the firmware notification if shown.
+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.
2. The app checks for available firmware versions.
3. Available updates show the version number and changelog summary.
@@ -39,19 +39,26 @@ The most common update method for Android users:

-### USB Flashing
+### In-App USB Update
-For recovery or when OTA is unavailable:
+When your radio is connected over **USB/serial** (rather than Bluetooth), the Firmware Update screen offers **USB File Transfer**. The app reboots the device into DFU mode, then prompts you to save the `.uf2` file to the device's DFU drive using the system file picker. This option appears only on a USB/serial connection — it is not available over Bluetooth.
+
+> ℹ️ **nRF bootloader note:** Some devices (e.g. RAK WisBlock RAK4631) need their bootloader flashed with the vendor's serial DFU tool (such as `adafruit-nrfutil`) — copying the `.uf2` alone won't update the bootloader. The app surfaces a hint when this applies.
+
+### Other Flashing Options
+
+For recovery or when neither OTA nor in-app USB is available:
- Use the [Meshtastic Web Flasher](https://flasher.meshtastic.org)
- Or the [Meshtastic CLI tool](https://meshtastic.org/docs/getting-started/flashing-firmware) on desktop
## Version Channels
-| Канал | Описание |
-| ---------- | ------------------------------------------- |
-| Стабильная | Recommended for most users; tested releases |
-| Альфа | Preview releases; may contain bugs |
+| Канал | Описание |
+| -------------- | -------------------------------------------------------------------------- |
+| Стабильная | Recommended for most users; tested releases |
+| Альфа | Preview releases; may contain bugs |
+| Локальный файл | Flash a firmware file you select yourself, instead of a downloaded release |
## Pre-Update Checklist
@@ -73,7 +80,7 @@ Once the update succeeds:
- The radio will reboot automatically
- Bluetooth connection will re-establish
- Verify your settings are intact
-- Check the firmware version in **Settings → About**
+- Confirm the new version under **Currently Installed** on the Firmware Update screen — it's also shown on the node's detail page and the Connections screen

diff --git a/docs/ru-rRU/user/messages-and-channels.md b/docs/ru-rRU/user/messages-and-channels.md
index 8b53a9b28..04014ae18 100644
--- a/docs/ru-rRU/user/messages-and-channels.md
+++ b/docs/ru-rRU/user/messages-and-channels.md
@@ -116,12 +116,16 @@ You can search the full history of any conversation directly from the chat scree

-> 💡 **Tip:** Search is full-text and stays within the conversation you opened it from — it doesn't search across other channels or contacts. Matching is fast even on long histories because messages are indexed locally.
+> 💡 **Tip:** Search is full-text and stays within the conversation you opened it from — it doesn't search across other channels or contacts. It matches against the messages already stored on your device, so it works fully offline.
### Message Bubbles
Messages appear as chat bubbles — sent messages on the right, received messages on the left. Each bubble shows the sender, timestamp, and delivery status. Messages with replies include a quoted preview of the original message above the response.
+### Mentions
+
+Type `@` while composing to mention a node — a picker suggests matching contacts as you type. In a received message, a mention appears as a highlighted chip showing the node's name; tap it to jump straight to that node's detail page.
+
### Reactions
React to messages with emoji:
@@ -143,6 +147,7 @@ Long-press any message to access:
- **Copy** — copy message text to clipboard
- **Reply** — quote the message in your response
- **React** — add an emoji reaction
+- **Translate** — translate a received message into your device language and toggle between the original and translated text (Google Play build only; uses on-device translation)
- **Delete** — remove a message you sent (local deletion)
### Message Priority
diff --git a/docs/ru-rRU/user/mqtt.md b/docs/ru-rRU/user/mqtt.md
index a3fd7dfe0..6bbfbb881 100644
--- a/docs/ru-rRU/user/mqtt.md
+++ b/docs/ru-rRU/user/mqtt.md
@@ -56,6 +56,8 @@ A gateway node with internet access (WiFi or Ethernet) publishes mesh messages t
The community maintains a public broker at `mqtt.meshtastic.org`. This is intended for general use and testing.
+> ℹ️ **Note:** Connections to `mqtt.meshtastic.org` always use TLS (port 8883), even if the TLS toggle is off. For any other broker, TLS is used only when you enable it (port 8883 with TLS, 1883 without).
+
> 🔒 **Privacy:** Messages on the public broker are readable by anyone subscribed. Always use channel encryption for private communications.
### Private Broker
diff --git a/docs/ru-rRU/user/node-metrics.md b/docs/ru-rRU/user/node-metrics.md
index 52ceaab3b..87d0efdbb 100644
--- a/docs/ru-rRU/user/node-metrics.md
+++ b/docs/ru-rRU/user/node-metrics.md
@@ -55,12 +55,15 @@ The BME680 **IAQ (Indoor Air Quality)** index is a single 0–500+ value derived
Air Quality is a dedicated metrics view for nodes equipped with a particulate-matter and/or CO₂ sensor. It is **separate from the BME680 IAQ reading** listed under Environment Metrics — IAQ is a single gas-resistance-derived index, while the Air Quality view charts the underlying particulate and CO₂ measurements.
-| Metric | Единица | Описание |
-| --------------------- | ------- | ---------------------------------------------------- |
-| PM1.0 | µg/m³ | Particulate matter up to 1.0 micron |
-| PM2.5 | µg/m³ | Particulate matter up to 2.5 microns |
-| PM10 | µg/m³ | Particulate matter up to 10 microns |
-| CO₂ | ppm | Carbon dioxide concentration |
+| Metric | Единица | Описание |
+| --------------------- | --------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| PM1.0 | µg/m³ | Particulate matter up to 1.0 micron |
+| PM2.5 | µg/m³ | Particulate matter up to 2.5 microns |
+| PM10 | µg/m³ | Particulate matter up to 10 microns |
+| AQI | EPA index | EPA **NowCast** AQI computed from your recent PM2.5 history, with a color-coded severity label. Shown next to PM2.5 once enough readings have accumulated. |
+| CO₂ | ppm | Carbon dioxide concentration |
+| CO₂ temperature | °C / °F | Temperature reported by the CO₂ sensor itself (e.g. SCD4x) |
+| CO₂ humidity | % | Relative humidity reported by the CO₂ sensor |
CO₂ readings are color-coded by severity to make air quality easy to read at a glance:
@@ -98,12 +101,12 @@ Radio signal quality information:
Signal quality is rated from **SNR relative to the active LoRa modem preset's demodulation floor**, not from fixed thresholds — a given SNR means different things on different presets (e.g. −15 dB is fine on LongSlow but unusable on ShortFast). RSSI is shown but is not part of the rating. Letting `limit` be the preset's SNR limit:
-| Quality | Критерии |
-| ----------- | ------------------------------------------------ |
-| Хороший | SNR above the preset's limit |
-| Средний | within 5.5 dB below the limit |
-| Плохой | within 7.5 dB below the limit |
-| Отсутствует | more than 7.5 dB below the limit |
+| Quality | Критерии |
+| ----------- | ------------------------------------------------------------------------- |
+| Хороший | SNR above the preset's limit |
+| Средний | up to 5.5 dB below the limit |
+| Плохой | between 5.5 dB and 7.5 dB below the limit |
+| Отсутствует | more than 7.5 dB below the limit |
See [Understanding the Signal Meter](signal-meter) for the full explanation.
diff --git a/docs/ru-rRU/user/settings-radio-user.md b/docs/ru-rRU/user/settings-radio-user.md
index e99fb1d17..ae450a434 100644
--- a/docs/ru-rRU/user/settings-radio-user.md
+++ b/docs/ru-rRU/user/settings-radio-user.md
@@ -74,6 +74,8 @@ aliases:
| ~~Long Slow~~ | ~30 км | 0.18 кб/с | −17.5 дБ | ⚠️ **Устарел** — всё ещё доступен для выбора, но может быть удален в будущих версиях прошивки |
| ~~Very Long Slow~~ | ~40+ км | 0.09 кб/с | −20 дБ | ⚠️ **Устарел** — всё ещё доступен для выбора, но может быть удален в будущих версиях прошивки |
+> ℹ️ **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.
+
#### Выбор предустановки модема
Предустановка модема управляет основным компромиссом между **дальностью** и **скоростью передачи данных**:
diff --git a/docs/ru-rRU/user/signal-meter.md b/docs/ru-rRU/user/signal-meter.md
index dc1cc119f..a423ab54d 100644
--- a/docs/ru-rRU/user/signal-meter.md
+++ b/docs/ru-rRU/user/signal-meter.md
@@ -52,12 +52,12 @@ The app rates your signal quality (None, Bad, Fair, or Good) from **SNR alone, m
Because the rating is relative to the preset limit, the _same_ SNR can rate differently on different presets — `-15 dB` is healthy on `LongSlow` but unusable on `ShortFast`. Letting `limit` be the active preset's SNR Limit, here is how the app picks the bars (or color):
-| Уровень | Деления | Критерии | Значение |
-| ----------- | ------- | ------------------------------------ | ---------------------------------------------------------------------------------------- |
-| Хороший | 3 | SNR **above** the preset's `limit` | Signal is comfortably above the demodulation floor — healthy connection. |
-| Средний | 2 | within `5.5 dB` below the `limit` | Decodable, but getting close to the floor. |
-| Плохой | 1 | within `7.5 dB` below the `limit` | At the very edge of what the preset can recover. |
-| Отсутствует | 0 | more than `7.5 dB` below the `limit` | Below the floor — transmission lost to noise. |
+| Уровень | Деления | Критерии | Значение |
+| ----------- | ------- | ----------------------------------------------- | ---------------------------------------------------------------------------------------- |
+| Хороший | 3 | SNR **above** the preset's `limit` | Signal is comfortably above the demodulation floor — healthy connection. |
+| Средний | 2 | up to `5.5 dB` below the `limit` | Decodable, but getting close to the floor. |
+| Плохой | 1 | between `5.5 dB` and `7.5 dB` below the `limit` | At the very edge of what the preset can recover. |
+| Отсутствует | 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.
diff --git a/docs/ru-rRU/user/telemetry-and-sensors.md b/docs/ru-rRU/user/telemetry-and-sensors.md
index 60017f97e..813b7ae49 100644
--- a/docs/ru-rRU/user/telemetry-and-sensors.md
+++ b/docs/ru-rRU/user/telemetry-and-sensors.md
@@ -103,7 +103,9 @@ Nodes with particulate matter or CO₂ sensors report air quality data:
| PM10 | µg/m³ | Coarse particulate matter |
| CO₂ | ppm | Carbon dioxide concentration |
-The CO₂ reading is color-coded by severity (Good → Stuffy → Poor → Unsafe → Evacuate). See [Node Metrics — Air Quality](node-metrics#air-quality-metrics) for the exact ppm bands and colors.
+CO₂ sensors such as the SCD4x also report their own temperature and humidity, which appear alongside the readings above. From PM2.5 history the app additionally derives an **EPA NowCast AQI** value.
+
+The CO₂ reading is color-coded by severity (Good → Stuffy → Poor → Unsafe → Evacuate). See [Node Metrics — Air Quality](node-metrics#air-quality-metrics) for the exact ppm bands, colors, and AQI detail.
Air quality data can be viewed as info cards on the node detail screen, charted over time, and exported to CSV.
diff --git a/docs/ru-rRU/user/translate.md b/docs/ru-rRU/user/translate.md
index 66c1451b6..99a2625d7 100644
--- a/docs/ru-rRU/user/translate.md
+++ b/docs/ru-rRU/user/translate.md
@@ -18,11 +18,11 @@ aliases:
## Что переводится
-| Ресурс | Исходное местоположение | Заметки |
-| --------------------------------- | ------------------------------------- | ------------------------------------------------------------------------ |
-| Строки интерфейса | `composeResources/values/strings.xml` | Кнопки, ярлыки, сообщения и весь видимый пользователю текст |
-| Страницы руководства пользователя | `docs/user/*.md` | Встроенная документация, отображаемая в разделе «Справка и документация» |
-| Метаданные Fastlane | `fastlane/metadata/android/en-US/` | Название, описание и журналы изменений в App Store |
+| Ресурс | Исходное местоположение | Заметки |
+| --------------------------------- | ------------------------------------------------------------------- | ------------------------------------------------------------------------ |
+| Строки интерфейса | `core/resources/src/commonMain/composeResources/values/strings.xml` | Кнопки, ярлыки, сообщения и весь видимый пользователю текст |
+| Страницы руководства пользователя | `docs/en/user/*.md` | Встроенная документация, отображаемая в разделе «Справка и документация» |
+| Метаданные Fastlane | `fastlane/metadata/android/en-US/` | Название, описание и журналы изменений в App Store |
> ⚠️ **Примечание:** Страницы руководства для разработчиков только на английском. Документация, ориентированная на код и для участников, не переводится.
diff --git a/docs/ru-rRU/user/units-and-locale.md b/docs/ru-rRU/user/units-and-locale.md
index 02c6dfe61..05b9f0961 100644
--- a/docs/ru-rRU/user/units-and-locale.md
+++ b/docs/ru-rRU/user/units-and-locale.md
@@ -14,7 +14,7 @@ description: Как приложение отображает температу
## Как это работает
-Радиостанции Meshtastic всегда передают данные в **метрических единицах** (метры, °C, км/ч, гПа и т.д.). Когда приложение получает эти данные, оно использует утилиту `MetricFormatter` для преобразования и отображения значений в той системе единиц, которую задают региональные настройки устройства.
+Радиостанции Meshtastic всегда передают данные в **метрических единицах** (метры, °C, км/ч, гПа и т.д.). When the app receives this data, it converts and displays values in whatever unit system your device's locale specifies.
На Android твои предпочтения единиц измерений определяются настройками системы **Язык и регион**. На настольном компьютере (JVM) приложение использует стандартную `Locale` JVM.
@@ -115,12 +115,13 @@ description: Как приложение отображает температу
2. Измените свои предпочтения в **Регион** или **Единицы измерения**
3. Вернуться к Meshtastic — значения обновляются немедленно
-> 💡 **Совет:** Приложение использует `MetricFormatter` из `core:common`. Все форматирование измерений обрабатывается общей утилитой KMP, которая учитывает локаль твоей платформы. Разработчикам, добавляющим новые индикаторы измерений, следует использовать `MetricFormatter`, а не жестко кодировать преобразования единиц.
+> 💡 **Tip:** All measurement formatting is handled centrally and respects your platform's locale, so units stay consistent everywhere in the app.
## Связанные темы
- [Метрики ноды](node-metrics) — здесь отображаются температура, расстояние и значения датчиков
- [Телеметрия и датчики](telemetry-and-sensors) — датчики, производящие эти измерения
+- [Measurement & Formatting](../developer/measurement) — developer reference for the formatting utilities
- [Настройки — Радио и Пользователь](settings-radio-user) — настройка региона, управляющая выбором единиц
---
diff --git a/docs/sk-rSK/user/android-auto.md b/docs/sk-rSK/user/android-auto.md
index ffd44b406..725db5752 100644
--- a/docs/sk-rSK/user/android-auto.md
+++ b/docs/sk-rSK/user/android-auto.md
@@ -2,7 +2,7 @@
title: Android Auto
parent: User Guide
nav_order: 18
-last_updated: 2026-06-11
+last_updated: 2026-07-07
description: Use Meshtastic hands-free on an Android Auto head unit — read messages aloud, reply by voice, and check nodes and mesh status while driving.
aliases:
- android-auto
@@ -17,9 +17,11 @@ Meshtastic integrates with Android Auto so you can stay in touch with your mesh
> ⚠️ **Note:** Android Auto support is available on **Google-flavor Android builds only**. It is not included in the F-Droid build, and it is not available on Desktop or iOS.
+> ℹ️ **What ships today:** The Google Play build provides **notification-only** car messaging — incoming messages are announced on the head unit and you reply through its notification controls. The full tabbed **Messages / Nodes / Status** experience described below is a beta built on the Android Car App Library (Google's templated car UI is currently restricted to Closed/Internal Play tracks), so it appears only in builds compiled with `-PenableCarTemplates=true`. The rest of this page documents that beta experience.
+
## Overview
-When your phone is connected to an Android Auto head unit (or the Desktop Head Unit emulator used for development), Meshtastic appears as a messaging app built with the Android Car App Library. The car interface presents a tabbed Home screen optimized for driving-safe, glanceable use:
+When your phone is connected to an Android Auto head unit (or the Desktop Head Unit emulator used for development), the beta build presents Meshtastic as a messaging app built with the Android Car App Library, with a tabbed Home screen optimized for driving-safe, glanceable use:
- **Messages** — recent conversations, with hands-free reading and replies.
- **Nodes** — the mesh node list, with a node-detail view.
diff --git a/docs/sk-rSK/user/connections.md b/docs/sk-rSK/user/connections.md
index 26053e49c..38de0d1b5 100644
--- a/docs/sk-rSK/user/connections.md
+++ b/docs/sk-rSK/user/connections.md
@@ -23,7 +23,7 @@ Bluetooth Low Energy is the default and most common connection method on Android
1. Ensure your Meshtastic radio is powered on and in pairing mode.
2. Open the app and navigate to the **Connect** tab.
-3. Tap **Scan for Devices** — nearby Meshtastic radios will appear.
+3. Tap **Scan for Bluetooth devices** — nearby Meshtastic radios will appear.
4. Select your device from the list.
5. Accept the Bluetooth pairing prompt if shown.
diff --git a/docs/sk-rSK/user/desktop.md b/docs/sk-rSK/user/desktop.md
index 9905478b3..0adc24353 100644
--- a/docs/sk-rSK/user/desktop.md
+++ b/docs/sk-rSK/user/desktop.md
@@ -2,7 +2,7 @@
title: Desktop App
parent: User Guide
nav_order: 14
-last_updated: 2026-06-11
+last_updated: 2026-07-07
description: Install and use the Meshtastic Desktop app on Linux, macOS, and Windows — connections, feature parity, and keyboard shortcuts.
aliases:
- desktop
@@ -60,19 +60,19 @@ Bluetooth Low Energy is supported on Desktop via the [Kable](https://github.com/
## Feature Parity
-| Feature | Android | Desktop | Notes |
-| -------------------------------------------- | ------- | ------- | ---------------------------------------------- |
-| Messaging | ✓ | ✓ | Full parity |
-| Node List | ✓ | ✓ | Full parity |
-| Mapa | ✓ | ✓ | Full parity |
-| Nastavenia | ✓ | ✓ | Full parity |
-| Bluetooth (BLE) | ✓ | ✓ | Via Kable on desktop |
-| Firmware Update OTA | ✓ | ✗ | Use web flasher |
-| Notifications | ✓ | ✓ | Native OS notifications |
-| Widgets | ✓ | ✗ | Android-only |
-| Android Auto | ✓ | ✗ | Android-only — not available on Desktop or iOS |
-| AI Assistant (Chirpy) | ✓\* | ✗ | Google flavor Android only |
-| App Functions (system AI) | ✓† | ✗ | Google flavor Android only |
+| Feature | Android | Desktop | Notes |
+| -------------------------------------------- | ------- | ------- | -------------------------------------------------------------------------- |
+| Messaging | ✓ | ✓ | Full parity |
+| Node List | ✓ | ✓ | Full parity |
+| Mapa | ✓ | ◐ | Map tab exists on desktop, but the interactive map view is Android-only |
+| Nastavenia | ✓ | ✓ | Full parity |
+| Bluetooth (BLE) | ✓ | ✓ | Via Kable on desktop |
+| Firmware Update | ✓ | ◐ | Desktop supports in-app USB firmware update; BLE/Wi-Fi OTA is Android-only |
+| Notifications | ✓ | ✓ | Native OS notifications |
+| Widgets | ✓ | ✗ | Android-only |
+| Android Auto | ✓ | ✗ | Android-only — not available on Desktop or iOS |
+| AI Assistant (Chirpy) | ✓\* | ✗ | Google flavor Android only |
+| App Functions (system AI) | ✓† | ✗ | Google flavor Android only |
\*Chirpy AI requires Android 14+ on Google flavor builds with supported hardware.
@@ -84,14 +84,17 @@ The Desktop app uses the same Compose Multiplatform UI with adaptations for larg
### Keyboard Shortcuts
-| Shortcut | Action |
-| ------------------- | ---------------------- |
-| **⌘Q** / **Ctrl+Q** | Quit the application |
-| **⌘,** / **Ctrl+,** | Open Settings |
-| **⌘1** / **Ctrl+1** | Switch to Messages tab |
-| **⌘2** / **Ctrl+2** | Switch to Nodes tab |
-| **⌘3** / **Ctrl+3** | Switch to Map tab |
-| **⌘4** / **Ctrl+4** | Switch to Connect tab |
+All shortcuts use the **Meta** key — that's ⌘ (Command) on macOS and the Super / Windows key on Linux and Windows. (`Ctrl` is not bound.)
+
+| Shortcut | Action |
+| ---------- | ---------------------- |
+| **Meta+Q** | Quit the application |
+| **Meta+,** | Open Settings |
+| **Meta+1** | Switch to Messages tab |
+| **Meta+2** | Switch to Nodes tab |
+| **Meta+3** | Switch to Map tab |
+| **Meta+4** | Switch to Connect tab |
+| **Meta+/** | Open About |
### Window & System Tray
@@ -123,7 +126,6 @@ Individual doc pages render with full formatting:
```bash
git clone https://github.com/meshtastic/Meshtastic-Android.git
cd Meshtastic-Android
-git submodule update --init
./gradlew :desktopApp:run
```
@@ -134,7 +136,8 @@ Requirements:
## Known Limitations
-- No OTA firmware updates (use web flasher)
+- 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
- BLE bonding is not yet supported on desktop (pairing works without bonding)
@@ -142,7 +145,7 @@ Requirements:
## Related Topics
- [Connections](connections) — connection methods overview
-- [Firmware Updates](firmware) — use the [Web Flasher](https://flasher.meshtastic.org) for desktop firmware updates
+- [Firmware Updates](firmware) — in-app USB update on desktop, or the [Web Flasher](https://flasher.meshtastic.org)
---
diff --git a/docs/sk-rSK/user/discovery.md b/docs/sk-rSK/user/discovery.md
index ff58020c2..7d1a5fae1 100644
--- a/docs/sk-rSK/user/discovery.md
+++ b/docs/sk-rSK/user/discovery.md
@@ -44,7 +44,6 @@ Before starting, configure these controls:
The **Start** button stays disabled — with an explanation of why — until the scan can run. Common reasons it's disabled:
- The device is **not connected**.
-- The current channel is using the **default channel key** (use a unique key first — see [Messages & Channels](messages-and-channels)).
- **No presets** have been selected to scan.
- The selected preset uses **2.4 GHz**, which your hardware doesn't support.
diff --git a/docs/sk-rSK/user/firmware.md b/docs/sk-rSK/user/firmware.md
index 1e47c4a0e..f7930565c 100644
--- a/docs/sk-rSK/user/firmware.md
+++ b/docs/sk-rSK/user/firmware.md
@@ -2,8 +2,8 @@
title: Firmware Updates
parent: User Guide
nav_order: 13
-last_updated: 2026-05-13
-description: Update your radio firmware over Bluetooth — OTA process, version channels, pre-flight checks, and recovery.
+last_updated: 2026-07-07
+description: Update your radio firmware over Bluetooth or USB — OTA process, version channels, pre-flight checks, and recovery.
aliases:
- firmware
- update
@@ -17,7 +17,7 @@ Keep your Meshtastic radio up to date with the latest firmware for new features,
## Checking for Updates
-1. Navigate to **Settings → Firmware Update** or tap the firmware notification if shown.
+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.
2. The app checks for available firmware versions.
3. Available updates show the version number and changelog summary.
@@ -39,19 +39,26 @@ The most common update method for Android users:

-### USB Flashing
+### In-App USB Update
-For recovery or when OTA is unavailable:
+When your radio is connected over **USB/serial** (rather than Bluetooth), the Firmware Update screen offers **USB File Transfer**. The app reboots the device into DFU mode, then prompts you to save the `.uf2` file to the device's DFU drive using the system file picker. This option appears only on a USB/serial connection — it is not available over Bluetooth.
+
+> ℹ️ **nRF bootloader note:** Some devices (e.g. RAK WisBlock RAK4631) need their bootloader flashed with the vendor's serial DFU tool (such as `adafruit-nrfutil`) — copying the `.uf2` alone won't update the bootloader. The app surfaces a hint when this applies.
+
+### Other Flashing Options
+
+For recovery or when neither OTA nor in-app USB is available:
- Use the [Meshtastic Web Flasher](https://flasher.meshtastic.org)
- Or the [Meshtastic CLI tool](https://meshtastic.org/docs/getting-started/flashing-firmware) on desktop
## Version Channels
-| Kanál | Popis |
-| ------ | ------------------------------------------- |
-| Stable | Recommended for most users; tested releases |
-| Alpha | Preview releases; may contain bugs |
+| Kanál | Popis |
+| ---------- | -------------------------------------------------------------------------- |
+| Stable | Recommended for most users; tested releases |
+| Alpha | Preview releases; may contain bugs |
+| Local File | Flash a firmware file you select yourself, instead of a downloaded release |
## Pre-Update Checklist
@@ -73,7 +80,7 @@ Once the update succeeds:
- The radio will reboot automatically
- Bluetooth connection will re-establish
- Verify your settings are intact
-- Check the firmware version in **Settings → About**
+- Confirm the new version under **Currently Installed** on the Firmware Update screen — it's also shown on the node's detail page and the Connections screen

diff --git a/docs/sk-rSK/user/messages-and-channels.md b/docs/sk-rSK/user/messages-and-channels.md
index ba2f09f73..63bee7543 100644
--- a/docs/sk-rSK/user/messages-and-channels.md
+++ b/docs/sk-rSK/user/messages-and-channels.md
@@ -116,12 +116,16 @@ You can search the full history of any conversation directly from the chat scree

-> 💡 **Tip:** Search is full-text and stays within the conversation you opened it from — it doesn't search across other channels or contacts. Matching is fast even on long histories because messages are indexed locally.
+> 💡 **Tip:** Search is full-text and stays within the conversation you opened it from — it doesn't search across other channels or contacts. It matches against the messages already stored on your device, so it works fully offline.
### Message Bubbles
Messages appear as chat bubbles — sent messages on the right, received messages on the left. Each bubble shows the sender, timestamp, and delivery status. Messages with replies include a quoted preview of the original message above the response.
+### Mentions
+
+Type `@` while composing to mention a node — a picker suggests matching contacts as you type. In a received message, a mention appears as a highlighted chip showing the node's name; tap it to jump straight to that node's detail page.
+
### Reactions
React to messages with emoji:
@@ -143,6 +147,7 @@ Long-press any message to access:
- **Copy** — copy message text to clipboard
- **Reply** — quote the message in your response
- **React** — add an emoji reaction
+- **Translate** — translate a received message into your device language and toggle between the original and translated text (Google Play build only; uses on-device translation)
- **Delete** — remove a message you sent (local deletion)
### Message Priority
diff --git a/docs/sk-rSK/user/mqtt.md b/docs/sk-rSK/user/mqtt.md
index 3b52958b4..cffe2b241 100644
--- a/docs/sk-rSK/user/mqtt.md
+++ b/docs/sk-rSK/user/mqtt.md
@@ -56,6 +56,8 @@ A gateway node with internet access (WiFi or Ethernet) publishes mesh messages t
The community maintains a public broker at `mqtt.meshtastic.org`. This is intended for general use and testing.
+> ℹ️ **Note:** Connections to `mqtt.meshtastic.org` always use TLS (port 8883), even if the TLS toggle is off. For any other broker, TLS is used only when you enable it (port 8883 with TLS, 1883 without).
+
> 🔒 **Privacy:** Messages on the public broker are readable by anyone subscribed. Always use channel encryption for private communications.
### Private Broker
diff --git a/docs/sk-rSK/user/node-metrics.md b/docs/sk-rSK/user/node-metrics.md
index efaee75ff..7df4ab54f 100644
--- a/docs/sk-rSK/user/node-metrics.md
+++ b/docs/sk-rSK/user/node-metrics.md
@@ -55,12 +55,15 @@ The BME680 **IAQ (Indoor Air Quality)** index is a single 0–500+ value derived
Air Quality is a dedicated metrics view for nodes equipped with a particulate-matter and/or CO₂ sensor. It is **separate from the BME680 IAQ reading** listed under Environment Metrics — IAQ is a single gas-resistance-derived index, while the Air Quality view charts the underlying particulate and CO₂ measurements.
-| Metric | Unit | Popis |
-| --------------------- | ----- | ---------------------------------------------------- |
-| PM1.0 | µg/m³ | Particulate matter up to 1.0 micron |
-| PM2.5 | µg/m³ | Particulate matter up to 2.5 microns |
-| PM10 | µg/m³ | Particulate matter up to 10 microns |
-| CO₂ | ppm | Carbon dioxide concentration |
+| Metric | Unit | Popis |
+| --------------------- | --------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| PM1.0 | µg/m³ | Particulate matter up to 1.0 micron |
+| PM2.5 | µg/m³ | Particulate matter up to 2.5 microns |
+| PM10 | µg/m³ | Particulate matter up to 10 microns |
+| AQI | EPA index | EPA **NowCast** AQI computed from your recent PM2.5 history, with a color-coded severity label. Shown next to PM2.5 once enough readings have accumulated. |
+| CO₂ | ppm | Carbon dioxide concentration |
+| CO₂ temperature | °C / °F | Temperature reported by the CO₂ sensor itself (e.g. SCD4x) |
+| CO₂ humidity | % | Relative humidity reported by the CO₂ sensor |
CO₂ readings are color-coded by severity to make air quality easy to read at a glance:
@@ -98,12 +101,12 @@ Radio signal quality information:
Signal quality is rated from **SNR relative to the active LoRa modem preset's demodulation floor**, not from fixed thresholds — a given SNR means different things on different presets (e.g. −15 dB is fine on LongSlow but unusable on ShortFast). RSSI is shown but is not part of the rating. Letting `limit` be the preset's SNR limit:
-| Quality | Criteria |
-| --------- | ------------------------------------------------ |
-| Dobrý | SNR above the preset's limit |
-| Primeraný | within 5.5 dB below the limit |
-| Zlý | within 7.5 dB below the limit |
-| Žiadny | more than 7.5 dB below the limit |
+| Quality | Criteria |
+| --------- | ------------------------------------------------------------------------- |
+| Dobrý | SNR above the preset's limit |
+| Primeraný | up to 5.5 dB below the limit |
+| Zlý | between 5.5 dB and 7.5 dB below the limit |
+| Žiadny | more than 7.5 dB below the limit |
See [Understanding the Signal Meter](signal-meter) for the full explanation.
diff --git a/docs/sk-rSK/user/settings-radio-user.md b/docs/sk-rSK/user/settings-radio-user.md
index ef795983b..00201f974 100644
--- a/docs/sk-rSK/user/settings-radio-user.md
+++ b/docs/sk-rSK/user/settings-radio-user.md
@@ -74,6 +74,8 @@ After modifying settings, tap **Save** to write the configuration to your radio.
| ~~Long Slow~~ | ~30 km | 0.18 kbps | −17.5 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.
+
#### Choosing a Modem Preset
The modem preset controls the fundamental tradeoff between **range** and **data rate**:
diff --git a/docs/sk-rSK/user/signal-meter.md b/docs/sk-rSK/user/signal-meter.md
index 1ba6304fc..563e0b814 100644
--- a/docs/sk-rSK/user/signal-meter.md
+++ b/docs/sk-rSK/user/signal-meter.md
@@ -52,12 +52,12 @@ The app rates your signal quality (None, Bad, Fair, or Good) from **SNR alone, m
Because the rating is relative to the preset limit, the _same_ SNR can rate differently on different presets — `-15 dB` is healthy on `LongSlow` but unusable on `ShortFast`. Letting `limit` be the active preset's SNR Limit, here is how the app picks the bars (or color):
-| Level | Bars | Criteria | Meaning |
-| --------- | ---- | ------------------------------------ | ---------------------------------------------------------------------------------------- |
-| Dobrý | 3 | SNR **above** the preset's `limit` | Signal is comfortably above the demodulation floor — healthy connection. |
-| Primeraný | 2 | within `5.5 dB` below the `limit` | Decodable, but getting close to the floor. |
-| Zlý | 1 | within `7.5 dB` below the `limit` | At the very edge of what the preset can recover. |
-| Žiadny | 0 | more than `7.5 dB` below the `limit` | Below the floor — transmission lost to noise. |
+| Level | Bars | Criteria | Meaning |
+| --------- | ---- | ----------------------------------------------- | ---------------------------------------------------------------------------------------- |
+| Dobrý | 3 | SNR **above** the preset's `limit` | Signal is comfortably above the demodulation floor — healthy connection. |
+| Primeraný | 2 | up to `5.5 dB` below the `limit` | Decodable, but getting close to the floor. |
+| Zlý | 1 | between `5.5 dB` and `7.5 dB` below the `limit` | At the very edge of what the preset can recover. |
+| Žiadny | 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.
diff --git a/docs/sk-rSK/user/telemetry-and-sensors.md b/docs/sk-rSK/user/telemetry-and-sensors.md
index 5fc947991..e87014b65 100644
--- a/docs/sk-rSK/user/telemetry-and-sensors.md
+++ b/docs/sk-rSK/user/telemetry-and-sensors.md
@@ -103,7 +103,9 @@ Nodes with particulate matter or CO₂ sensors report air quality data:
| PM10 | µg/m³ | Coarse particulate matter |
| CO₂ | ppm | Carbon dioxide concentration |
-The CO₂ reading is color-coded by severity (Good → Stuffy → Poor → Unsafe → Evacuate). See [Node Metrics — Air Quality](node-metrics#air-quality-metrics) for the exact ppm bands and colors.
+CO₂ sensors such as the SCD4x also report their own temperature and humidity, which appear alongside the readings above. From PM2.5 history the app additionally derives an **EPA NowCast AQI** value.
+
+The CO₂ reading is color-coded by severity (Good → Stuffy → Poor → Unsafe → Evacuate). See [Node Metrics — Air Quality](node-metrics#air-quality-metrics) for the exact ppm bands, colors, and AQI detail.
Air quality data can be viewed as info cards on the node detail screen, charted over time, and exported to CSV.
diff --git a/docs/sk-rSK/user/translate.md b/docs/sk-rSK/user/translate.md
index 25aa4693c..70c966fed 100644
--- a/docs/sk-rSK/user/translate.md
+++ b/docs/sk-rSK/user/translate.md
@@ -18,11 +18,11 @@ Contributing translations helps make Meshtastic accessible to a wider audience.
## What Gets Translated
-| Resource | Source Location | Notes |
-| ----------------- | ------------------------------------- | ---------------------------------------------------------------------- |
-| UI strings | `composeResources/values/strings.xml` | Buttons, labels, messages, and all user-visible text |
-| User Guide pages | `docs/user/*.md` | In-app documentation shown in Help & Documentation |
-| Fastlane metadata | `fastlane/metadata/android/en-US/` | App Store listing title, description, and changelogs |
+| Resource | Source Location | Notes |
+| ----------------- | ------------------------------------------------------------------- | ---------------------------------------------------------------------- |
+| UI strings | `core/resources/src/commonMain/composeResources/values/strings.xml` | Buttons, labels, messages, and all user-visible text |
+| User Guide pages | `docs/en/user/*.md` | In-app documentation shown in Help & Documentation |
+| Fastlane metadata | `fastlane/metadata/android/en-US/` | App Store listing title, description, and changelogs |
> ⚠️ **Note:** Developer Guide pages are English-only. Code-focused documentation targeting contributors is not translated.
diff --git a/docs/sk-rSK/user/units-and-locale.md b/docs/sk-rSK/user/units-and-locale.md
index 94844ce03..d07bb5081 100644
--- a/docs/sk-rSK/user/units-and-locale.md
+++ b/docs/sk-rSK/user/units-and-locale.md
@@ -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 uses the `MetricFormatter` utility to convert and display values in whatever unit system your device's locale specifies.
+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.
On Android, your measurement preferences are determined by your system **Language & Region** settings. On Desktop (JVM), the app uses the JVM's default `Locale`.
@@ -115,12 +115,13 @@ On Android, your measurement system (metric vs imperial) is tied to your region
2. Change your **Region** or **Measurement units** preference
3. Return to Meshtastic — values update immediately
-> 💡 **Tip:** The app uses `MetricFormatter` from `core:common`. All measurement formatting is handled by a shared KMP utility that respects your platform's locale. Developers adding new measurement displays should use `MetricFormatter` rather than hard-coding unit conversions.
+> 💡 **Tip:** All measurement formatting is handled centrally and respects your platform's locale, so units stay consistent everywhere in the app.
## Related Topics
- [Node Metrics](node-metrics) — where temperature, distance, and sensor values are displayed
- [Telemetry & Sensors](telemetry-and-sensors) — the sensors that produce these measurements
+- [Measurement & Formatting](../developer/measurement) — developer reference for the formatting utilities
- [Settings — Radio & User](settings-radio-user) — region setting that drives unit selection
---
diff --git a/docs/sl-rSI/user/android-auto.md b/docs/sl-rSI/user/android-auto.md
index aeb53435d..b9ec6a2af 100644
--- a/docs/sl-rSI/user/android-auto.md
+++ b/docs/sl-rSI/user/android-auto.md
@@ -2,7 +2,7 @@
title: Android Auto
parent: User Guide
nav_order: 18
-last_updated: 2026-06-11
+last_updated: 2026-07-07
description: Use Meshtastic hands-free on an Android Auto head unit — read messages aloud, reply by voice, and check nodes and mesh status while driving.
aliases:
- android-auto
@@ -17,9 +17,11 @@ Meshtastic integrates with Android Auto so you can stay in touch with your mesh
> ⚠️ **Note:** Android Auto support is available on **Google-flavor Android builds only**. It is not included in the F-Droid build, and it is not available on Desktop or iOS.
+> ℹ️ **What ships today:** The Google Play build provides **notification-only** car messaging — incoming messages are announced on the head unit and you reply through its notification controls. The full tabbed **Messages / Nodes / Status** experience described below is a beta built on the Android Car App Library (Google's templated car UI is currently restricted to Closed/Internal Play tracks), so it appears only in builds compiled with `-PenableCarTemplates=true`. The rest of this page documents that beta experience.
+
## Overview
-When your phone is connected to an Android Auto head unit (or the Desktop Head Unit emulator used for development), Meshtastic appears as a messaging app built with the Android Car App Library. The car interface presents a tabbed Home screen optimized for driving-safe, glanceable use:
+When your phone is connected to an Android Auto head unit (or the Desktop Head Unit emulator used for development), the beta build presents Meshtastic as a messaging app built with the Android Car App Library, with a tabbed Home screen optimized for driving-safe, glanceable use:
- **Messages** — recent conversations, with hands-free reading and replies.
- **Nodes** — the mesh node list, with a node-detail view.
diff --git a/docs/sl-rSI/user/connections.md b/docs/sl-rSI/user/connections.md
index 617cedc3c..67d147f20 100644
--- a/docs/sl-rSI/user/connections.md
+++ b/docs/sl-rSI/user/connections.md
@@ -23,7 +23,7 @@ Bluetooth Low Energy is the default and most common connection method on Android
1. Ensure your Meshtastic radio is powered on and in pairing mode.
2. Open the app and navigate to the **Connect** tab.
-3. Tap **Scan for Devices** — nearby Meshtastic radios will appear.
+3. Tap **Scan for Bluetooth devices** — nearby Meshtastic radios will appear.
4. Select your device from the list.
5. Accept the Bluetooth pairing prompt if shown.
diff --git a/docs/sl-rSI/user/desktop.md b/docs/sl-rSI/user/desktop.md
index e69b44554..2ac96feda 100644
--- a/docs/sl-rSI/user/desktop.md
+++ b/docs/sl-rSI/user/desktop.md
@@ -2,7 +2,7 @@
title: Desktop App
parent: User Guide
nav_order: 14
-last_updated: 2026-06-11
+last_updated: 2026-07-07
description: Install and use the Meshtastic Desktop app on Linux, macOS, and Windows — connections, feature parity, and keyboard shortcuts.
aliases:
- desktop
@@ -60,19 +60,19 @@ Bluetooth Low Energy is supported on Desktop via the [Kable](https://github.com/
## Feature Parity
-| Feature | Android | Desktop | Notes |
-| -------------------------------------------- | ------- | ------- | ---------------------------------------------- |
-| Messaging | ✓ | ✓ | Full parity |
-| Node List | ✓ | ✓ | Full parity |
-| Map | ✓ | ✓ | Full parity |
-| Settings | ✓ | ✓ | Full parity |
-| Bluetooth (BLE) | ✓ | ✓ | Via Kable on desktop |
-| Firmware Update OTA | ✓ | ✗ | Use web flasher |
-| Notifications | ✓ | ✓ | Native OS notifications |
-| Widgets | ✓ | ✗ | Android-only |
-| Android Auto | ✓ | ✗ | Android-only — not available on Desktop or iOS |
-| AI Assistant (Chirpy) | ✓\* | ✗ | Google flavor Android only |
-| App Functions (system AI) | ✓† | ✗ | Google flavor Android only |
+| Feature | Android | Desktop | Notes |
+| -------------------------------------------- | ------- | ------- | -------------------------------------------------------------------------- |
+| Messaging | ✓ | ✓ | Full parity |
+| Node List | ✓ | ✓ | Full parity |
+| 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 |
+| Notifications | ✓ | ✓ | Native OS notifications |
+| Widgets | ✓ | ✗ | Android-only |
+| Android Auto | ✓ | ✗ | Android-only — not available on Desktop or iOS |
+| AI Assistant (Chirpy) | ✓\* | ✗ | Google flavor Android only |
+| App Functions (system AI) | ✓† | ✗ | Google flavor Android only |
\*Chirpy AI requires Android 14+ on Google flavor builds with supported hardware.
@@ -84,14 +84,17 @@ The Desktop app uses the same Compose Multiplatform UI with adaptations for larg
### Keyboard Shortcuts
-| Shortcut | Action |
-| ------------------- | ---------------------- |
-| **⌘Q** / **Ctrl+Q** | Quit the application |
-| **⌘,** / **Ctrl+,** | Open Settings |
-| **⌘1** / **Ctrl+1** | Switch to Messages tab |
-| **⌘2** / **Ctrl+2** | Switch to Nodes tab |
-| **⌘3** / **Ctrl+3** | Switch to Map tab |
-| **⌘4** / **Ctrl+4** | Switch to Connect tab |
+All shortcuts use the **Meta** key — that's ⌘ (Command) on macOS and the Super / Windows key on Linux and Windows. (`Ctrl` is not bound.)
+
+| Shortcut | Action |
+| ---------- | ---------------------- |
+| **Meta+Q** | Quit the application |
+| **Meta+,** | Open Settings |
+| **Meta+1** | Switch to Messages tab |
+| **Meta+2** | Switch to Nodes tab |
+| **Meta+3** | Switch to Map tab |
+| **Meta+4** | Switch to Connect tab |
+| **Meta+/** | Open About |
### Window & System Tray
@@ -123,7 +126,6 @@ Individual doc pages render with full formatting:
```bash
git clone https://github.com/meshtastic/Meshtastic-Android.git
cd Meshtastic-Android
-git submodule update --init
./gradlew :desktopApp:run
```
@@ -134,7 +136,8 @@ Requirements:
## Known Limitations
-- No OTA firmware updates (use web flasher)
+- 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
- BLE bonding is not yet supported on desktop (pairing works without bonding)
@@ -142,7 +145,7 @@ Requirements:
## Related Topics
- [Connections](connections) — connection methods overview
-- [Firmware Updates](firmware) — use the [Web Flasher](https://flasher.meshtastic.org) for desktop firmware updates
+- [Firmware Updates](firmware) — in-app USB update on desktop, or the [Web Flasher](https://flasher.meshtastic.org)
---
diff --git a/docs/sl-rSI/user/discovery.md b/docs/sl-rSI/user/discovery.md
index 025717517..1d59e236c 100644
--- a/docs/sl-rSI/user/discovery.md
+++ b/docs/sl-rSI/user/discovery.md
@@ -44,7 +44,6 @@ Before starting, configure these controls:
The **Start** button stays disabled — with an explanation of why — until the scan can run. Common reasons it's disabled:
- The device is **not connected**.
-- The current channel is using the **default channel key** (use a unique key first — see [Messages & Channels](messages-and-channels)).
- **No presets** have been selected to scan.
- The selected preset uses **2.4 GHz**, which your hardware doesn't support.
diff --git a/docs/sl-rSI/user/firmware.md b/docs/sl-rSI/user/firmware.md
index 6c09a08a8..25510bfed 100644
--- a/docs/sl-rSI/user/firmware.md
+++ b/docs/sl-rSI/user/firmware.md
@@ -2,8 +2,8 @@
title: Firmware Updates
parent: User Guide
nav_order: 13
-last_updated: 2026-05-13
-description: Update your radio firmware over Bluetooth — OTA process, version channels, pre-flight checks, and recovery.
+last_updated: 2026-07-07
+description: Update your radio firmware over Bluetooth or USB — OTA process, version channels, pre-flight checks, and recovery.
aliases:
- firmware
- update
@@ -17,7 +17,7 @@ Keep your Meshtastic radio up to date with the latest firmware for new features,
## Checking for Updates
-1. Navigate to **Settings → Firmware Update** or tap the firmware notification if shown.
+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.
2. The app checks for available firmware versions.
3. Available updates show the version number and changelog summary.
@@ -39,19 +39,26 @@ The most common update method for Android users:

-### USB Flashing
+### In-App USB Update
-For recovery or when OTA is unavailable:
+When your radio is connected over **USB/serial** (rather than Bluetooth), the Firmware Update screen offers **USB File Transfer**. The app reboots the device into DFU mode, then prompts you to save the `.uf2` file to the device's DFU drive using the system file picker. This option appears only on a USB/serial connection — it is not available over Bluetooth.
+
+> ℹ️ **nRF bootloader note:** Some devices (e.g. RAK WisBlock RAK4631) need their bootloader flashed with the vendor's serial DFU tool (such as `adafruit-nrfutil`) — copying the `.uf2` alone won't update the bootloader. The app surfaces a hint when this applies.
+
+### Other Flashing Options
+
+For recovery or when neither OTA nor in-app USB is available:
- Use the [Meshtastic Web Flasher](https://flasher.meshtastic.org)
- Or the [Meshtastic CLI tool](https://meshtastic.org/docs/getting-started/flashing-firmware) on desktop
## Version Channels
-| Kanal | Opis |
-| ------ | ------------------------------------------- |
-| Stable | Recommended for most users; tested releases |
-| Alpha | Preview releases; may contain bugs |
+| Kanal | Opis |
+| ---------- | -------------------------------------------------------------------------- |
+| Stable | Recommended for most users; tested releases |
+| Alpha | Preview releases; may contain bugs |
+| Local File | Flash a firmware file you select yourself, instead of a downloaded release |
## Pre-Update Checklist
@@ -73,7 +80,7 @@ Once the update succeeds:
- The radio will reboot automatically
- Bluetooth connection will re-establish
- Verify your settings are intact
-- Check the firmware version in **Settings → About**
+- Confirm the new version under **Currently Installed** on the Firmware Update screen — it's also shown on the node's detail page and the Connections screen

diff --git a/docs/sl-rSI/user/messages-and-channels.md b/docs/sl-rSI/user/messages-and-channels.md
index b2136f925..590f0bf37 100644
--- a/docs/sl-rSI/user/messages-and-channels.md
+++ b/docs/sl-rSI/user/messages-and-channels.md
@@ -116,12 +116,16 @@ You can search the full history of any conversation directly from the chat scree

-> 💡 **Tip:** Search is full-text and stays within the conversation you opened it from — it doesn't search across other channels or contacts. Matching is fast even on long histories because messages are indexed locally.
+> 💡 **Tip:** Search is full-text and stays within the conversation you opened it from — it doesn't search across other channels or contacts. It matches against the messages already stored on your device, so it works fully offline.
### Message Bubbles
Messages appear as chat bubbles — sent messages on the right, received messages on the left. Each bubble shows the sender, timestamp, and delivery status. Messages with replies include a quoted preview of the original message above the response.
+### Mentions
+
+Type `@` while composing to mention a node — a picker suggests matching contacts as you type. In a received message, a mention appears as a highlighted chip showing the node's name; tap it to jump straight to that node's detail page.
+
### Reactions
React to messages with emoji:
@@ -143,6 +147,7 @@ Long-press any message to access:
- **Copy** — copy message text to clipboard
- **Reply** — quote the message in your response
- **React** — add an emoji reaction
+- **Translate** — translate a received message into your device language and toggle between the original and translated text (Google Play build only; uses on-device translation)
- **Delete** — remove a message you sent (local deletion)
### Message Priority
diff --git a/docs/sl-rSI/user/mqtt.md b/docs/sl-rSI/user/mqtt.md
index 1cd37cd83..a70e64994 100644
--- a/docs/sl-rSI/user/mqtt.md
+++ b/docs/sl-rSI/user/mqtt.md
@@ -56,6 +56,8 @@ A gateway node with internet access (WiFi or Ethernet) publishes mesh messages t
The community maintains a public broker at `mqtt.meshtastic.org`. This is intended for general use and testing.
+> ℹ️ **Note:** Connections to `mqtt.meshtastic.org` always use TLS (port 8883), even if the TLS toggle is off. For any other broker, TLS is used only when you enable it (port 8883 with TLS, 1883 without).
+
> 🔒 **Privacy:** Messages on the public broker are readable by anyone subscribed. Always use channel encryption for private communications.
### Private Broker
diff --git a/docs/sl-rSI/user/node-metrics.md b/docs/sl-rSI/user/node-metrics.md
index 4f8b55feb..99e152161 100644
--- a/docs/sl-rSI/user/node-metrics.md
+++ b/docs/sl-rSI/user/node-metrics.md
@@ -55,12 +55,15 @@ The BME680 **IAQ (Indoor Air Quality)** index is a single 0–500+ value derived
Air Quality is a dedicated metrics view for nodes equipped with a particulate-matter and/or CO₂ sensor. It is **separate from the BME680 IAQ reading** listed under Environment Metrics — IAQ is a single gas-resistance-derived index, while the Air Quality view charts the underlying particulate and CO₂ measurements.
-| Metric | Unit | Opis |
-| --------------------- | ----- | ---------------------------------------------------- |
-| PM1.0 | µg/m³ | Particulate matter up to 1.0 micron |
-| PM2.5 | µg/m³ | Particulate matter up to 2.5 microns |
-| PM10 | µg/m³ | Particulate matter up to 10 microns |
-| CO₂ | ppm | Carbon dioxide concentration |
+| Metric | Unit | Opis |
+| --------------------- | --------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| PM1.0 | µg/m³ | Particulate matter up to 1.0 micron |
+| PM2.5 | µg/m³ | Particulate matter up to 2.5 microns |
+| PM10 | µg/m³ | Particulate matter up to 10 microns |
+| AQI | EPA index | EPA **NowCast** AQI computed from your recent PM2.5 history, with a color-coded severity label. Shown next to PM2.5 once enough readings have accumulated. |
+| CO₂ | ppm | Carbon dioxide concentration |
+| CO₂ temperature | °C / °F | Temperature reported by the CO₂ sensor itself (e.g. SCD4x) |
+| CO₂ humidity | % | Relative humidity reported by the CO₂ sensor |
CO₂ readings are color-coded by severity to make air quality easy to read at a glance:
@@ -98,12 +101,12 @@ Radio signal quality information:
Signal quality is rated from **SNR relative to the active LoRa modem preset's demodulation floor**, not from fixed thresholds — a given SNR means different things on different presets (e.g. −15 dB is fine on LongSlow but unusable on ShortFast). RSSI is shown but is not part of the rating. Letting `limit` be the preset's SNR limit:
-| Quality | Criteria |
-| --------- | ------------------------------------------------ |
-| Dober | SNR above the preset's limit |
-| Precejšen | within 5.5 dB below the limit |
-| Slab | within 7.5 dB below the limit |
-| Brez | more than 7.5 dB below the limit |
+| Quality | Criteria |
+| --------- | ------------------------------------------------------------------------- |
+| Dober | SNR above the preset's limit |
+| Precejšen | up to 5.5 dB below the limit |
+| Slab | between 5.5 dB and 7.5 dB below the limit |
+| Brez | more than 7.5 dB below the limit |
See [Understanding the Signal Meter](signal-meter) for the full explanation.
diff --git a/docs/sl-rSI/user/settings-radio-user.md b/docs/sl-rSI/user/settings-radio-user.md
index a24ca63e4..001771020 100644
--- a/docs/sl-rSI/user/settings-radio-user.md
+++ b/docs/sl-rSI/user/settings-radio-user.md
@@ -74,6 +74,8 @@ After modifying settings, tap **Save** to write the configuration to your radio.
| ~~Long Slow~~ | ~30 km | 0.18 kbps | −17.5 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.
+
#### Choosing a Modem Preset
The modem preset controls the fundamental tradeoff between **range** and **data rate**:
diff --git a/docs/sl-rSI/user/signal-meter.md b/docs/sl-rSI/user/signal-meter.md
index f92a4303a..6de6f7af5 100644
--- a/docs/sl-rSI/user/signal-meter.md
+++ b/docs/sl-rSI/user/signal-meter.md
@@ -52,12 +52,12 @@ The app rates your signal quality (None, Bad, Fair, or Good) from **SNR alone, m
Because the rating is relative to the preset limit, the _same_ SNR can rate differently on different presets — `-15 dB` is healthy on `LongSlow` but unusable on `ShortFast`. Letting `limit` be the active preset's SNR Limit, here is how the app picks the bars (or color):
-| Level | Bars | Criteria | Meaning |
-| --------- | ---- | ------------------------------------ | ---------------------------------------------------------------------------------------- |
-| Dober | 3 | SNR **above** the preset's `limit` | Signal is comfortably above the demodulation floor — healthy connection. |
-| Precejšen | 2 | within `5.5 dB` below the `limit` | Decodable, but getting close to the floor. |
-| Slab | 1 | within `7.5 dB` below the `limit` | At the very edge of what the preset can recover. |
-| Brez | 0 | more than `7.5 dB` below the `limit` | Below the floor — transmission lost to noise. |
+| Level | Bars | Criteria | Meaning |
+| --------- | ---- | ----------------------------------------------- | ---------------------------------------------------------------------------------------- |
+| Dober | 3 | SNR **above** the preset's `limit` | Signal is comfortably above the demodulation floor — healthy connection. |
+| Precejšen | 2 | up to `5.5 dB` below the `limit` | Decodable, but getting close to the floor. |
+| Slab | 1 | between `5.5 dB` and `7.5 dB` below the `limit` | At the very edge of what the preset can recover. |
+| Brez | 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.
diff --git a/docs/sl-rSI/user/telemetry-and-sensors.md b/docs/sl-rSI/user/telemetry-and-sensors.md
index 3e19018a7..a123968a4 100644
--- a/docs/sl-rSI/user/telemetry-and-sensors.md
+++ b/docs/sl-rSI/user/telemetry-and-sensors.md
@@ -103,7 +103,9 @@ Nodes with particulate matter or CO₂ sensors report air quality data:
| PM10 | µg/m³ | Coarse particulate matter |
| CO₂ | ppm | Carbon dioxide concentration |
-The CO₂ reading is color-coded by severity (Good → Stuffy → Poor → Unsafe → Evacuate). See [Node Metrics — Air Quality](node-metrics#air-quality-metrics) for the exact ppm bands and colors.
+CO₂ sensors such as the SCD4x also report their own temperature and humidity, which appear alongside the readings above. From PM2.5 history the app additionally derives an **EPA NowCast AQI** value.
+
+The CO₂ reading is color-coded by severity (Good → Stuffy → Poor → Unsafe → Evacuate). See [Node Metrics — Air Quality](node-metrics#air-quality-metrics) for the exact ppm bands, colors, and AQI detail.
Air quality data can be viewed as info cards on the node detail screen, charted over time, and exported to CSV.
diff --git a/docs/sl-rSI/user/translate.md b/docs/sl-rSI/user/translate.md
index 25aa4693c..70c966fed 100644
--- a/docs/sl-rSI/user/translate.md
+++ b/docs/sl-rSI/user/translate.md
@@ -18,11 +18,11 @@ Contributing translations helps make Meshtastic accessible to a wider audience.
## What Gets Translated
-| Resource | Source Location | Notes |
-| ----------------- | ------------------------------------- | ---------------------------------------------------------------------- |
-| UI strings | `composeResources/values/strings.xml` | Buttons, labels, messages, and all user-visible text |
-| User Guide pages | `docs/user/*.md` | In-app documentation shown in Help & Documentation |
-| Fastlane metadata | `fastlane/metadata/android/en-US/` | App Store listing title, description, and changelogs |
+| Resource | Source Location | Notes |
+| ----------------- | ------------------------------------------------------------------- | ---------------------------------------------------------------------- |
+| UI strings | `core/resources/src/commonMain/composeResources/values/strings.xml` | Buttons, labels, messages, and all user-visible text |
+| User Guide pages | `docs/en/user/*.md` | In-app documentation shown in Help & Documentation |
+| Fastlane metadata | `fastlane/metadata/android/en-US/` | App Store listing title, description, and changelogs |
> ⚠️ **Note:** Developer Guide pages are English-only. Code-focused documentation targeting contributors is not translated.
diff --git a/docs/sl-rSI/user/units-and-locale.md b/docs/sl-rSI/user/units-and-locale.md
index 7857a915c..60d26011a 100644
--- a/docs/sl-rSI/user/units-and-locale.md
+++ b/docs/sl-rSI/user/units-and-locale.md
@@ -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 uses the `MetricFormatter` utility to convert and display values in whatever unit system your device's locale specifies.
+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.
On Android, your measurement preferences are determined by your system **Language & Region** settings. On Desktop (JVM), the app uses the JVM's default `Locale`.
@@ -115,12 +115,13 @@ On Android, your measurement system (metric vs imperial) is tied to your region
2. Change your **Region** or **Measurement units** preference
3. Return to Meshtastic — values update immediately
-> 💡 **Tip:** The app uses `MetricFormatter` from `core:common`. All measurement formatting is handled by a shared KMP utility that respects your platform's locale. Developers adding new measurement displays should use `MetricFormatter` rather than hard-coding unit conversions.
+> 💡 **Tip:** All measurement formatting is handled centrally and respects your platform's locale, so units stay consistent everywhere in the app.
## Related Topics
- [Node Metrics](node-metrics) — where temperature, distance, and sensor values are displayed
- [Telemetry & Sensors](telemetry-and-sensors) — the sensors that produce these measurements
+- [Measurement & Formatting](../developer/measurement) — developer reference for the formatting utilities
- [Settings — Radio & User](settings-radio-user) — region setting that drives unit selection
---
diff --git a/docs/sq-rAL/user/android-auto.md b/docs/sq-rAL/user/android-auto.md
index c2e9aa1b8..b70ea7e6e 100644
--- a/docs/sq-rAL/user/android-auto.md
+++ b/docs/sq-rAL/user/android-auto.md
@@ -2,7 +2,7 @@
title: Android Auto
parent: User Guide
nav_order: 18
-last_updated: 2026-06-11
+last_updated: 2026-07-07
description: Use Meshtastic hands-free on an Android Auto head unit — read messages aloud, reply by voice, and check nodes and mesh status while driving.
aliases:
- android-auto
@@ -17,9 +17,11 @@ Meshtastic integrates with Android Auto so you can stay in touch with your mesh
> ⚠️ **Note:** Android Auto support is available on **Google-flavor Android builds only**. It is not included in the F-Droid build, and it is not available on Desktop or iOS.
+> ℹ️ **What ships today:** The Google Play build provides **notification-only** car messaging — incoming messages are announced on the head unit and you reply through its notification controls. The full tabbed **Messages / Nodes / Status** experience described below is a beta built on the Android Car App Library (Google's templated car UI is currently restricted to Closed/Internal Play tracks), so it appears only in builds compiled with `-PenableCarTemplates=true`. The rest of this page documents that beta experience.
+
## Overview
-When your phone is connected to an Android Auto head unit (or the Desktop Head Unit emulator used for development), Meshtastic appears as a messaging app built with the Android Car App Library. The car interface presents a tabbed Home screen optimized for driving-safe, glanceable use:
+When your phone is connected to an Android Auto head unit (or the Desktop Head Unit emulator used for development), the beta build presents Meshtastic as a messaging app built with the Android Car App Library, with a tabbed Home screen optimized for driving-safe, glanceable use:
- **Messages** — recent conversations, with hands-free reading and replies.
- **Nodes** — the mesh node list, with a node-detail view.
diff --git a/docs/sq-rAL/user/connections.md b/docs/sq-rAL/user/connections.md
index ed92790a3..9a861102a 100644
--- a/docs/sq-rAL/user/connections.md
+++ b/docs/sq-rAL/user/connections.md
@@ -23,7 +23,7 @@ Bluetooth Low Energy is the default and most common connection method on Android
1. Ensure your Meshtastic radio is powered on and in pairing mode.
2. Open the app and navigate to the **Connect** tab.
-3. Tap **Scan for Devices** — nearby Meshtastic radios will appear.
+3. Tap **Scan for Bluetooth devices** — nearby Meshtastic radios will appear.
4. Select your device from the list.
5. Accept the Bluetooth pairing prompt if shown.
diff --git a/docs/sq-rAL/user/desktop.md b/docs/sq-rAL/user/desktop.md
index e69b44554..2ac96feda 100644
--- a/docs/sq-rAL/user/desktop.md
+++ b/docs/sq-rAL/user/desktop.md
@@ -2,7 +2,7 @@
title: Desktop App
parent: User Guide
nav_order: 14
-last_updated: 2026-06-11
+last_updated: 2026-07-07
description: Install and use the Meshtastic Desktop app on Linux, macOS, and Windows — connections, feature parity, and keyboard shortcuts.
aliases:
- desktop
@@ -60,19 +60,19 @@ Bluetooth Low Energy is supported on Desktop via the [Kable](https://github.com/
## Feature Parity
-| Feature | Android | Desktop | Notes |
-| -------------------------------------------- | ------- | ------- | ---------------------------------------------- |
-| Messaging | ✓ | ✓ | Full parity |
-| Node List | ✓ | ✓ | Full parity |
-| Map | ✓ | ✓ | Full parity |
-| Settings | ✓ | ✓ | Full parity |
-| Bluetooth (BLE) | ✓ | ✓ | Via Kable on desktop |
-| Firmware Update OTA | ✓ | ✗ | Use web flasher |
-| Notifications | ✓ | ✓ | Native OS notifications |
-| Widgets | ✓ | ✗ | Android-only |
-| Android Auto | ✓ | ✗ | Android-only — not available on Desktop or iOS |
-| AI Assistant (Chirpy) | ✓\* | ✗ | Google flavor Android only |
-| App Functions (system AI) | ✓† | ✗ | Google flavor Android only |
+| Feature | Android | Desktop | Notes |
+| -------------------------------------------- | ------- | ------- | -------------------------------------------------------------------------- |
+| Messaging | ✓ | ✓ | Full parity |
+| Node List | ✓ | ✓ | Full parity |
+| 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 |
+| Notifications | ✓ | ✓ | Native OS notifications |
+| Widgets | ✓ | ✗ | Android-only |
+| Android Auto | ✓ | ✗ | Android-only — not available on Desktop or iOS |
+| AI Assistant (Chirpy) | ✓\* | ✗ | Google flavor Android only |
+| App Functions (system AI) | ✓† | ✗ | Google flavor Android only |
\*Chirpy AI requires Android 14+ on Google flavor builds with supported hardware.
@@ -84,14 +84,17 @@ The Desktop app uses the same Compose Multiplatform UI with adaptations for larg
### Keyboard Shortcuts
-| Shortcut | Action |
-| ------------------- | ---------------------- |
-| **⌘Q** / **Ctrl+Q** | Quit the application |
-| **⌘,** / **Ctrl+,** | Open Settings |
-| **⌘1** / **Ctrl+1** | Switch to Messages tab |
-| **⌘2** / **Ctrl+2** | Switch to Nodes tab |
-| **⌘3** / **Ctrl+3** | Switch to Map tab |
-| **⌘4** / **Ctrl+4** | Switch to Connect tab |
+All shortcuts use the **Meta** key — that's ⌘ (Command) on macOS and the Super / Windows key on Linux and Windows. (`Ctrl` is not bound.)
+
+| Shortcut | Action |
+| ---------- | ---------------------- |
+| **Meta+Q** | Quit the application |
+| **Meta+,** | Open Settings |
+| **Meta+1** | Switch to Messages tab |
+| **Meta+2** | Switch to Nodes tab |
+| **Meta+3** | Switch to Map tab |
+| **Meta+4** | Switch to Connect tab |
+| **Meta+/** | Open About |
### Window & System Tray
@@ -123,7 +126,6 @@ Individual doc pages render with full formatting:
```bash
git clone https://github.com/meshtastic/Meshtastic-Android.git
cd Meshtastic-Android
-git submodule update --init
./gradlew :desktopApp:run
```
@@ -134,7 +136,8 @@ Requirements:
## Known Limitations
-- No OTA firmware updates (use web flasher)
+- 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
- BLE bonding is not yet supported on desktop (pairing works without bonding)
@@ -142,7 +145,7 @@ Requirements:
## Related Topics
- [Connections](connections) — connection methods overview
-- [Firmware Updates](firmware) — use the [Web Flasher](https://flasher.meshtastic.org) for desktop firmware updates
+- [Firmware Updates](firmware) — in-app USB update on desktop, or the [Web Flasher](https://flasher.meshtastic.org)
---
diff --git a/docs/sq-rAL/user/discovery.md b/docs/sq-rAL/user/discovery.md
index bd19c10ac..7fad51d5a 100644
--- a/docs/sq-rAL/user/discovery.md
+++ b/docs/sq-rAL/user/discovery.md
@@ -44,7 +44,6 @@ Before starting, configure these controls:
The **Start** button stays disabled — with an explanation of why — until the scan can run. Common reasons it's disabled:
- The device is **not connected**.
-- The current channel is using the **default channel key** (use a unique key first — see [Messages & Channels](messages-and-channels)).
- **No presets** have been selected to scan.
- The selected preset uses **2.4 GHz**, which your hardware doesn't support.
diff --git a/docs/sq-rAL/user/firmware.md b/docs/sq-rAL/user/firmware.md
index 0e5883464..e55cea52e 100644
--- a/docs/sq-rAL/user/firmware.md
+++ b/docs/sq-rAL/user/firmware.md
@@ -2,8 +2,8 @@
title: Firmware Updates
parent: User Guide
nav_order: 13
-last_updated: 2026-05-13
-description: Update your radio firmware over Bluetooth — OTA process, version channels, pre-flight checks, and recovery.
+last_updated: 2026-07-07
+description: Update your radio firmware over Bluetooth or USB — OTA process, version channels, pre-flight checks, and recovery.
aliases:
- firmware
- update
@@ -17,7 +17,7 @@ Keep your Meshtastic radio up to date with the latest firmware for new features,
## Checking for Updates
-1. Navigate to **Settings → Firmware Update** or tap the firmware notification if shown.
+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.
2. The app checks for available firmware versions.
3. Available updates show the version number and changelog summary.
@@ -39,19 +39,26 @@ The most common update method for Android users:

-### USB Flashing
+### In-App USB Update
-For recovery or when OTA is unavailable:
+When your radio is connected over **USB/serial** (rather than Bluetooth), the Firmware Update screen offers **USB File Transfer**. The app reboots the device into DFU mode, then prompts you to save the `.uf2` file to the device's DFU drive using the system file picker. This option appears only on a USB/serial connection — it is not available over Bluetooth.
+
+> ℹ️ **nRF bootloader note:** Some devices (e.g. RAK WisBlock RAK4631) need their bootloader flashed with the vendor's serial DFU tool (such as `adafruit-nrfutil`) — copying the `.uf2` alone won't update the bootloader. The app surfaces a hint when this applies.
+
+### Other Flashing Options
+
+For recovery or when neither OTA nor in-app USB is available:
- Use the [Meshtastic Web Flasher](https://flasher.meshtastic.org)
- Or the [Meshtastic CLI tool](https://meshtastic.org/docs/getting-started/flashing-firmware) on desktop
## Version Channels
-| Kanal | Përshkrimi |
-| ------ | ------------------------------------------- |
-| Stable | Recommended for most users; tested releases |
-| Alpha | Preview releases; may contain bugs |
+| Kanal | Përshkrimi |
+| ---------- | -------------------------------------------------------------------------- |
+| Stable | Recommended for most users; tested releases |
+| Alpha | Preview releases; may contain bugs |
+| Local File | Flash a firmware file you select yourself, instead of a downloaded release |
## Pre-Update Checklist
@@ -73,7 +80,7 @@ Once the update succeeds:
- The radio will reboot automatically
- Bluetooth connection will re-establish
- Verify your settings are intact
-- Check the firmware version in **Settings → About**
+- Confirm the new version under **Currently Installed** on the Firmware Update screen — it's also shown on the node's detail page and the Connections screen

diff --git a/docs/sq-rAL/user/messages-and-channels.md b/docs/sq-rAL/user/messages-and-channels.md
index bd013352d..0e6aaa56f 100644
--- a/docs/sq-rAL/user/messages-and-channels.md
+++ b/docs/sq-rAL/user/messages-and-channels.md
@@ -116,12 +116,16 @@ You can search the full history of any conversation directly from the chat scree

-> 💡 **Tip:** Search is full-text and stays within the conversation you opened it from — it doesn't search across other channels or contacts. Matching is fast even on long histories because messages are indexed locally.
+> 💡 **Tip:** Search is full-text and stays within the conversation you opened it from — it doesn't search across other channels or contacts. It matches against the messages already stored on your device, so it works fully offline.
### Message Bubbles
Messages appear as chat bubbles — sent messages on the right, received messages on the left. Each bubble shows the sender, timestamp, and delivery status. Messages with replies include a quoted preview of the original message above the response.
+### Mentions
+
+Type `@` while composing to mention a node — a picker suggests matching contacts as you type. In a received message, a mention appears as a highlighted chip showing the node's name; tap it to jump straight to that node's detail page.
+
### Reactions
React to messages with emoji:
@@ -143,6 +147,7 @@ Long-press any message to access:
- **Copy** — copy message text to clipboard
- **Reply** — quote the message in your response
- **React** — add an emoji reaction
+- **Translate** — translate a received message into your device language and toggle between the original and translated text (Google Play build only; uses on-device translation)
- **Delete** — remove a message you sent (local deletion)
### Message Priority
diff --git a/docs/sq-rAL/user/mqtt.md b/docs/sq-rAL/user/mqtt.md
index ad9e604cf..a30bb9eb7 100644
--- a/docs/sq-rAL/user/mqtt.md
+++ b/docs/sq-rAL/user/mqtt.md
@@ -56,6 +56,8 @@ A gateway node with internet access (WiFi or Ethernet) publishes mesh messages t
The community maintains a public broker at `mqtt.meshtastic.org`. This is intended for general use and testing.
+> ℹ️ **Note:** Connections to `mqtt.meshtastic.org` always use TLS (port 8883), even if the TLS toggle is off. For any other broker, TLS is used only when you enable it (port 8883 with TLS, 1883 without).
+
> 🔒 **Privacy:** Messages on the public broker are readable by anyone subscribed. Always use channel encryption for private communications.
### Private Broker
diff --git a/docs/sq-rAL/user/node-metrics.md b/docs/sq-rAL/user/node-metrics.md
index ad30bf2a1..7d7662972 100644
--- a/docs/sq-rAL/user/node-metrics.md
+++ b/docs/sq-rAL/user/node-metrics.md
@@ -55,12 +55,15 @@ The BME680 **IAQ (Indoor Air Quality)** index is a single 0–500+ value derived
Air Quality is a dedicated metrics view for nodes equipped with a particulate-matter and/or CO₂ sensor. It is **separate from the BME680 IAQ reading** listed under Environment Metrics — IAQ is a single gas-resistance-derived index, while the Air Quality view charts the underlying particulate and CO₂ measurements.
-| Metric | Unit | Përshkrimi |
-| --------------------- | ----- | ---------------------------------------------------- |
-| PM1.0 | µg/m³ | Particulate matter up to 1.0 micron |
-| PM2.5 | µg/m³ | Particulate matter up to 2.5 microns |
-| PM10 | µg/m³ | Particulate matter up to 10 microns |
-| CO₂ | ppm | Carbon dioxide concentration |
+| Metric | Unit | Përshkrimi |
+| --------------------- | --------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| PM1.0 | µg/m³ | Particulate matter up to 1.0 micron |
+| PM2.5 | µg/m³ | Particulate matter up to 2.5 microns |
+| PM10 | µg/m³ | Particulate matter up to 10 microns |
+| AQI | EPA index | EPA **NowCast** AQI computed from your recent PM2.5 history, with a color-coded severity label. Shown next to PM2.5 once enough readings have accumulated. |
+| CO₂ | ppm | Carbon dioxide concentration |
+| CO₂ temperature | °C / °F | Temperature reported by the CO₂ sensor itself (e.g. SCD4x) |
+| CO₂ humidity | % | Relative humidity reported by the CO₂ sensor |
CO₂ readings are color-coded by severity to make air quality easy to read at a glance:
@@ -98,12 +101,12 @@ Radio signal quality information:
Signal quality is rated from **SNR relative to the active LoRa modem preset's demodulation floor**, not from fixed thresholds — a given SNR means different things on different presets (e.g. −15 dB is fine on LongSlow but unusable on ShortFast). RSSI is shown but is not part of the rating. Letting `limit` be the preset's SNR limit:
-| Quality | Criteria |
-| ------- | ------------------------------------------------ |
-| Mirë | SNR above the preset's limit |
-| Mesatar | within 5.5 dB below the limit |
-| I Keq | within 7.5 dB below the limit |
-| Asnjë | more than 7.5 dB below the limit |
+| Quality | Criteria |
+| ------- | ------------------------------------------------------------------------- |
+| Mirë | SNR above the preset's limit |
+| Mesatar | up to 5.5 dB below the limit |
+| I Keq | between 5.5 dB and 7.5 dB below the limit |
+| Asnjë | more than 7.5 dB below the limit |
See [Understanding the Signal Meter](signal-meter) for the full explanation.
diff --git a/docs/sq-rAL/user/settings-radio-user.md b/docs/sq-rAL/user/settings-radio-user.md
index 1374b3db4..494d822d7 100644
--- a/docs/sq-rAL/user/settings-radio-user.md
+++ b/docs/sq-rAL/user/settings-radio-user.md
@@ -74,6 +74,8 @@ After modifying settings, tap **Save** to write the configuration to your radio.
| ~~Long Slow~~ | ~30 km | 0.18 kbps | −17.5 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.
+
#### Choosing a Modem Preset
The modem preset controls the fundamental tradeoff between **range** and **data rate**:
diff --git a/docs/sq-rAL/user/signal-meter.md b/docs/sq-rAL/user/signal-meter.md
index 100d03d66..49bc41886 100644
--- a/docs/sq-rAL/user/signal-meter.md
+++ b/docs/sq-rAL/user/signal-meter.md
@@ -52,12 +52,12 @@ The app rates your signal quality (None, Bad, Fair, or Good) from **SNR alone, m
Because the rating is relative to the preset limit, the _same_ SNR can rate differently on different presets — `-15 dB` is healthy on `LongSlow` but unusable on `ShortFast`. Letting `limit` be the active preset's SNR Limit, here is how the app picks the bars (or color):
-| Level | Bars | Criteria | Meaning |
-| ------- | ---- | ------------------------------------ | ---------------------------------------------------------------------------------------- |
-| Mirë | 3 | SNR **above** the preset's `limit` | Signal is comfortably above the demodulation floor — healthy connection. |
-| Mesatar | 2 | within `5.5 dB` below the `limit` | Decodable, but getting close to the floor. |
-| I Keq | 1 | within `7.5 dB` below the `limit` | At the very edge of what the preset can recover. |
-| Asnjë | 0 | more than `7.5 dB` below the `limit` | Below the floor — transmission lost to noise. |
+| Level | Bars | Criteria | Meaning |
+| ------- | ---- | ----------------------------------------------- | ---------------------------------------------------------------------------------------- |
+| Mirë | 3 | SNR **above** the preset's `limit` | Signal is comfortably above the demodulation floor — healthy connection. |
+| Mesatar | 2 | up to `5.5 dB` below the `limit` | Decodable, but getting close to the floor. |
+| I Keq | 1 | between `5.5 dB` and `7.5 dB` below the `limit` | At the very edge of what the preset can recover. |
+| Asnjë | 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.
diff --git a/docs/sq-rAL/user/telemetry-and-sensors.md b/docs/sq-rAL/user/telemetry-and-sensors.md
index 258e3cefc..8c3570e90 100644
--- a/docs/sq-rAL/user/telemetry-and-sensors.md
+++ b/docs/sq-rAL/user/telemetry-and-sensors.md
@@ -103,7 +103,9 @@ Nodes with particulate matter or CO₂ sensors report air quality data:
| PM10 | µg/m³ | Coarse particulate matter |
| CO₂ | ppm | Carbon dioxide concentration |
-The CO₂ reading is color-coded by severity (Good → Stuffy → Poor → Unsafe → Evacuate). See [Node Metrics — Air Quality](node-metrics#air-quality-metrics) for the exact ppm bands and colors.
+CO₂ sensors such as the SCD4x also report their own temperature and humidity, which appear alongside the readings above. From PM2.5 history the app additionally derives an **EPA NowCast AQI** value.
+
+The CO₂ reading is color-coded by severity (Good → Stuffy → Poor → Unsafe → Evacuate). See [Node Metrics — Air Quality](node-metrics#air-quality-metrics) for the exact ppm bands, colors, and AQI detail.
Air quality data can be viewed as info cards on the node detail screen, charted over time, and exported to CSV.
diff --git a/docs/sq-rAL/user/translate.md b/docs/sq-rAL/user/translate.md
index 25aa4693c..70c966fed 100644
--- a/docs/sq-rAL/user/translate.md
+++ b/docs/sq-rAL/user/translate.md
@@ -18,11 +18,11 @@ Contributing translations helps make Meshtastic accessible to a wider audience.
## What Gets Translated
-| Resource | Source Location | Notes |
-| ----------------- | ------------------------------------- | ---------------------------------------------------------------------- |
-| UI strings | `composeResources/values/strings.xml` | Buttons, labels, messages, and all user-visible text |
-| User Guide pages | `docs/user/*.md` | In-app documentation shown in Help & Documentation |
-| Fastlane metadata | `fastlane/metadata/android/en-US/` | App Store listing title, description, and changelogs |
+| Resource | Source Location | Notes |
+| ----------------- | ------------------------------------------------------------------- | ---------------------------------------------------------------------- |
+| UI strings | `core/resources/src/commonMain/composeResources/values/strings.xml` | Buttons, labels, messages, and all user-visible text |
+| User Guide pages | `docs/en/user/*.md` | In-app documentation shown in Help & Documentation |
+| Fastlane metadata | `fastlane/metadata/android/en-US/` | App Store listing title, description, and changelogs |
> ⚠️ **Note:** Developer Guide pages are English-only. Code-focused documentation targeting contributors is not translated.
diff --git a/docs/sq-rAL/user/units-and-locale.md b/docs/sq-rAL/user/units-and-locale.md
index 7857a915c..60d26011a 100644
--- a/docs/sq-rAL/user/units-and-locale.md
+++ b/docs/sq-rAL/user/units-and-locale.md
@@ -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 uses the `MetricFormatter` utility to convert and display values in whatever unit system your device's locale specifies.
+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.
On Android, your measurement preferences are determined by your system **Language & Region** settings. On Desktop (JVM), the app uses the JVM's default `Locale`.
@@ -115,12 +115,13 @@ On Android, your measurement system (metric vs imperial) is tied to your region
2. Change your **Region** or **Measurement units** preference
3. Return to Meshtastic — values update immediately
-> 💡 **Tip:** The app uses `MetricFormatter` from `core:common`. All measurement formatting is handled by a shared KMP utility that respects your platform's locale. Developers adding new measurement displays should use `MetricFormatter` rather than hard-coding unit conversions.
+> 💡 **Tip:** All measurement formatting is handled centrally and respects your platform's locale, so units stay consistent everywhere in the app.
## Related Topics
- [Node Metrics](node-metrics) — where temperature, distance, and sensor values are displayed
- [Telemetry & Sensors](telemetry-and-sensors) — the sensors that produce these measurements
+- [Measurement & Formatting](../developer/measurement) — developer reference for the formatting utilities
- [Settings — Radio & User](settings-radio-user) — region setting that drives unit selection
---
diff --git a/docs/sr-rLatn/user/android-auto.md b/docs/sr-rLatn/user/android-auto.md
index 19fdfefe9..6afa92ad6 100644
--- a/docs/sr-rLatn/user/android-auto.md
+++ b/docs/sr-rLatn/user/android-auto.md
@@ -2,7 +2,7 @@
title: Android Auto
parent: User Guide
nav_order: 18
-last_updated: 2026-06-11
+last_updated: 2026-07-07
description: Use Meshtastic hands-free on an Android Auto head unit — read messages aloud, reply by voice, and check nodes and mesh status while driving.
aliases:
- android-auto
@@ -17,9 +17,11 @@ Meshtastic integrates with Android Auto so you can stay in touch with your mesh
> ⚠️ **Note:** Android Auto support is available on **Google-flavor Android builds only**. It is not included in the F-Droid build, and it is not available on Desktop or iOS.
+> ℹ️ **What ships today:** The Google Play build provides **notification-only** car messaging — incoming messages are announced on the head unit and you reply through its notification controls. The full tabbed **Messages / Nodes / Status** experience described below is a beta built on the Android Car App Library (Google's templated car UI is currently restricted to Closed/Internal Play tracks), so it appears only in builds compiled with `-PenableCarTemplates=true`. The rest of this page documents that beta experience.
+
## Overview
-When your phone is connected to an Android Auto head unit (or the Desktop Head Unit emulator used for development), Meshtastic appears as a messaging app built with the Android Car App Library. The car interface presents a tabbed Home screen optimized for driving-safe, glanceable use:
+When your phone is connected to an Android Auto head unit (or the Desktop Head Unit emulator used for development), the beta build presents Meshtastic as a messaging app built with the Android Car App Library, with a tabbed Home screen optimized for driving-safe, glanceable use:
- **Messages** — recent conversations, with hands-free reading and replies.
- **Nodes** — the mesh node list, with a node-detail view.
diff --git a/docs/sr-rLatn/user/connections.md b/docs/sr-rLatn/user/connections.md
index dbf1eb903..f42eb2dd3 100644
--- a/docs/sr-rLatn/user/connections.md
+++ b/docs/sr-rLatn/user/connections.md
@@ -23,7 +23,7 @@ Bluetooth Low Energy is the default and most common connection method on Android
1. Ensure your Meshtastic radio is powered on and in pairing mode.
2. Open the app and navigate to the **Connect** tab.
-3. Tap **Scan for Devices** — nearby Meshtastic radios will appear.
+3. Tap **Scan for Bluetooth devices** — nearby Meshtastic radios will appear.
4. Select your device from the list.
5. Accept the Bluetooth pairing prompt if shown.
diff --git a/docs/sr-rLatn/user/desktop.md b/docs/sr-rLatn/user/desktop.md
index 8af92eb4b..f19d5f2da 100644
--- a/docs/sr-rLatn/user/desktop.md
+++ b/docs/sr-rLatn/user/desktop.md
@@ -2,7 +2,7 @@
title: Desktop App
parent: User Guide
nav_order: 14
-last_updated: 2026-06-11
+last_updated: 2026-07-07
description: Install and use the Meshtastic Desktop app on Linux, macOS, and Windows — connections, feature parity, and keyboard shortcuts.
aliases:
- desktop
@@ -60,19 +60,19 @@ Bluetooth Low Energy is supported on Desktop via the [Kable](https://github.com/
## Feature Parity
-| Feature | Android | Desktop | Белешке |
-| -------------------------------------------- | ------- | ------- | ---------------------------------------------- |
-| Messaging | ✓ | ✓ | Full parity |
-| Node List | ✓ | ✓ | Full parity |
-| Мапа | ✓ | ✓ | Full parity |
-| Подешавања | ✓ | ✓ | Full parity |
-| Bluetooth (BLE) | ✓ | ✓ | Via Kable on desktop |
-| Firmware Update OTA | ✓ | ✗ | Use web flasher |
-| Notifications | ✓ | ✓ | Native OS notifications |
-| Widgets | ✓ | ✗ | Android-only |
-| Android Auto | ✓ | ✗ | Android-only — not available on Desktop or iOS |
-| AI Assistant (Chirpy) | ✓\* | ✗ | Google flavor Android only |
-| App Functions (system AI) | ✓† | ✗ | Google flavor Android only |
+| Feature | Android | Desktop | Белешке |
+| -------------------------------------------- | ------- | ------- | -------------------------------------------------------------------------- |
+| Messaging | ✓ | ✓ | Full parity |
+| Node List | ✓ | ✓ | Full parity |
+| Мапа | ✓ | ◐ | Map tab exists on desktop, but the interactive map view is Android-only |
+| Подешавања | ✓ | ✓ | Full parity |
+| Bluetooth (BLE) | ✓ | ✓ | Via Kable on desktop |
+| Firmware Update | ✓ | ◐ | Desktop supports in-app USB firmware update; BLE/Wi-Fi OTA is Android-only |
+| Notifications | ✓ | ✓ | Native OS notifications |
+| Widgets | ✓ | ✗ | Android-only |
+| Android Auto | ✓ | ✗ | Android-only — not available on Desktop or iOS |
+| AI Assistant (Chirpy) | ✓\* | ✗ | Google flavor Android only |
+| App Functions (system AI) | ✓† | ✗ | Google flavor Android only |
\*Chirpy AI requires Android 14+ on Google flavor builds with supported hardware.
@@ -84,14 +84,17 @@ The Desktop app uses the same Compose Multiplatform UI with adaptations for larg
### Keyboard Shortcuts
-| Shortcut | Action |
-| ------------------- | ---------------------- |
-| **⌘Q** / **Ctrl+Q** | Quit the application |
-| **⌘,** / **Ctrl+,** | Отвори подешавања |
-| **⌘1** / **Ctrl+1** | Switch to Messages tab |
-| **⌘2** / **Ctrl+2** | Switch to Nodes tab |
-| **⌘3** / **Ctrl+3** | Switch to Map tab |
-| **⌘4** / **Ctrl+4** | Switch to Connect tab |
+All shortcuts use the **Meta** key — that's ⌘ (Command) on macOS and the Super / Windows key on Linux and Windows. (`Ctrl` is not bound.)
+
+| Shortcut | Action |
+| ---------- | ---------------------- |
+| **Meta+Q** | Quit the application |
+| **Meta+,** | Отвори подешавања |
+| **Meta+1** | Switch to Messages tab |
+| **Meta+2** | Switch to Nodes tab |
+| **Meta+3** | Switch to Map tab |
+| **Meta+4** | Switch to Connect tab |
+| **Meta+/** | Open About |
### Window & System Tray
@@ -123,7 +126,6 @@ Individual doc pages render with full formatting:
```bash
git clone https://github.com/meshtastic/Meshtastic-Android.git
cd Meshtastic-Android
-git submodule update --init
./gradlew :desktopApp:run
```
@@ -134,7 +136,8 @@ Requirements:
## Known Limitations
-- No OTA firmware updates (use web flasher)
+- 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
- BLE bonding is not yet supported on desktop (pairing works without bonding)
@@ -142,7 +145,7 @@ Requirements:
## Related Topics
- [Connections](connections) — connection methods overview
-- [Firmware Updates](firmware) — use the [Web Flasher](https://flasher.meshtastic.org) for desktop firmware updates
+- [Firmware Updates](firmware) — in-app USB update on desktop, or the [Web Flasher](https://flasher.meshtastic.org)
---
diff --git a/docs/sr-rLatn/user/discovery.md b/docs/sr-rLatn/user/discovery.md
index 8911fe79a..4575c396a 100644
--- a/docs/sr-rLatn/user/discovery.md
+++ b/docs/sr-rLatn/user/discovery.md
@@ -44,7 +44,6 @@ Before starting, configure these controls:
The **Start** button stays disabled — with an explanation of why — until the scan can run. Common reasons it's disabled:
- The device is **not connected**.
-- The current channel is using the **default channel key** (use a unique key first — see [Messages & Channels](messages-and-channels)).
- **No presets** have been selected to scan.
- The selected preset uses **2.4 GHz**, which your hardware doesn't support.
diff --git a/docs/sr-rLatn/user/firmware.md b/docs/sr-rLatn/user/firmware.md
index 1b3346291..403842837 100644
--- a/docs/sr-rLatn/user/firmware.md
+++ b/docs/sr-rLatn/user/firmware.md
@@ -2,8 +2,8 @@
title: Ажурирања фирмвера
parent: User Guide
nav_order: 13
-last_updated: 2026-05-13
-description: Update your radio firmware over Bluetooth — OTA process, version channels, pre-flight checks, and recovery.
+last_updated: 2026-07-07
+description: Update your radio firmware over Bluetooth or USB — OTA process, version channels, pre-flight checks, and recovery.
aliases:
- firmware
- update
@@ -17,7 +17,7 @@ Keep your Meshtastic radio up to date with the latest firmware for new features,
## Checking for Updates
-1. Navigate to **Settings → Firmware Update** or tap the firmware notification if shown.
+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.
2. The app checks for available firmware versions.
3. Available updates show the version number and changelog summary.
@@ -39,19 +39,26 @@ The most common update method for Android users:

-### USB Flashing
+### In-App USB Update
-For recovery or when OTA is unavailable:
+When your radio is connected over **USB/serial** (rather than Bluetooth), the Firmware Update screen offers **USB File Transfer**. The app reboots the device into DFU mode, then prompts you to save the `.uf2` file to the device's DFU drive using the system file picker. This option appears only on a USB/serial connection — it is not available over Bluetooth.
+
+> ℹ️ **nRF bootloader note:** Some devices (e.g. RAK WisBlock RAK4631) need their bootloader flashed with the vendor's serial DFU tool (such as `adafruit-nrfutil`) — copying the `.uf2` alone won't update the bootloader. The app surfaces a hint when this applies.
+
+### Other Flashing Options
+
+For recovery or when neither OTA nor in-app USB is available:
- Use the [Meshtastic Web Flasher](https://flasher.meshtastic.org)
- Or the [Meshtastic CLI tool](https://meshtastic.org/docs/getting-started/flashing-firmware) on desktop
## Version Channels
-| Kanal | Опис |
-| ------ | ------------------------------------------- |
-| Stable | Recommended for most users; tested releases |
-| Alpha | Preview releases; may contain bugs |
+| Kanal | Опис |
+| ---------- | -------------------------------------------------------------------------- |
+| Stable | Recommended for most users; tested releases |
+| Alpha | Preview releases; may contain bugs |
+| Local File | Flash a firmware file you select yourself, instead of a downloaded release |
## Pre-Update Checklist
@@ -73,7 +80,7 @@ Once the update succeeds:
- The radio will reboot automatically
- Bluetooth connection will re-establish
- Verify your settings are intact
-- Check the firmware version in **Settings → About**
+- Confirm the new version under **Currently Installed** on the Firmware Update screen — it's also shown on the node's detail page and the Connections screen

diff --git a/docs/sr-rLatn/user/messages-and-channels.md b/docs/sr-rLatn/user/messages-and-channels.md
index f9b118fa7..596e2f6da 100644
--- a/docs/sr-rLatn/user/messages-and-channels.md
+++ b/docs/sr-rLatn/user/messages-and-channels.md
@@ -116,12 +116,16 @@ You can search the full history of any conversation directly from the chat scree

-> 💡 **Tip:** Search is full-text and stays within the conversation you opened it from — it doesn't search across other channels or contacts. Matching is fast even on long histories because messages are indexed locally.
+> 💡 **Tip:** Search is full-text and stays within the conversation you opened it from — it doesn't search across other channels or contacts. It matches against the messages already stored on your device, so it works fully offline.
### Message Bubbles
Messages appear as chat bubbles — sent messages on the right, received messages on the left. Each bubble shows the sender, timestamp, and delivery status. Messages with replies include a quoted preview of the original message above the response.
+### Mentions
+
+Type `@` while composing to mention a node — a picker suggests matching contacts as you type. In a received message, a mention appears as a highlighted chip showing the node's name; tap it to jump straight to that node's detail page.
+
### Reactions
React to messages with emoji:
@@ -143,6 +147,7 @@ Long-press any message to access:
- **Copy** — copy message text to clipboard
- **Reply** — quote the message in your response
- **React** — add an emoji reaction
+- **Translate** — translate a received message into your device language and toggle between the original and translated text (Google Play build only; uses on-device translation)
- **Delete** — remove a message you sent (local deletion)
### Message Priority
diff --git a/docs/sr-rLatn/user/mqtt.md b/docs/sr-rLatn/user/mqtt.md
index 56bcd8a3f..b256ab650 100644
--- a/docs/sr-rLatn/user/mqtt.md
+++ b/docs/sr-rLatn/user/mqtt.md
@@ -56,6 +56,8 @@ A gateway node with internet access (WiFi or Ethernet) publishes mesh messages t
The community maintains a public broker at `mqtt.meshtastic.org`. This is intended for general use and testing.
+> ℹ️ **Note:** Connections to `mqtt.meshtastic.org` always use TLS (port 8883), even if the TLS toggle is off. For any other broker, TLS is used only when you enable it (port 8883 with TLS, 1883 without).
+
> 🔒 **Privacy:** Messages on the public broker are readable by anyone subscribed. Always use channel encryption for private communications.
### Private Broker
diff --git a/docs/sr-rLatn/user/node-metrics.md b/docs/sr-rLatn/user/node-metrics.md
index d1f2ce24d..3d3ab57a6 100644
--- a/docs/sr-rLatn/user/node-metrics.md
+++ b/docs/sr-rLatn/user/node-metrics.md
@@ -55,12 +55,15 @@ The BME680 **IAQ (Indoor Air Quality)** index is a single 0–500+ value derived
Air Quality is a dedicated metrics view for nodes equipped with a particulate-matter and/or CO₂ sensor. It is **separate from the BME680 IAQ reading** listed under Environment Metrics — IAQ is a single gas-resistance-derived index, while the Air Quality view charts the underlying particulate and CO₂ measurements.
-| Метрика | Unit | Опис |
-| --------------------- | ----- | ---------------------------------------------------- |
-| PM1.0 | µg/m³ | Particulate matter up to 1.0 micron |
-| PM2.5 | µg/m³ | Particulate matter up to 2.5 microns |
-| PM10 | µg/m³ | Particulate matter up to 10 microns |
-| CO₂ | ppm | Carbon dioxide concentration |
+| Метрика | Unit | Опис |
+| --------------------- | --------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| PM1.0 | µg/m³ | Particulate matter up to 1.0 micron |
+| PM2.5 | µg/m³ | Particulate matter up to 2.5 microns |
+| PM10 | µg/m³ | Particulate matter up to 10 microns |
+| AQI | EPA index | EPA **NowCast** AQI computed from your recent PM2.5 history, with a color-coded severity label. Shown next to PM2.5 once enough readings have accumulated. |
+| CO₂ | ppm | Carbon dioxide concentration |
+| CO₂ temperature | °C / °F | Temperature reported by the CO₂ sensor itself (e.g. SCD4x) |
+| CO₂ humidity | % | Relative humidity reported by the CO₂ sensor |
CO₂ readings are color-coded by severity to make air quality easy to read at a glance:
@@ -98,12 +101,12 @@ Radio signal quality information:
Signal quality is rated from **SNR relative to the active LoRa modem preset's demodulation floor**, not from fixed thresholds — a given SNR means different things on different presets (e.g. −15 dB is fine on LongSlow but unusable on ShortFast). RSSI is shown but is not part of the rating. Letting `limit` be the preset's SNR limit:
-| Quality | Criteria |
-| ----------- | ------------------------------------------------ |
-| Dobro | SNR above the preset's limit |
-| Prihvatljiv | within 5.5 dB below the limit |
-| Loš | within 7.5 dB below the limit |
-| Bez | more than 7.5 dB below the limit |
+| Quality | Criteria |
+| ----------- | ------------------------------------------------------------------------- |
+| Dobro | SNR above the preset's limit |
+| Prihvatljiv | up to 5.5 dB below the limit |
+| Loš | between 5.5 dB and 7.5 dB below the limit |
+| Bez | more than 7.5 dB below the limit |
See [Understanding the Signal Meter](signal-meter) for the full explanation.
diff --git a/docs/sr-rLatn/user/settings-radio-user.md b/docs/sr-rLatn/user/settings-radio-user.md
index d6b54d5c9..59dc4cde4 100644
--- a/docs/sr-rLatn/user/settings-radio-user.md
+++ b/docs/sr-rLatn/user/settings-radio-user.md
@@ -74,6 +74,8 @@ After modifying settings, tap **Save** to write the configuration to your radio.
| ~~Long Slow~~ | ~30 km | 0.18 kbps | −17.5 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.
+
#### Choosing a Modem Preset
The modem preset controls the fundamental tradeoff between **range** and **data rate**:
diff --git a/docs/sr-rLatn/user/signal-meter.md b/docs/sr-rLatn/user/signal-meter.md
index d000e6ba0..8e1e5e651 100644
--- a/docs/sr-rLatn/user/signal-meter.md
+++ b/docs/sr-rLatn/user/signal-meter.md
@@ -52,12 +52,12 @@ The app rates your signal quality (None, Bad, Fair, or Good) from **SNR alone, m
Because the rating is relative to the preset limit, the _same_ SNR can rate differently on different presets — `-15 dB` is healthy on `LongSlow` but unusable on `ShortFast`. Letting `limit` be the active preset's SNR Limit, here is how the app picks the bars (or color):
-| Ниво | Bars | Criteria | Meaning |
-| ----------- | ---- | ------------------------------------ | ---------------------------------------------------------------------------------------- |
-| Dobro | 3 | SNR **above** the preset's `limit` | Signal is comfortably above the demodulation floor — healthy connection. |
-| Prihvatljiv | 2 | within `5.5 dB` below the `limit` | Decodable, but getting close to the floor. |
-| Loš | 1 | within `7.5 dB` below the `limit` | At the very edge of what the preset can recover. |
-| Bez | 0 | more than `7.5 dB` below the `limit` | Below the floor — transmission lost to noise. |
+| Ниво | Bars | Criteria | Meaning |
+| ----------- | ---- | ----------------------------------------------- | ---------------------------------------------------------------------------------------- |
+| Dobro | 3 | SNR **above** the preset's `limit` | Signal is comfortably above the demodulation floor — healthy connection. |
+| Prihvatljiv | 2 | up to `5.5 dB` below the `limit` | Decodable, but getting close to the floor. |
+| Loš | 1 | between `5.5 dB` and `7.5 dB` below the `limit` | At the very edge of what the preset can recover. |
+| Bez | 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.
diff --git a/docs/sr-rLatn/user/telemetry-and-sensors.md b/docs/sr-rLatn/user/telemetry-and-sensors.md
index 66c6507e7..5503f8bfc 100644
--- a/docs/sr-rLatn/user/telemetry-and-sensors.md
+++ b/docs/sr-rLatn/user/telemetry-and-sensors.md
@@ -103,7 +103,9 @@ Nodes with particulate matter or CO₂ sensors report air quality data:
| PM10 | µg/m³ | Coarse particulate matter |
| CO₂ | ppm | Carbon dioxide concentration |
-The CO₂ reading is color-coded by severity (Good → Stuffy → Poor → Unsafe → Evacuate). See [Node Metrics — Air Quality](node-metrics#air-quality-metrics) for the exact ppm bands and colors.
+CO₂ sensors such as the SCD4x also report their own temperature and humidity, which appear alongside the readings above. From PM2.5 history the app additionally derives an **EPA NowCast AQI** value.
+
+The CO₂ reading is color-coded by severity (Good → Stuffy → Poor → Unsafe → Evacuate). See [Node Metrics — Air Quality](node-metrics#air-quality-metrics) for the exact ppm bands, colors, and AQI detail.
Air quality data can be viewed as info cards on the node detail screen, charted over time, and exported to CSV.
diff --git a/docs/sr-rLatn/user/translate.md b/docs/sr-rLatn/user/translate.md
index 43a7a0f29..3ded76426 100644
--- a/docs/sr-rLatn/user/translate.md
+++ b/docs/sr-rLatn/user/translate.md
@@ -18,11 +18,11 @@ Contributing translations helps make Meshtastic accessible to a wider audience.
## What Gets Translated
-| Resource | Source Location | Белешке |
-| ----------------- | ------------------------------------- | ---------------------------------------------------------------------- |
-| UI strings | `composeResources/values/strings.xml` | Buttons, labels, messages, and all user-visible text |
-| User Guide pages | `docs/user/*.md` | In-app documentation shown in Help & Documentation |
-| Fastlane metadata | `fastlane/metadata/android/en-US/` | App Store listing title, description, and changelogs |
+| Resource | Source Location | Белешке |
+| ----------------- | ------------------------------------------------------------------- | ---------------------------------------------------------------------- |
+| UI strings | `core/resources/src/commonMain/composeResources/values/strings.xml` | Buttons, labels, messages, and all user-visible text |
+| User Guide pages | `docs/en/user/*.md` | In-app documentation shown in Help & Documentation |
+| Fastlane metadata | `fastlane/metadata/android/en-US/` | App Store listing title, description, and changelogs |
> ⚠️ **Note:** Developer Guide pages are English-only. Code-focused documentation targeting contributors is not translated.
diff --git a/docs/sr-rLatn/user/units-and-locale.md b/docs/sr-rLatn/user/units-and-locale.md
index d1b00d39e..18de0d3ae 100644
--- a/docs/sr-rLatn/user/units-and-locale.md
+++ b/docs/sr-rLatn/user/units-and-locale.md
@@ -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 uses the `MetricFormatter` utility to convert and display values in whatever unit system your device's locale specifies.
+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.
On Android, your measurement preferences are determined by your system **Language & Region** settings. On Desktop (JVM), the app uses the JVM's default `Locale`.
@@ -115,12 +115,13 @@ On Android, your measurement system (metric vs imperial) is tied to your region
2. Change your **Region** or **Measurement units** preference
3. Return to Meshtastic — values update immediately
-> 💡 **Tip:** The app uses `MetricFormatter` from `core:common`. All measurement formatting is handled by a shared KMP utility that respects your platform's locale. Developers adding new measurement displays should use `MetricFormatter` rather than hard-coding unit conversions.
+> 💡 **Tip:** All measurement formatting is handled centrally and respects your platform's locale, so units stay consistent everywhere in the app.
## Related Topics
- [Node Metrics](node-metrics) — where temperature, distance, and sensor values are displayed
- [Telemetry & Sensors](telemetry-and-sensors) — the sensors that produce these measurements
+- [Measurement & Formatting](../developer/measurement) — developer reference for the formatting utilities
- [Settings — Radio & User](settings-radio-user) — region setting that drives unit selection
---
diff --git a/docs/srp/user/android-auto.md b/docs/srp/user/android-auto.md
index 19fdfefe9..6afa92ad6 100644
--- a/docs/srp/user/android-auto.md
+++ b/docs/srp/user/android-auto.md
@@ -2,7 +2,7 @@
title: Android Auto
parent: User Guide
nav_order: 18
-last_updated: 2026-06-11
+last_updated: 2026-07-07
description: Use Meshtastic hands-free on an Android Auto head unit — read messages aloud, reply by voice, and check nodes and mesh status while driving.
aliases:
- android-auto
@@ -17,9 +17,11 @@ Meshtastic integrates with Android Auto so you can stay in touch with your mesh
> ⚠️ **Note:** Android Auto support is available on **Google-flavor Android builds only**. It is not included in the F-Droid build, and it is not available on Desktop or iOS.
+> ℹ️ **What ships today:** The Google Play build provides **notification-only** car messaging — incoming messages are announced on the head unit and you reply through its notification controls. The full tabbed **Messages / Nodes / Status** experience described below is a beta built on the Android Car App Library (Google's templated car UI is currently restricted to Closed/Internal Play tracks), so it appears only in builds compiled with `-PenableCarTemplates=true`. The rest of this page documents that beta experience.
+
## Overview
-When your phone is connected to an Android Auto head unit (or the Desktop Head Unit emulator used for development), Meshtastic appears as a messaging app built with the Android Car App Library. The car interface presents a tabbed Home screen optimized for driving-safe, glanceable use:
+When your phone is connected to an Android Auto head unit (or the Desktop Head Unit emulator used for development), the beta build presents Meshtastic as a messaging app built with the Android Car App Library, with a tabbed Home screen optimized for driving-safe, glanceable use:
- **Messages** — recent conversations, with hands-free reading and replies.
- **Nodes** — the mesh node list, with a node-detail view.
diff --git a/docs/srp/user/connections.md b/docs/srp/user/connections.md
index 3252a12bd..62bf7a6d8 100644
--- a/docs/srp/user/connections.md
+++ b/docs/srp/user/connections.md
@@ -23,7 +23,7 @@ Bluetooth Low Energy is the default and most common connection method on Android
1. Ensure your Meshtastic radio is powered on and in pairing mode.
2. Open the app and navigate to the **Connect** tab.
-3. Tap **Scan for Devices** — nearby Meshtastic radios will appear.
+3. Tap **Scan for Bluetooth devices** — nearby Meshtastic radios will appear.
4. Select your device from the list.
5. Accept the Bluetooth pairing prompt if shown.
diff --git a/docs/srp/user/desktop.md b/docs/srp/user/desktop.md
index 8af92eb4b..f19d5f2da 100644
--- a/docs/srp/user/desktop.md
+++ b/docs/srp/user/desktop.md
@@ -2,7 +2,7 @@
title: Desktop App
parent: User Guide
nav_order: 14
-last_updated: 2026-06-11
+last_updated: 2026-07-07
description: Install and use the Meshtastic Desktop app on Linux, macOS, and Windows — connections, feature parity, and keyboard shortcuts.
aliases:
- desktop
@@ -60,19 +60,19 @@ Bluetooth Low Energy is supported on Desktop via the [Kable](https://github.com/
## Feature Parity
-| Feature | Android | Desktop | Белешке |
-| -------------------------------------------- | ------- | ------- | ---------------------------------------------- |
-| Messaging | ✓ | ✓ | Full parity |
-| Node List | ✓ | ✓ | Full parity |
-| Мапа | ✓ | ✓ | Full parity |
-| Подешавања | ✓ | ✓ | Full parity |
-| Bluetooth (BLE) | ✓ | ✓ | Via Kable on desktop |
-| Firmware Update OTA | ✓ | ✗ | Use web flasher |
-| Notifications | ✓ | ✓ | Native OS notifications |
-| Widgets | ✓ | ✗ | Android-only |
-| Android Auto | ✓ | ✗ | Android-only — not available on Desktop or iOS |
-| AI Assistant (Chirpy) | ✓\* | ✗ | Google flavor Android only |
-| App Functions (system AI) | ✓† | ✗ | Google flavor Android only |
+| Feature | Android | Desktop | Белешке |
+| -------------------------------------------- | ------- | ------- | -------------------------------------------------------------------------- |
+| Messaging | ✓ | ✓ | Full parity |
+| Node List | ✓ | ✓ | Full parity |
+| Мапа | ✓ | ◐ | Map tab exists on desktop, but the interactive map view is Android-only |
+| Подешавања | ✓ | ✓ | Full parity |
+| Bluetooth (BLE) | ✓ | ✓ | Via Kable on desktop |
+| Firmware Update | ✓ | ◐ | Desktop supports in-app USB firmware update; BLE/Wi-Fi OTA is Android-only |
+| Notifications | ✓ | ✓ | Native OS notifications |
+| Widgets | ✓ | ✗ | Android-only |
+| Android Auto | ✓ | ✗ | Android-only — not available on Desktop or iOS |
+| AI Assistant (Chirpy) | ✓\* | ✗ | Google flavor Android only |
+| App Functions (system AI) | ✓† | ✗ | Google flavor Android only |
\*Chirpy AI requires Android 14+ on Google flavor builds with supported hardware.
@@ -84,14 +84,17 @@ The Desktop app uses the same Compose Multiplatform UI with adaptations for larg
### Keyboard Shortcuts
-| Shortcut | Action |
-| ------------------- | ---------------------- |
-| **⌘Q** / **Ctrl+Q** | Quit the application |
-| **⌘,** / **Ctrl+,** | Отвори подешавања |
-| **⌘1** / **Ctrl+1** | Switch to Messages tab |
-| **⌘2** / **Ctrl+2** | Switch to Nodes tab |
-| **⌘3** / **Ctrl+3** | Switch to Map tab |
-| **⌘4** / **Ctrl+4** | Switch to Connect tab |
+All shortcuts use the **Meta** key — that's ⌘ (Command) on macOS and the Super / Windows key on Linux and Windows. (`Ctrl` is not bound.)
+
+| Shortcut | Action |
+| ---------- | ---------------------- |
+| **Meta+Q** | Quit the application |
+| **Meta+,** | Отвори подешавања |
+| **Meta+1** | Switch to Messages tab |
+| **Meta+2** | Switch to Nodes tab |
+| **Meta+3** | Switch to Map tab |
+| **Meta+4** | Switch to Connect tab |
+| **Meta+/** | Open About |
### Window & System Tray
@@ -123,7 +126,6 @@ Individual doc pages render with full formatting:
```bash
git clone https://github.com/meshtastic/Meshtastic-Android.git
cd Meshtastic-Android
-git submodule update --init
./gradlew :desktopApp:run
```
@@ -134,7 +136,8 @@ Requirements:
## Known Limitations
-- No OTA firmware updates (use web flasher)
+- 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
- BLE bonding is not yet supported on desktop (pairing works without bonding)
@@ -142,7 +145,7 @@ Requirements:
## Related Topics
- [Connections](connections) — connection methods overview
-- [Firmware Updates](firmware) — use the [Web Flasher](https://flasher.meshtastic.org) for desktop firmware updates
+- [Firmware Updates](firmware) — in-app USB update on desktop, or the [Web Flasher](https://flasher.meshtastic.org)
---
diff --git a/docs/srp/user/discovery.md b/docs/srp/user/discovery.md
index 8911fe79a..4575c396a 100644
--- a/docs/srp/user/discovery.md
+++ b/docs/srp/user/discovery.md
@@ -44,7 +44,6 @@ Before starting, configure these controls:
The **Start** button stays disabled — with an explanation of why — until the scan can run. Common reasons it's disabled:
- The device is **not connected**.
-- The current channel is using the **default channel key** (use a unique key first — see [Messages & Channels](messages-and-channels)).
- **No presets** have been selected to scan.
- The selected preset uses **2.4 GHz**, which your hardware doesn't support.
diff --git a/docs/srp/user/firmware.md b/docs/srp/user/firmware.md
index 8c8e29150..835ee11b2 100644
--- a/docs/srp/user/firmware.md
+++ b/docs/srp/user/firmware.md
@@ -2,8 +2,8 @@
title: Ажурирања фирмвера
parent: User Guide
nav_order: 13
-last_updated: 2026-05-13
-description: Update your radio firmware over Bluetooth — OTA process, version channels, pre-flight checks, and recovery.
+last_updated: 2026-07-07
+description: Update your radio firmware over Bluetooth or USB — OTA process, version channels, pre-flight checks, and recovery.
aliases:
- firmware
- update
@@ -17,7 +17,7 @@ Keep your Meshtastic radio up to date with the latest firmware for new features,
## Checking for Updates
-1. Navigate to **Settings → Firmware Update** or tap the firmware notification if shown.
+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.
2. The app checks for available firmware versions.
3. Available updates show the version number and changelog summary.
@@ -39,19 +39,26 @@ The most common update method for Android users:

-### USB Flashing
+### In-App USB Update
-For recovery or when OTA is unavailable:
+When your radio is connected over **USB/serial** (rather than Bluetooth), the Firmware Update screen offers **USB File Transfer**. The app reboots the device into DFU mode, then prompts you to save the `.uf2` file to the device's DFU drive using the system file picker. This option appears only on a USB/serial connection — it is not available over Bluetooth.
+
+> ℹ️ **nRF bootloader note:** Some devices (e.g. RAK WisBlock RAK4631) need their bootloader flashed with the vendor's serial DFU tool (such as `adafruit-nrfutil`) — copying the `.uf2` alone won't update the bootloader. The app surfaces a hint when this applies.
+
+### Other Flashing Options
+
+For recovery or when neither OTA nor in-app USB is available:
- Use the [Meshtastic Web Flasher](https://flasher.meshtastic.org)
- Or the [Meshtastic CLI tool](https://meshtastic.org/docs/getting-started/flashing-firmware) on desktop
## Version Channels
-| Канал | Опис |
-| ------ | ------------------------------------------- |
-| Stable | Recommended for most users; tested releases |
-| Alpha | Preview releases; may contain bugs |
+| Канал | Опис |
+| ---------- | -------------------------------------------------------------------------- |
+| Stable | Recommended for most users; tested releases |
+| Alpha | Preview releases; may contain bugs |
+| Local File | Flash a firmware file you select yourself, instead of a downloaded release |
## Pre-Update Checklist
@@ -73,7 +80,7 @@ Once the update succeeds:
- The radio will reboot automatically
- Bluetooth connection will re-establish
- Verify your settings are intact
-- Check the firmware version in **Settings → About**
+- Confirm the new version under **Currently Installed** on the Firmware Update screen — it's also shown on the node's detail page and the Connections screen

diff --git a/docs/srp/user/messages-and-channels.md b/docs/srp/user/messages-and-channels.md
index 111cb6cf4..67403cd78 100644
--- a/docs/srp/user/messages-and-channels.md
+++ b/docs/srp/user/messages-and-channels.md
@@ -116,12 +116,16 @@ You can search the full history of any conversation directly from the chat scree

-> 💡 **Tip:** Search is full-text and stays within the conversation you opened it from — it doesn't search across other channels or contacts. Matching is fast even on long histories because messages are indexed locally.
+> 💡 **Tip:** Search is full-text and stays within the conversation you opened it from — it doesn't search across other channels or contacts. It matches against the messages already stored on your device, so it works fully offline.
### Message Bubbles
Messages appear as chat bubbles — sent messages on the right, received messages on the left. Each bubble shows the sender, timestamp, and delivery status. Messages with replies include a quoted preview of the original message above the response.
+### Mentions
+
+Type `@` while composing to mention a node — a picker suggests matching contacts as you type. In a received message, a mention appears as a highlighted chip showing the node's name; tap it to jump straight to that node's detail page.
+
### Reactions
React to messages with emoji:
@@ -143,6 +147,7 @@ Long-press any message to access:
- **Copy** — copy message text to clipboard
- **Reply** — quote the message in your response
- **React** — add an emoji reaction
+- **Translate** — translate a received message into your device language and toggle between the original and translated text (Google Play build only; uses on-device translation)
- **Delete** — remove a message you sent (local deletion)
### Message Priority
diff --git a/docs/srp/user/mqtt.md b/docs/srp/user/mqtt.md
index 56bcd8a3f..b256ab650 100644
--- a/docs/srp/user/mqtt.md
+++ b/docs/srp/user/mqtt.md
@@ -56,6 +56,8 @@ A gateway node with internet access (WiFi or Ethernet) publishes mesh messages t
The community maintains a public broker at `mqtt.meshtastic.org`. This is intended for general use and testing.
+> ℹ️ **Note:** Connections to `mqtt.meshtastic.org` always use TLS (port 8883), even if the TLS toggle is off. For any other broker, TLS is used only when you enable it (port 8883 with TLS, 1883 without).
+
> 🔒 **Privacy:** Messages on the public broker are readable by anyone subscribed. Always use channel encryption for private communications.
### Private Broker
diff --git a/docs/srp/user/node-metrics.md b/docs/srp/user/node-metrics.md
index 7f399dec9..c958ee941 100644
--- a/docs/srp/user/node-metrics.md
+++ b/docs/srp/user/node-metrics.md
@@ -55,12 +55,15 @@ The BME680 **IAQ (Indoor Air Quality)** index is a single 0–500+ value derived
Air Quality is a dedicated metrics view for nodes equipped with a particulate-matter and/or CO₂ sensor. It is **separate from the BME680 IAQ reading** listed under Environment Metrics — IAQ is a single gas-resistance-derived index, while the Air Quality view charts the underlying particulate and CO₂ measurements.
-| Метрика | Unit | Опис |
-| --------------------- | ----- | ---------------------------------------------------- |
-| PM1.0 | µg/m³ | Particulate matter up to 1.0 micron |
-| PM2.5 | µg/m³ | Particulate matter up to 2.5 microns |
-| PM10 | µg/m³ | Particulate matter up to 10 microns |
-| CO₂ | ppm | Carbon dioxide concentration |
+| Метрика | Unit | Опис |
+| --------------------- | --------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| PM1.0 | µg/m³ | Particulate matter up to 1.0 micron |
+| PM2.5 | µg/m³ | Particulate matter up to 2.5 microns |
+| PM10 | µg/m³ | Particulate matter up to 10 microns |
+| AQI | EPA index | EPA **NowCast** AQI computed from your recent PM2.5 history, with a color-coded severity label. Shown next to PM2.5 once enough readings have accumulated. |
+| CO₂ | ppm | Carbon dioxide concentration |
+| CO₂ temperature | °C / °F | Temperature reported by the CO₂ sensor itself (e.g. SCD4x) |
+| CO₂ humidity | % | Relative humidity reported by the CO₂ sensor |
CO₂ readings are color-coded by severity to make air quality easy to read at a glance:
@@ -98,12 +101,12 @@ Radio signal quality information:
Signal quality is rated from **SNR relative to the active LoRa modem preset's demodulation floor**, not from fixed thresholds — a given SNR means different things on different presets (e.g. −15 dB is fine on LongSlow but unusable on ShortFast). RSSI is shown but is not part of the rating. Letting `limit` be the preset's SNR limit:
-| Quality | Criteria |
-| ---------- | ------------------------------------------------ |
-| Добро | SNR above the preset's limit |
-| Прихватљив | within 5.5 dB below the limit |
-| Лош | within 7.5 dB below the limit |
-| Ништа | more than 7.5 dB below the limit |
+| Quality | Criteria |
+| ---------- | ------------------------------------------------------------------------- |
+| Добро | SNR above the preset's limit |
+| Прихватљив | up to 5.5 dB below the limit |
+| Лош | between 5.5 dB and 7.5 dB below the limit |
+| Ништа | more than 7.5 dB below the limit |
See [Understanding the Signal Meter](signal-meter) for the full explanation.
diff --git a/docs/srp/user/settings-radio-user.md b/docs/srp/user/settings-radio-user.md
index f142b7485..3f7d167bb 100644
--- a/docs/srp/user/settings-radio-user.md
+++ b/docs/srp/user/settings-radio-user.md
@@ -74,6 +74,8 @@ After modifying settings, tap **Save** to write the configuration to your radio.
| ~~Long Slow~~ | ~30 km | 0.18 kbps | −17.5 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.
+
#### Choosing a Modem Preset
The modem preset controls the fundamental tradeoff between **range** and **data rate**:
diff --git a/docs/srp/user/signal-meter.md b/docs/srp/user/signal-meter.md
index b44887b99..1974d3ce7 100644
--- a/docs/srp/user/signal-meter.md
+++ b/docs/srp/user/signal-meter.md
@@ -52,12 +52,12 @@ The app rates your signal quality (None, Bad, Fair, or Good) from **SNR alone, m
Because the rating is relative to the preset limit, the _same_ SNR can rate differently on different presets — `-15 dB` is healthy on `LongSlow` but unusable on `ShortFast`. Letting `limit` be the active preset's SNR Limit, here is how the app picks the bars (or color):
-| Ниво | Bars | Criteria | Meaning |
-| ---------- | ---- | ------------------------------------ | ---------------------------------------------------------------------------------------- |
-| Добро | 3 | SNR **above** the preset's `limit` | Signal is comfortably above the demodulation floor — healthy connection. |
-| Прихватљив | 2 | within `5.5 dB` below the `limit` | Decodable, but getting close to the floor. |
-| Лош | 1 | within `7.5 dB` below the `limit` | At the very edge of what the preset can recover. |
-| Ништа | 0 | more than `7.5 dB` below the `limit` | Below the floor — transmission lost to noise. |
+| Ниво | Bars | Criteria | Meaning |
+| ---------- | ---- | ----------------------------------------------- | ---------------------------------------------------------------------------------------- |
+| Добро | 3 | SNR **above** the preset's `limit` | Signal is comfortably above the demodulation floor — healthy connection. |
+| Прихватљив | 2 | up to `5.5 dB` below the `limit` | Decodable, but getting close to the floor. |
+| Лош | 1 | between `5.5 dB` and `7.5 dB` below the `limit` | At the very edge of what the preset can recover. |
+| Ништа | 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.
diff --git a/docs/srp/user/telemetry-and-sensors.md b/docs/srp/user/telemetry-and-sensors.md
index 66c6507e7..5503f8bfc 100644
--- a/docs/srp/user/telemetry-and-sensors.md
+++ b/docs/srp/user/telemetry-and-sensors.md
@@ -103,7 +103,9 @@ Nodes with particulate matter or CO₂ sensors report air quality data:
| PM10 | µg/m³ | Coarse particulate matter |
| CO₂ | ppm | Carbon dioxide concentration |
-The CO₂ reading is color-coded by severity (Good → Stuffy → Poor → Unsafe → Evacuate). See [Node Metrics — Air Quality](node-metrics#air-quality-metrics) for the exact ppm bands and colors.
+CO₂ sensors such as the SCD4x also report their own temperature and humidity, which appear alongside the readings above. From PM2.5 history the app additionally derives an **EPA NowCast AQI** value.
+
+The CO₂ reading is color-coded by severity (Good → Stuffy → Poor → Unsafe → Evacuate). See [Node Metrics — Air Quality](node-metrics#air-quality-metrics) for the exact ppm bands, colors, and AQI detail.
Air quality data can be viewed as info cards on the node detail screen, charted over time, and exported to CSV.
diff --git a/docs/srp/user/translate.md b/docs/srp/user/translate.md
index 43a7a0f29..3ded76426 100644
--- a/docs/srp/user/translate.md
+++ b/docs/srp/user/translate.md
@@ -18,11 +18,11 @@ Contributing translations helps make Meshtastic accessible to a wider audience.
## What Gets Translated
-| Resource | Source Location | Белешке |
-| ----------------- | ------------------------------------- | ---------------------------------------------------------------------- |
-| UI strings | `composeResources/values/strings.xml` | Buttons, labels, messages, and all user-visible text |
-| User Guide pages | `docs/user/*.md` | In-app documentation shown in Help & Documentation |
-| Fastlane metadata | `fastlane/metadata/android/en-US/` | App Store listing title, description, and changelogs |
+| Resource | Source Location | Белешке |
+| ----------------- | ------------------------------------------------------------------- | ---------------------------------------------------------------------- |
+| UI strings | `core/resources/src/commonMain/composeResources/values/strings.xml` | Buttons, labels, messages, and all user-visible text |
+| User Guide pages | `docs/en/user/*.md` | In-app documentation shown in Help & Documentation |
+| Fastlane metadata | `fastlane/metadata/android/en-US/` | App Store listing title, description, and changelogs |
> ⚠️ **Note:** Developer Guide pages are English-only. Code-focused documentation targeting contributors is not translated.
diff --git a/docs/srp/user/units-and-locale.md b/docs/srp/user/units-and-locale.md
index d1b00d39e..18de0d3ae 100644
--- a/docs/srp/user/units-and-locale.md
+++ b/docs/srp/user/units-and-locale.md
@@ -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 uses the `MetricFormatter` utility to convert and display values in whatever unit system your device's locale specifies.
+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.
On Android, your measurement preferences are determined by your system **Language & Region** settings. On Desktop (JVM), the app uses the JVM's default `Locale`.
@@ -115,12 +115,13 @@ On Android, your measurement system (metric vs imperial) is tied to your region
2. Change your **Region** or **Measurement units** preference
3. Return to Meshtastic — values update immediately
-> 💡 **Tip:** The app uses `MetricFormatter` from `core:common`. All measurement formatting is handled by a shared KMP utility that respects your platform's locale. Developers adding new measurement displays should use `MetricFormatter` rather than hard-coding unit conversions.
+> 💡 **Tip:** All measurement formatting is handled centrally and respects your platform's locale, so units stay consistent everywhere in the app.
## Related Topics
- [Node Metrics](node-metrics) — where temperature, distance, and sensor values are displayed
- [Telemetry & Sensors](telemetry-and-sensors) — the sensors that produce these measurements
+- [Measurement & Formatting](../developer/measurement) — developer reference for the formatting utilities
- [Settings — Radio & User](settings-radio-user) — region setting that drives unit selection
---
diff --git a/docs/sv-rSE/user/android-auto.md b/docs/sv-rSE/user/android-auto.md
index b15a05d75..df424bace 100644
--- a/docs/sv-rSE/user/android-auto.md
+++ b/docs/sv-rSE/user/android-auto.md
@@ -2,7 +2,7 @@
title: Android Auto
parent: Användarguide
nav_order: 18
-last_updated: 2026-06-11
+last_updated: 2026-07-07
description: Use Meshtastic hands-free on an Android Auto head unit — read messages aloud, reply by voice, and check nodes and mesh status while driving.
aliases:
- android-auto
@@ -17,9 +17,11 @@ Meshtastic integrates with Android Auto so you can stay in touch with your mesh
> ⚠️ **Note:** Android Auto support is available on **Google-flavor Android builds only**. It is not included in the F-Droid build, and it is not available on Desktop or iOS.
+> ℹ️ **What ships today:** The Google Play build provides **notification-only** car messaging — incoming messages are announced on the head unit and you reply through its notification controls. The full tabbed **Messages / Nodes / Status** experience described below is a beta built on the Android Car App Library (Google's templated car UI is currently restricted to Closed/Internal Play tracks), so it appears only in builds compiled with `-PenableCarTemplates=true`. The rest of this page documents that beta experience.
+
## Overview
-When your phone is connected to an Android Auto head unit (or the Desktop Head Unit emulator used for development), Meshtastic appears as a messaging app built with the Android Car App Library. The car interface presents a tabbed Home screen optimized for driving-safe, glanceable use:
+When your phone is connected to an Android Auto head unit (or the Desktop Head Unit emulator used for development), the beta build presents Meshtastic as a messaging app built with the Android Car App Library, with a tabbed Home screen optimized for driving-safe, glanceable use:
- **Messages** — recent conversations, with hands-free reading and replies.
- **Nodes** — the mesh node list, with a node-detail view.
diff --git a/docs/sv-rSE/user/connections.md b/docs/sv-rSE/user/connections.md
index 8ae8c3f21..61c0c0076 100644
--- a/docs/sv-rSE/user/connections.md
+++ b/docs/sv-rSE/user/connections.md
@@ -23,7 +23,7 @@ Bluetooth Low Energy is the default and most common connection method on Android
1. Ensure your Meshtastic radio is powered on and in pairing mode.
2. Open the app and navigate to the **Connect** tab.
-3. Tap **Scan for Devices** — nearby Meshtastic radios will appear.
+3. Tap **Scan for Bluetooth devices** — nearby Meshtastic radios will appear.
4. Select your device from the list.
5. Accept the Bluetooth pairing prompt if shown.
diff --git a/docs/sv-rSE/user/desktop.md b/docs/sv-rSE/user/desktop.md
index 957b0674e..40ccacd46 100644
--- a/docs/sv-rSE/user/desktop.md
+++ b/docs/sv-rSE/user/desktop.md
@@ -2,7 +2,7 @@
title: Desktop App
parent: User Guide
nav_order: 14
-last_updated: 2026-06-11
+last_updated: 2026-07-07
description: Install and use the Meshtastic Desktop app on Linux, macOS, and Windows — connections, feature parity, and keyboard shortcuts.
aliases:
- desktop
@@ -60,19 +60,19 @@ Bluetooth Low Energy is supported on Desktop via the [Kable](https://github.com/
## Feature Parity
-| Feature | Android | Desktop | Anteckningar |
-| -------------------------------------------- | ------- | ------- | ---------------------------------------------- |
-| Messaging | ✓ | ✓ | Full parity |
-| Node List | ✓ | ✓ | Full parity |
-| Karta | ✓ | ✓ | Full parity |
-| Inställningar | ✓ | ✓ | Full parity |
-| Bluetooth (BLE) | ✓ | ✓ | Via Kable on desktop |
-| Firmware Update OTA | ✓ | ✗ | Use web flasher |
-| Notifications | ✓ | ✓ | Native OS notifications |
-| Widgets | ✓ | ✗ | Android-only |
-| Android Auto | ✓ | ✗ | Android-only — not available on Desktop or iOS |
-| AI Assistant (Chirpy) | ✓\* | ✗ | Google flavor Android only |
-| App Functions (system AI) | ✓† | ✗ | Google flavor Android only |
+| Feature | Android | Desktop | Anteckningar |
+| -------------------------------------------- | ------- | ------- | -------------------------------------------------------------------------- |
+| Messaging | ✓ | ✓ | Full parity |
+| Node List | ✓ | ✓ | Full parity |
+| Karta | ✓ | ◐ | Map tab exists on desktop, but the interactive map view is Android-only |
+| Inställningar | ✓ | ✓ | Full parity |
+| Bluetooth (BLE) | ✓ | ✓ | Via Kable on desktop |
+| Uppdatering av fast programvara | ✓ | ◐ | Desktop supports in-app USB firmware update; BLE/Wi-Fi OTA is Android-only |
+| Notifications | ✓ | ✓ | Native OS notifications |
+| Widgets | ✓ | ✗ | Android-only |
+| Android Auto | ✓ | ✗ | Android-only — not available on Desktop or iOS |
+| AI Assistant (Chirpy) | ✓\* | ✗ | Google flavor Android only |
+| App Functions (system AI) | ✓† | ✗ | Google flavor Android only |
\*Chirpy AI requires Android 14+ on Google flavor builds with supported hardware.
@@ -84,14 +84,17 @@ The Desktop app uses the same Compose Multiplatform UI with adaptations for larg
### Keyboard Shortcuts
-| Shortcut | Action |
-| ------------------- | ---------------------- |
-| **⌘Q** / **Ctrl+Q** | Quit the application |
-| **⌘,** / **Ctrl+,** | Open Settings |
-| **⌘1** / **Ctrl+1** | Switch to Messages tab |
-| **⌘2** / **Ctrl+2** | Switch to Nodes tab |
-| **⌘3** / **Ctrl+3** | Switch to Map tab |
-| **⌘4** / **Ctrl+4** | Switch to Connect tab |
+All shortcuts use the **Meta** key — that's ⌘ (Command) on macOS and the Super / Windows key on Linux and Windows. (`Ctrl` is not bound.)
+
+| Shortcut | Action |
+| ---------- | ---------------------- |
+| **Meta+Q** | Quit the application |
+| **Meta+,** | Open Settings |
+| **Meta+1** | Switch to Messages tab |
+| **Meta+2** | Switch to Nodes tab |
+| **Meta+3** | Switch to Map tab |
+| **Meta+4** | Switch to Connect tab |
+| **Meta+/** | Open About |
### Window & System Tray
@@ -123,7 +126,6 @@ Individual doc pages render with full formatting:
```bash
git clone https://github.com/meshtastic/Meshtastic-Android.git
cd Meshtastic-Android
-git submodule update --init
./gradlew :desktopApp:run
```
@@ -134,7 +136,8 @@ Requirements:
## Known Limitations
-- No OTA firmware updates (use web flasher)
+- 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
- BLE bonding is not yet supported on desktop (pairing works without bonding)
@@ -142,7 +145,7 @@ Requirements:
## Related Topics
- [Connections](connections) — connection methods overview
-- [Firmware Updates](firmware) — use the [Web Flasher](https://flasher.meshtastic.org) for desktop firmware updates
+- [Firmware Updates](firmware) — in-app USB update on desktop, or the [Web Flasher](https://flasher.meshtastic.org)
---
diff --git a/docs/sv-rSE/user/discovery.md b/docs/sv-rSE/user/discovery.md
index 9f9e2b921..e18b3f796 100644
--- a/docs/sv-rSE/user/discovery.md
+++ b/docs/sv-rSE/user/discovery.md
@@ -44,7 +44,6 @@ Before starting, configure these controls:
The **Start** button stays disabled — with an explanation of why — until the scan can run. Common reasons it's disabled:
- The device is **not connected**.
-- The current channel is using the **default channel key** (use a unique key first — see [Messages & Channels](messages-and-channels)).
- **No presets** have been selected to scan.
- The selected preset uses **2.4 GHz**, which your hardware doesn't support.
diff --git a/docs/sv-rSE/user/firmware.md b/docs/sv-rSE/user/firmware.md
index 46f64a5d4..17fbc561e 100644
--- a/docs/sv-rSE/user/firmware.md
+++ b/docs/sv-rSE/user/firmware.md
@@ -2,8 +2,8 @@
title: Firmware Updates
parent: User Guide
nav_order: 13
-last_updated: 2026-05-13
-description: Update your radio firmware over Bluetooth — OTA process, version channels, pre-flight checks, and recovery.
+last_updated: 2026-07-07
+description: Update your radio firmware over Bluetooth or USB — OTA process, version channels, pre-flight checks, and recovery.
aliases:
- firmware
- update
@@ -17,7 +17,7 @@ Keep your Meshtastic radio up to date with the latest firmware for new features,
## Checking for Updates
-1. Navigate to **Settings → Firmware Update** or tap the firmware notification if shown.
+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.
2. The app checks for available firmware versions.
3. Available updates show the version number and changelog summary.
@@ -39,19 +39,26 @@ The most common update method for Android users:

-### USB Flashing
+### In-App USB Update
-For recovery or when OTA is unavailable:
+When your radio is connected over **USB/serial** (rather than Bluetooth), the Firmware Update screen offers **USB File Transfer**. The app reboots the device into DFU mode, then prompts you to save the `.uf2` file to the device's DFU drive using the system file picker. This option appears only on a USB/serial connection — it is not available over Bluetooth.
+
+> ℹ️ **nRF bootloader note:** Some devices (e.g. RAK WisBlock RAK4631) need their bootloader flashed with the vendor's serial DFU tool (such as `adafruit-nrfutil`) — copying the `.uf2` alone won't update the bootloader. The app surfaces a hint when this applies.
+
+### Other Flashing Options
+
+For recovery or when neither OTA nor in-app USB is available:
- Use the [Meshtastic Web Flasher](https://flasher.meshtastic.org)
- Or the [Meshtastic CLI tool](https://meshtastic.org/docs/getting-started/flashing-firmware) on desktop
## Version Channels
-| Kanal | Beskrivning |
-| -------------- | ------------------------------------------- |
-| Stabil version | Recommended for most users; tested releases |
-| Alfa | Preview releases; may contain bugs |
+| Kanal | Beskrivning |
+| -------------- | -------------------------------------------------------------------------- |
+| Stabil version | Recommended for most users; tested releases |
+| Alfa | Preview releases; may contain bugs |
+| Lokal fil | Flash a firmware file you select yourself, instead of a downloaded release |
## Pre-Update Checklist
@@ -73,7 +80,7 @@ Once the update succeeds:
- The radio will reboot automatically
- Bluetooth connection will re-establish
- Verify your settings are intact
-- Check the firmware version in **Settings → About**
+- Confirm the new version under **Currently Installed** on the Firmware Update screen — it's also shown on the node's detail page and the Connections screen

diff --git a/docs/sv-rSE/user/messages-and-channels.md b/docs/sv-rSE/user/messages-and-channels.md
index 2d287067f..bfe265d39 100644
--- a/docs/sv-rSE/user/messages-and-channels.md
+++ b/docs/sv-rSE/user/messages-and-channels.md
@@ -116,12 +116,16 @@ You can search the full history of any conversation directly from the chat scree

-> 💡 **Tip:** Search is full-text and stays within the conversation you opened it from — it doesn't search across other channels or contacts. Matching is fast even on long histories because messages are indexed locally.
+> 💡 **Tip:** Search is full-text and stays within the conversation you opened it from — it doesn't search across other channels or contacts. It matches against the messages already stored on your device, so it works fully offline.
### Message Bubbles
Messages appear as chat bubbles — sent messages on the right, received messages on the left. Each bubble shows the sender, timestamp, and delivery status. Messages with replies include a quoted preview of the original message above the response.
+### Mentions
+
+Type `@` while composing to mention a node — a picker suggests matching contacts as you type. In a received message, a mention appears as a highlighted chip showing the node's name; tap it to jump straight to that node's detail page.
+
### Reactions
React to messages with emoji:
@@ -143,6 +147,7 @@ Long-press any message to access:
- **Copy** — copy message text to clipboard
- **Reply** — quote the message in your response
- **React** — add an emoji reaction
+- **Translate** — translate a received message into your device language and toggle between the original and translated text (Google Play build only; uses on-device translation)
- **Delete** — remove a message you sent (local deletion)
### Message Priority
diff --git a/docs/sv-rSE/user/mqtt.md b/docs/sv-rSE/user/mqtt.md
index 39b65ccf5..334cfcc73 100644
--- a/docs/sv-rSE/user/mqtt.md
+++ b/docs/sv-rSE/user/mqtt.md
@@ -56,6 +56,8 @@ A gateway node with internet access (WiFi or Ethernet) publishes mesh messages t
The community maintains a public broker at `mqtt.meshtastic.org`. This is intended for general use and testing.
+> ℹ️ **Note:** Connections to `mqtt.meshtastic.org` always use TLS (port 8883), even if the TLS toggle is off. For any other broker, TLS is used only when you enable it (port 8883 with TLS, 1883 without).
+
> 🔒 **Privacy:** Messages on the public broker are readable by anyone subscribed. Always use channel encryption for private communications.
### Private Broker
diff --git a/docs/sv-rSE/user/node-metrics.md b/docs/sv-rSE/user/node-metrics.md
index db2e263d7..95a963129 100644
--- a/docs/sv-rSE/user/node-metrics.md
+++ b/docs/sv-rSE/user/node-metrics.md
@@ -55,12 +55,15 @@ The BME680 **IAQ (Indoor Air Quality)** index is a single 0–500+ value derived
Air Quality is a dedicated metrics view for nodes equipped with a particulate-matter and/or CO₂ sensor. It is **separate from the BME680 IAQ reading** listed under Environment Metrics — IAQ is a single gas-resistance-derived index, while the Air Quality view charts the underlying particulate and CO₂ measurements.
-| Metric | Unit | Beskrivning |
-| --------------------- | ----- | ---------------------------------------------------- |
-| PM1.0 | µg/m³ | Particulate matter up to 1.0 micron |
-| PM2.5 | µg/m³ | Particulate matter up to 2.5 microns |
-| PM10 | µg/m³ | Particulate matter up to 10 microns |
-| CO₂ | ppm | Carbon dioxide concentration |
+| Metric | Unit | Beskrivning |
+| --------------------- | --------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| PM1.0 | µg/m³ | Particulate matter up to 1.0 micron |
+| PM2.5 | µg/m³ | Particulate matter up to 2.5 microns |
+| PM10 | µg/m³ | Particulate matter up to 10 microns |
+| AQI | EPA index | EPA **NowCast** AQI computed from your recent PM2.5 history, with a color-coded severity label. Shown next to PM2.5 once enough readings have accumulated. |
+| CO₂ | ppm | Carbon dioxide concentration |
+| CO₂ temperature | °C / °F | Temperature reported by the CO₂ sensor itself (e.g. SCD4x) |
+| CO₂ humidity | % | Relative humidity reported by the CO₂ sensor |
CO₂ readings are color-coded by severity to make air quality easy to read at a glance:
@@ -98,12 +101,12 @@ Radio signal quality information:
Signal quality is rated from **SNR relative to the active LoRa modem preset's demodulation floor**, not from fixed thresholds — a given SNR means different things on different presets (e.g. −15 dB is fine on LongSlow but unusable on ShortFast). RSSI is shown but is not part of the rating. Letting `limit` be the preset's SNR limit:
-| Quality | Criteria |
-| ------- | ------------------------------------------------ |
-| Bra | SNR above the preset's limit |
-| Ok | within 5.5 dB below the limit |
-| Dålig | within 7.5 dB below the limit |
-| Ingen | more than 7.5 dB below the limit |
+| Quality | Criteria |
+| ------- | ------------------------------------------------------------------------- |
+| Bra | SNR above the preset's limit |
+| Ok | up to 5.5 dB below the limit |
+| Dålig | between 5.5 dB and 7.5 dB below the limit |
+| Ingen | more than 7.5 dB below the limit |
See [Understanding the Signal Meter](signal-meter) for the full explanation.
diff --git a/docs/sv-rSE/user/settings-radio-user.md b/docs/sv-rSE/user/settings-radio-user.md
index ba7ea38c1..7da5c6602 100644
--- a/docs/sv-rSE/user/settings-radio-user.md
+++ b/docs/sv-rSE/user/settings-radio-user.md
@@ -74,6 +74,8 @@ After modifying settings, tap **Save** to write the configuration to your radio.
| ~~Long Slow~~ | ~30 km | 0.18 kbps | −17.5 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.
+
#### Choosing a Modem Preset
The modem preset controls the fundamental tradeoff between **range** and **data rate**:
diff --git a/docs/sv-rSE/user/signal-meter.md b/docs/sv-rSE/user/signal-meter.md
index 2a966add5..674ee1e12 100644
--- a/docs/sv-rSE/user/signal-meter.md
+++ b/docs/sv-rSE/user/signal-meter.md
@@ -52,12 +52,12 @@ The app rates your signal quality (None, Bad, Fair, or Good) from **SNR alone, m
Because the rating is relative to the preset limit, the _same_ SNR can rate differently on different presets — `-15 dB` is healthy on `LongSlow` but unusable on `ShortFast`. Letting `limit` be the active preset's SNR Limit, here is how the app picks the bars (or color):
-| Level | Bars | Criteria | Meaning |
-| ----- | ---- | ------------------------------------ | ---------------------------------------------------------------------------------------- |
-| Bra | 3 | SNR **above** the preset's `limit` | Signal is comfortably above the demodulation floor — healthy connection. |
-| Ok | 2 | within `5.5 dB` below the `limit` | Decodable, but getting close to the floor. |
-| Dålig | 1 | within `7.5 dB` below the `limit` | At the very edge of what the preset can recover. |
-| Ingen | 0 | more than `7.5 dB` below the `limit` | Below the floor — transmission lost to noise. |
+| Level | Bars | Criteria | Meaning |
+| ----- | ---- | ----------------------------------------------- | ---------------------------------------------------------------------------------------- |
+| Bra | 3 | SNR **above** the preset's `limit` | Signal is comfortably above the demodulation floor — healthy connection. |
+| Ok | 2 | up to `5.5 dB` below the `limit` | Decodable, but getting close to the floor. |
+| Dålig | 1 | between `5.5 dB` and `7.5 dB` below the `limit` | At the very edge of what the preset can recover. |
+| Ingen | 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.
diff --git a/docs/sv-rSE/user/telemetry-and-sensors.md b/docs/sv-rSE/user/telemetry-and-sensors.md
index 36e55a460..a90fd40ed 100644
--- a/docs/sv-rSE/user/telemetry-and-sensors.md
+++ b/docs/sv-rSE/user/telemetry-and-sensors.md
@@ -103,7 +103,9 @@ Nodes with particulate matter or CO₂ sensors report air quality data:
| PM10 | µg/m³ | Coarse particulate matter |
| CO₂ | ppm | Carbon dioxide concentration |
-The CO₂ reading is color-coded by severity (Good → Stuffy → Poor → Unsafe → Evacuate). See [Node Metrics — Air Quality](node-metrics#air-quality-metrics) for the exact ppm bands and colors.
+CO₂ sensors such as the SCD4x also report their own temperature and humidity, which appear alongside the readings above. From PM2.5 history the app additionally derives an **EPA NowCast AQI** value.
+
+The CO₂ reading is color-coded by severity (Good → Stuffy → Poor → Unsafe → Evacuate). See [Node Metrics — Air Quality](node-metrics#air-quality-metrics) for the exact ppm bands, colors, and AQI detail.
Air quality data can be viewed as info cards on the node detail screen, charted over time, and exported to CSV.
diff --git a/docs/sv-rSE/user/translate.md b/docs/sv-rSE/user/translate.md
index aa6ac7540..e6e9aa4fe 100644
--- a/docs/sv-rSE/user/translate.md
+++ b/docs/sv-rSE/user/translate.md
@@ -18,11 +18,11 @@ Contributing translations helps make Meshtastic accessible to a wider audience.
## What Gets Translated
-| Resource | Source Location | Anteckningar |
-| ----------------- | ------------------------------------- | ---------------------------------------------------------------------- |
-| UI strings | `composeResources/values/strings.xml` | Buttons, labels, messages, and all user-visible text |
-| User Guide pages | `docs/user/*.md` | In-app documentation shown in Help & Documentation |
-| Fastlane metadata | `fastlane/metadata/android/en-US/` | App Store listing title, description, and changelogs |
+| Resource | Source Location | Anteckningar |
+| ----------------- | ------------------------------------------------------------------- | ---------------------------------------------------------------------- |
+| UI strings | `core/resources/src/commonMain/composeResources/values/strings.xml` | Buttons, labels, messages, and all user-visible text |
+| User Guide pages | `docs/en/user/*.md` | In-app documentation shown in Help & Documentation |
+| Fastlane metadata | `fastlane/metadata/android/en-US/` | App Store listing title, description, and changelogs |
> ⚠️ **Note:** Developer Guide pages are English-only. Code-focused documentation targeting contributors is not translated.
diff --git a/docs/sv-rSE/user/units-and-locale.md b/docs/sv-rSE/user/units-and-locale.md
index 409c43b27..fe5faa297 100644
--- a/docs/sv-rSE/user/units-and-locale.md
+++ b/docs/sv-rSE/user/units-and-locale.md
@@ -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 uses the `MetricFormatter` utility to convert and display values in whatever unit system your device's locale specifies.
+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.
On Android, your measurement preferences are determined by your system **Language & Region** settings. On Desktop (JVM), the app uses the JVM's default `Locale`.
@@ -115,12 +115,13 @@ On Android, your measurement system (metric vs imperial) is tied to your region
2. Change your **Region** or **Measurement units** preference
3. Return to Meshtastic — values update immediately
-> 💡 **Tip:** The app uses `MetricFormatter` from `core:common`. All measurement formatting is handled by a shared KMP utility that respects your platform's locale. Developers adding new measurement displays should use `MetricFormatter` rather than hard-coding unit conversions.
+> 💡 **Tip:** All measurement formatting is handled centrally and respects your platform's locale, so units stay consistent everywhere in the app.
## Related Topics
- [Node Metrics](node-metrics) — where temperature, distance, and sensor values are displayed
- [Telemetry & Sensors](telemetry-and-sensors) — the sensors that produce these measurements
+- [Measurement & Formatting](../developer/measurement) — developer reference for the formatting utilities
- [Settings — Radio & User](settings-radio-user) — region setting that drives unit selection
---
diff --git a/docs/tr-rTR/user/android-auto.md b/docs/tr-rTR/user/android-auto.md
index e7bb3395c..382354b7c 100644
--- a/docs/tr-rTR/user/android-auto.md
+++ b/docs/tr-rTR/user/android-auto.md
@@ -2,7 +2,7 @@
title: Android Auto
parent: User Guide
nav_order: 18
-last_updated: 2026-06-11
+last_updated: 2026-07-07
description: Use Meshtastic hands-free on an Android Auto head unit — read messages aloud, reply by voice, and check nodes and mesh status while driving.
aliases:
- android-auto
@@ -17,9 +17,11 @@ Meshtastic integrates with Android Auto so you can stay in touch with your mesh
> ⚠️ **Note:** Android Auto support is available on **Google-flavor Android builds only**. It is not included in the F-Droid build, and it is not available on Desktop or iOS.
+> ℹ️ **What ships today:** The Google Play build provides **notification-only** car messaging — incoming messages are announced on the head unit and you reply through its notification controls. The full tabbed **Messages / Nodes / Status** experience described below is a beta built on the Android Car App Library (Google's templated car UI is currently restricted to Closed/Internal Play tracks), so it appears only in builds compiled with `-PenableCarTemplates=true`. The rest of this page documents that beta experience.
+
## Genel Bakış
-When your phone is connected to an Android Auto head unit (or the Desktop Head Unit emulator used for development), Meshtastic appears as a messaging app built with the Android Car App Library. The car interface presents a tabbed Home screen optimized for driving-safe, glanceable use:
+When your phone is connected to an Android Auto head unit (or the Desktop Head Unit emulator used for development), the beta build presents Meshtastic as a messaging app built with the Android Car App Library, with a tabbed Home screen optimized for driving-safe, glanceable use:
- **Messages** — recent conversations, with hands-free reading and replies.
- **Nodes** — the mesh node list, with a node-detail view.
diff --git a/docs/tr-rTR/user/connections.md b/docs/tr-rTR/user/connections.md
index b82456df6..dbdc47ad4 100644
--- a/docs/tr-rTR/user/connections.md
+++ b/docs/tr-rTR/user/connections.md
@@ -23,7 +23,7 @@ Bluetooth Low Energy is the default and most common connection method on Android
1. Ensure your Meshtastic radio is powered on and in pairing mode.
2. Open the app and navigate to the **Connect** tab.
-3. Tap **Scan for Devices** — nearby Meshtastic radios will appear.
+3. Tap **Scan for Bluetooth devices** — nearby Meshtastic radios will appear.
4. Select your device from the list.
5. Accept the Bluetooth pairing prompt if shown.
diff --git a/docs/tr-rTR/user/desktop.md b/docs/tr-rTR/user/desktop.md
index 247380c59..9c50e7423 100644
--- a/docs/tr-rTR/user/desktop.md
+++ b/docs/tr-rTR/user/desktop.md
@@ -2,7 +2,7 @@
title: Desktop App
parent: User Guide
nav_order: 14
-last_updated: 2026-06-11
+last_updated: 2026-07-07
description: Install and use the Meshtastic Desktop app on Linux, macOS, and Windows — connections, feature parity, and keyboard shortcuts.
aliases:
- desktop
@@ -60,19 +60,19 @@ Bluetooth Low Energy is supported on Desktop via the [Kable](https://github.com/
## Feature Parity
-| Feature | Android | Desktop | Notes |
-| -------------------------------------------- | ------- | ------- | ---------------------------------------------- |
-| Messaging | ✓ | ✓ | Full parity |
-| Node List | ✓ | ✓ | Full parity |
-| Harita | ✓ | ✓ | Full parity |
-| Ayarlar | ✓ | ✓ | Full parity |
-| Bluetooth (BLE) | ✓ | ✓ | Via Kable on desktop |
-| Firmware Update OTA | ✓ | ✗ | Use web flasher |
-| Notifications | ✓ | ✓ | Native OS notifications |
-| Widgets | ✓ | ✗ | Android-only |
-| Android Auto | ✓ | ✗ | Android-only — not available on Desktop or iOS |
-| AI Assistant (Chirpy) | ✓\* | ✗ | Google flavor Android only |
-| App Functions (system AI) | ✓† | ✗ | Google flavor Android only |
+| Feature | Android | Desktop | Notes |
+| -------------------------------------------- | ------- | ------- | -------------------------------------------------------------------------- |
+| Messaging | ✓ | ✓ | Full parity |
+| Node List | ✓ | ✓ | Full parity |
+| Harita | ✓ | ◐ | Map tab exists on desktop, but the interactive map view is Android-only |
+| Ayarlar | ✓ | ✓ | Full parity |
+| Bluetooth (BLE) | ✓ | ✓ | Via Kable on desktop |
+| Firmware Update | ✓ | ◐ | Desktop supports in-app USB firmware update; BLE/Wi-Fi OTA is Android-only |
+| Notifications | ✓ | ✓ | Native OS notifications |
+| Widgets | ✓ | ✗ | Android-only |
+| Android Auto | ✓ | ✗ | Android-only — not available on Desktop or iOS |
+| AI Assistant (Chirpy) | ✓\* | ✗ | Google flavor Android only |
+| App Functions (system AI) | ✓† | ✗ | Google flavor Android only |
\*Chirpy AI requires Android 14+ on Google flavor builds with supported hardware.
@@ -84,14 +84,17 @@ The Desktop app uses the same Compose Multiplatform UI with adaptations for larg
### Keyboard Shortcuts
-| Shortcut | Action |
-| ------------------- | ---------------------- |
-| **⌘Q** / **Ctrl+Q** | Quit the application |
-| **⌘,** / **Ctrl+,** | Open Settings |
-| **⌘1** / **Ctrl+1** | Switch to Messages tab |
-| **⌘2** / **Ctrl+2** | Switch to Nodes tab |
-| **⌘3** / **Ctrl+3** | Switch to Map tab |
-| **⌘4** / **Ctrl+4** | Switch to Connect tab |
+All shortcuts use the **Meta** key — that's ⌘ (Command) on macOS and the Super / Windows key on Linux and Windows. (`Ctrl` is not bound.)
+
+| Shortcut | Action |
+| ---------- | ---------------------- |
+| **Meta+Q** | Quit the application |
+| **Meta+,** | Open Settings |
+| **Meta+1** | Switch to Messages tab |
+| **Meta+2** | Switch to Nodes tab |
+| **Meta+3** | Switch to Map tab |
+| **Meta+4** | Switch to Connect tab |
+| **Meta+/** | Open About |
### Window & System Tray
@@ -123,7 +126,6 @@ Individual doc pages render with full formatting:
```bash
git clone https://github.com/meshtastic/Meshtastic-Android.git
cd Meshtastic-Android
-git submodule update --init
./gradlew :desktopApp:run
```
@@ -134,7 +136,8 @@ Requirements:
## Known Limitations
-- No OTA firmware updates (use web flasher)
+- 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
- BLE bonding is not yet supported on desktop (pairing works without bonding)
@@ -142,7 +145,7 @@ Requirements:
## Related Topics
- [Connections](connections) — connection methods overview
-- [Firmware Updates](firmware) — use the [Web Flasher](https://flasher.meshtastic.org) for desktop firmware updates
+- [Firmware Updates](firmware) — in-app USB update on desktop, or the [Web Flasher](https://flasher.meshtastic.org)
---
diff --git a/docs/tr-rTR/user/discovery.md b/docs/tr-rTR/user/discovery.md
index b9c442616..826bccac7 100644
--- a/docs/tr-rTR/user/discovery.md
+++ b/docs/tr-rTR/user/discovery.md
@@ -44,7 +44,6 @@ Before starting, configure these controls:
The **Start** button stays disabled — with an explanation of why — until the scan can run. Common reasons it's disabled:
- The device is **not connected**.
-- The current channel is using the **default channel key** (use a unique key first — see [Messages & Channels](messages-and-channels)).
- **No presets** have been selected to scan.
- The selected preset uses **2.4 GHz**, which your hardware doesn't support.
diff --git a/docs/tr-rTR/user/firmware.md b/docs/tr-rTR/user/firmware.md
index 04a02092f..0f002d70a 100644
--- a/docs/tr-rTR/user/firmware.md
+++ b/docs/tr-rTR/user/firmware.md
@@ -2,8 +2,8 @@
title: Firmware Updates
parent: User Guide
nav_order: 13
-last_updated: 2026-05-13
-description: Update your radio firmware over Bluetooth — OTA process, version channels, pre-flight checks, and recovery.
+last_updated: 2026-07-07
+description: Update your radio firmware over Bluetooth or USB — OTA process, version channels, pre-flight checks, and recovery.
aliases:
- firmware
- update
@@ -17,7 +17,7 @@ Keep your Meshtastic radio up to date with the latest firmware for new features,
## Checking for Updates
-1. Navigate to **Settings → Firmware Update** or tap the firmware notification if shown.
+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.
2. The app checks for available firmware versions.
3. Available updates show the version number and changelog summary.
@@ -39,19 +39,26 @@ The most common update method for Android users:

-### USB Flashing
+### In-App USB Update
-For recovery or when OTA is unavailable:
+When your radio is connected over **USB/serial** (rather than Bluetooth), the Firmware Update screen offers **USB File Transfer**. The app reboots the device into DFU mode, then prompts you to save the `.uf2` file to the device's DFU drive using the system file picker. This option appears only on a USB/serial connection — it is not available over Bluetooth.
+
+> ℹ️ **nRF bootloader note:** Some devices (e.g. RAK WisBlock RAK4631) need their bootloader flashed with the vendor's serial DFU tool (such as `adafruit-nrfutil`) — copying the `.uf2` alone won't update the bootloader. The app surfaces a hint when this applies.
+
+### Other Flashing Options
+
+For recovery or when neither OTA nor in-app USB is available:
- Use the [Meshtastic Web Flasher](https://flasher.meshtastic.org)
- Or the [Meshtastic CLI tool](https://meshtastic.org/docs/getting-started/flashing-firmware) on desktop
## Version Channels
-| Kanal | Açıklaması |
-| ------ | ------------------------------------------- |
-| Stable | Recommended for most users; tested releases |
-| Alpha | Preview releases; may contain bugs |
+| Kanal | Açıklaması |
+| ---------- | -------------------------------------------------------------------------- |
+| Stable | Recommended for most users; tested releases |
+| Alpha | Preview releases; may contain bugs |
+| Local File | Flash a firmware file you select yourself, instead of a downloaded release |
## Pre-Update Checklist
@@ -73,7 +80,7 @@ Once the update succeeds:
- The radio will reboot automatically
- Bluetooth connection will re-establish
- Verify your settings are intact
-- Check the firmware version in **Settings → About**
+- Confirm the new version under **Currently Installed** on the Firmware Update screen — it's also shown on the node's detail page and the Connections screen

diff --git a/docs/tr-rTR/user/messages-and-channels.md b/docs/tr-rTR/user/messages-and-channels.md
index e602ccbc2..ea20bdf9f 100644
--- a/docs/tr-rTR/user/messages-and-channels.md
+++ b/docs/tr-rTR/user/messages-and-channels.md
@@ -116,12 +116,16 @@ You can search the full history of any conversation directly from the chat scree

-> 💡 **Tip:** Search is full-text and stays within the conversation you opened it from — it doesn't search across other channels or contacts. Matching is fast even on long histories because messages are indexed locally.
+> 💡 **Tip:** Search is full-text and stays within the conversation you opened it from — it doesn't search across other channels or contacts. It matches against the messages already stored on your device, so it works fully offline.
### Message Bubbles
Messages appear as chat bubbles — sent messages on the right, received messages on the left. Each bubble shows the sender, timestamp, and delivery status. Messages with replies include a quoted preview of the original message above the response.
+### Mentions
+
+Type `@` while composing to mention a node — a picker suggests matching contacts as you type. In a received message, a mention appears as a highlighted chip showing the node's name; tap it to jump straight to that node's detail page.
+
### Reactions
React to messages with emoji:
@@ -143,6 +147,7 @@ Long-press any message to access:
- **Copy** — copy message text to clipboard
- **Reply** — quote the message in your response
- **React** — add an emoji reaction
+- **Translate** — translate a received message into your device language and toggle between the original and translated text (Google Play build only; uses on-device translation)
- **Delete** — remove a message you sent (local deletion)
### Message Priority
diff --git a/docs/tr-rTR/user/mqtt.md b/docs/tr-rTR/user/mqtt.md
index 4b86a2477..2c1ef975a 100644
--- a/docs/tr-rTR/user/mqtt.md
+++ b/docs/tr-rTR/user/mqtt.md
@@ -56,6 +56,8 @@ A gateway node with internet access (WiFi or Ethernet) publishes mesh messages t
The community maintains a public broker at `mqtt.meshtastic.org`. This is intended for general use and testing.
+> ℹ️ **Note:** Connections to `mqtt.meshtastic.org` always use TLS (port 8883), even if the TLS toggle is off. For any other broker, TLS is used only when you enable it (port 8883 with TLS, 1883 without).
+
> 🔒 **Privacy:** Messages on the public broker are readable by anyone subscribed. Always use channel encryption for private communications.
### Private Broker
diff --git a/docs/tr-rTR/user/node-metrics.md b/docs/tr-rTR/user/node-metrics.md
index 068a41a4c..b8dd9aebb 100644
--- a/docs/tr-rTR/user/node-metrics.md
+++ b/docs/tr-rTR/user/node-metrics.md
@@ -55,12 +55,15 @@ The BME680 **IAQ (Indoor Air Quality)** index is a single 0–500+ value derived
Air Quality is a dedicated metrics view for nodes equipped with a particulate-matter and/or CO₂ sensor. It is **separate from the BME680 IAQ reading** listed under Environment Metrics — IAQ is a single gas-resistance-derived index, while the Air Quality view charts the underlying particulate and CO₂ measurements.
-| Metric | Unit | Açıklaması |
-| --------------------- | ----- | ---------------------------------------------------- |
-| PM1.0 | µg/m³ | Particulate matter up to 1.0 micron |
-| PM2.5 | µg/m³ | Particulate matter up to 2.5 microns |
-| PM10 | µg/m³ | Particulate matter up to 10 microns |
-| CO₂ | ppm | Carbon dioxide concentration |
+| Metric | Unit | Açıklaması |
+| --------------------- | --------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| PM1.0 | µg/m³ | Particulate matter up to 1.0 micron |
+| PM2.5 | µg/m³ | Particulate matter up to 2.5 microns |
+| PM10 | µg/m³ | Particulate matter up to 10 microns |
+| AQI | EPA index | EPA **NowCast** AQI computed from your recent PM2.5 history, with a color-coded severity label. Shown next to PM2.5 once enough readings have accumulated. |
+| CO₂ | ppm | Carbon dioxide concentration |
+| CO₂ temperature | °C / °F | Temperature reported by the CO₂ sensor itself (e.g. SCD4x) |
+| CO₂ humidity | % | Relative humidity reported by the CO₂ sensor |
CO₂ readings are color-coded by severity to make air quality easy to read at a glance:
@@ -98,12 +101,12 @@ Radio signal quality information:
Signal quality is rated from **SNR relative to the active LoRa modem preset's demodulation floor**, not from fixed thresholds — a given SNR means different things on different presets (e.g. −15 dB is fine on LongSlow but unusable on ShortFast). RSSI is shown but is not part of the rating. Letting `limit` be the preset's SNR limit:
-| Quality | Criteria |
-| ---------- | ------------------------------------------------ |
-| İyi | SNR above the preset's limit |
-| İdare Eder | within 5.5 dB below the limit |
-| Kötü | within 7.5 dB below the limit |
-| Yok | more than 7.5 dB below the limit |
+| Quality | Criteria |
+| ---------- | ------------------------------------------------------------------------- |
+| İyi | SNR above the preset's limit |
+| İdare Eder | up to 5.5 dB below the limit |
+| Kötü | between 5.5 dB and 7.5 dB below the limit |
+| Yok | more than 7.5 dB below the limit |
See [Understanding the Signal Meter](signal-meter) for the full explanation.
diff --git a/docs/tr-rTR/user/settings-radio-user.md b/docs/tr-rTR/user/settings-radio-user.md
index 3ab68a5b0..f16fd606e 100644
--- a/docs/tr-rTR/user/settings-radio-user.md
+++ b/docs/tr-rTR/user/settings-radio-user.md
@@ -74,6 +74,8 @@ After modifying settings, tap **Save** to write the configuration to your radio.
| ~~Long Slow~~ | ~30 km | 0.18 kbps | −17.5 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.
+
#### Choosing a Modem Preset
The modem preset controls the fundamental tradeoff between **range** and **data rate**:
diff --git a/docs/tr-rTR/user/signal-meter.md b/docs/tr-rTR/user/signal-meter.md
index ad9f8b57f..da7d44734 100644
--- a/docs/tr-rTR/user/signal-meter.md
+++ b/docs/tr-rTR/user/signal-meter.md
@@ -52,12 +52,12 @@ The app rates your signal quality (None, Bad, Fair, or Good) from **SNR alone, m
Because the rating is relative to the preset limit, the _same_ SNR can rate differently on different presets — `-15 dB` is healthy on `LongSlow` but unusable on `ShortFast`. Letting `limit` be the active preset's SNR Limit, here is how the app picks the bars (or color):
-| Level | Bars | Criteria | Meaning |
-| ---------- | ---- | ------------------------------------ | ---------------------------------------------------------------------------------------- |
-| İyi | 3 | SNR **above** the preset's `limit` | Signal is comfortably above the demodulation floor — healthy connection. |
-| İdare Eder | 2 | within `5.5 dB` below the `limit` | Decodable, but getting close to the floor. |
-| Kötü | 1 | within `7.5 dB` below the `limit` | At the very edge of what the preset can recover. |
-| Yok | 0 | more than `7.5 dB` below the `limit` | Below the floor — transmission lost to noise. |
+| Level | Bars | Criteria | Meaning |
+| ---------- | ---- | ----------------------------------------------- | ---------------------------------------------------------------------------------------- |
+| İyi | 3 | SNR **above** the preset's `limit` | Signal is comfortably above the demodulation floor — healthy connection. |
+| İdare Eder | 2 | up to `5.5 dB` below the `limit` | Decodable, but getting close to the floor. |
+| Kötü | 1 | between `5.5 dB` and `7.5 dB` below the `limit` | At the very edge of what the preset can recover. |
+| Yok | 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.
diff --git a/docs/tr-rTR/user/telemetry-and-sensors.md b/docs/tr-rTR/user/telemetry-and-sensors.md
index b7ea609fb..3e22f05dc 100644
--- a/docs/tr-rTR/user/telemetry-and-sensors.md
+++ b/docs/tr-rTR/user/telemetry-and-sensors.md
@@ -103,7 +103,9 @@ Nodes with particulate matter or CO₂ sensors report air quality data:
| PM10 | µg/m³ | Coarse particulate matter |
| CO₂ | ppm | Carbon dioxide concentration |
-The CO₂ reading is color-coded by severity (Good → Stuffy → Poor → Unsafe → Evacuate). See [Node Metrics — Air Quality](node-metrics#air-quality-metrics) for the exact ppm bands and colors.
+CO₂ sensors such as the SCD4x also report their own temperature and humidity, which appear alongside the readings above. From PM2.5 history the app additionally derives an **EPA NowCast AQI** value.
+
+The CO₂ reading is color-coded by severity (Good → Stuffy → Poor → Unsafe → Evacuate). See [Node Metrics — Air Quality](node-metrics#air-quality-metrics) for the exact ppm bands, colors, and AQI detail.
Air quality data can be viewed as info cards on the node detail screen, charted over time, and exported to CSV.
diff --git a/docs/tr-rTR/user/translate.md b/docs/tr-rTR/user/translate.md
index 59c522249..62662fd31 100644
--- a/docs/tr-rTR/user/translate.md
+++ b/docs/tr-rTR/user/translate.md
@@ -18,11 +18,11 @@ Contributing translations helps make Meshtastic accessible to a wider audience.
## What Gets Translated
-| Resource | Source Location | Notes |
-| ----------------- | ------------------------------------- | ---------------------------------------------------------------------- |
-| UI strings | `composeResources/values/strings.xml` | Buttons, labels, messages, and all user-visible text |
-| User Guide pages | `docs/user/*.md` | In-app documentation shown in Help & Documentation |
-| Fastlane metadata | `fastlane/metadata/android/en-US/` | App Store listing title, description, and changelogs |
+| Resource | Source Location | Notes |
+| ----------------- | ------------------------------------------------------------------- | ---------------------------------------------------------------------- |
+| UI strings | `core/resources/src/commonMain/composeResources/values/strings.xml` | Buttons, labels, messages, and all user-visible text |
+| User Guide pages | `docs/en/user/*.md` | In-app documentation shown in Help & Documentation |
+| Fastlane metadata | `fastlane/metadata/android/en-US/` | App Store listing title, description, and changelogs |
> ⚠️ **Note:** Developer Guide pages are English-only. Code-focused documentation targeting contributors is not translated.
diff --git a/docs/tr-rTR/user/units-and-locale.md b/docs/tr-rTR/user/units-and-locale.md
index cbb98db2d..6b2d8ed4f 100644
--- a/docs/tr-rTR/user/units-and-locale.md
+++ b/docs/tr-rTR/user/units-and-locale.md
@@ -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 uses the `MetricFormatter` utility to convert and display values in whatever unit system your device's locale specifies.
+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.
On Android, your measurement preferences are determined by your system **Language & Region** settings. On Desktop (JVM), the app uses the JVM's default `Locale`.
@@ -115,12 +115,13 @@ On Android, your measurement system (metric vs imperial) is tied to your region
2. Change your **Region** or **Measurement units** preference
3. Return to Meshtastic — values update immediately
-> 💡 **Tip:** The app uses `MetricFormatter` from `core:common`. All measurement formatting is handled by a shared KMP utility that respects your platform's locale. Developers adding new measurement displays should use `MetricFormatter` rather than hard-coding unit conversions.
+> 💡 **Tip:** All measurement formatting is handled centrally and respects your platform's locale, so units stay consistent everywhere in the app.
## Related Topics
- [Node Metrics](node-metrics) — where temperature, distance, and sensor values are displayed
- [Telemetry & Sensors](telemetry-and-sensors) — the sensors that produce these measurements
+- [Measurement & Formatting](../developer/measurement) — developer reference for the formatting utilities
- [Settings — Radio & User](settings-radio-user) — region setting that drives unit selection
---
diff --git a/docs/uk-rUA/user/android-auto.md b/docs/uk-rUA/user/android-auto.md
index a5726b5ae..f9fdb43e4 100644
--- a/docs/uk-rUA/user/android-auto.md
+++ b/docs/uk-rUA/user/android-auto.md
@@ -2,7 +2,7 @@
title: Android Auto
parent: User Guide
nav_order: 18
-last_updated: 2026-06-11
+last_updated: 2026-07-07
description: Use Meshtastic hands-free on an Android Auto head unit — read messages aloud, reply by voice, and check nodes and mesh status while driving.
aliases:
- android-auto
@@ -17,9 +17,11 @@ Meshtastic integrates with Android Auto so you can stay in touch with your mesh
> ⚠️ **Note:** Android Auto support is available on **Google-flavor Android builds only**. It is not included in the F-Droid build, and it is not available on Desktop or iOS.
+> ℹ️ **What ships today:** The Google Play build provides **notification-only** car messaging — incoming messages are announced on the head unit and you reply through its notification controls. The full tabbed **Messages / Nodes / Status** experience described below is a beta built on the Android Car App Library (Google's templated car UI is currently restricted to Closed/Internal Play tracks), so it appears only in builds compiled with `-PenableCarTemplates=true`. The rest of this page documents that beta experience.
+
## Overview
-When your phone is connected to an Android Auto head unit (or the Desktop Head Unit emulator used for development), Meshtastic appears as a messaging app built with the Android Car App Library. The car interface presents a tabbed Home screen optimized for driving-safe, glanceable use:
+When your phone is connected to an Android Auto head unit (or the Desktop Head Unit emulator used for development), the beta build presents Meshtastic as a messaging app built with the Android Car App Library, with a tabbed Home screen optimized for driving-safe, glanceable use:
- **Messages** — recent conversations, with hands-free reading and replies.
- **Nodes** — the mesh node list, with a node-detail view.
diff --git a/docs/uk-rUA/user/connections.md b/docs/uk-rUA/user/connections.md
index 4617e49cb..2762f8ced 100644
--- a/docs/uk-rUA/user/connections.md
+++ b/docs/uk-rUA/user/connections.md
@@ -23,7 +23,7 @@ Bluetooth Low Energy is the default and most common connection method on Android
1. Ensure your Meshtastic radio is powered on and in pairing mode.
2. Open the app and navigate to the **Connect** tab.
-3. Tap **Scan for Devices** — nearby Meshtastic radios will appear.
+3. Tap **Scan for Bluetooth devices** — nearby Meshtastic radios will appear.
4. Select your device from the list.
5. Accept the Bluetooth pairing prompt if shown.
diff --git a/docs/uk-rUA/user/desktop.md b/docs/uk-rUA/user/desktop.md
index 2e2b9f694..b9a397878 100644
--- a/docs/uk-rUA/user/desktop.md
+++ b/docs/uk-rUA/user/desktop.md
@@ -2,7 +2,7 @@
title: Desktop App
parent: User Guide
nav_order: 14
-last_updated: 2026-06-11
+last_updated: 2026-07-07
description: Install and use the Meshtastic Desktop app on Linux, macOS, and Windows — connections, feature parity, and keyboard shortcuts.
aliases:
- desktop
@@ -60,19 +60,19 @@ Bluetooth Low Energy is supported on Desktop via the [Kable](https://github.com/
## Feature Parity
-| Feature | Android | Desktop | Нотатки |
-| -------------------------------------------- | ------- | ------- | ---------------------------------------------- |
-| Messaging | ✓ | ✓ | Full parity |
-| Node List | ✓ | ✓ | Full parity |
-| Мапа | ✓ | ✓ | Full parity |
-| Налаштування | ✓ | ✓ | Full parity |
-| Bluetooth (BLE) | ✓ | ✓ | Via Kable on desktop |
-| Firmware Update OTA | ✓ | ✗ | Use web flasher |
-| Notifications | ✓ | ✓ | Native OS notifications |
-| Widgets | ✓ | ✗ | Android-only |
-| Android Auto | ✓ | ✗ | Android-only — not available on Desktop or iOS |
-| AI Assistant (Chirpy) | ✓\* | ✗ | Google flavor Android only |
-| App Functions (system AI) | ✓† | ✗ | Google flavor Android only |
+| Feature | Android | Desktop | Нотатки |
+| -------------------------------------------- | ------- | ------- | -------------------------------------------------------------------------- |
+| Messaging | ✓ | ✓ | Full parity |
+| Node List | ✓ | ✓ | Full parity |
+| Мапа | ✓ | ◐ | Map tab exists on desktop, but the interactive map view is Android-only |
+| Налаштування | ✓ | ✓ | Full parity |
+| Bluetooth (BLE) | ✓ | ✓ | Via Kable on desktop |
+| Оновити прошивку | ✓ | ◐ | Desktop supports in-app USB firmware update; BLE/Wi-Fi OTA is Android-only |
+| Notifications | ✓ | ✓ | Native OS notifications |
+| Widgets | ✓ | ✗ | Android-only |
+| Android Auto | ✓ | ✗ | Android-only — not available on Desktop or iOS |
+| AI Assistant (Chirpy) | ✓\* | ✗ | Google flavor Android only |
+| App Functions (system AI) | ✓† | ✗ | Google flavor Android only |
\*Chirpy AI requires Android 14+ on Google flavor builds with supported hardware.
@@ -84,14 +84,17 @@ The Desktop app uses the same Compose Multiplatform UI with adaptations for larg
### Keyboard Shortcuts
-| Shortcut | Action |
-| ------------------- | ---------------------- |
-| **⌘Q** / **Ctrl+Q** | Quit the application |
-| **⌘,** / **Ctrl+,** | Open Settings |
-| **⌘1** / **Ctrl+1** | Switch to Messages tab |
-| **⌘2** / **Ctrl+2** | Switch to Nodes tab |
-| **⌘3** / **Ctrl+3** | Switch to Map tab |
-| **⌘4** / **Ctrl+4** | Switch to Connect tab |
+All shortcuts use the **Meta** key — that's ⌘ (Command) on macOS and the Super / Windows key on Linux and Windows. (`Ctrl` is not bound.)
+
+| Shortcut | Action |
+| ---------- | ---------------------- |
+| **Meta+Q** | Quit the application |
+| **Meta+,** | Open Settings |
+| **Meta+1** | Switch to Messages tab |
+| **Meta+2** | Switch to Nodes tab |
+| **Meta+3** | Switch to Map tab |
+| **Meta+4** | Switch to Connect tab |
+| **Meta+/** | Open About |
### Window & System Tray
@@ -123,7 +126,6 @@ Individual doc pages render with full formatting:
```bash
git clone https://github.com/meshtastic/Meshtastic-Android.git
cd Meshtastic-Android
-git submodule update --init
./gradlew :desktopApp:run
```
@@ -134,7 +136,8 @@ Requirements:
## Known Limitations
-- No OTA firmware updates (use web flasher)
+- 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
- BLE bonding is not yet supported on desktop (pairing works without bonding)
@@ -142,7 +145,7 @@ Requirements:
## Related Topics
- [Connections](connections) — connection methods overview
-- [Firmware Updates](firmware) — use the [Web Flasher](https://flasher.meshtastic.org) for desktop firmware updates
+- [Firmware Updates](firmware) — in-app USB update on desktop, or the [Web Flasher](https://flasher.meshtastic.org)
---
diff --git a/docs/uk-rUA/user/discovery.md b/docs/uk-rUA/user/discovery.md
index 6c186b7a8..0e23cad41 100644
--- a/docs/uk-rUA/user/discovery.md
+++ b/docs/uk-rUA/user/discovery.md
@@ -44,7 +44,6 @@ Before starting, configure these controls:
The **Start** button stays disabled — with an explanation of why — until the scan can run. Common reasons it's disabled:
- The device is **not connected**.
-- The current channel is using the **default channel key** (use a unique key first — see [Messages & Channels](messages-and-channels)).
- **No presets** have been selected to scan.
- The selected preset uses **2.4 GHz**, which your hardware doesn't support.
diff --git a/docs/uk-rUA/user/firmware.md b/docs/uk-rUA/user/firmware.md
index 74bb321aa..99daa82b2 100644
--- a/docs/uk-rUA/user/firmware.md
+++ b/docs/uk-rUA/user/firmware.md
@@ -2,8 +2,8 @@
title: Firmware Updates
parent: User Guide
nav_order: 13
-last_updated: 2026-05-13
-description: Update your radio firmware over Bluetooth — OTA process, version channels, pre-flight checks, and recovery.
+last_updated: 2026-07-07
+description: Update your radio firmware over Bluetooth or USB — OTA process, version channels, pre-flight checks, and recovery.
aliases:
- firmware
- update
@@ -17,7 +17,7 @@ Keep your Meshtastic radio up to date with the latest firmware for new features,
## Checking for Updates
-1. Navigate to **Settings → Firmware Update** or tap the firmware notification if shown.
+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.
2. The app checks for available firmware versions.
3. Available updates show the version number and changelog summary.
@@ -39,19 +39,26 @@ The most common update method for Android users:

-### USB Flashing
+### In-App USB Update
-For recovery or when OTA is unavailable:
+When your radio is connected over **USB/serial** (rather than Bluetooth), the Firmware Update screen offers **USB File Transfer**. The app reboots the device into DFU mode, then prompts you to save the `.uf2` file to the device's DFU drive using the system file picker. This option appears only on a USB/serial connection — it is not available over Bluetooth.
+
+> ℹ️ **nRF bootloader note:** Some devices (e.g. RAK WisBlock RAK4631) need their bootloader flashed with the vendor's serial DFU tool (such as `adafruit-nrfutil`) — copying the `.uf2` alone won't update the bootloader. The app surfaces a hint when this applies.
+
+### Other Flashing Options
+
+For recovery or when neither OTA nor in-app USB is available:
- Use the [Meshtastic Web Flasher](https://flasher.meshtastic.org)
- Or the [Meshtastic CLI tool](https://meshtastic.org/docs/getting-started/flashing-firmware) on desktop
## Version Channels
-| Канал | Опис |
-| --------- | ------------------------------------------- |
-| Стабільна | Recommended for most users; tested releases |
-| Альфа | Preview releases; may contain bugs |
+| Канал | Опис |
+| --------- | -------------------------------------------------------------------------- |
+| Стабільна | Recommended for most users; tested releases |
+| Альфа | Preview releases; may contain bugs |
+| Файл | Flash a firmware file you select yourself, instead of a downloaded release |
## Pre-Update Checklist
@@ -73,7 +80,7 @@ Once the update succeeds:
- The radio will reboot automatically
- Bluetooth connection will re-establish
- Verify your settings are intact
-- Check the firmware version in **Settings → About**
+- Confirm the new version under **Currently Installed** on the Firmware Update screen — it's also shown on the node's detail page and the Connections screen

diff --git a/docs/uk-rUA/user/messages-and-channels.md b/docs/uk-rUA/user/messages-and-channels.md
index a972f42b7..7e48a57bf 100644
--- a/docs/uk-rUA/user/messages-and-channels.md
+++ b/docs/uk-rUA/user/messages-and-channels.md
@@ -116,12 +116,16 @@ You can search the full history of any conversation directly from the chat scree

-> 💡 **Tip:** Search is full-text and stays within the conversation you opened it from — it doesn't search across other channels or contacts. Matching is fast even on long histories because messages are indexed locally.
+> 💡 **Tip:** Search is full-text and stays within the conversation you opened it from — it doesn't search across other channels or contacts. It matches against the messages already stored on your device, so it works fully offline.
### Message Bubbles
Messages appear as chat bubbles — sent messages on the right, received messages on the left. Each bubble shows the sender, timestamp, and delivery status. Messages with replies include a quoted preview of the original message above the response.
+### Mentions
+
+Type `@` while composing to mention a node — a picker suggests matching contacts as you type. In a received message, a mention appears as a highlighted chip showing the node's name; tap it to jump straight to that node's detail page.
+
### Reactions
React to messages with emoji:
@@ -143,6 +147,7 @@ Long-press any message to access:
- **Copy** — copy message text to clipboard
- **Reply** — quote the message in your response
- **React** — add an emoji reaction
+- **Translate** — translate a received message into your device language and toggle between the original and translated text (Google Play build only; uses on-device translation)
- **Delete** — remove a message you sent (local deletion)
### Message Priority
diff --git a/docs/uk-rUA/user/mqtt.md b/docs/uk-rUA/user/mqtt.md
index 78cfe6f00..80426be91 100644
--- a/docs/uk-rUA/user/mqtt.md
+++ b/docs/uk-rUA/user/mqtt.md
@@ -56,6 +56,8 @@ A gateway node with internet access (WiFi or Ethernet) publishes mesh messages t
The community maintains a public broker at `mqtt.meshtastic.org`. This is intended for general use and testing.
+> ℹ️ **Note:** Connections to `mqtt.meshtastic.org` always use TLS (port 8883), even if the TLS toggle is off. For any other broker, TLS is used only when you enable it (port 8883 with TLS, 1883 without).
+
> 🔒 **Privacy:** Messages on the public broker are readable by anyone subscribed. Always use channel encryption for private communications.
### Private Broker
diff --git a/docs/uk-rUA/user/node-metrics.md b/docs/uk-rUA/user/node-metrics.md
index 41a5277a9..68a50880b 100644
--- a/docs/uk-rUA/user/node-metrics.md
+++ b/docs/uk-rUA/user/node-metrics.md
@@ -55,12 +55,15 @@ The BME680 **IAQ (Indoor Air Quality)** index is a single 0–500+ value derived
Air Quality is a dedicated metrics view for nodes equipped with a particulate-matter and/or CO₂ sensor. It is **separate from the BME680 IAQ reading** listed under Environment Metrics — IAQ is a single gas-resistance-derived index, while the Air Quality view charts the underlying particulate and CO₂ measurements.
-| Metric | Unit | Опис |
-| --------------------- | ----- | ---------------------------------------------------- |
-| PM1.0 | µg/m³ | Particulate matter up to 1.0 micron |
-| PM2.5 | µg/m³ | Particulate matter up to 2.5 microns |
-| PM10 | µg/m³ | Particulate matter up to 10 microns |
-| CO₂ | ppm | Carbon dioxide concentration |
+| Metric | Unit | Опис |
+| --------------------- | --------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| PM1.0 | µg/m³ | Particulate matter up to 1.0 micron |
+| PM2.5 | µg/m³ | Particulate matter up to 2.5 microns |
+| PM10 | µg/m³ | Particulate matter up to 10 microns |
+| AQI | EPA index | EPA **NowCast** AQI computed from your recent PM2.5 history, with a color-coded severity label. Shown next to PM2.5 once enough readings have accumulated. |
+| CO₂ | ppm | Carbon dioxide concentration |
+| CO₂ temperature | °C / °F | Temperature reported by the CO₂ sensor itself (e.g. SCD4x) |
+| CO₂ humidity | % | Relative humidity reported by the CO₂ sensor |
CO₂ readings are color-coded by severity to make air quality easy to read at a glance:
@@ -98,12 +101,12 @@ Radio signal quality information:
Signal quality is rated from **SNR relative to the active LoRa modem preset's demodulation floor**, not from fixed thresholds — a given SNR means different things on different presets (e.g. −15 dB is fine on LongSlow but unusable on ShortFast). RSSI is shown but is not part of the rating. Letting `limit` be the preset's SNR limit:
-| Quality | Criteria |
-| ----------- | ------------------------------------------------ |
-| Хороший | SNR above the preset's limit |
-| Задовільний | within 5.5 dB below the limit |
-| Поганий | within 7.5 dB below the limit |
-| Жоден | more than 7.5 dB below the limit |
+| Quality | Criteria |
+| ----------- | ------------------------------------------------------------------------- |
+| Хороший | SNR above the preset's limit |
+| Задовільний | up to 5.5 dB below the limit |
+| Поганий | between 5.5 dB and 7.5 dB below the limit |
+| Жоден | more than 7.5 dB below the limit |
See [Understanding the Signal Meter](signal-meter) for the full explanation.
diff --git a/docs/uk-rUA/user/settings-radio-user.md b/docs/uk-rUA/user/settings-radio-user.md
index 33d0594ee..424339c25 100644
--- a/docs/uk-rUA/user/settings-radio-user.md
+++ b/docs/uk-rUA/user/settings-radio-user.md
@@ -74,6 +74,8 @@ After modifying settings, tap **Save** to write the configuration to your radio.
| ~~Long Slow~~ | ~30 km | 0.18 kbps | −17.5 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.
+
#### Choosing a Modem Preset
The modem preset controls the fundamental tradeoff between **range** and **data rate**:
diff --git a/docs/uk-rUA/user/signal-meter.md b/docs/uk-rUA/user/signal-meter.md
index 283d21030..4d30120d5 100644
--- a/docs/uk-rUA/user/signal-meter.md
+++ b/docs/uk-rUA/user/signal-meter.md
@@ -52,12 +52,12 @@ The app rates your signal quality (None, Bad, Fair, or Good) from **SNR alone, m
Because the rating is relative to the preset limit, the _same_ SNR can rate differently on different presets — `-15 dB` is healthy on `LongSlow` but unusable on `ShortFast`. Letting `limit` be the active preset's SNR Limit, here is how the app picks the bars (or color):
-| Level | Bars | Criteria | Meaning |
-| ----------- | ---- | ------------------------------------ | ---------------------------------------------------------------------------------------- |
-| Хороший | 3 | SNR **above** the preset's `limit` | Signal is comfortably above the demodulation floor — healthy connection. |
-| Задовільний | 2 | within `5.5 dB` below the `limit` | Decodable, but getting close to the floor. |
-| Поганий | 1 | within `7.5 dB` below the `limit` | At the very edge of what the preset can recover. |
-| Жоден | 0 | more than `7.5 dB` below the `limit` | Below the floor — transmission lost to noise. |
+| Level | Bars | Criteria | Meaning |
+| ----------- | ---- | ----------------------------------------------- | ---------------------------------------------------------------------------------------- |
+| Хороший | 3 | SNR **above** the preset's `limit` | Signal is comfortably above the demodulation floor — healthy connection. |
+| Задовільний | 2 | up to `5.5 dB` below the `limit` | Decodable, but getting close to the floor. |
+| Поганий | 1 | between `5.5 dB` and `7.5 dB` below the `limit` | At the very edge of what the preset can recover. |
+| Жоден | 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.
diff --git a/docs/uk-rUA/user/telemetry-and-sensors.md b/docs/uk-rUA/user/telemetry-and-sensors.md
index 1dd1435de..5cbed9d29 100644
--- a/docs/uk-rUA/user/telemetry-and-sensors.md
+++ b/docs/uk-rUA/user/telemetry-and-sensors.md
@@ -103,7 +103,9 @@ Nodes with particulate matter or CO₂ sensors report air quality data:
| PM10 | µg/m³ | Coarse particulate matter |
| CO₂ | ppm | Carbon dioxide concentration |
-The CO₂ reading is color-coded by severity (Good → Stuffy → Poor → Unsafe → Evacuate). See [Node Metrics — Air Quality](node-metrics#air-quality-metrics) for the exact ppm bands and colors.
+CO₂ sensors such as the SCD4x also report their own temperature and humidity, which appear alongside the readings above. From PM2.5 history the app additionally derives an **EPA NowCast AQI** value.
+
+The CO₂ reading is color-coded by severity (Good → Stuffy → Poor → Unsafe → Evacuate). See [Node Metrics — Air Quality](node-metrics#air-quality-metrics) for the exact ppm bands, colors, and AQI detail.
Air quality data can be viewed as info cards on the node detail screen, charted over time, and exported to CSV.
diff --git a/docs/uk-rUA/user/translate.md b/docs/uk-rUA/user/translate.md
index b3a4fc60b..e2bd5df08 100644
--- a/docs/uk-rUA/user/translate.md
+++ b/docs/uk-rUA/user/translate.md
@@ -18,11 +18,11 @@ Contributing translations helps make Meshtastic accessible to a wider audience.
## What Gets Translated
-| Resource | Source Location | Нотатки |
-| ----------------- | ------------------------------------- | ---------------------------------------------------------------------- |
-| UI strings | `composeResources/values/strings.xml` | Buttons, labels, messages, and all user-visible text |
-| User Guide pages | `docs/user/*.md` | In-app documentation shown in Help & Documentation |
-| Fastlane metadata | `fastlane/metadata/android/en-US/` | App Store listing title, description, and changelogs |
+| Resource | Source Location | Нотатки |
+| ----------------- | ------------------------------------------------------------------- | ---------------------------------------------------------------------- |
+| UI strings | `core/resources/src/commonMain/composeResources/values/strings.xml` | Buttons, labels, messages, and all user-visible text |
+| User Guide pages | `docs/en/user/*.md` | In-app documentation shown in Help & Documentation |
+| Fastlane metadata | `fastlane/metadata/android/en-US/` | App Store listing title, description, and changelogs |
> ⚠️ **Note:** Developer Guide pages are English-only. Code-focused documentation targeting contributors is not translated.
diff --git a/docs/uk-rUA/user/units-and-locale.md b/docs/uk-rUA/user/units-and-locale.md
index 9cc50b546..2416119c6 100644
--- a/docs/uk-rUA/user/units-and-locale.md
+++ b/docs/uk-rUA/user/units-and-locale.md
@@ -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 uses the `MetricFormatter` utility to convert and display values in whatever unit system your device's locale specifies.
+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.
On Android, your measurement preferences are determined by your system **Language & Region** settings. On Desktop (JVM), the app uses the JVM's default `Locale`.
@@ -115,12 +115,13 @@ On Android, your measurement system (metric vs imperial) is tied to your region
2. Change your **Region** or **Measurement units** preference
3. Return to Meshtastic — values update immediately
-> 💡 **Tip:** The app uses `MetricFormatter` from `core:common`. All measurement formatting is handled by a shared KMP utility that respects your platform's locale. Developers adding new measurement displays should use `MetricFormatter` rather than hard-coding unit conversions.
+> 💡 **Tip:** All measurement formatting is handled centrally and respects your platform's locale, so units stay consistent everywhere in the app.
## Related Topics
- [Node Metrics](node-metrics) — where temperature, distance, and sensor values are displayed
- [Telemetry & Sensors](telemetry-and-sensors) — the sensors that produce these measurements
+- [Measurement & Formatting](../developer/measurement) — developer reference for the formatting utilities
- [Settings — Radio & User](settings-radio-user) — region setting that drives unit selection
---
diff --git a/docs/zh-rCN/user/android-auto.md b/docs/zh-rCN/user/android-auto.md
index 6ea2e7f08..c260bc19b 100644
--- a/docs/zh-rCN/user/android-auto.md
+++ b/docs/zh-rCN/user/android-auto.md
@@ -2,7 +2,7 @@
title: Android Auto
parent: User Guide
nav_order: 18
-last_updated: 2026-06-11
+last_updated: 2026-07-07
description: Use Meshtastic hands-free on an Android Auto head unit — read messages aloud, reply by voice, and check nodes and mesh status while driving.
aliases:
- android-auto
@@ -17,9 +17,11 @@ Meshtastic integrates with Android Auto so you can stay in touch with your mesh
> ⚠️ **Note:** Android Auto support is available on **Google-flavor Android builds only**. It is not included in the F-Droid build, and it is not available on Desktop or iOS.
+> ℹ️ **What ships today:** The Google Play build provides **notification-only** car messaging — incoming messages are announced on the head unit and you reply through its notification controls. The full tabbed **Messages / Nodes / Status** experience described below is a beta built on the Android Car App Library (Google's templated car UI is currently restricted to Closed/Internal Play tracks), so it appears only in builds compiled with `-PenableCarTemplates=true`. The rest of this page documents that beta experience.
+
## 总览
-When your phone is connected to an Android Auto head unit (or the Desktop Head Unit emulator used for development), Meshtastic appears as a messaging app built with the Android Car App Library. The car interface presents a tabbed Home screen optimized for driving-safe, glanceable use:
+When your phone is connected to an Android Auto head unit (or the Desktop Head Unit emulator used for development), the beta build presents Meshtastic as a messaging app built with the Android Car App Library, with a tabbed Home screen optimized for driving-safe, glanceable use:
- **Messages** — recent conversations, with hands-free reading and replies.
- **Nodes** — the mesh node list, with a node-detail view.
diff --git a/docs/zh-rCN/user/connections.md b/docs/zh-rCN/user/connections.md
index 046d76ca9..2204f90fa 100644
--- a/docs/zh-rCN/user/connections.md
+++ b/docs/zh-rCN/user/connections.md
@@ -23,7 +23,7 @@ Bluetooth Low Energy is the default and most common connection method on Android
1. Ensure your Meshtastic radio is powered on and in pairing mode.
2. Open the app and navigate to the **Connect** tab.
-3. Tap **Scan for Devices** — nearby Meshtastic radios will appear.
+3. Tap **Scan for Bluetooth devices** — nearby Meshtastic radios will appear.
4. Select your device from the list.
5. Accept the Bluetooth pairing prompt if shown.
diff --git a/docs/zh-rCN/user/desktop.md b/docs/zh-rCN/user/desktop.md
index c81541b15..6e8bd17ed 100644
--- a/docs/zh-rCN/user/desktop.md
+++ b/docs/zh-rCN/user/desktop.md
@@ -2,7 +2,7 @@
title: Desktop App
parent: User Guide
nav_order: 14
-last_updated: 2026-06-11
+last_updated: 2026-07-07
description: Install and use the Meshtastic Desktop app on Linux, macOS, and Windows — connections, feature parity, and keyboard shortcuts.
aliases:
- desktop
@@ -60,19 +60,19 @@ Bluetooth Low Energy is supported on Desktop via the [Kable](https://github.com/
## Feature Parity
-| Feature | Android | Desktop | 注 |
-| -------------------------------------------- | ------- | ------- | ---------------------------------------------- |
-| Messaging | ✓ | ✓ | Full parity |
-| Node List | ✓ | ✓ | Full parity |
-| 地图 | ✓ | ✓ | Full parity |
-| 设置 | ✓ | ✓ | Full parity |
-| Bluetooth (BLE) | ✓ | ✓ | Via Kable on desktop |
-| Firmware Update OTA | ✓ | ✗ | Use web flasher |
-| Notifications | ✓ | ✓ | Native OS notifications |
-| Widgets | ✓ | ✗ | Android-only |
-| Android Auto | ✓ | ✗ | Android-only — not available on Desktop or iOS |
-| AI Assistant (Chirpy) | ✓\* | ✗ | Google flavor Android only |
-| App Functions (system AI) | ✓† | ✗ | Google flavor Android only |
+| Feature | Android | Desktop | 注 |
+| -------------------------------------------- | ------- | ------- | -------------------------------------------------------------------------- |
+| Messaging | ✓ | ✓ | Full parity |
+| Node List | ✓ | ✓ | Full parity |
+| 地图 | ✓ | ◐ | Map tab exists on desktop, but the interactive map view is Android-only |
+| 设置 | ✓ | ✓ | Full parity |
+| Bluetooth (BLE) | ✓ | ✓ | Via Kable on desktop |
+| 固件更新 | ✓ | ◐ | Desktop supports in-app USB firmware update; BLE/Wi-Fi OTA is Android-only |
+| Notifications | ✓ | ✓ | Native OS notifications |
+| Widgets | ✓ | ✗ | Android-only |
+| Android Auto | ✓ | ✗ | Android-only — not available on Desktop or iOS |
+| AI Assistant (Chirpy) | ✓\* | ✗ | Google flavor Android only |
+| App Functions (system AI) | ✓† | ✗ | Google flavor Android only |
\*Chirpy AI requires Android 14+ on Google flavor builds with supported hardware.
@@ -84,14 +84,17 @@ The Desktop app uses the same Compose Multiplatform UI with adaptations for larg
### Keyboard Shortcuts
-| Shortcut | Action |
-| ------------------- | ---------------------- |
-| **⌘Q** / **Ctrl+Q** | Quit the application |
-| **⌘,** / **Ctrl+,** | 打开设置 |
-| **⌘1** / **Ctrl+1** | Switch to Messages tab |
-| **⌘2** / **Ctrl+2** | Switch to Nodes tab |
-| **⌘3** / **Ctrl+3** | Switch to Map tab |
-| **⌘4** / **Ctrl+4** | Switch to Connect tab |
+All shortcuts use the **Meta** key — that's ⌘ (Command) on macOS and the Super / Windows key on Linux and Windows. (`Ctrl` is not bound.)
+
+| Shortcut | Action |
+| ---------- | ---------------------- |
+| **Meta+Q** | Quit the application |
+| **Meta+,** | 打开设置 |
+| **Meta+1** | Switch to Messages tab |
+| **Meta+2** | Switch to Nodes tab |
+| **Meta+3** | Switch to Map tab |
+| **Meta+4** | Switch to Connect tab |
+| **Meta+/** | Open About |
### Window & System Tray
@@ -123,7 +126,6 @@ Individual doc pages render with full formatting:
```bash
git clone https://github.com/meshtastic/Meshtastic-Android.git
cd Meshtastic-Android
-git submodule update --init
./gradlew :desktopApp:run
```
@@ -134,7 +136,8 @@ Requirements:
## Known Limitations
-- No OTA firmware updates (use web flasher)
+- 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
- BLE bonding is not yet supported on desktop (pairing works without bonding)
@@ -142,7 +145,7 @@ Requirements:
## Related Topics
- [Connections](connections) — connection methods overview
-- [Firmware Updates](firmware) — use the [Web Flasher](https://flasher.meshtastic.org) for desktop firmware updates
+- [Firmware Updates](firmware) — in-app USB update on desktop, or the [Web Flasher](https://flasher.meshtastic.org)
---
diff --git a/docs/zh-rCN/user/discovery.md b/docs/zh-rCN/user/discovery.md
index f90e79d40..7803f5c14 100644
--- a/docs/zh-rCN/user/discovery.md
+++ b/docs/zh-rCN/user/discovery.md
@@ -44,7 +44,6 @@ Before starting, configure these controls:
The **Start** button stays disabled — with an explanation of why — until the scan can run. Common reasons it's disabled:
- The device is **not connected**.
-- The current channel is using the **default channel key** (use a unique key first — see [Messages & Channels](messages-and-channels)).
- **No presets** have been selected to scan.
- The selected preset uses **2.4 GHz**, which your hardware doesn't support.
diff --git a/docs/zh-rCN/user/firmware.md b/docs/zh-rCN/user/firmware.md
index 47637100d..d79118933 100644
--- a/docs/zh-rCN/user/firmware.md
+++ b/docs/zh-rCN/user/firmware.md
@@ -2,8 +2,8 @@
title: 固件升级
parent: User Guide
nav_order: 13
-last_updated: 2026-05-13
-description: Update your radio firmware over Bluetooth — OTA process, version channels, pre-flight checks, and recovery.
+last_updated: 2026-07-07
+description: Update your radio firmware over Bluetooth or USB — OTA process, version channels, pre-flight checks, and recovery.
aliases:
- firmware
- update
@@ -17,7 +17,7 @@ Keep your Meshtastic radio up to date with the latest firmware for new features,
## Checking for Updates
-1. Navigate to **Settings → Firmware Update** or tap the firmware notification if shown.
+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.
2. The app checks for available firmware versions.
3. Available updates show the version number and changelog summary.
@@ -39,19 +39,26 @@ The most common update method for Android users:

-### USB Flashing
+### In-App USB Update
-For recovery or when OTA is unavailable:
+When your radio is connected over **USB/serial** (rather than Bluetooth), the Firmware Update screen offers **USB File Transfer**. The app reboots the device into DFU mode, then prompts you to save the `.uf2` file to the device's DFU drive using the system file picker. This option appears only on a USB/serial connection — it is not available over Bluetooth.
+
+> ℹ️ **nRF bootloader note:** Some devices (e.g. RAK WisBlock RAK4631) need their bootloader flashed with the vendor's serial DFU tool (such as `adafruit-nrfutil`) — copying the `.uf2` alone won't update the bootloader. The app surfaces a hint when this applies.
+
+### Other Flashing Options
+
+For recovery or when neither OTA nor in-app USB is available:
- Use the [Meshtastic Web Flasher](https://flasher.meshtastic.org)
- Or the [Meshtastic CLI tool](https://meshtastic.org/docs/getting-started/flashing-firmware) on desktop
## Version Channels
-| 频道 | 说明 |
-| ---- | ------------------------------------------- |
-| 稳定版本 | Recommended for most users; tested releases |
-| 开发版本 | Preview releases; may contain bugs |
+| 频道 | 说明 |
+| ---- | -------------------------------------------------------------------------- |
+| 稳定版本 | Recommended for most users; tested releases |
+| 开发版本 | Preview releases; may contain bugs |
+| 本地文件 | Flash a firmware file you select yourself, instead of a downloaded release |
## Pre-Update Checklist
@@ -73,7 +80,7 @@ Once the update succeeds:
- The radio will reboot automatically
- Bluetooth connection will re-establish
- Verify your settings are intact
-- Check the firmware version in **Settings → About**
+- Confirm the new version under **Currently Installed** on the Firmware Update screen — it's also shown on the node's detail page and the Connections screen

diff --git a/docs/zh-rCN/user/messages-and-channels.md b/docs/zh-rCN/user/messages-and-channels.md
index 7a13b305a..5ba318bf5 100644
--- a/docs/zh-rCN/user/messages-and-channels.md
+++ b/docs/zh-rCN/user/messages-and-channels.md
@@ -116,12 +116,16 @@ You can search the full history of any conversation directly from the chat scree

-> 💡 **Tip:** Search is full-text and stays within the conversation you opened it from — it doesn't search across other channels or contacts. Matching is fast even on long histories because messages are indexed locally.
+> 💡 **Tip:** Search is full-text and stays within the conversation you opened it from — it doesn't search across other channels or contacts. It matches against the messages already stored on your device, so it works fully offline.
### Message Bubbles
Messages appear as chat bubbles — sent messages on the right, received messages on the left. Each bubble shows the sender, timestamp, and delivery status. Messages with replies include a quoted preview of the original message above the response.
+### Mentions
+
+Type `@` while composing to mention a node — a picker suggests matching contacts as you type. In a received message, a mention appears as a highlighted chip showing the node's name; tap it to jump straight to that node's detail page.
+
### Reactions
React to messages with emoji:
@@ -143,6 +147,7 @@ Long-press any message to access:
- **Copy** — copy message text to clipboard
- **Reply** — quote the message in your response
- **React** — add an emoji reaction
+- **Translate** — translate a received message into your device language and toggle between the original and translated text (Google Play build only; uses on-device translation)
- **Delete** — remove a message you sent (local deletion)
### Message Priority
diff --git a/docs/zh-rCN/user/mqtt.md b/docs/zh-rCN/user/mqtt.md
index 5feb2548c..74f29862c 100644
--- a/docs/zh-rCN/user/mqtt.md
+++ b/docs/zh-rCN/user/mqtt.md
@@ -56,6 +56,8 @@ A gateway node with internet access (WiFi or Ethernet) publishes mesh messages t
The community maintains a public broker at `mqtt.meshtastic.org`. This is intended for general use and testing.
+> ℹ️ **Note:** Connections to `mqtt.meshtastic.org` always use TLS (port 8883), even if the TLS toggle is off. For any other broker, TLS is used only when you enable it (port 8883 with TLS, 1883 without).
+
> 🔒 **Privacy:** Messages on the public broker are readable by anyone subscribed. Always use channel encryption for private communications.
### Private Broker
diff --git a/docs/zh-rCN/user/node-metrics.md b/docs/zh-rCN/user/node-metrics.md
index 1818b3e1a..a8d40c79a 100644
--- a/docs/zh-rCN/user/node-metrics.md
+++ b/docs/zh-rCN/user/node-metrics.md
@@ -55,12 +55,15 @@ The BME680 **IAQ (Indoor Air Quality)** index is a single 0–500+ value derived
Air Quality is a dedicated metrics view for nodes equipped with a particulate-matter and/or CO₂ sensor. It is **separate from the BME680 IAQ reading** listed under Environment Metrics — IAQ is a single gas-resistance-derived index, while the Air Quality view charts the underlying particulate and CO₂ measurements.
-| 公制 | Unit | 说明 |
-| --------------------- | ----- | ---------------------------------------------------- |
-| PM1.0 | µg/m³ | Particulate matter up to 1.0 micron |
-| PM2.5 | µg/m³ | Particulate matter up to 2.5 microns |
-| PM10 | µg/m³ | Particulate matter up to 10 microns |
-| CO₂ | ppm | Carbon dioxide concentration |
+| 公制 | Unit | 说明 |
+| --------------------- | --------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| PM1.0 | µg/m³ | Particulate matter up to 1.0 micron |
+| PM2.5 | µg/m³ | Particulate matter up to 2.5 microns |
+| PM10 | µg/m³ | Particulate matter up to 10 microns |
+| AQI | EPA index | EPA **NowCast** AQI computed from your recent PM2.5 history, with a color-coded severity label. Shown next to PM2.5 once enough readings have accumulated. |
+| CO₂ | ppm | Carbon dioxide concentration |
+| CO₂ temperature | °C / °F | Temperature reported by the CO₂ sensor itself (e.g. SCD4x) |
+| CO₂ humidity | % | Relative humidity reported by the CO₂ sensor |
CO₂ readings are color-coded by severity to make air quality easy to read at a glance:
@@ -98,12 +101,12 @@ Radio signal quality information:
Signal quality is rated from **SNR relative to the active LoRa modem preset's demodulation floor**, not from fixed thresholds — a given SNR means different things on different presets (e.g. −15 dB is fine on LongSlow but unusable on ShortFast). RSSI is shown but is not part of the rating. Letting `limit` be the preset's SNR limit:
-| Quality | Criteria |
-| ------- | ------------------------------------------------ |
-| 良好 | SNR above the preset's limit |
-| 一般 | within 5.5 dB below the limit |
-| 差 | within 7.5 dB below the limit |
-| 无 | more than 7.5 dB below the limit |
+| Quality | Criteria |
+| ------- | ------------------------------------------------------------------------- |
+| 良好 | SNR above the preset's limit |
+| 一般 | up to 5.5 dB below the limit |
+| 差 | between 5.5 dB and 7.5 dB below the limit |
+| 无 | more than 7.5 dB below the limit |
See [Understanding the Signal Meter](signal-meter) for the full explanation.
diff --git a/docs/zh-rCN/user/settings-radio-user.md b/docs/zh-rCN/user/settings-radio-user.md
index 8c56d69c8..f9e249439 100644
--- a/docs/zh-rCN/user/settings-radio-user.md
+++ b/docs/zh-rCN/user/settings-radio-user.md
@@ -74,6 +74,8 @@ After modifying settings, tap **Save** to write the configuration to your radio.
| ~~Long Slow~~ | ~30 km | 0.18 kbps | −17.5 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.
+
#### Choosing a Modem Preset
The modem preset controls the fundamental tradeoff between **range** and **data rate**:
diff --git a/docs/zh-rCN/user/signal-meter.md b/docs/zh-rCN/user/signal-meter.md
index 7a54d346d..2e4a2c4aa 100644
--- a/docs/zh-rCN/user/signal-meter.md
+++ b/docs/zh-rCN/user/signal-meter.md
@@ -52,12 +52,12 @@ The app rates your signal quality (None, Bad, Fair, or Good) from **SNR alone, m
Because the rating is relative to the preset limit, the _same_ SNR can rate differently on different presets — `-15 dB` is healthy on `LongSlow` but unusable on `ShortFast`. Letting `limit` be the active preset's SNR Limit, here is how the app picks the bars (or color):
-| Level | Bars | Criteria | Meaning |
-| ----- | ---- | ------------------------------------ | ---------------------------------------------------------------------------------------- |
-| 良好 | 3 | SNR **above** the preset's `limit` | Signal is comfortably above the demodulation floor — healthy connection. |
-| 一般 | 2 | within `5.5 dB` below the `limit` | Decodable, but getting close to the floor. |
-| 差 | 1 | within `7.5 dB` below the `limit` | At the very edge of what the preset can recover. |
-| 无 | 0 | more than `7.5 dB` below the `limit` | Below the floor — transmission lost to noise. |
+| Level | Bars | Criteria | Meaning |
+| ----- | ---- | ----------------------------------------------- | ---------------------------------------------------------------------------------------- |
+| 良好 | 3 | SNR **above** the preset's `limit` | Signal is comfortably above the demodulation floor — healthy connection. |
+| 一般 | 2 | up to `5.5 dB` below the `limit` | Decodable, but getting close to the floor. |
+| 差 | 1 | between `5.5 dB` and `7.5 dB` below the `limit` | At the very edge of what the preset can recover. |
+| 无 | 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.
diff --git a/docs/zh-rCN/user/telemetry-and-sensors.md b/docs/zh-rCN/user/telemetry-and-sensors.md
index cba4443ab..6768e7d5f 100644
--- a/docs/zh-rCN/user/telemetry-and-sensors.md
+++ b/docs/zh-rCN/user/telemetry-and-sensors.md
@@ -103,7 +103,9 @@ Nodes with particulate matter or CO₂ sensors report air quality data:
| PM10 | µg/m³ | Coarse particulate matter |
| CO₂ | ppm | Carbon dioxide concentration |
-The CO₂ reading is color-coded by severity (Good → Stuffy → Poor → Unsafe → Evacuate). See [Node Metrics — Air Quality](node-metrics#air-quality-metrics) for the exact ppm bands and colors.
+CO₂ sensors such as the SCD4x also report their own temperature and humidity, which appear alongside the readings above. From PM2.5 history the app additionally derives an **EPA NowCast AQI** value.
+
+The CO₂ reading is color-coded by severity (Good → Stuffy → Poor → Unsafe → Evacuate). See [Node Metrics — Air Quality](node-metrics#air-quality-metrics) for the exact ppm bands, colors, and AQI detail.
Air quality data can be viewed as info cards on the node detail screen, charted over time, and exported to CSV.
diff --git a/docs/zh-rCN/user/translate.md b/docs/zh-rCN/user/translate.md
index fb33c9068..e55a39556 100644
--- a/docs/zh-rCN/user/translate.md
+++ b/docs/zh-rCN/user/translate.md
@@ -18,11 +18,11 @@ Contributing translations helps make Meshtastic accessible to a wider audience.
## What Gets Translated
-| Resource | Source Location | 注 |
-| ----------------- | ------------------------------------- | ---------------------------------------------------------------------- |
-| UI strings | `composeResources/values/strings.xml` | Buttons, labels, messages, and all user-visible text |
-| User Guide pages | `docs/user/*.md` | In-app documentation shown in Help & Documentation |
-| Fastlane metadata | `fastlane/metadata/android/en-US/` | App Store listing title, description, and changelogs |
+| Resource | Source Location | 注 |
+| ----------------- | ------------------------------------------------------------------- | ---------------------------------------------------------------------- |
+| UI strings | `core/resources/src/commonMain/composeResources/values/strings.xml` | Buttons, labels, messages, and all user-visible text |
+| User Guide pages | `docs/en/user/*.md` | In-app documentation shown in Help & Documentation |
+| Fastlane metadata | `fastlane/metadata/android/en-US/` | App Store listing title, description, and changelogs |
> ⚠️ **Note:** Developer Guide pages are English-only. Code-focused documentation targeting contributors is not translated.
diff --git a/docs/zh-rCN/user/units-and-locale.md b/docs/zh-rCN/user/units-and-locale.md
index 749c612c1..ef7aa8fd8 100644
--- a/docs/zh-rCN/user/units-and-locale.md
+++ b/docs/zh-rCN/user/units-and-locale.md
@@ -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 uses the `MetricFormatter` utility to convert and display values in whatever unit system your device's locale specifies.
+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.
On Android, your measurement preferences are determined by your system **Language & Region** settings. On Desktop (JVM), the app uses the JVM's default `Locale`.
@@ -115,12 +115,13 @@ On Android, your measurement system (metric vs imperial) is tied to your region
2. Change your **Region** or **Measurement units** preference
3. Return to Meshtastic — values update immediately
-> 💡 **Tip:** The app uses `MetricFormatter` from `core:common`. All measurement formatting is handled by a shared KMP utility that respects your platform's locale. Developers adding new measurement displays should use `MetricFormatter` rather than hard-coding unit conversions.
+> 💡 **Tip:** All measurement formatting is handled centrally and respects your platform's locale, so units stay consistent everywhere in the app.
## Related Topics
- [Node Metrics](node-metrics) — where temperature, distance, and sensor values are displayed
- [Telemetry & Sensors](telemetry-and-sensors) — the sensors that produce these measurements
+- [Measurement & Formatting](../developer/measurement) — developer reference for the formatting utilities
- [Settings — Radio & User](settings-radio-user) — region setting that drives unit selection
---
diff --git a/docs/zh-rTW/user/android-auto.md b/docs/zh-rTW/user/android-auto.md
index 15888b2e8..f005b718f 100644
--- a/docs/zh-rTW/user/android-auto.md
+++ b/docs/zh-rTW/user/android-auto.md
@@ -2,7 +2,7 @@
title: Android Auto
parent: User Guide
nav_order: 18
-last_updated: 2026-06-11
+last_updated: 2026-07-07
description: Use Meshtastic hands-free on an Android Auto head unit — read messages aloud, reply by voice, and check nodes and mesh status while driving.
aliases:
- android-auto
@@ -17,9 +17,11 @@ Meshtastic integrates with Android Auto so you can stay in touch with your mesh
> ⚠️ **Note:** Android Auto support is available on **Google-flavor Android builds only**. It is not included in the F-Droid build, and it is not available on Desktop or iOS.
+> ℹ️ **What ships today:** The Google Play build provides **notification-only** car messaging — incoming messages are announced on the head unit and you reply through its notification controls. The full tabbed **Messages / Nodes / Status** experience described below is a beta built on the Android Car App Library (Google's templated car UI is currently restricted to Closed/Internal Play tracks), so it appears only in builds compiled with `-PenableCarTemplates=true`. The rest of this page documents that beta experience.
+
## 總覽
-When your phone is connected to an Android Auto head unit (or the Desktop Head Unit emulator used for development), Meshtastic appears as a messaging app built with the Android Car App Library. The car interface presents a tabbed Home screen optimized for driving-safe, glanceable use:
+When your phone is connected to an Android Auto head unit (or the Desktop Head Unit emulator used for development), the beta build presents Meshtastic as a messaging app built with the Android Car App Library, with a tabbed Home screen optimized for driving-safe, glanceable use:
- **Messages** — recent conversations, with hands-free reading and replies.
- **Nodes** — the mesh node list, with a node-detail view.
diff --git a/docs/zh-rTW/user/connections.md b/docs/zh-rTW/user/connections.md
index 3ab6a453f..8aa668e09 100644
--- a/docs/zh-rTW/user/connections.md
+++ b/docs/zh-rTW/user/connections.md
@@ -23,7 +23,7 @@ Meshtastic 支援多種傳輸方式,以便您的手機或電腦與無線電節
1. 請確認您的 Meshtastic 無線電裝置已開機,並進入配對模式。
2. 開啟應用程式,並前往「連線」頁籤。
-3. 點選「掃描裝置」——附近的 Meshtastic 無線電裝置將會顯示。
+3. Tap **Scan for Bluetooth devices** — nearby Meshtastic radios will appear.
4. 從清單中選取您的裝置。
5. 若出現藍牙配對提示,請點選接受。
diff --git a/docs/zh-rTW/user/desktop.md b/docs/zh-rTW/user/desktop.md
index e19482298..07402baca 100644
--- a/docs/zh-rTW/user/desktop.md
+++ b/docs/zh-rTW/user/desktop.md
@@ -2,7 +2,7 @@
title: 桌面版應用程式
parent: 使用者指南
nav_order: 14
-last_updated: 2026-06-11
+last_updated: 2026-07-07
description: 在 Linux、macOS 及 Windows 上安裝並使用 Meshtastic 桌面版應用程式——涵蓋連線方式、功能對等性與鍵盤快速鍵。
aliases:
- 桌面
@@ -60,19 +60,19 @@ Meshtastic 桌面版應用程式透過 Kotlin Multiplatform 與 Android 版共
## 功能對等性
-| 功能 | Android | 桌面版 | 備註 |
-| -------------------------------------------- | ------- | --- | ---------------------------------------------- |
-| 訊息傳送 | ✓ | ✓ | 完全對等 |
-| 節點清單 | ✓ | ✓ | 完全對等 |
-| 地圖 | ✓ | ✓ | 完全對等 |
-| 設定 | ✓ | ✓ | 完全對等 |
-| 藍牙(BLE) | ✓ | ✓ | 桌面版透過 Kable 支援 |
-| 韌體 OTA 更新 | ✓ | ✗ | 使用網頁燒錄工具 |
-| 通知 | ✓ | ✓ | 原生作業系統通知 |
-| 小工具 | ✓ | ✗ | 僅限 Android |
-| Android Auto | ✓ | ✗ | Android-only — not available on Desktop or iOS |
-| AI 助理(Chirpy) | ✓\* | ✗ | 僅限 Google 版 Android |
-| App Functions (system AI) | ✓† | ✗ | 僅限 Google 版 Android |
+| 功能 | Android | 桌面版 | 備註 |
+| -------------------------------------------- | ------- | --- | -------------------------------------------------------------------------- |
+| 訊息傳送 | ✓ | ✓ | 完全對等 |
+| 節點清單 | ✓ | ✓ | 完全對等 |
+| 地圖 | ✓ | ◐ | Map tab exists on desktop, but the interactive map view is Android-only |
+| 設定 | ✓ | ✓ | 完全對等 |
+| 藍牙(BLE) | ✓ | ✓ | 桌面版透過 Kable 支援 |
+| 韌體更新 | ✓ | ◐ | Desktop supports in-app USB firmware update; BLE/Wi-Fi OTA is Android-only |
+| 通知 | ✓ | ✓ | 原生作業系統通知 |
+| 小工具 | ✓ | ✗ | 僅限 Android |
+| Android Auto | ✓ | ✗ | Android-only — not available on Desktop or iOS |
+| AI 助理(Chirpy) | ✓\* | ✗ | 僅限 Google 版 Android |
+| App Functions (system AI) | ✓† | ✗ | 僅限 Google 版 Android |
\*Chirpy AI 需要 Google 版 Android 14 以上版本,且須搭配支援的硬體。
@@ -84,14 +84,17 @@ Meshtastic 桌面版應用程式透過 Kotlin Multiplatform 與 Android 版共
### 鍵盤快速鍵
-| 快速鍵 | 動作 |
-| ------------------- | ------- |
-| **⌘Q** / **Ctrl+Q** | 結束應用程式 |
-| **⌘,** / **Ctrl+,** | 開啟設定 |
-| **⌘1** / **Ctrl+1** | 切換至訊息頁籤 |
-| **⌘2** / **Ctrl+2** | 切換至節點頁籤 |
-| **⌘3** / **Ctrl+3** | 切換至地圖頁籤 |
-| **⌘4** / **Ctrl+4** | 切換至連線頁籤 |
+All shortcuts use the **Meta** key — that's ⌘ (Command) on macOS and the Super / Windows key on Linux and Windows. (`Ctrl` is not bound.)
+
+| 快速鍵 | 動作 |
+| ---------- | ---------- |
+| **Meta+Q** | 結束應用程式 |
+| **Meta+,** | 開啟設定 |
+| **Meta+1** | 切換至訊息頁籤 |
+| **Meta+2** | 切換至節點頁籤 |
+| **Meta+3** | 切換至地圖頁籤 |
+| **Meta+4** | 切換至連線頁籤 |
+| **Meta+/** | Open About |
### 視窗與系統匣
@@ -123,7 +126,6 @@ Meshtastic 桌面版應用程式透過 Kotlin Multiplatform 與 Android 版共
```bash
git clone https://github.com/meshtastic/Meshtastic-Android.git
cd Meshtastic-Android
-git submodule update --init
./gradlew :desktopApp:run
```
@@ -134,7 +136,8 @@ git submodule update --init
## 已知限制
-- 不支援 OTA 韌體更新(請使用網頁燒錄工具)
+- 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
- 部分 Android 專屬功能(小工具、特定通知頻道)無法使用
- 在低規格硬體上執行 Compose Desktop 時,效能可能有所不同
- 桌面版尚不支援 BLE 綁定(配對功能可在不綁定的情況下正常使用)
@@ -142,7 +145,7 @@ git submodule update --init
## 相關主題
- 〔連線〕(connections) — 連線方式概覽
-- 〔韌體更新〕(firmware) — 桌面版韌體更新請使用〔網頁燒錄工具〕(https://flasher.meshtastic.org)
+- [Firmware Updates](firmware) — in-app USB update on desktop, or the [Web Flasher](https://flasher.meshtastic.org)
---
diff --git a/docs/zh-rTW/user/discovery.md b/docs/zh-rTW/user/discovery.md
index 73e987672..731320e46 100644
--- a/docs/zh-rTW/user/discovery.md
+++ b/docs/zh-rTW/user/discovery.md
@@ -44,7 +44,6 @@ Before starting, configure these controls:
The **Start** button stays disabled — with an explanation of why — until the scan can run. Common reasons it's disabled:
- The device is **not connected**.
-- The current channel is using the **default channel key** (use a unique key first — see [Messages & Channels](messages-and-channels)).
- **No presets** have been selected to scan.
- The selected preset uses **2.4 GHz**, which your hardware doesn't support.
diff --git a/docs/zh-rTW/user/firmware.md b/docs/zh-rTW/user/firmware.md
index 87a396a7b..0d370d7b0 100644
--- a/docs/zh-rTW/user/firmware.md
+++ b/docs/zh-rTW/user/firmware.md
@@ -2,8 +2,8 @@
title: 韌體更新
parent: 使用者指南
nav_order: 13
-last_updated: 2026-05-13
-description: 透過藍牙更新您的無線電裝置韌體 — 包含 OTA 流程、版本頻道、更新前檢查與復原機制。
+last_updated: 2026-07-07
+description: Update your radio firmware over Bluetooth or USB — OTA process, version channels, pre-flight checks, and recovery.
aliases:
- 韌體
- 更新
@@ -17,7 +17,7 @@ aliases:
## 檢查更新
-1. 前往「設定 → 韌體更新」,或點選顯示的韌體通知。
+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.
2. 應用程式將檢查可用的韌體版本。
3. 如有可用更新將顯示版本號碼與更新記錄摘要。
@@ -39,19 +39,26 @@ Android 使用者最常用的更新方式:

-### USB 燒錄
+### In-App USB Update
-適用於裝置復原,或 OTA 無法使用的情況:
+When your radio is connected over **USB/serial** (rather than Bluetooth), the Firmware Update screen offers **USB File Transfer**. The app reboots the device into DFU mode, then prompts you to save the `.uf2` file to the device's DFU drive using the system file picker. This option appears only on a USB/serial connection — it is not available over Bluetooth.
+
+> ℹ️ **nRF bootloader note:** Some devices (e.g. RAK WisBlock RAK4631) need their bootloader flashed with the vendor's serial DFU tool (such as `adafruit-nrfutil`) — copying the `.uf2` alone won't update the bootloader. The app surfaces a hint when this applies.
+
+### Other Flashing Options
+
+For recovery or when neither OTA nor in-app USB is available:
- 請使用〔Meshtastic 網頁燒錄工具〕(https://flasher.meshtastic.org)
- 或在桌面版使用〔Meshtastic CLI 工具〕(https://meshtastic.org/docs/getting-started/flashing-firmware)
## 版本頻道
-| 頻道 | 描述說明 |
-| --------- | ------------------- |
-| 穩定版 | 建議大多數使用者採用;已測試的正式版本 |
-| Alpha 測試版 | 預覽版本;可能包含錯誤 |
+| 頻道 | 描述說明 |
+| --------- | -------------------------------------------------------------------------- |
+| 穩定版 | 建議大多數使用者採用;已測試的正式版本 |
+| Alpha 測試版 | 預覽版本;可能包含錯誤 |
+| 本機檔案 | Flash a firmware file you select yourself, instead of a downloaded release |
## 更新前檢查清單
@@ -73,7 +80,7 @@ Once the update succeeds:
- 無線電裝置將自動重新開機
- 藍牙連線將自動重新建立
- 確認您的設定完整無缺
-- 在「設定 → 關於」中確認韌體版本
+- Confirm the new version under **Currently Installed** on the Firmware Update screen — it's also shown on the node's detail page and the Connections screen

diff --git a/docs/zh-rTW/user/messages-and-channels.md b/docs/zh-rTW/user/messages-and-channels.md
index 9a4bd1f11..b5185d029 100644
--- a/docs/zh-rTW/user/messages-and-channels.md
+++ b/docs/zh-rTW/user/messages-and-channels.md
@@ -116,12 +116,16 @@ You can search the full history of any conversation directly from the chat scree

-> 💡 **Tip:** Search is full-text and stays within the conversation you opened it from — it doesn't search across other channels or contacts. Matching is fast even on long histories because messages are indexed locally.
+> 💡 **Tip:** Search is full-text and stays within the conversation you opened it from — it doesn't search across other channels or contacts. It matches against the messages already stored on your device, so it works fully offline.
### 訊息泡泡
訊息以對話泡泡的形式顯示 — 已傳送的訊息在右側,收到的訊息在左側。 每個泡泡顯示傳送者、時間戳記及傳遞狀態。 含有回覆的訊息,會在回覆內容上方顯示原始訊息的引用預覽。
+### Mentions
+
+Type `@` while composing to mention a node — a picker suggests matching contacts as you type. In a received message, a mention appears as a highlighted chip showing the node's name; tap it to jump straight to that node's detail page.
+
### 訊息回應
以表情符號對訊息作出回應:
@@ -143,6 +147,7 @@ You can search the full history of any conversation directly from the chat scree
- 複製 — 將訊息文字複製至剪貼簿
- 回覆 — 在回覆中引用該訊息
- 回應 — 新增表情符號回應
+- **Translate** — translate a received message into your device language and toggle between the original and translated text (Google Play build only; uses on-device translation)
- 刪除 — 移除您傳送的訊息(僅限本機刪除)
### 訊息優先順序
diff --git a/docs/zh-rTW/user/mqtt.md b/docs/zh-rTW/user/mqtt.md
index 40c7eb437..b440a5a9a 100644
--- a/docs/zh-rTW/user/mqtt.md
+++ b/docs/zh-rTW/user/mqtt.md
@@ -56,6 +56,8 @@ MQTT 模組可將您的節點連接至 MQTT 代理伺服器,實現以下功能
社群在 mqtt.meshtastic.org 維護一個公開的代理伺服器。 此伺服器供一般使用與測試之用。
+> ℹ️ **Note:** Connections to `mqtt.meshtastic.org` always use TLS (port 8883), even if the TLS toggle is off. For any other broker, TLS is used only when you enable it (port 8883 with TLS, 1883 without).
+
> 🔒 隱私:公開代理伺服器上的訊息,任何訂閱者均可讀取。 私人通訊請務必啟用頻道加密。
### 私有代理伺服器
diff --git a/docs/zh-rTW/user/node-metrics.md b/docs/zh-rTW/user/node-metrics.md
index f04f58258..9ec3c18eb 100644
--- a/docs/zh-rTW/user/node-metrics.md
+++ b/docs/zh-rTW/user/node-metrics.md
@@ -55,12 +55,15 @@ The BME680 **IAQ (Indoor Air Quality)** index is a single 0–500+ value derived
Air Quality is a dedicated metrics view for nodes equipped with a particulate-matter and/or CO₂ sensor. It is **separate from the BME680 IAQ reading** listed under Environment Metrics — IAQ is a single gas-resistance-derived index, while the Air Quality view charts the underlying particulate and CO₂ measurements.
-| 公制(公里/公尺) | 單位 | 描述說明 |
-| --------------------- | ----- | ---------------------------------------------------- |
-| PM1.0 | µg/m³ | Particulate matter up to 1.0 micron |
-| PM2.5 | µg/m³ | Particulate matter up to 2.5 microns |
-| PM10 | µg/m³ | Particulate matter up to 10 microns |
-| CO₂ | ppm | Carbon dioxide concentration |
+| 公制(公里/公尺) | 單位 | 描述說明 |
+| --------------------- | --------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| PM1.0 | µg/m³ | Particulate matter up to 1.0 micron |
+| PM2.5 | µg/m³ | Particulate matter up to 2.5 microns |
+| PM10 | µg/m³ | Particulate matter up to 10 microns |
+| AQI | EPA index | EPA **NowCast** AQI computed from your recent PM2.5 history, with a color-coded severity label. Shown next to PM2.5 once enough readings have accumulated. |
+| CO₂ | ppm | Carbon dioxide concentration |
+| CO₂ temperature | °C / °F | Temperature reported by the CO₂ sensor itself (e.g. SCD4x) |
+| CO₂ humidity | % | Relative humidity reported by the CO₂ sensor |
CO₂ readings are color-coded by severity to make air quality easy to read at a glance:
@@ -98,12 +101,12 @@ Radio signal quality information:
Signal quality is rated from **SNR relative to the active LoRa modem preset's demodulation floor**, not from fixed thresholds — a given SNR means different things on different presets (e.g. −15 dB is fine on LongSlow but unusable on ShortFast). RSSI is shown but is not part of the rating. Letting `limit` be the preset's SNR limit:
-| Quality | Criteria |
-| ------- | ------------------------------------------------ |
-| 良好 | SNR above the preset's limit |
-| 普通 | within 5.5 dB below the limit |
-| 不良 | within 7.5 dB below the limit |
-| 無 | more than 7.5 dB below the limit |
+| Quality | Criteria |
+| ------- | ------------------------------------------------------------------------- |
+| 良好 | SNR above the preset's limit |
+| 普通 | up to 5.5 dB below the limit |
+| 不良 | between 5.5 dB and 7.5 dB below the limit |
+| 無 | more than 7.5 dB below the limit |
See [Understanding the Signal Meter](signal-meter) for the full explanation.
diff --git a/docs/zh-rTW/user/settings-radio-user.md b/docs/zh-rTW/user/settings-radio-user.md
index 369e3497f..498dd94b8 100644
--- a/docs/zh-rTW/user/settings-radio-user.md
+++ b/docs/zh-rTW/user/settings-radio-user.md
@@ -74,6 +74,8 @@ After modifying settings, tap **Save** to write the configuration to your radio.
| ~~Long Slow~~ | ~30 km | 0.18 kbps | −17.5 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.
+
#### Choosing a Modem Preset
The modem preset controls the fundamental tradeoff between **range** and **data rate**:
diff --git a/docs/zh-rTW/user/signal-meter.md b/docs/zh-rTW/user/signal-meter.md
index 84d83ea34..aee0e2dd1 100644
--- a/docs/zh-rTW/user/signal-meter.md
+++ b/docs/zh-rTW/user/signal-meter.md
@@ -78,10 +78,10 @@ The app rates your signal quality (None, Bad, Fair, or Good) from **SNR alone, m
Because the rating is relative to the preset limit, the _same_ SNR can rate differently on different presets — `-15 dB` is healthy on `LongSlow` but unusable on `ShortFast`. Letting `limit` be the active preset's SNR Limit, here is how the app picks the bars (or color):
-| Level | Bars | Criteria | Meaning |
-| ----- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------ | ---------------------------------------------------------------------------------------- |
-| 良好 | 3 | SNR **above** the preset's `limit` | Signal is comfortably above the demodulation floor — healthy connection. |
-| 普通 | 2 | within `5.5 dB` below the `limit` | Decodable, but getting close to the floor. |
+| Level | Bars | Criteria | Meaning |
+| ----- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------- | ---------------------------------------------------------------------------------------- |
+| 良好 | 3 | SNR **above** the preset's `limit` | Signal is comfortably above the demodulation floor — healthy connection. |
+| 普通 | 2 | up to `5.5 dB` below the `limit` | Decodable, but getting close to the floor. |
| 不良 | 1. **Overview**```
Meshtastic is a project that allows you to use inexpensive LoRa radios as a long range, off-grid, decentralized communication platform. These radios, combined with readily available and very affordable microcontrollers like the ESP32, nRF52, and RP2040, create a network that can be used to send text messages, share locations, and more without relying on cellular or WiFi infrastructure. It's perfect for hiking, camping, or any situation where you need to stay connected beyond the reach of traditional networks.
```2. **Key Components**```
@@ -200,8 +200,8 @@ Meshtastic is a project that allows you to use inexpensive LoRa radios as a long
- **Meshtastic Website:** [https://meshtastic.org/](https://meshtastic.org/)
- **Meshtastic Documentation:** [https://meshtastic.org/docs/](https://meshtastic.org/docs/)
- - **Meshtastic Forums:** [https://meshtastic.discourse.group/](https://meshtastic.discourse.group/) | within `7.5 dB` below the `limit` | At the very edge of what the preset can recover. |
-| 無 | 0 | more than `7.5 dB` below the `limit` | Below the floor — transmission lost to noise. |
+ - **Meshtastic Forums:** [https://meshtastic.discourse.group/](https://meshtastic.discourse.group/) | between `5.5 dB` and `7.5 dB` below the `limit` | At the very edge of what the preset can recover. |
+| 無 | 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.
diff --git a/docs/zh-rTW/user/telemetry-and-sensors.md b/docs/zh-rTW/user/telemetry-and-sensors.md
index 356839451..980820c03 100644
--- a/docs/zh-rTW/user/telemetry-and-sensors.md
+++ b/docs/zh-rTW/user/telemetry-and-sensors.md
@@ -103,7 +103,9 @@ Nodes with particulate matter or CO₂ sensors report air quality data:
| PM10 | µg/m³ | Coarse particulate matter |
| CO₂ | ppm | Carbon dioxide concentration |
-The CO₂ reading is color-coded by severity (Good → Stuffy → Poor → Unsafe → Evacuate). See [Node Metrics — Air Quality](node-metrics#air-quality-metrics) for the exact ppm bands and colors.
+CO₂ sensors such as the SCD4x also report their own temperature and humidity, which appear alongside the readings above. From PM2.5 history the app additionally derives an **EPA NowCast AQI** value.
+
+The CO₂ reading is color-coded by severity (Good → Stuffy → Poor → Unsafe → Evacuate). See [Node Metrics — Air Quality](node-metrics#air-quality-metrics) for the exact ppm bands, colors, and AQI detail.
Air quality data can be viewed as info cards on the node detail screen, charted over time, and exported to CSV.
diff --git a/docs/zh-rTW/user/translate.md b/docs/zh-rTW/user/translate.md
index 7dd11f266..478b322be 100644
--- a/docs/zh-rTW/user/translate.md
+++ b/docs/zh-rTW/user/translate.md
@@ -18,11 +18,11 @@ Contributing translations helps make Meshtastic accessible to a wider audience.
## What Gets Translated
-| Resource | Source Location | 備註 |
-| ----------------- | ------------------------------------- | ---------------------------------------------------------------------- |
-| UI strings | `composeResources/values/strings.xml` | Buttons, labels, messages, and all user-visible text |
-| User Guide pages | `docs/user/*.md` | In-app documentation shown in Help & Documentation |
-| Fastlane metadata | `fastlane/metadata/android/en-US/` | App Store listing title, description, and changelogs |
+| Resource | Source Location | 備註 |
+| ----------------- | ------------------------------------------------------------------- | ---------------------------------------------------------------------- |
+| UI strings | `core/resources/src/commonMain/composeResources/values/strings.xml` | Buttons, labels, messages, and all user-visible text |
+| User Guide pages | `docs/en/user/*.md` | In-app documentation shown in Help & Documentation |
+| Fastlane metadata | `fastlane/metadata/android/en-US/` | App Store listing title, description, and changelogs |
> ⚠️ **Note:** Developer Guide pages are English-only. Code-focused documentation targeting contributors is not translated.
diff --git a/docs/zh-rTW/user/units-and-locale.md b/docs/zh-rTW/user/units-and-locale.md
index 0334c6de7..42f25a42b 100644
--- a/docs/zh-rTW/user/units-and-locale.md
+++ b/docs/zh-rTW/user/units-and-locale.md
@@ -14,7 +14,7 @@ The Meshtastic app automatically displays temperatures, distances, speeds, and t
## 運作方式
-Meshtastic radios always transmit data in **metric units** (meters, °C, km/h, hPa, etc.). When the app receives this data, it uses the `MetricFormatter` utility to convert and display values in whatever unit system your device's locale specifies.
+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.
On Android, your measurement preferences are determined by your system **Language & Region** settings. On Desktop (JVM), the app uses the JVM's default `Locale`.
@@ -115,12 +115,13 @@ On Android, your measurement system (metric vs imperial) is tied to your region
2. Change your **Region** or **Measurement units** preference
3. Return to Meshtastic — values update immediately
-> 💡 **Tip:** The app uses `MetricFormatter` from `core:common`. All measurement formatting is handled by a shared KMP utility that respects your platform's locale. Developers adding new measurement displays should use `MetricFormatter` rather than hard-coding unit conversions.
+> 💡 **Tip:** All measurement formatting is handled centrally and respects your platform's locale, so units stay consistent everywhere in the app.
## 相關主題
- [Node Metrics](node-metrics) — where temperature, distance, and sensor values are displayed
- [Telemetry & Sensors](telemetry-and-sensors) — the sensors that produce these measurements
+- [Measurement & Formatting](../developer/measurement) — developer reference for the formatting utilities
- [Settings — Radio & User](settings-radio-user) — region setting that drives unit selection
---