The Meshtastic app automatically displays temperatures, distances, speeds, and times in the units your device is configured to use — no settings to change inside the app.
+
+
How It Works
+
Meshtastic radios always transmit data in metric units (meters, °C, km/h, hPa, etc.). When the app receives this data, it hands it to your device's built-in formatting system, which converts and displays values in whatever unit system you've chosen in Settings → General → Language & Region.
+
+
The Language & Region screen controls how the Meshtastic app displays temperatures, distances, dates, numbers, and more. Key settings:
+
+
+
+
Setting
+
What It Controls in Meshtastic
+
+
+
+
+
Temperature
+
°C or °F for all sensor readings and weather
+
+
+
Measurement System
+
Metric (m, km, kg, mm) or US/UK (ft, mi, lbs, in)
+
+
+
Calendar
+
Calendar system for all dates
+
+
+
First Day of Week
+
Week start day in date displays
+
+
+
Date Format
+
Date ordering throughout the app
+
+
+
Number Format
+
Decimal separators and digit grouping
+
+
+
+
Tip — You never need to toggle units inside the app. Change your system measurement preferences and every screen in Meshtastic updates automatically — node details, telemetry charts, weather, altitude, and more.
+
Temperature
+
Temperature values from environment sensors and weather forecasts are transmitted as °C and displayed as either °C or °F based on your device's temperature unit preference.
+
+
+
+
Your Setting
+
You See
+
+
+
+
+
Celsius
+
22 °C
+
+
+
Fahrenheit
+
72 °F
+
+
+
+
This affects all temperature displays throughout the app: node environment telemetry, soil temperature, dew point, weather forecasts, and telemetry chart axes.
+
Distance & Altitude
+
Distances between nodes and GPS altitudes are transmitted as meters and automatically scaled and converted by the system.
+
+
+
+
Your Setting
+
Small Distance
+
Large Distance
+
Altitude
+
+
+
+
+
Metric
+
350 m
+
2.5 km
+
1,200 m
+
+
+
Imperial (US)
+
1,148 ft
+
1.6 mi
+
3,937 ft
+
+
+
+
The app uses natural scaling — short distances stay in meters or feet, while longer distances switch to kilometres or miles automatically.
+
Where these appear
+
+
Node list — distance and bearing to each node
+
Node detail — altitude, distance from your position
+
Map — waypoint distances, trace route hop distances
+
Compass — distance to selected node
+
Altitude chart — Y-axis labels adapt to your locale
+
+
Speed
+
GPS ground speed is displayed in your locale's preferred speed unit.
+
+
+
+
Your Setting
+
You See
+
+
+
+
+
Metric
+
12 km/h
+
+
+
Imperial (US)
+
7 mph
+
+
+
+
Speed appears on the GPS Status screen when your device has an active GPS fix.
+
Wind
+
Wind speed and gust data from environment sensors are transmitted as m/s and converted for display.
+
+
+
+
Your Setting
+
You See
+
+
+
+
+
Metric
+
5 m/s
+
+
+
Imperial (US)
+
11 mph
+
+
+
+
Wind readings appear in the Node Detail weather section and the Environment Telemetry log columns.
+
Weight
+
Weight telemetry is transmitted as kg and converted for display.
+
+
+
+
Your Setting
+
You See
+
+
+
+
+
Metric
+
24.5 kg
+
+
+
Imperial (US)
+
54.0 lbs
+
+
+
+
Rainfall
+
Rainfall measurements (1-hour and 24-hour totals) are transmitted as mm and converted for display.
+
+
+
+
Your Setting
+
You See
+
+
+
+
+
Metric
+
12 mm
+
+
+
Imperial (US)
+
0.5 in
+
+
+
+
Units That Never Change
+
Some units are international standards and are displayed the same way regardless of your locale:
+
+
+
+
Measurement
+
Unit
+
Why
+
+
+
+
+
Barometric pressure
+
hPa
+
International meteorological standard
+
+
+
Heading / bearing
+
° (degrees)
+
Universal navigation convention
+
+
+
Radiation
+
µR/hr
+
Standard dosimetry unit
+
+
+
GPS coordinates
+
decimal degrees
+
Universal geographic standard
+
+
+
Humidity, battery, soil moisture
+
%
+
Universal
+
+
+
+
Date & Time
+
All timestamps throughout the app — last heard, message times, telemetry logs, chart axes — follow your device's date and time preferences.
+
+
+
+
Setting
+
What It Controls
+
Example
+
+
+
+
+
24-Hour Time
+
Clock format
+
14:30 vs 2:30 PM
+
+
+
Date Format
+
Date ordering
+
09/05/2026 vs 05/09/2026 vs 2026-05-09
+
+
+
Calendar
+
Calendar system
+
Gregorian, Buddhist, Japanese, etc.
+
+
+
+
The app also uses relative time where it makes sense — for example, "5 min ago" or "2 hours ago" in the node list — which is automatically localised into your device language.
+
Changing Your Measurement System
+
Your measurement system (metric vs imperial) is tied to your region setting. To change it without changing your language:
+
+
Open Settings → General → Language & Region
+
Tap Measurement System
+
Choose Metric, US, or UK
+
+
The Meshtastic app picks up the change immediately — no restart needed.
+
Tip — UK vs US imperial. The UK measurement system uses miles for distance but stones for body weight and Celsius for temperature. The US system uses Fahrenheit and pounds. The app respects these distinctions automatically.
+
+
diff --git a/docs/assets/screenshots/MANUAL_SCREENSHOTS b/docs/assets/screenshots/MANUAL_SCREENSHOTS
new file mode 100644
index 000000000..7c222d59c
--- /dev/null
+++ b/docs/assets/screenshots/MANUAL_SCREENSHOTS
@@ -0,0 +1,9 @@
+# Manual Screenshots
+#
+# Screenshots in this directory that are NOT generated by snapshot tests.
+# These are captured manually (e.g., from iOS Simulator Settings screens)
+# and must not be deleted by automated cleanup scripts.
+#
+# Format: one filename per line, lines starting with # are comments.
+
+settingsLanguageRegion.png
diff --git a/docs/assets/screenshots/settingsLanguageRegion.png b/docs/assets/screenshots/settingsLanguageRegion.png
new file mode 100644
index 000000000..c13d7f784
Binary files /dev/null and b/docs/assets/screenshots/settingsLanguageRegion.png differ
diff --git a/docs/index.md b/docs/index.md
index 43f8227b6..6f6687b64 100644
--- a/docs/index.md
+++ b/docs/index.md
@@ -19,4 +19,5 @@ Use the sidebar navigation to browse the **User Guide** for app features and the
| [Getting Started](user/getting-started) | Connect your first radio and send a message |
| [Nodes List](user/nodes) | Understanding the mesh network node list |
| [Signal Meter](user/signal-meter) | How the LoRa signal quality meter works |
+| [Units & Locale](user/units-and-locale) | How temperatures, distances, and times adapt to your region |
| [Architecture](developer/architecture) | App architecture overview for contributors |
diff --git a/docs/user.md b/docs/user.md
index 573ec0530..fd3c3adc1 100644
--- a/docs/user.md
+++ b/docs/user.md
@@ -18,6 +18,8 @@ Documentation for using the Meshtastic iOS, iPadOS, macOS, watchOS, and visionOS
Keep the last 5–8 entries and archive older ones by removing them.
-->
+**May 2026** — [Units, Measurement & Locale](user/units-and-locale) — New page explaining how the app automatically adapts temperatures, distances, speeds, and times to your device's regional settings.
+
**May 2026** — [Messages & Channels](user/messages) — Channel conversations now load the most recent 50 messages with a Load More button for older history.
**May 2026** — [CarPlay](user/carplay) — Direct message list is now capped at 200 users sorted by most recent, improving performance on large meshes.
diff --git a/docs/user/units-and-locale.md b/docs/user/units-and-locale.md
new file mode 100644
index 000000000..b94f92441
--- /dev/null
+++ b/docs/user/units-and-locale.md
@@ -0,0 +1,137 @@
+---
+title: Units, Measurement & Locale
+parent: User Guide
+nav_order: 9
+---
+
+# Units, Measurement & Locale
+
+{: .fs-6 }
+The Meshtastic app automatically displays temperatures, distances, speeds, and times in the units your device is configured to use — no settings to change inside the app.
+
+---
+
+## How It Works
+
+Meshtastic radios always transmit data in **metric units** (meters, °C, km/h, hPa, etc.). When the app receives this data, it hands it to your device's built-in formatting system, which converts and displays values in whatever unit system you've chosen in **Settings → General → Language & Region**.
+
+
+
+The **Language & Region** screen controls how the Meshtastic app displays temperatures, distances, dates, numbers, and more. Key settings:
+
+| Setting | What It Controls in Meshtastic |
+|---|---|
+| **Temperature** | °C or °F for all sensor readings and weather |
+| **Measurement System** | Metric (m, km, kg, mm) or US/UK (ft, mi, lbs, in) |
+| **Calendar** | Calendar system for all dates |
+| **First Day of Week** | Week start day in date displays |
+| **Date Format** | Date ordering throughout the app |
+| **Number Format** | Decimal separators and digit grouping |
+
+> **Tip — You never need to toggle units inside the app.** Change your system measurement preferences and every screen in Meshtastic updates automatically — node details, telemetry charts, weather, altitude, and more.
+
+## Temperature
+
+Temperature values from environment sensors and weather forecasts are transmitted as **°C** and displayed as either **°C** or **°F** based on your device's temperature unit preference.
+
+| Your Setting | You See |
+|---|---|
+| Celsius | 22 °C |
+| Fahrenheit | 72 °F |
+
+This affects all temperature displays throughout the app: node environment telemetry, soil temperature, dew point, weather forecasts, and telemetry chart axes.
+
+## Distance & Altitude
+
+Distances between nodes and GPS altitudes are transmitted as **meters** and automatically scaled and converted by the system.
+
+| Your Setting | Small Distance | Large Distance | Altitude |
+|---|---|---|---|
+| Metric | 350 m | 2.5 km | 1,200 m |
+| Imperial (US) | 1,148 ft | 1.6 mi | 3,937 ft |
+
+The app uses natural scaling — short distances stay in meters or feet, while longer distances switch to kilometres or miles automatically.
+
+### Where these appear
+
+- **Node list** — distance and bearing to each node
+- **Node detail** — altitude, distance from your position
+- **Map** — waypoint distances, trace route hop distances
+- **Compass** — distance to selected node
+- **Altitude chart** — Y-axis labels adapt to your locale
+
+## Speed
+
+GPS ground speed is displayed in your locale's preferred speed unit.
+
+| Your Setting | You See |
+|---|---|
+| Metric | 12 km/h |
+| Imperial (US) | 7 mph |
+
+Speed appears on the **GPS Status** screen when your device has an active GPS fix.
+
+## Wind
+
+Wind speed and gust data from environment sensors are transmitted as **m/s** and converted for display.
+
+| Your Setting | You See |
+|---|---|
+| Metric | 5 m/s |
+| Imperial (US) | 11 mph |
+
+Wind readings appear in the **Node Detail** weather section and the **Environment Telemetry** log columns.
+
+## Weight
+
+Weight telemetry is transmitted as **kg** and converted for display.
+
+| Your Setting | You See |
+|---|---|
+| Metric | 24.5 kg |
+| Imperial (US) | 54.0 lbs |
+
+## Rainfall
+
+Rainfall measurements (1-hour and 24-hour totals) are transmitted as **mm** and converted for display.
+
+| Your Setting | You See |
+|---|---|
+| Metric | 12 mm |
+| Imperial (US) | 0.5 in |
+
+## Units That Never Change
+
+Some units are international standards and are displayed the same way regardless of your locale:
+
+| Measurement | Unit | Why |
+|---|---|---|
+| Barometric pressure | hPa | International meteorological standard |
+| Heading / bearing | ° (degrees) | Universal navigation convention |
+| Radiation | µR/hr | Standard dosimetry unit |
+| GPS coordinates | decimal degrees | Universal geographic standard |
+| Humidity, battery, soil moisture | % | Universal |
+
+## Date & Time
+
+All timestamps throughout the app — last heard, message times, telemetry logs, chart axes — follow your device's date and time preferences.
+
+| Setting | What It Controls | Example |
+|---|---|---|
+| **24-Hour Time** | Clock format | 14:30 vs 2:30 PM |
+| **Date Format** | Date ordering | 09/05/2026 vs 05/09/2026 vs 2026-05-09 |
+| **Calendar** | Calendar system | Gregorian, Buddhist, Japanese, etc. |
+
+The app also uses **relative time** where it makes sense — for example, "5 min ago" or "2 hours ago" in the node list — which is automatically localised into your device language.
+
+## Changing Your Measurement System
+
+Your measurement system (metric vs imperial) is tied to your region setting. To change it without changing your language:
+
+1. Open **Settings → General → Language & Region**
+2. Tap **Measurement System**
+3. Choose **Metric**, **US**, or **UK**
+
+The Meshtastic app picks up the change immediately — no restart needed.
+
+> **Tip — UK vs US imperial.** The UK measurement system uses miles for distance but stones for body weight and Celsius for temperature. The US system uses Fahrenheit and pounds. The app respects these distinctions automatically.
diff --git a/scripts/cleanup-screenshots.sh b/scripts/cleanup-screenshots.sh
new file mode 100755
index 000000000..8b37efd0a
--- /dev/null
+++ b/scripts/cleanup-screenshots.sh
@@ -0,0 +1,69 @@
+#!/usr/bin/env bash
+# scripts/cleanup-screenshots.sh
+# Removes orphaned screenshots from docs/assets/screenshots/ that are:
+# 1. NOT referenced by any markdown file under docs/
+# 2. NOT listed in the MANUAL_SCREENSHOTS manifest
+#
+# Usage: bash scripts/cleanup-screenshots.sh [--dry-run]
+#
+# With --dry-run, prints what would be deleted without removing anything.
+
+set -euo pipefail
+
+DRY_RUN=false
+while [[ $# -gt 0 ]]; do
+ case "$1" in
+ --dry-run) DRY_RUN=true; shift ;;
+ *) echo "Unknown option: $1" >&2; exit 1 ;;
+ esac
+done
+
+REPO_ROOT="$(cd "$(dirname "$0")/.." && pwd)"
+DOCS_DIR="$REPO_ROOT/docs"
+SOURCE_DIR="$DOCS_DIR/assets/screenshots"
+MANIFEST="$SOURCE_DIR/MANUAL_SCREENSHOTS"
+
+if [[ ! -d "$SOURCE_DIR" ]]; then
+ echo "No screenshots directory found at $SOURCE_DIR"
+ exit 0
+fi
+
+# Build set of referenced filenames from markdown
+referenced=$(grep -roh 'screenshots/[^")*]*\.png' "$DOCS_DIR" --include='*.md' \
+ | sed 's|screenshots/||' \
+ | sort -u)
+
+# Build set of manually maintained filenames from manifest
+manual=""
+if [[ -f "$MANIFEST" ]]; then
+ manual=$(grep -v '^\s*#' "$MANIFEST" | grep -v '^\s*$' | sort -u)
+fi
+
+# Combine into a single keep-list
+keep=$(printf '%s\n%s' "$referenced" "$manual" | grep -v '^\s*$' | sort -u)
+
+removed=0
+kept=0
+for file in "$SOURCE_DIR"/*.png; do
+ [[ -f "$file" ]] || continue
+ filename=$(basename "$file")
+ if echo "$keep" | grep -qx "$filename"; then
+ kept=$((kept + 1))
+ else
+ if $DRY_RUN; then
+ echo "Would remove: $filename"
+ else
+ rm "$file"
+ echo "Removed: $filename"
+ fi
+ removed=$((removed + 1))
+ fi
+done
+
+if $DRY_RUN; then
+ echo ""
+ echo "Dry run complete: $removed orphaned, $kept referenced/manual"
+else
+ echo ""
+ echo "Cleanup complete: removed $removed orphaned, kept $kept screenshots"
+fi
diff --git a/scripts/copy-snapshots.sh b/scripts/copy-snapshots.sh
index 2cbfe4fbd..8dac720ab 100755
--- a/scripts/copy-snapshots.sh
+++ b/scripts/copy-snapshots.sh
@@ -40,3 +40,7 @@ for filename in $referenced; do
done
echo "Copied $copied doc-referenced screenshots to $OUTPUT_DIR"
+
+# Clean up orphaned screenshots from the source directory
+SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
+bash "$SCRIPT_DIR/cleanup-screenshots.sh"