Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
19 commits
Select commit Hold shift + click to select a range
b682373
feat: export whole device configuration (#1924)
bruschill Jun 15, 2026
77bc266
docs: sync settings deep-link table with SettingsNavigationState
bruschill Jun 15, 2026
2a83b92
Merge remote-tracking branch 'upstream/main' into pr-1940-merge
bruschill Jun 18, 2026
7de98d7
Merge remote-tracking branch 'upstream/main' into feat/export-device-…
bruschill Jun 29, 2026
f57b92a
fix(export): clear stale admin keys, refresh isRouter, harden export UX
bruschill Jun 30, 2026
327840b
fix(export): confirm before export, Android-style filename, stable UT…
bruschill Jun 30, 2026
0a78ff6
fix(export): clear all admin-key slots on empty security config
bruschill Jun 30, 2026
bd56631
Merge remote-tracking branch 'upstream/main' into feat/export-device-…
bruschill Jun 30, 2026
5d49734
Merge branch 'main' into feat/export-device-config
bruschill Jul 3, 2026
afac3fc
feat: import whole device configuration
bruschill Jul 3, 2026
c16be34
docs: regenerate bundled deep-links HTML to match source
bruschill Jul 3, 2026
477ae43
Merge branch 'feat/export-device-config' into feat/import-device-config
bruschill Jul 3, 2026
6052768
docs: document Settings → Tools (Export & Import Configuration)
bruschill Jul 3, 2026
784fa01
Harden partial import + localize the import/export UI strings
bruschill Jul 3, 2026
e0e3bc1
Merge remote-tracking branch 'upstream/main' into feat/import-device-…
bruschill Jul 3, 2026
ae32d5c
Address CodeRabbit review: safe channel casts, doc/test polish
bruschill Jul 3, 2026
5a3f977
feat(import): partial config import — preserve node keys when the pro…
bruschill Jul 13, 2026
dd6d41f
Merge remote-tracking branch 'upstream/main' into feat/import-device-…
bruschill Jul 17, 2026
3944c16
Merge remote-tracking branch 'upstream/main' into feat/import-device-…
bruschill Jul 17, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
133 changes: 133 additions & 0 deletions Localizable.xcstrings
Original file line number Diff line number Diff line change
Expand Up @@ -12492,6 +12492,21 @@
}
}
}
},
"Apply Configuration" : {

},
"Apply a saved configuration file (radio, module, and channel settings) to the connected node." : {

},
"Apply the selected configuration to the connected node?" : {

},
"Apply this saved configuration to %@." : {

},
"Applying LoRa/channel settings reboots the radio; it will briefly disconnect." : {

},
"Approximate Location" : {
"localizations" : {
Expand Down Expand Up @@ -16870,6 +16885,9 @@
}
}
}
},
"Canned Message" : {

},
"Canned Messages" : {
"localizations" : {
Expand Down Expand Up @@ -18016,6 +18034,9 @@
}
}
}
},
"Changes this node's identity (private/public key) and admin keys — can break existing direct messages and lock local administration." : {

},
"Channel" : {
"localizations" : {
Expand Down Expand Up @@ -19856,6 +19877,9 @@
}
}
}
},
"Channel changes may have partially applied. Re-import Channels & LoRa to bring the node to a consistent state." : {

},
"Channel number must be between 0 and 7." : {
"localizations" : {
Expand Down Expand Up @@ -20050,6 +20074,9 @@
}
}
}
},
"Channels & LoRa" : {

},
"Channels Help" : {
"localizations" : {
Expand Down Expand Up @@ -22836,6 +22863,15 @@
}
}
}
},
"Connect to a node to export its configuration." : {

},
"Connect to a node to import a configuration." : {

},
"Connect to a radio before importing." : {

},
"Connect to new radio?" : {
"extractionState" : "stale",
Expand Down Expand Up @@ -37632,6 +37668,15 @@
}
}
}
},
"Export Configuration" : {

},
"Export Device Configuration" : {

},
"Export Failed" : {

},
"External Notification" : {
"localizations" : {
Expand Down Expand Up @@ -48112,6 +48157,9 @@
}
}
}
},
"Import Configuration" : {

},
"Import Custom .p12" : {
"localizations" : {
Expand Down Expand Up @@ -48182,6 +48230,9 @@
}
}
}
},
"Import Device Configuration" : {

},
"Import Error" : {
"localizations" : {
Expand Down Expand Up @@ -48252,6 +48303,9 @@
}
}
}
},
"Import Failed" : {

},
"Import Route" : {
"localizations" : {
Expand Down Expand Up @@ -48340,6 +48394,12 @@
}
}
}
},
"Import cancelled — sent %lld of %lld setting%@." : {

},
"Import stopped after a failure — sent %lld setting%@ first." : {

},
"Important Notes" : {
"comment" : "A section of the UF2 firmware update",
Expand Down Expand Up @@ -48600,6 +48660,9 @@
}
}
}
},
"Includes %@. Only import files from a source you trust." : {

},
"Incoming Messages" : {
"localizations" : {
Expand Down Expand Up @@ -49536,6 +49599,9 @@
}
}
}
},
"It replaces this node's identity and admin keys, which can break existing direct messages." : {

},
"JSON Enabled" : {
"extractionState" : "stale",
Expand Down Expand Up @@ -52330,6 +52396,9 @@
}
}
}
},
"LoRa Region" : {

},
"Load Earlier Messages" : {
"comment" : "A button that loads older messages.",
Expand Down Expand Up @@ -54539,6 +54608,9 @@
}
}
}
},
"MQTT password" : {

},
"Manage Channels" : {
"localizations" : {
Expand Down Expand Up @@ -58276,6 +58348,9 @@
}
}
}
},
"Modules" : {

},
"Most nodes discovered on **%@** (%lld nodes)" : {
"comment" : "A heading that highlights the best preset based on the number of unique nodes discovered. The argument is the name of the best preset, and the second argument is the number of unique nodes discovered.",
Expand Down Expand Up @@ -62558,6 +62633,9 @@
}
}
}
},
"Not Applied" : {

},
"Not Now" : {
"comment" : "A button that dismisses a sheet.",
Expand Down Expand Up @@ -66250,6 +66328,9 @@
}
}
}
},
"Owner Name" : {

},
"PAX Counter" : {
"localizations" : {
Expand Down Expand Up @@ -73086,6 +73167,9 @@
}
}
}
},
"Radio & Device" : {

},
"Radio Configuration" : {
"localizations" : {
Expand Down Expand Up @@ -74625,6 +74709,9 @@
}
}
}
},
"Reconnect to the node to confirm the changes were applied." : {

},
"Recorded trace route paths showing the hops a message took through the mesh to reach this node." : {
"localizations" : {
Expand Down Expand Up @@ -78111,6 +78198,9 @@
}
}
}
},
"Ringtone & Canned Messages" : {

},
"Ringtone Config" : {
"localizations" : {
Expand Down Expand Up @@ -80937,6 +81027,9 @@
}
}
}
},
"Save the connected node's full configuration (radio, module, and channel settings) to a file you can back up or import on another device." : {

},
"Saves a CSV with the range test message details, currently only available on ESP32 devices with a web server." : {
"localizations" : {
Expand Down Expand Up @@ -81959,6 +82052,9 @@
}
}
}
},
"Sections to Import" : {

},
"Secure mTLS connection on port 8089. Both server and client certificates are required. TAK Channel Index selects the channel index where TAK messages will be sent." : {
"comment" : "A footer for the TAK Server configuration section.",
Expand Down Expand Up @@ -82191,6 +82287,9 @@
}
}
}
},
"Security & Identity" : {

},
"Security Advisory" : {
"comment" : "A title for a security advisory displayed in a card.",
Expand Down Expand Up @@ -85286,6 +85385,9 @@
}
}
}
},
"Sent %lld setting%@ to the node." : {

},
"Sent a Position Packet from the Apple device GPS to node: %@@" : {
"extractionState" : "manual",
Expand Down Expand Up @@ -96454,6 +96556,9 @@
}
}
}
},
"The radio will reboot to apply LoRa/channel changes." : {

},
"The recommended way to update ESP32 devices is using the **Web Flasher** on a desktop computer (Chrome-based browser)." : {
"localizations" : {
Expand Down Expand Up @@ -97536,6 +97641,9 @@
}
}
}
},
"This backup contains sensitive security material — your node's private key, admin keys, channel keys (PSKs), and Wi-Fi/MQTT passwords. Anyone with this file can join and administer your mesh, so only share it with people you trust." : {

},
"This conversation will be deleted." : {
"localizations" : {
Expand Down Expand Up @@ -97800,6 +97908,12 @@
}
}
}
},
"This import overwrites sensitive material" : {

},
"This is taking longer than expected. You can cancel or dismiss." : {

},
"This map is larger than the %@ per-map limit. Zoom in or lower the detail." : {
"comment" : "A description of an error that might occur when downloading a map. The argument is the size limit, formatted in bytes.",
Expand Down Expand Up @@ -97982,6 +98096,9 @@
}
}
}
},
"This overwrites sensitive security material on the connected node." : {

},
"This tool scans your local area to find nearby Meshtastic radios on different frequency settings. It switches between settings automatically, listens for a few minutes on each one, and then shows you which setting works best for your location based on how many radios it finds and how busy the airwaves are. On supported devices, local on-device AI will analyze your scan results and recommend the best setting — no internet connection required." : {
"comment" : "A description of the functionality of the discovery scan tool.",
Expand Down Expand Up @@ -108761,6 +108878,9 @@
}
}
}
},
"Wi-Fi password" : {

},
"WiFi" : {
"localizations" : {
Expand Down Expand Up @@ -110762,6 +110882,9 @@
}
}
}
},
"Your radio is rebooting to apply LoRa/channel changes — reconnect to verify." : {

},
"Your region has a %lld%% duty cycle. MQTT is not advised when you are duty cycle restricted, the extra traffic will quickly overwhelm your LoRa mesh." : {
"localizations" : {
Expand Down Expand Up @@ -111238,6 +111361,9 @@
}
}
}
},
"channel keys (PSKs)" : {

},
"dBm" : {
"localizations" : {
Expand Down Expand Up @@ -111981,6 +112107,9 @@
}
}
}
},
"sensitive credentials" : {

},
"settings" : {
"localizations" : {
Expand Down Expand Up @@ -112315,6 +112444,9 @@
}
}
}
},
"your node's private key & admin keys" : {

},
"—" : {
"localizations" : {
Expand Down Expand Up @@ -112910,3 +113042,4 @@
},
"version" : "1.1"
}

Loading
Loading