Skip to content

UserGuide

Bernhard M edited this page Oct 4, 2026 · 43 revisions

MeshCore (MC-Term) User Guide

This guide explains how to use the MeshCore companion firmware with the on-device touch/keyboard interface (the GUI) and the browser interface (the WebUI).

Drafted with AI assistance. If something here does not match what you see on your device, please report it so it can be corrected.


How to read this guide

The guide is written for two kinds of readers at the same time:

You are… Read this Skip this
New to MeshCore / not technical Quick Start, Glossary, the "In plain words" boxes at the start of each chapter, Troubleshooting Everything inside a 🔧 box
Technical / power user Everything. Open the 🔧 Technical details boxes (click the small triangle) for exact ranges, formulas, file names, protocol behaviour and per-board differences –

How the guide marks things:

  • "In plain words" – a short, jargon-free explanation of what a chapter or feature is for.
  • 🔧 Technical details – a collapsible box with the deep details. It is closed by default so beginners are not overwhelmed. (If your Markdown viewer does not support collapsible boxes, the text is simply shown open.)
  • Mgmt → Radio → Freq – a menu path. It means: tap the Mgmt tab, open the Radio page, then the Freq row.
  • Device = the on-screen/keyboard interface on the hardware. WebUI = the same interface in a web browser. Differences between the two are called out where they exist.

Table of Contents

Start here

  1. Introduction
  2. Installation & Setup
  3. System Overview
  4. GUI Documentation
  5. WebUI Documentation
  6. Features & Capabilities
  7. Device Compatibility
  8. Advanced Usage
  9. Troubleshooting
  10. Best Practices

Quick Start in 10 Minutes

In plain words: MeshCore turns small radio devices into a chat network that works without internet or mobile coverage. Your device talks to other MeshCore devices nearby by radio (LoRa). Messages can hop from device to device (through repeaters) to travel further. This Quick Start gets you from a box to your first message.

Step by step

  1. Attach the antenna first. Never switch the device on without its LoRa antenna: transmitting without one can permanently damage the radio.
  2. Install the firmware (skip if your device already runs MeshCore with the GUI). Open flasher.meshcore.io in Chrome or Edge, pick your device, choose Companion Radio, tick Erase All Flash (first installation only) and click Flash. Details and special cases (T-Deck DFU mode, SenseCap Indicator second chip): Section 2.2.
  3. Power on and wait. The first boot can take 1–2 minutes and the screen may flicker. That is normal (Section 2.3).
  4. Check the radio settings for your country — Mgmt → Radio. The built-in defaults are for Europe/UK (869.618 MHz, 62.5 kHz, SF 8, CR 8, 22 dBm). Everyone who wants to talk to each other must use exactly the same Freq / BW / SF / CR. Not sure what to use? Ask the local MeshCore group in your area (Section 7.3, Section 6.6).
  5. Give your device a name — Mgmt → Global → Name → Edit. This is what other people see.
  6. Announce yourself — Mgmt → Advert → Advert Flood (or Advert 0-Hop). An advert is a small "I am here" broadcast. Nearby devices appear in your Contacts tab as they announce themselves, and you appear on theirs.
  7. Send your first message.
    • To everybody: Msgs tab → open the Public channel → Send → type → OK.
    • To one person: Contacts tab → tap the person → MSG → type → OK. A ✓ next to a direct message means it arrived.
  8. Optional extras (do these later, when the basics work):

"I want to…" cheat sheet

I want to… Go to
Change my name Mgmt → Global → Name
Change radio frequency / settings Mgmt → Radio
Let others find me Mgmt → Advert → Advert Flood / Advert 0-Hop
See who is nearby Contacts tab (long-press the tab for the Discovered list)
Write to someone Contacts → tap person → MSG
Write to a group Msgs → Channels → open a channel → Send
Join a private group Msgs → + (name + key) or Mgmt → Channels → Join channel
Make the screen turn off sooner (save battery) Mgmt → UI → Disp. Timeout
Lock the screen Mgmt → Lock → Autolock
Mute sounds Mgmt → Sound → All Sounds
Pair with the phone app Mgmt → BLE → Custom PIN
Open the web interface Mgmt → WiFi (note the IP), then http://<ip> in a browser
Share (or hide) my position Mgmt → Advert → Advert Location
Set the clock/time zone Mgmt → Date/Time
Back up my settings Mgmt → Backup (device) or copy /MCTerm/prefs.txt (Section 8.1)
Find out why something doesn't work Troubleshooting

Five rules that prevent most problems

  1. Antenna on before power on.
  2. Same radio settings on every device (Freq, BW, SF, CR). Different settings = you will never hear each other.
  3. A companion device does not relay messages. To cover more distance you need repeaters, ideally placed high up (Section 3.3).
  4. Be patient after sending an advert. Contacts show up when their adverts are heard, not instantly.
  5. Never share the repeater admin password or private key over the mesh (Section 10).

Glossary

Plain-language meanings of the words used in this guide. Beginners: you can come back here whenever a word is unfamiliar.

Term Meaning
Mesh A network where every device can pass messages on, so there is no central server or tower.
Node Any device taking part in the mesh (your handheld, a repeater, a sensor…).
LoRa The long-range, low-power radio technology MeshCore uses. Slow (small text messages), but reaches far and uses little energy.
Companion Radio The firmware for a device you use to chat. It has the GUI (or connects to a phone app). It does not relay other people's messages.
Repeater A device that only relays messages to extend range, usually mounted high and powered by solar.
Room Server A shared "chat room" node you log in to with a password.
Sensor node A node that periodically sends readings (temperature, humidity, …).
Contact Another node your device knows about (name + public key).
Advert A short "I am here" broadcast that lets other nodes discover you. 0-Hop = only direct neighbours hear it; Flood = it is passed on across the mesh.
Flood A packet that is rebroadcast through the whole reachable mesh. Used when the route is unknown, and for all channel messages.
Direct (routing) A packet that follows a known route instead of being repeated everywhere.
Hop One radio link between two nodes. "3 hops" = the message was passed on 3 times.
Path / Route The chain of repeaters a message travelled through.
DM Direct message to one contact, end-to-end encrypted.
Channel A group chat. Everyone with the channel's secret key can read it.
Public channel The built-in open channel everyone can join. Anyone on your frequency can read it.
PSK (pre-shared key) The shared secret that protects a private channel.
Public key / Private key Your node's identity. The public key is shared so others can send you encrypted messages; the private key must stay secret.
ACK (acknowledgement) A small reply that proves a direct message arrived (✓).
Region scope An optional tag that limits how far a channel's flood messages are meant to spread geographically.
Path hash / Device ID A short (1–3 byte) fingerprint of a public key, shown as e.g. [A3], used to name hops compactly.
Freq / BW / SF / CR The four radio settings: frequency, bandwidth, spreading factor, coding rate. See Section 6.6.
dBm Unit of transmit power / signal level. Higher (closer to 0) = stronger.
RSSI Received signal strength — how loud a packet was (dBm; for example −90 is stronger than −110).
SNR Signal-to-noise ratio — how far a packet stood out from the noise (dB). Higher is better.
Noise floor The background radio noise level your receiver sees.
Airtime / Duty cycle How much of the time your device is allowed to transmit. Many regions limit this by law.
Telemetry Sensor and position data a node shares.
TPERM Per-contact permission to share telemetry with you.
Transport How a phone/PC talks to the companion device: BLE (Bluetooth), WiFi, or USB.
AP / STA (Station) WiFi modes. AP: the device creates its own WiFi network. STA: it joins your router/hotspot.
WebUI The browser version of the device interface, served by the device itself over WiFi.
GUI The interface on the device's own screen.
SD card / Primary Disk Optional memory card for maps and backups. Primary Disk chooses whether settings live on internal flash or on the SD card.
Map tiles Small map picture files ({z}/{x}/{y}.png) for the map tab.
NTP Internet time service used to set the clock automatically over WiFi.
GPS fix The state where the GPS receiver has found enough satellites to know your position.
OTA "Over the air" firmware update over WiFi, without a USB cable.
CLI Command-line interface: type text commands. For advanced users.

1. Introduction

1.1 What is MeshCore?

In plain words: MeshCore lets small radio devices send text messages to each other over long distances without internet, SIM card or a central server. If two devices are too far apart, other MeshCore devices in between (repeaters) pass the message along. Your device has a touchscreen or keyboard for chatting, and can also be controlled from a phone app or a web browser.

🔧 Technical overview

MeshCore is a lightweight, decentralised mesh communication system designed for LoRa packet radios. It enables multi-hop text messaging, sensor data exchange, and network administration across groups of small embedded devices — without any internet connection, cellular infrastructure, or central server.

Unlike conventional mesh radio systems that flood every packet to every node, MeshCore uses a hybrid routing model: it floods messages only when a direct route is unknown, and switches to targeted direct routing once a path to the destination has been established. This dramatically reduces channel congestion in larger networks.

The MeshCore companion firmware extends the base mesh stack with a full-featured, touch-first graphical interface (GUI) that runs directly on the radio hardware. It also provides a browser-accessible WebUI that mirrors the on-device interface when the device is connected to WiFi, giving users the option to manage their device from a laptop or phone without installing any software.


1.2 Use Cases

Scenario Description
Off-grid communication Stay in contact during hikes, camping trips, or expeditions without mobile coverage
Emergency & disaster response Deploy an instant mesh network where infrastructure is unavailable
Community networks Build low-power neighbourhood or event communication grids
Tactical operations Encrypted group and direct messaging without internet dependency
Remote sensor monitoring Collect temperature, humidity, CO₂, and other telemetry from remote nodes
General LoRa exploration Experiment with mesh networking on affordable hardware

1.3 Supported Devices

MeshCore companion firmware runs on a range of LoRa-equipped devices. The following hardware is supported with the full graphical interface:

Device Display Input Notable Features
LilyGO T-Deck Plus 320×240 colour TFT QWERTY keyboard + trackball Built-in GPS, microphone, speaker
LilyGO T-Deck (original) 320×240 colour TFT QWERTY keyboard + trackball No GPS module
Seeed Studio SenseCap Indicator 480×480 colour TFT Touchscreen Dual MCU, hardware buttons
Elecrow CrowPanel 3.5" 480×320 colour TFT Touchscreen SD card for map tiles
Elecrow CrowPanel Advanced 7" 1024×600 colour IPS Touchscreen ESP32-P4, WiFi via coprocessor
Heltec Vision Master V4 (TFT) Colour TFT Touchscreen Compact form factor

Additionally, the companion radio firmware supports any device running in headless mode that accepts connections over BLE, USB, or WiFi from an external client application (see Section 3.3).


2. Installation & Setup

2.1 What You Need

To get started with MeshCore you need:

  1. A supported hardware device — see the list in Section 1.3
  2. A USB cable connecting the device to your computer
  3. A modern web browser — Google Chrome or Microsoft Edge are recommended (Firefox does not support WebSerial)
  4. A LoRa antenna — always attach the antenna before powering the device; transmitting without an antenna can damage the radio hardware

No software installation on your computer is required for basic flashing.

Which firmware type do I choose? If you want to chat, pick Companion Radio. Pick Repeater only for an unattended relay node, and Room Server only if you want to run a shared chat room. When in doubt: Companion Radio.


2.2 Flashing Firmware

The easiest way to install MeshCore is via the official web flasher.

Step-by-step:

  1. Open https://flasher.meshcore.io in Chrome or Edge.
  2. Select your device from the list.
  3. Choose the firmware type:
    • Companion Radio — full GUI with mesh radio capability (recommended for most users AND for MCTerm)
    • Repeater — relay-only node with remote management, no GUI
    • Room Server — shared group chat server node
  4. For a first-time installation, click Erase All Flash before flashing. This removes any previous firmware and settings.
  5. Click Flash and follow the on-screen prompts to connect your device via USB.
  6. Wait for the flash to complete (typically 30–90 seconds).

Note: A full flash erase is only required for first-time installation or when switching firmware type. Routine updates — such as upgrading to a new version of the companion firmware — can be applied without erasing settings.

Note: After flashing, the first boot may take 1–2 minutes. The screen may flicker briefly while partitions and settings are initialised. This is normal.

DFU Mode (T-Deck)

Some T-Deck variants require manual entry into Device Firmware Update (DFU) mode before flashing:

  1. Hold down the trackball button while connecting the USB cable.
  2. The device should appear as a serial port to the web flasher.
  3. Release the trackball and proceed with flashing normally.

SenseCap Indicator — RP2040 coprocessor (UF2)

The Seeed SenseCap Indicator has two MCUs:

MCU Role How to flash
ESP32-S3 Companion UI, LoRa, WiFi/BLE Web flasher (steps above)
RP2040 microSD, sensors, buzzer, battery sense UF2 file from GitHub Releases (not the web flasher)

The web flasher updates only the ESP32. On every release check if there is a NEW RP2040 image available , install the matching RP2040 image from the same release, OR the latest one. The build artifact is named like rp2040_indicator_<version>.uf2. An older RP2040 image with a newer ESP32 build can break SD-primary storage, map tiles, sensors, and the buzzer.

Flash the RP2040 (drag-and-drop UF2):

  1. Download rp2040_indicator_<version>.uf2 from the project Releases page (same/latest version as your companion firmware).
  2. Disconnect USB if the device is plugged in.
  3. Locate the RP2040 BOOT button on the board (small internal button; Seeed documents using a paperclip or needle through the enclosure access).
  4. Press and hold BOOT, connect the Indicator to your computer with USB-C, then release BOOT once the cable is connected.
  5. The computer mounts a removable drive (RPI-RP2 on Windows/Linux; often RP2040 on macOS).
  6. Copy the .uf2 file to the root of that drive (not into a subfolder). The drive ejects automatically when flashing finishes and the RP2040 reboots.
  7. Disconnect USB or power-cycle, then start the device normally so the ESP32 companion firmware runs.

USB serial ports (two interfaces):

When both MCUs are running, two COM/serial devices may appear. Use the right one for each task:

Typical name MCU Use for
USB-SERIAL CH340 (Windows) ESP32-S3 Web flasher, ESP32 serial log
USB Serial Device (Windows) RP2040 Optional RP2040 serial monitor
usbmodem (macOS) Often RP2040 when both are listed UF2 drag-and-drop does not need a serial port

If the web flasher cannot find the device, connect only for ESP32 flashing (no BOOT held) and select the CH340 port. For RP2040 updates, always use the UF2 steps above.

After flashing:

  • Confirm Mgmt → Global → Admin → FW-MC matches your release.
  • Check SD-primary storage, map tiles, sensor readings, and buzzer behavior.
  • Mgmt → Global → Admin → Reboot RP2040 (HW) (double-tap to confirm) soft-resets the coprocessor without reflashing.

See also Seeed’s Indicator flashing guide for hardware photos.


2.3 First Boot

When the device starts for the first time after flashing:

  1. A splash screen is displayed for approximately 2.5 seconds while hardware is initialised. On builds with the boot console enabled, a scrollable boot log may appear first (migration steps, SD sync, store selection). Swipe vertically to read it; it dismisses automatically after a short hold once startup finishes.
  2. The GUI opens on the Contacts tab, which will be empty initially.
  3. A default radio frequency and settings are applied. For EU/UK users this is 869.618 MHz, 62.5 kHz bandwidth, SF 8, CR 8, 22 dBm. For other regions, adjust these values in Management → Radio before transmitting.
  4. A node name is automatically generated. It is recommended to set a meaningful name in Management → Global as soon as possible, since this is how other users will identify your device on the mesh.
  5. The device immediately begins listening on the configured frequency and will add any nearby MeshCore nodes to the contacts list as it hears their advertisements.

Antenna reminder: Always ensure the LoRa antenna is properly attached before the first boot. Transmitting without an antenna can permanently damage the radio module.


3. System Overview

3.1 How MeshCore Works

In plain words:

  1. Every device is a little radio. Devices that hear each other can talk directly.
  2. If the other person is too far away, repeaters in between pass the message on.
  3. The first time you write to someone, your message is sent "to everyone" so it can find its way. Once the route is known, later messages follow that route and cause much less radio traffic.
  4. Direct messages are encrypted so only the recipient can read them. A message you sent shows ✓ when the recipient's device confirmed it.
🔧 Technical details: flooding, direct routing, encryption

MeshCore creates a network of independent radio nodes that communicate by passing packets over LoRa. There is no central infrastructure — each node participates autonomously.

When a node wants to send a message to another node, it first needs to know how to reach it. MeshCore discovers routes through a flooding mechanism: the first time a message is sent to an unknown destination, it is broadcast as a flood packet that propagates across the network until it reaches the target. Intermediate repeater nodes pass the packet along up to a configurable maximum number of hops.

Once a bidirectional exchange has occurred and a path is known, subsequent messages are sent as direct packets — targeted transmissions that follow the established route and are not rebroadcast by every node. This keeps network traffic low in established networks.

Because MeshCore companion nodes do not repeat or relay packets, the mesh relies on dedicated repeater nodes placed strategically in the network to extend range. Room servers similarly act as infrastructure nodes that handle group message storage and distribution.

All direct messages are end-to-end encrypted using the recipient's public key. Only the intended recipient can decrypt the contents. Channel (group) messages use a shared pre-shared key (PSK) known to all participants.


3.2 Communication Model

MeshCore uses two primary message types from a user perspective:

Direct Messages (DMs):

  • Sent to a specific contact
  • End-to-end encrypted
  • Delivery is tracked; the sender receives an acknowledgement when the message reaches the recipient
  • Route to the recipient is cached and reused; if the route becomes stale, a new one is discovered automatically

Channel Messages:

  • Sent to a named group channel
  • All members who share the channel's pre-shared key can receive and decrypt them
  • Always transmitted as flood packets so all participants can receive them
  • A default Public channel exists that any MeshCore node can join without a password

3.3 Node Roles

In plain words: Most people only need a Companion Radio (the device they chat with). Repeaters are optional "relay stations" that make the network reach further. Room servers and sensor nodes are special-purpose.

Role Description
Companion Radio A user-facing node with a GUI (or headless BLE/WiFi/USB endpoint). Sends and receives messages. Does not repeat packets — it participates only as an endpoint.
Repeater A relay node with no user interface. Receives and retransmits mesh packets to extend network coverage. Most commonly deployed as a fixed, solar-powered installation. Can be managed remotely via the GUI on a companion device.
Room Server A group chat server. Stores and distributes channel messages. Participants join the server with a password. Can be managed remotely in the same way as a repeater.
Sensor Node A battery- or solar-powered node that periodically broadcasts sensor telemetry (temperature, humidity, CO₂, voltage, etc.) into the mesh.

4. GUI Documentation

4.1 Main Interface Overview

In plain words: The bottom of the screen always shows four buttons: Contacts (who is around), Msgs (your conversations), Map and Mgmt (all settings). The top line shows your name, battery, and small status icons. Everything else you need is reachable from these four tabs.

The GUI is organised around four main tabs shown in a permanent tab bar at the bottom of the screen. The tab bar is always visible regardless of what content is displayed above it.

Tab Purpose
Contacts Lists all known mesh nodes; provides access to direct messages and node details
Msgs Channels, DMs, and Rooms lists; group and direct message transcripts
Map Interactive map showing GPS positions of nodes on the mesh
Mgmt All device settings, diagnostics, and administration functions

The active tab is marked visually. Tap any tab icon to switch to it at any time.


4.2 Status Bar

The status bar runs across the top of the screen and is always visible.

Left Side

  • Node Name — your device's identity on the mesh, as seen by other nodes
  • Temporary Override Area — shows short-lived alert text such as "New message from Alice" when a message arrives; clears automatically after a few seconds

Right Side

The right side of the status bar can show battery or duty cycle; a short tap on the battery area switches the display:

  • Battery Mode — voltage (e.g. 4.15 V) or percentage (e.g. 85 %), toggled between volts and percent on each short tap while in battery mode.
  • Duty Cycle Mode — live radio TX duty cycle as a percentage. Short tap cycles Percent → Volts → Duty → Percent.

Centre: when there is room, the status bar shows HH:MM local time. Tap the clock to jump to Mgmt → Date/Time.

Status Icons

Icon Meaning
WiFi symbol WiFi interface state: off, connecting, connected (STA), or access-point (AP) mode
GPS dot GPS state: searching for fix, or fix acquired
SD card symbol An SD card is inserted and accessible
Radio activity dots Left dot flashes on packet received (RX); right dot flashes on packet transmitted (TX). Each flash lasts 250 ms.

4.3 Navigation

Touch Devices

Gesture Effect
Tap Select items, open detail views, press buttons, switch tabs
Long-press Alternate actions — see the gesture reference in Section 4.11
Swipe / drag Scroll lists; pan the map
Swipe left/right Switch sub-pages in Management, Contact detail, and Channels
Double-tap word Copy word to internal clipboard
Double-tap empty editor Paste from internal clipboard

T-Deck Plus (Physical Keyboard + Trackball)

The T-Deck Plus has a full QWERTY keyboard and a physical trackball, providing hardware navigation across the entire interface.

Control Effect
Trackball (roll) Scroll lists; navigate in views
Trackball press Select / confirm
QWERTY keyboard Direct text input in any active text field
Arrow keys Move cursor inside text editor fields; arrow escape bytes are automatically stripped to prevent accidental password damage

Elecrow CrowPanel & SenseCap Indicator

These devices are primarily touchscreen-driven. On the SenseCap Indicator, a hardware button on the top edge toggles the display on and off.


4.4 Contacts Tab

The Contacts tab is the primary hub for discovering nearby nodes and managing direct communication.

Contact List

The list shows all currently known mesh contacts. Each entry displays the node's name, type badge, and activity state.

Sorting and filtering:

While on the Contacts tab, short-tap the Contacts tab bar button (not the list header) to cycle sort modes. The status bar briefly shows the active sort (sort:last heard, sort:a-z, etc.):

Mode Description
Last Heard Most recently active nodes first (default)
Last Message Contacts with the most recent incoming DM first
Distance Nearest GPS contacts first (requires your position + contact GPS); contacts without GPS sort after those with coordinates
Favs Only Show only starred (favourite) contacts
A-Z Alphabetical by name

In Discovered mode (below), sorting is fixed by recency — tab taps show sort:recency instead.

Colour coding:

  • Bright / white — recently active node
  • Dim / grey — node not heard recently
  • Consistent colour — each node has a unique persistent colour derived from its identity; this colour is reused consistently across contacts, transcripts, the log, and map markers

Type badges:

Badge Colour Node Type
USR Blue Chat user / companion radio
RPT Orange Repeater
SVR Purple Room server
SNS Green Sensor node

Favourite badge: ⭐ shown on favourited contacts.

Discovered Nodes view:

Long-press the Contacts tab bar button (about 2 seconds) to toggle between the normal contact list and Discovered mode. The tab label switches to Discovered; entering discovered mode sends a repeater-focused node-discover request. This view lists recently overheard advertisement frames — useful for finding nearby repeaters before adding them as contacts.


Contact Detail View

Tap any contact to open its detail panel. The panel has up to two swipeable sub-pages.

Page 0 — Contact Info

Field Description
Name + hash Node identity; the first byte of the public key is shown in parentheses for disambiguation
Public Key The full 32-byte key, shown as wrapped hex text (no truncation, no QR code)
Type / Firmware level Node type and reported firmware capability level
Last heard Relative age of the most recent packet from this node (e.g. 5 m ago, 2 h ago)
SNR / RSSI Signal quality from the most recently received packet
Battery Reported battery voltage or percentage (if broadcast by the node)
GPS Last reported coordinates, if the node broadcasts its location
Telemetry Latest temperature, humidity, CO₂, and TVOC values (if telemetry is shared)
Path Current routing path with intermediate hop identifiers

If a contact was removed while you had its detail open (for example after auto-add / purge ran on another tab), the detail view shows Contact missing with a visible Back button and returns to the list when you tap Back or anywhere on the header row.

Action buttons on Page 0:

Button Action
Back Return to the contact list
MSG Open a direct-message composer to this contact
PATH View the current routing path; tap again to force a path reset
FAV Toggle the favourite star
DEL Remove this contact from the list
TPERM Toggle permission for this contact to share telemetry (location and environment data) with you
PING Send a ping packet; the round-trip time is displayed inline after the response arrives
MAP Switch to the Map tab and centre it on this contact's GPS position

Page 1 — Admin / Session (swipe left; only available for repeaters and room servers)

See Remote Repeater Administration and Room Server Session later in this section.


Sending a Direct Message

  1. Open any contact in the Contacts tab and tap MSG.
  2. The text editor opens with the recipient's name shown as the title.
  3. Type your message (up to 125 characters) and tap OK — or press Enter on a hardware keyboard.
  4. The message is dispatched and appears in the Msgs → Users tab under the conversation thread for that contact.
  5. A delivery state badge is shown next to the message:
Badge Meaning
⏳ Pending — message sent; awaiting acknowledgement
✓ Delivered — acknowledgement received
✗ Not delivered — no acknowledgement received within the timeout

Repeater Administration

In plain words: If you own a repeater, you can log in to it from here (with its admin password) to check its health or change its settings remotely over the mesh. If you only chat, you can skip this.

When a contact is a repeater (RPT) and you have the admin password, Page 1 on the contact detail panel provides a full remote-management console.

Stage 0 — Login

  • Enter the admin password in the password field.
  • Optionally tick Save credential to store it encrypted on the device (tied to the repeater's public key).
  • Tap LOGIN. The result — OK, Fail, Timeout, or Send Fail — is shown inline.

Stage 1 — Overview (after a successful login)

Ten quick-action tiles give fast access to common operations:

Tile Function
Status Fetch live statistics: battery, noise floor, RSSI, packet counters, uptime
ACL View and edit the repeater's access control list
Neighbours Scan for adjacent repeater nodes
CLI Open a raw command-line terminal to the repeater
Device Read and write device name, radio parameters, and TX power
Advert Configure advertisement intervals
Clock Read (and optionally set) the repeater's clock
Telemetry View live environment sensor data from the repeater
Passwords Remote password management
Reboot Remotely reboot the repeater (requires a second confirmation tap)

Stage 2 — Overlay views

Each tile opens a detailed overlay. Key views:

Status — shows packet receive/send counts, flood and direct subsets, duplicate counts, total air time, noise floor, last RSSI, last SNR, error events, and uptime.

Access Control List (ACL) — displays up to 112 bytes of ACL data parsed into individual entries. Each entry shows a 6-byte key prefix and the assigned role. Actions:

  • REMOVE — delete the selected entry
  • ADD — enter a full 32-byte public key and select a role (Read-Only, Read-Write, or Admin)

Device — reads and allows editing of: device name, radio frequency, bandwidth, spreading factor, coding rate, TX power. Tap SAVE to commit changes.

Advert — configures the direct (zero-hop) advertisement interval in minutes and the flood advertisement interval in hours. Tap SET to apply.

Clock — displays the repeater's current time. A SET button appears when the local device has a valid NTP-synchronised time, allowing the repeater's clock to be updated remotely.

CLI — a full terminal with scrollback. Type commands using the on-screen or hardware keyboard. Command history is navigable with the up/down arrow keys.


Room Server Session

When the contact is a room server (SVR), Page 1 provides a session console:

  1. Enter the room password and tap LOGIN.
  2. On success, the session view shows the room transcript, a message compose field, your permission level, and an ACL button to view who has access.

4.5 Channels Tab (Msgs)

The Msgs tab has three list frames, cycled by swiping left/right on the list headers, using the ◀ ▶ arrows, or short-tapping the Msgs tab bar button while already on Msgs:

Frame Header Contents
0 — Channels Msgs N/MAX Joined group channels (#index, name, scope badge, unread border)
1 — DMs DMs Direct-message threads (non–room-server peers)
2 — Rooms Rooms DM threads with room server (SVR) contacts

Long-press the Msgs tab bar button (about 2 seconds) to open the Join channel secret-key editor (PSK join without using the + flow).

Sub-page 0 — Channels (Group Messages)

Displays all joined channels. Each row shows channel index (#0, #1, …), name, optional scope badge, and an unread highlight when new messages exist.

Opening a channel: tap its row to open the full transcript.

Joining a new channel: tap the + button and:

  • For a public-name channel: enter the channel name (e.g. hiking)
  • For a hashtag channel: type #channelname — the GUI automatically parses the name
  • For a channel with a pre-shared key (PSK): enter the channel name and its base64-encoded key

Inside a transcript:

The header row (channel and DM threads) provides:

Button Action
Back Return to the channel or user list
Read Mark every message in this thread as read (clears unread badges)
Newest Jump scroll to the latest message at the bottom
Custom (or Qck on narrow screens) Send Custom QuickSend text immediately (no editor)
Send Open the message composer

Per-message quick replies (Q1 / Q2):

  • WebUI: each message row has Q1 and Q2 buttons (channel and DM). They fill the composer with Custom QuickR1 / Custom QuickR2 from Mgmt → Messages, expanded with route data from that message (see Quick Send and quick replies below).

  • Device (channels): tap a message → Reply in the detail header → the composer shows QuickR1 and QuickR2 below the text field (same templates as Q1/Q2). DM threads on the device use Custom / Qck for QuickSend only; use the WebUI for per-message Q1/Q2 in DMs.

  • Messages are displayed in IRC-style with sender names coloured consistently by node identity

  • #hashtag references in messages are highlighted; tap one to get a prompt to join that channel

  • A message that is nothing but a shared contact or channel link (meshcore://contact/add?... / meshcore://channel/add?... — the same format as the phone app's QR codes) offers a one-tap add instead of opening the detail view: WebUI shows it as an Add contact / Join channel button in place of the raw link; on the device, tapping that message shows a confirm with the name (and contact type, or channel name) before anything is added. This also works inside a room server's Room Console (Contacts → room contact → session), on the same line that hold-to-copy uses. A message that only mentions such a link alongside other text is left alone

  • Tap any message row to open the message detail view (full text, route, scope, repeats, delivery)

  • Short-tap the channel title row (#N name + scope badge) to cycle that channel's region scope assignment (see Region scopes)

  • Long-press the Back arrow in the header to clear the entire channel transcript (confirmation required)

  • Long-press the channel title row in the header to delete the channel from your device (confirmation required)

Phone / WebUI companion: While Wi‑Fi or BLE companion transport is connected, new messages received on the device are stored as already read, so the on-device unread count stays lower after you read traffic on the phone app. Messages you read only on the phone before disconnecting are not synced as read — use Read on the device thread if badges remain.

Note: The Public channel is the default open channel shared by all MeshCore nodes. It is automatically restored if deleted.

Region scopes (geo-filter)

Region scopes limit which geographic area a flood channel message is tagged for. They are optional; most traffic works without them.

Where What you see
Channel list row Scope badge: [name] = scope assigned to this channel; [Def:name] = using the Default Scope; [None] = no scope
Channel transcript title Same badge beside #N channelname
Message detail Scope: name (or omitted when none) — the scope active on that packet when it was sent/received
Mgmt → Channels Define scopes, set Default Scope, per-channel Scope / Share / Del

Configure scopes: Mgmt → Channels → Scopes (add named regions with keys). Set Default Scope for new channels. Per channel, tap Scope or short-tap the transcript title row to cycle assignments.

When you send on a scoped channel, the firmware applies that channel's scope before transmit (applyRegionScopeForChannel). Incoming messages store the scope name on the RAM message row so detail view can show it.

Message detail view

In plain words: Tap a message to see more about it: who sent it, when, whether a direct message was delivered, how many hops it took and how strong the signal was. Beginners mostly need Reply, Resend and Del.

Open from any channel, DM, or room transcript by tapping a message line. Opening marks that message read. Scroll vertically for long content.

🔧 Message detail fields in full (device and WebUI)

Detail header (device)

Button Channel DM / room
Back Return to transcript Return to transcript
Reply Opens composer; after send, returns to transcript. In Reply mode the editor offers QuickR1 / QuickR2 below the field — (no Reply button on device DMs)
Resend Shown as a 4th button alongside Reply, only on a channel message you sent. Sends the same text again as a brand-new message — the original is not touched or replaced Shown in place of Reply, only on a message you sent. Same behavior
Del Delete this message from RAM (and SD journal when enabled) Same

Body layout (top → bottom)

  1. Message text — full body; channel messages show Sender: prefix in nick colour. Replace HashCodes applies to [XX] tokens in the text (see §6.1).
  2. Metadata block (varies by type):
Field Channel DM / room
Device: — Peer name, optional duplicate count, path-hash prefix [XX]
Sent: Sender's timestamp from the packet (if present) Same
Received: Local receive time, or relative age if RTC unset Same
Scope: Scope: name when the packet carried a region scope Same
Delivery: — Pending / Pending (retry N) / Delivered / Delivered (Nms) / Not delivered
Last heard: Sender contact's last activity (by name match) Peer contact's last activity
Diagnostics line N Hops • SNR: … • RSSI: … • Repeats: N ( -- when unknown) Same
  1. Path block (when route data exists):
Line Meaning
Path: Flood / Path: N hops / Path: Direct / Path: Direct (N hops) Route type and hop count
1) … 2) … Hop list, closest-to-you first; hop names use contact lookup / hash labels; last hop may include SNR
(hop list unavailable) Flood/direct hint without full path bytes

Tap the Path: line to open the Map tab with that message's hop overlay (§4.6).

  1. Repeats block (when overheard repeaters were recorded):
Repeats:
1) [hash/name] …
2) …

Lists repeaters that rebroadcast the same packet (not the same as the routing path).

Other actions in detail

  • Double-tap a word to copy it to the clipboard
  • Text selection (where supported): drag to select lines in the detail body

WebUI message detail

Tap a message row in Msgs (channel or DM). The WebUI detail page mirrors the device fields in sections:

Section Fields
Message Body Full text (hash replacement applied)
Delivery / Route Delivery (DM), RSSI, SNR, Route summary + hop path HTML, Show Path On Map, Flood (channel), Repeats / Repeat count, DM Expected ACK / Wait / Trip / Read?
Metadata Kind, Scope (packet scope), Sent, Received, Sender, Chars
Raw Route Raw, Text Raw (debug)

Header: Back, Del, Resend (on a message you sent — channel or DM, sends the same text again as a new message), Reply (when a sender is known — prefills composer for channel or DM).

Sub-page 1 — Users (Direct Message Threads)

Lists DM conversations with non–room-server contacts, sorted by most recent activity. Each row shows contact name (identity colour) and an unread border when new messages exist.

Opening a thread: tap it to view the full conversation history.

Deleting a thread: long-press the thread title row in the transcript header and confirm (same gesture as deleting a channel). Empty threads are pruned automatically.

DM transcript header: Back, Read, Newest, Custom/Qck, Send — same as channels, but no Reply on individual messages in detail view; use WebUI Q1/Q2 on DM rows for quick replies.

Sub-page 2 — Rooms

Same list layout as DMs, but only threads whose peer is a room server (SVR). Open a room thread like a DM transcript (message detail, delivery, path — same layout as DMs).

Room admin vs room thread: The Msgs → Rooms list is for DM-style message history with that server contact. Login, ACL, and posting to the room channel are under Contacts → room server → Page 1 (Room Server Session). WebUI: open room-admin from contact detail or map popup on SVR markers.


4.6 Map Tab

The Map tab shows an interactive geographic view of all GPS-enabled mesh nodes.

Map Display

Element Meaning
Blue circle with dot Your current location ("ME")
Coloured node marker A mesh contact with a known GPS position; colour matches the contact's identity colour; [hash] badge shows that node's path-hash prefix (1–3 bytes per Path Hash Mode / advert metadata)
Orange/yellow border on marker Currently selected contact
Altitude bar (top-left, vertical green bar) Your current altitude (can be toggled)
Zoom level indicator (top-centre) Current zoom level; auto-hides after 3 seconds
Red "No SD" banner SD card is absent; offline map tiles cannot be loaded
Yellow "No GPS fix" banner GPS module is searching for a satellite fix

Map Controls

Touch / on-screen buttons:

Control Action
Drag Pan the map in any direction
+ / − buttons Zoom in / zoom out (can be hidden in settings)
D-pad arrows Coarse directional pan (can be hidden in settings)
ME button Jump to your current GPS location and re-centre the view
Tap a node marker Select the contact
Double-tap a node marker Open the full contact detail view
Long-press a node marker Select the contact (alternative to single-tap)

T-Deck Plus keyboard shortcuts while in the Map tab:

Key Action
W Pan up
A Pan left
S Pan down
D Pan right
I Zoom in
O Zoom out
R Re-centre on your location
T Toggle the altitude bar

Route overlay (message path)

From a DM or channel message detail view, tap the Path: line to open the Map tab with that message's hop path drawn. While the overlay is active:

  • Hop repeaters are highlighted with numbered markers and connecting lines.
  • Only contacts on that path remain visible on the map.

To return to the normal map (all GPS contacts), leave the Map tab (switch to Contacts, Messages, etc.). The overlay clears automatically when you re-enter Map.

Map Tiles

The map renders from two sources:

  1. SD card — slippy-tile image files stored in the standard {z}/{x}/{y}.png directory hierarchy. The root tiles directory is configurable in Mgmt → Map → Tiles Folder. The GUI caches up to 32 tiles in device RAM (LRU eviction) to minimise repeated SD card reads during panning.
  2. Network — tiles downloaded from OpenStreetMap over WiFi when Network Tiles is enabled and WiFi is connected. Missing tiles are fetched on demand and, when Local Tiles is also enabled, saved under Tiles Folder on the storage selected by Primary Disk (internal flash or SD card).

On devices without an SD card and without WiFi connectivity, the map will display a grid background without imagery, but node positions are still plotted correctly.

Tiles Directory Picker

Navigate to Mgmt → Map → Tiles Folder → Open to choose which folder on the SD card contains the tile images. A folder browser opens showing the SD card root. Tap a directory name to enter it, tap .. to go up, and tap Use to confirm (or Cancel to leave the path unchanged).


4.7 Management Tab

The Management tab provides access to all device settings and administrative functions. Swipe left or right on the overview grid, or use the ◀ ▶ header arrows on a settings page, to navigate. There are 21 settings pages (plus a three-page overview grid). Tap a tile on the overview to open that page.

Which pages do I need first?

In plain words: There are 21 pages, but you will rarely touch most of them.

Priority Pages Why
Set up once Global (name), Radio, Advert, Date/Time Your identity and being able to talk to others
Comfort UI, Light, Sound, Lock, Messages Screen, sounds, quick replies, auto-lock
Connect WiFi, BLE Phone app and browser access
Location & maps GPS, Map Share position, show tiles
Group & contacts Contacts, Channels Who is added automatically, private channels
Look & diagnose Stats, Log, Sensors Signal quality, received packets, readings
Special / advanced CLI, Backup, Alarm Command line, SD snapshots, remote siren

Overview Grid

The overview has three pages (dots under the header), each a 3×3 grid filled left-to-right, top-to-bottom in the same order as the header-arrow pager. Swipe horizontally on the grid, or use the header arrows while the overview is showing.

Overview page Tiles (tap to open)
0 Global, WiFi, BLE, UI, Light, Lock, Map, Sound, CLI (bottom-right)
1 GPS, Radio, Advert, Messages, Stats, Log, Sensors, Contacts, Backup (bottom-right; SD-capable builds only)
2 Channels, Date/Time, Alarm (the page opens on every board; it shows Not supported on hardware without a buzzer, I²S speaker or — LilyGo T-Display P4 — haptic motor)

Page Index

# Page Name Contents
0 Global Identity, Admin, storage, reboot/OTA, C6/RP2040 coprocessor actions (board-specific)
1 WiFi Profiles, AP/STA credentials, static IP, WebUI, live link status, Use WiFi transport
2 BLE Custom PIN, live link status, Use BLE transport, stack Restart (some boards)
3 UI Brightness, Disp. Timeout, UI Zoom, Rotation (SenseCAP Indicator), Color Scheme (Dark/Light), Battery 100% calibration
4 Light Keyboard light/blink (T-Deck+), display blink, Blink Bright — not theme (see UI)
5 Lock Autolock, lock background (PNG), lock text colour, timer
6 Map Navigation Btn, zoom buttons, Def. Follow Me, Tiles Folder, local/network tiles, Tile Source preset, custom Tile URL
7 Sound All Sounds, When Connected, Quiet Hours, volume, boot/DM/channel/ack sounds (each with a Play preview)
8 GPS Enable/pins/AutoBaud, status diagnostics, manual location, Use Map Center, Tracking, Advert Location
9 Radio Freq, BW, SF, CR, Power, Duty Cycle (percent), airtime factor and live duty (per-row Edit)
10 Advert Auto 0-hop/flood intervals, advert location, path hash, manual advert + Scan Rpts (15 s)
11 Messages QuickSend/QuickR1/QuickR2, clear RAM, retry/ack, Replace HashCodes
12 Stats Live RSSI/SNR/margin graphs, noise floor, airtime, mesh packet counters, RAM usage, SD Store
13 Log Scrollable receive log with per-packet detail
14 Sensors Live sensor graphs, calibration offsets, telemetry publish settings (formerly the separate Tele page)
15 Contacts Auto-add, types, max hops, manual add, Purge actions
16 Channels Add/join, scopes, Unscoped Flood, per-channel Scope/Share/Del
17 Date/Time Manual Date/Time, GPS Time sync, NTP timezone/server, NTP Sync every, Sync Prio1–3, NTP Status
18 CLI Local command-line shell for the node
19 Backup SD backup slots: New, Refresh, Restore, Delete, Repair, Multi-sel (device only; not in WebUI)
20 Alarm Remotely-triggerable siren: DM/channel trigger phrases and match modes, sender/channel filters, display and keyboard blink

Page 0 — Global

In plain words: Your node's name and identity, system information, storage, and reboot. Name is the one setting everyone should change. Leave the key and storage actions alone unless you know what you want.

Identity

Row / control Action
Name Tap Edit to rename the node (advertised on the mesh).
Device ID Read-only short hex prefix of your public key (width follows Mgmt → Advert → Path Hash Mode: 2 / 4 / 6 characters). Long-press the row to copy Device ID: … to the clipboard.
Public Key Tap the row or View to open the Identity detail (scrollable): name, grouped public key, private key (if export is enabled), SD key file path, and SD bundle path (/meshcore_identity.json). Long-press a section in the detail view to copy that block (public key as raw hex, etc.).
Save key to SD Tap the path area to edit the SD key file path; tap Save to write identity to SD (also writes the bundle JSON).
Load key from SD Tap the path area to edit; tap Load to import identity from SD.
Set private key Tap Set to paste a 128-character hex private key (replaces the node identity; advanced).

Admin (read-only, refreshes about every 500 ms while visible)

Field Meaning
Uptime Time since boot
FW-MC / FW-MOD Main companion firmware version and build modifier string
Heap Free internal RAM (and minimum seen)
PSRAM External RAM free/total (or none)
Flash Flash chip size
Sketch Firmware partition used/free
CPU CPU frequency
Chip ESP32 variant, revision, core count
Reset Last reset reason (e.g. PowerOn, SW, Panic, Brownout)

Actions

Row / button Action
Storage Summary of primary data stores (internal vs SD usage).
FW upgrade Hint only on device: upload a .bin from the WebUI Global page in the browser (not from the touchscreen).
Primary Disk (SD-capable builds) Toggle Internal vs SD Card for the authoritative binary prefs blob. /MCTerm/prefs.txt on SD stays in sync when a card is present (§8.1). Switching copies all managed settings; wait for progress to finish before removing the card.
Reboot RP2040 (HW) (SenseCap Indicator only) Double-tap to reset the RP2040 coprocessor via the board reset line.
Reboot Restarts the ESP32 companion (confirm where prompted).
OTA Update (When built with auto-update and WiFi is up with STA password set) Validates the manifest, sets the update flag, and reboots into the WiFi updater. Greyed out if WiFi has no IP or password.
Update ESP32-C6 (Elecrow CrowPanel 7" with hosted C6) Double-tap to flash the WiFi/BLE coprocessor from the embedded image on next boot. If C6 firmware is outdated, a red banner warns that WiFi is blocked until updated.

On CrowPanel 7, identity save/load/view/set actions are disabled while C6 firmware is outdated (update C6 first).

Contact purge is on Mgmt → Contacts, not Global.


Page 1 — WiFi

In plain words: Choose whether the device creates its own WiFi (Access Point — easiest, connect your phone straight to it) or joins your home/hotspot WiFi (Station). You need WiFi for the browser interface (WebUI), internet map tiles and NTP time. WiFi and Bluetooth are not used as the companion link at the same time on most devices.

WiFi settings are stored in saved profiles. The main screen edits the active profile; use Pick to switch profiles (each profile has its own mode and credentials). See §8.3 WiFi Profile Management.

Control Description
Profile Active profile name. Tap Pick to open the profile list (each row shows AP or STA). Tap Select to activate a profile and apply its settings; tap Del to delete (with confirmation).
New Profile Tap Add, enter a name, and create a profile seeded from the current active settings.
Mode Access Point or Station. Toggle applies to the active profile.
AP SSID (AP mode) Network name clients connect to. Default: device node name (sanitized). Empty stored value uses the node name at runtime.
AP Password (AP mode) WPA2 password (8–63 characters). Default when unset: BLE PIN as six digits plus 00 (e.g. PIN 123456 → 12345600).
AP Clients (AP mode) Up to 3 devices may associate. DHCP is provided by the device at 192.168.4.1/24.
SSID (Station mode) Tap Edit to enter the upstream WiFi network name.
Password (Station mode) Tap Edit to enter the network password.
IP Mode (Station mode) DHCP or Static; when Static, edit IP, subnet, gateway, and DNS fields below.
WebUI Enable or disable the WebUI feature (persisted). Does not bind port 80 by itself.
WebUI Server Read-only: Running = HTTP/WebSocket listener active; Stopped = disabled, not on WiFi, or no IP yet.
Live status Shown at the bottom of the page (values matter when WiFi transport is active on this boot): Active, Link, Has IP, Role (AP/STA), mode-specific rows (AP SSID / AP MAC / Stations, or SSID / RSSI / STA MAC), then IP, Subnet, Gateway, DNS1, DNS2.
Use WiFi When BLE is the active transport, tap Use WiFi to switch (native builds) or Switcher → Safe reboot (CrowPanel 7 hosted WiFi). When WiFi is inactive, a hint row Info: Switch to WiFi may appear instead.

Static IP (STA): When IP Mode is Static, edit Static IP, Static Subnet, Static Gateway, Static DNS1, and Static DNS2 above the live block.

Access Point mode: The device hosts its own WiFi network. Connect a phone or PC to the AP SSID, then open the WebUI at http://192.168.4.1 (when WebUI is enabled). The same URL works whenever the status line shows the AP address.

Station mode: The device joins an existing router or hotspot. Use the IP shown under IP for the WebUI (e.g. http://192.168.1.45).

The WebUI WiFi page mirrors these fields (Mode, AP SSID/password, STA SSID/password, static IP options) with per-row Save buttons.


Page 2 — BLE

In plain words: Bluetooth lets the phone app talk to your device. The Custom PIN is the six-digit code you type when pairing. It is also the password for the browser interface.

(BLE builds with BLE_PIN_CODE only; otherwise the page shows BLE: -.)

Control Description
Custom PIN Six-digit fixed PIN for BLE pairing. Tap Edit to change. Enter this on the phone/app when prompted.
Active Yes when BLE is the companion transport on this boot.
Use BLE When WiFi is active instead, tap Use BLE to switch transport (native) or Switcher → Safe reboot (CrowPanel 7).
Link Connected / Not connected to a BLE client.
RSSI Client link RSSI in dBm when connected; - otherwise.
Name Advertised BLE name (BLE_NAME_PREFIX + node name).
Addr Local Bluetooth address (once the stack is up).
Last err Last BLE start error text, or -.
BLE stack → Restart (Non–CrowPanel builds, BLE active) Restarts the BLE stack without a full reboot.
Radio → Off (Non–CrowPanel builds, BLE active) Turns off the LoRa radio while keeping BLE up.

There is no separate “switch to WiFi” button on this page when BLE is active — use Mgmt → WiFi → Use WiFi instead.


Page 3 — UI

Setting Options Description
Brightness 0–100 % slider Display backlight only; drag horizontally on the slider track (vertical scrolling on the page does not change the value). Keyboard backlight is on Light (T-Deck Plus).
Disp. Timeout Tap Set Screen soft-off delay after inactivity; cycles Off → 15s → 30s → 60s → 2m → 5m → Off. Any touch wakes the display.
Vibration On / Off LilyGo T-Display P4 only (haptic motor board). Toggling on plays a confirmation buzz.
UI Zoom ^ / v buttons 100%, 133%, 167%, 200%. 100% and 200% are exact pixel copies (200% doubles every pixel, so letters stay perfectly sharp). The two in-between steps use area-weighted scaling: every stroke of every letter gets the same width with softly shaded edges, instead of some strokes being 1 px and others 2 px wide. A value saved by older firmware (e.g. 121%) is rounded to the nearest step. If the device cannot allocate the screen buffer for the new size (low memory), it shows UI zoom failed and keeps the previous zoom. - if unsupported.
Rotation (deg) 0 / 90 / 180 / 270 SenseCAP Indicator only (the row is hidden on other boards). Each tap turns the whole screen a further 90° clockwise (at 90° the top of the UI is on the right-hand edge) — mount the device any way round. Touch follows the rotation, and the setting is saved and restored at boot. Only the square 480×480 panel can do this without changing the layout; landscape boards cannot rotate at runtime. Also on the WebUI's UI page.
Color Scheme Dark / Light UI theme (background and text colours).
Battery 100% Tap Set The battery voltage (in mV, 3500–4500) that the status bar and battery percentage treat as a full charge — a display calibration, not a charger setting.

Page 4 — Light

Setting Description
Keyboard Light T-Deck Plus only. Steady keyboard backlight (0–100 % slider); default 50 %. Independent of display brightness.
Keyboard Blink Enable/disable keyboard blink on new messages (T-Deck Plus)
KB Blink Dur Keyboard blink duration in milliseconds
KB Timeout Turn keyboard backlight off after inactivity (Set to choose duration)
Display Blink Momentarily raise display brightness when a new message arrives
Blink Bright Peak brightness during display blink (0–100 % slider)
Disp Blink Dur Display blink duration in milliseconds

Page 5 — Lock

All lock options are under the LOCK section on this page (not on Mgmt → UI).

Setting Options Description
Autolock Enabled / Disabled After inactivity, the UI enters the lock overlay (mesh receive/store continues). Toggling on resets the idle timer briefly so it does not lock immediately.
Lock Background None / Picture None: solid black lock screen. Picture: draw a PNG from Picture PNG behind the clock (scaled to the display).
Picture PNG Path (default /MCTerm/lockscreen.png) Tap Set to edit the path (must be absolute, .png suffix). Tap ? for limits: PNG only, max 480×480, max 512 KiB. File must exist on SD or internal storage. WebUI: upload via Global or lock settings (/api/lockscreen/upload).
Lock Text Color White, Blue, Green, Yellow, Orange, Red Colour for the clock, Locked label, and unlock hints on the overlay.
Autolock Timer 5–3600 seconds Tap Set and enter seconds (shown as …s on the row). Default 30 s if unset.

Lock overlay behaviour (see also §4.10): shows local time (or --:--:-- if unset), Locked, optional Tracking badge when Mgmt → GPS → F-Advert Tracking is on, and unlock instructions. With Lock Background → Picture, the PNG is drawn full-screen; on touch/key activity the clock and hints appear over it.


Page 6 — Map

Setting Description
Navigation Btn Show or hide on-screen D-pad and ME buttons on the Map tab
Zoom Btn Show or hide +/− zoom buttons on the Map tab
Def. Follow Me Re-centre on your position when a new GPS fix arrives (if follow mode is active)
Tiles Folder Current SD tiles root; tap Open for the folder browser (Use / Cancel)
Local Tiles Read tiles from Tiles Folder; also required to save network downloads into that cache
Network Tiles Download missing tiles over WiFi when connected, from whichever source Tile Source selects
Tile Source Tap to cycle through five providers: OpenStreetMap (default), OSM Germany, OpenTopoMap, Humanitarian, CyclOSM
Tile URL Shows the active tile host; tap Edit to enter your own HTTPS PNG template (e.g. https://host/{z}/{x}/{y}.png) instead of a preset — both the device and the WebUI map load from this same source

Altitude bar: On the Map tab, press T (T-Deck Plus keyboard) to toggle the altitude bar. The WebUI exposes the same as Alt Info Bar under Mgmt → Map.

Route overlay: Same behaviour as on the Map tab — see §4.6 Route overlay. In the WebUI, open a message detail and use Show Path On Map; clear with Clear Path or Alt+C — see §5.3.1.


Page 7 — Sound

On boards without a buzzer or I2S audio, all rows show - instead of toggles.

Setting Options Description
All Sounds On / Off Master mute for notification audio (shares the same setting the mesh core uses to silence the buzzer)
When Connected On / Off Play a tone when a BLE or WiFi client connects
Quiet Hours Start / End Tap Set, enter HHMM Silence sounds during a daily window, e.g. 2230 for 22:30. Enter 9999 on either row to disable that boundary (no quiet hours). The range can span midnight.
Volume Low / Med / High Tap Set to cycle level
Boot Sound On / Off (+ Play preview) Startup chime
New DM On / Off (+ Play) Direct message received
New Channel On / Off (+ Play) Channel message received
Ack On / Off (+ Play) Outgoing DM acknowledged

The Play button next to each toggle previews that sound immediately (even while All Sounds is off, it just reports "Sounds: Disabled" instead of playing). The WebUI enters quiet hours as two time-of-day pickers instead of HHMM digits, and has no preview buttons.


Page 8 — GPS

In plain words: Switch the GPS on or off, see whether it has found satellites, and decide whether your position is shared in adverts. A GPS needs a view of the sky and can take a few minutes to find satellites; it also uses noticeable battery.

This page (device and WebUI) is shown on every board built with GPS support, even when no receiver has been recognised yet. In that case it shows GPS not recognized with the reason (Disabled, UART failed, No data, No NMEA), the UART settings (RX/TX pins, AutoBaud, Baud, Defaults, Restart GPS) and manual location, so a wrong setup can be fixed from here; fix capture, tracking and the receiver/fix diagnostics appear once a receiver is recognised.

GPS hardware

Setting Description
GPS function Enable or disable the GPS module
RX Pin / TX Pin UART pins; tap Edit to change
AutoBaud Automatic baud detection; when enabled, Baud shows Auto
Baud Manual baud rate when AutoBaud is off
Defaults Reset factory GPS pin and baud defaults
Restart GPS Go — restart the GPS driver without rebooting the device

Manual location

Setting Description
Manual Lat / Lon / Alt Tap Edit to set decimal degrees / metres
Capture GPS Fix Tap Save to copy the current live fix into manual lat/lon/alt
Clear Location Clear — reset manual location to 0,0,0
Use Map Center Tap Save to copy the map viewport centre into manual lat/lon
Advert Location Off, GPS, or Manual — whether coordinates are included in adverts (same control as Mgmt → Advert)

Tracking (movement-based flood adverts):

Setting Description
F-Advert Tracking Enabled / Disabled — when enabled, the node sends an extra flood advert after you move farther than the distance threshold (requires a valid GPS fix)
Send tracking advert every Movement threshold in metres (1–999, default 15 m). Tap Edit to change
🔧 GPS receiver diagnostics (module hints, status table)

Module hints (from NMEA/UBX when available): Module, Chip, Diag, Talker.

Status / diagnostics (read-only, refreshes while the page is open):

Field Meaning
Status Disabled, No fix, Fix (N) with satellite count, or driver status text
Sats Satellite count
FixQ GGA fix quality; est when UBX reports fix without GGA quality
HDOP Horizontal dilution of precision
hAcc UBX horizontal accuracy (metres)
C/N0 UBX signal strength avg/max (dB-Hz)
Bytes UART bytes received (MB)
Msgs UBX or NMEA message count
PVT Age of last UBX NAV-PVT frame
UBX Compact fix summary (t type, ok, u used sats, v in view)
Last byte Age since last UART byte (wrong wiring vs no satellites)
Age Age of last navigation fix
Coords Current node lat/lon when known

When tracking is active, an orange tracking icon appears beside the WiFi/BLE badges in the status bar. Tracking is independent of Advert Location and Auto Advert Flood schedules; it only fires on movement. If GPS is off or has no fix, tracking pauses until a fix returns.

GPS coordinates are automatically saved to storage approximately every 5 minutes when a valid fix is maintained. After a reboot, the map opens at the last saved GPS position even before a new fix is acquired.

To set a manual location directly on the device:

  1. Open Mgmt → GPS.
  2. In Manual Location, tap Edit for Manual Lat, enter latitude, then confirm.
  3. Tap Edit for Manual Lon, enter longitude, then confirm.
  4. Tap Edit for Manual Alt, enter altitude (meters), then confirm.
  5. Set Advert Location to Manual so advertisements use your manual coordinates.

Advert Location modes on-device are:

  • Off: do not include coordinates in adverts.
  • GPS: advertise coordinates from the active GPS fix.
  • Manual: advertise the saved Manual Lat/Lon/Alt values.

Page 9 — Radio

In plain words: These are the "channel settings" of your radio. They must be identical on every device that should talk to each other. Change them only if you know what your local group uses. See Section 6.6 for what each value does.

Each row has an Edit button; changes apply when you confirm in the editor (no separate RADIO commit button on device). The last two rows (Airtime Fact, Duty Live) are read-only.

Parameter Unit Accepted range Typical Values
Freq MHz 400–2500 869.x (EU), 915.x (US), 433.x (Asia), etc.
BW kHz 7.8–500 62.5 / 125 / 250 / 500
SF — 5–12 7 (fastest, shortest range) to 12 (slowest, longest range)
CR — 5–8 5 = lowest overhead, 8 = most redundancy
Power dBm −9 up to the board's maximum (commonly 22, up to 30 on some boards) Legal limit varies by region and antenna; check local regulations
Duty Cycle % 10–100 Allowed share of airtime: type 10 for 10 % (stored as airtime factor 9.0, i.e. 100 / % − 1). WebUI: Duty Cycle %
Airtime Fact — — Read-only: the airtime factor derived from the duty cycle (silent time = TX time × factor)
Duty Live % — Live TX duty cycle since boot (monitor for compliance)

The WebUI's Radio page additionally shows RX Delay Base and RX Boosted Gain, which are not on the device page.

A device restart may be required for some changes to take full effect. All nodes on the same mesh must use identical radio settings to hear each other.

Regulatory note: Always operate within the legal transmit power limits and frequency allocations for your country. Unlicensed operation on LoRa frequencies is subject to duty-cycle restrictions in most regions.


Page 10 — Advert

In plain words: An advert is how others learn that you exist. Short intervals = others find you faster but more radio traffic. For most people the defaults are fine; use the manual Advert buttons after changing your name or when you first switch on.

Advertisements are periodic broadcast packets that announce your node's presence on the mesh. Other nodes use these to discover you and add you to their contact list.

Setting Description
Auto Advert 0-Hop Tap to cycle: Off, 1, 4, 12, 24, 72 hours
Auto Advert Flood Tap to cycle: Off, 1, 3, 6, 12, 24, 48, 72, 168, 255 hours (255 h ≈ 10.6 days, the largest value the field can store)
Advert Location Off, GPS, or Manual — whether coordinates are included in adverts
Path Hash Mode 1-Byte / 2-Byte / 3-Byte — on-air path hash size; sets Device ID width and map badge sizes
Advert 0-Hop / Advert Flood Manual actions — send a one-shot advert now
Scan Rpts Opens Neighbor RPTs: a 15 s listen window for direct (0-hop) repeater adverts. Shows Heard RPT count, State (Scanning… / Done), RSSI/SNR bars, and Add for repeaters not yet in contacts. Tap Rescan to run again.

Reducing advertisement frequency (longer intervals) decreases channel usage. Advertising more frequently increases how quickly new nodes discover you.


Page 11 — Messages

Setting Description
Custom QuickSend Fixed phrase for one-tap send: long-press status-bar centre, or Custom / Qck in a thread header
Custom QuickR1 Template for Q1 / QuickR1 (per-message quick reply); tap Edit
Custom QuickR2 Template for Q2 / QuickR2; tap Edit
Clear All Msgs Empty — clears channel + DM messages from RAM only (not SD history)
Auto Retry Resend DMs when no ACK within timeout
Auto Reset Path With Auto Retry, failed delivery clears the cached route before retry
Direct Message Acks Tap Set to choose how many ACKs are required, 0–99 (0 = off). The WebUI's dropdown for this setting only offers 0–2.
Mark Delivered Faster Mark sent DMs delivered without waiting for ACK
Replace HashCodes Enabled / Disabled — show contact names instead of raw [XX] path-hash codes in transcripts (display only; default Enabled)

Quick-reply templates may include placeholders expanded from the message you are replying to: (HP) / [HP] (path hashes), (HC) / [HC] (hop count), (SNR) / [SNR], (RSSI) / [RSSI]. Example: Heard you on (HC) at (SNR). See Replace HashCodes for how [XX] tokens in message text relate to path hashes.


Page 12 — Stats

In plain words: The Stats page is your device's health and signal dashboard. It answers: How noisy is the radio channel? How well do I hear others? How busy is the network? How much memory is left? Nothing on this page changes any setting (except opening graphs and Airview), so you can explore freely.

How to open it: tap Mgmt, then open Stats (overview page 1, or swipe/use the header arrows to page 12). In the WebUI: Mgmt → Stats.

Where to look for what

I want to know… Look at What it tells you
Is the channel quiet or noisy? Noise Floor The background radio noise your receiver hears (dBm). The lower (more negative) the better.
How well did I hear the last packet? Last RSSI, Last SNR RSSI = how strong; SNR = how clearly it stood out from the noise. A packet whose RSSI is well above the noise floor is received more reliably.
Is a link getting better or worse over time? Tap > next to Noise Floor / Last RSSI / Last SNR A scrolling live graph of the last 64 samples. The Link Margin graph is RSSI minus noise floor; its baseline is 0 dB.
What is actually flying around on the air right now? Airview A live picture of the channel and every packet heard — see below.
How much am I transmitting? TX Air / RX Air and (on Radio) Duty Live Total time spent sending / receiving since boot.
Is my traffic mostly flood or direct? Packets Sent/received counters split into flood and direct.
Is my memory filling up? Messages How many channel/DM messages are held in RAM of the maximum.

Graph details: the RSSI graphs draw a red reference line at the noise floor; link-margin graphs draw a 0 dB baseline.

🔧 All fields on the Stats page

Radio

Field Description
Noise Floor Current receiver noise floor (dBm)
Last RSSI RSSI of the most recent packet
Last SNR SNR of the most recent packet
Airview Opens the full-screen Airview (see below). Device: tap the header's Back button to exit; WebUI: tap anywhere
Radio RX / Radio TX Driver-level packet counters

Airtime

Field Description
TX Air Cumulative transmit air time (seconds)
RX Air Cumulative receive air time (seconds)

Packets (mesh routing)

Field Description
Sent Flood / Sent Direct Transmitted flood vs direct packets
Recv Flood / Recv Direct Received flood vs direct packets

Messages (RAM buffers)

Field Description
Channel Channel messages used / capacity
DM Direct messages used / capacity

SD Store (SD-capable builds): Advert paths when a card is present, else No SD Card.

Graph titles: RSSI (live), SNR (live), Link Margin (live) (RSSI minus noise floor).

Airview (Mgmt → Stats → Radio → Airview, device and WebUI)

In plain words: Airview is like a live picture of the airwaves on your radio's channel. You see the background noise, and every time a packet is heard it shows up as a coloured mark that tells you what kind of packet it was (advert, channel message, direct message, …). Use it to answer: Is the channel busy? Is something transmitting that I can't decode? Are my own sends going out? Do I hear adverts from repeaters?

Airview is safe: it never changes your radio settings or scans other frequencies, and sending/receiving continues normally while it is open.

How to open and close it

Device WebUI
Open Mgmt → Stats → Radio → Airview Same path in the WebUI
Help Tap the ? button (top right). The help scrolls (drag); Back or X closes it Click ?; Close closes it
Exit Airview Tap the header's Back button Tap anywhere on the view

In the WebUI, the device only measures for the browser while Airview is open.

What you see, in 30 seconds

  1. Header line: the frequency, bandwidth, SF and CR you are listening on. Airview always shows your radio settings.
  2. Big waterfall (centre): time runs downwards – the newest row is at the top, labels on the left tell how old a row is (now, -5s, -10s …). Left = weak signal, right = strong signal.
    • A steady column far on the left = the quiet background noise (normal).
    • A short mark further right = a packet arrived (the further right, the stronger).
    • Colour in a cell = how much of that moment was spent at that signal level: black = nothing, then blue → cyan → green → yellow → red = more and more.
  3. Coloured lane at the left edge + faint stripe across the row: tells you the type of packet heard at that moment (colours in the table below).
  4. Packet list (right side on wide screens, otherwise below): one line per packet, newest first.
  5. Blue bars on top (histogram): where the signal spent its time over the last ~20 s (device) / ~30 s (browser).
  6. Cyan line: estimated noise floor. Orange line: estimated receiver sensitivity (the weakest signal your current SF/BW can still decode; only drawn when it fits on the scale).
  7. Numbers under the waterfall: Now, Floor, Peak, Busy %, packet count and rate, last packet RSSI/SNR, symbol time, bit rate, sensitivity.

Packet colours

Colour Name Meaning
green ADV Adverts ("I am here")
yellow CH Channel (group) messages / data
magenta DM Direct messages
cyan PATH Returned paths
orange TRC Trace packets
grey ACK Acknowledgements (delivery confirmations)
violet REQ Requests and responses (for example remote admin/telemetry requests)
white OTH Control / multipart / raw
red TX Your own transmissions

The type comes from the packet's unencrypted header only; message content stays encrypted and is never shown.

Reading the picture – common situations

What you see What it usually means
Only the quiet column on the left, no marks Nobody is transmitting on your settings right now – or you are out of range of everyone. Send an advert and see whether your red TX mark appears.
Regular green ADV marks Nearby nodes (often repeaters) are announcing themselves – good sign that you hear the mesh.
Many marks close together, high Busy % The channel is busy. Consider longer advert intervals or fewer flood messages (Section 8.6).
A power streak in the waterfall but no entry in the packet list Something was transmitted but not decoded: noise or interference, a different LoRa setting (frequency/BW/SF), or a damaged packet.
echo in the packet list One of your own packets was heard coming back via a repeater – proof that a repeater relayed it.
TX! in the packet list Your own send failed.
Noise column creeping to the right Rising noise floor – interference nearby.
🔧 Airview in depth: measurement, packet list format, statistics

What is measured. The LoRa chip reports one power value for the channel it is tuned to, not a frequency spectrum. Airview therefore shows signal level over time, not a frequency sweep. It samples that value every few milliseconds and builds:

  • Waterfall: each row is 200 ms. The horizontal axis is signal level in 2 dB steps from −130 dBm (left) to −30 dBm (right). A cell's colour = share of that 200 ms row spent at that level.
  • Level histogram (blue bars; neutral colour): the same level axis summed over the whole window (about 20 s on the device, 30 s in the browser). Not related to the waterfall colours.
  • Cyan line (noise floor estimate): the level below which 20 % of the samples fall, so packets do not distort it.
  • Orange line (sensitivity estimate): computed from bandwidth and SF with an assumed 6 dB noise figure; shown only when it lies inside the displayed range.

Where packet types appear. Three places show the same colour: the lane at the waterfall's left edge, a faint stripe across the whole row (lane, stripe and the bright mark at the packet's own signal level belong together), and the packet list. A row with a decoded packet but no recognised type gets a white mark. The line below the stats counts packets per type over the window (types with 0 are dimmed); the small gradient under it is the waterfall colour scale.

Packet list format (newest first):

-3s  GRP_TXT  Public F 2h  -88dBm 6.2dB  54B

= age (same scale as the waterfall labels) · type in its colour · for channel packets the channel name (or #hash for a channel you don't have) · Flood or Direct route · hop count · RSSI · SNR · size. TX / TX! (send failed) are your own sends; echo is one of your own packets heard back via a repeater. The radio does not report the coding rate of a received packet, so packets cannot be told apart by CR.

Statistics under the waterfall:

Value Meaning
Now Latest sample
Floor Estimated noise floor
Peak Strongest level seen in the window
Busy Share of samples at least 8 dB above the floor
Pkts / rate Number of decoded packets in the window and their rate
Last RSSI/SNR of the last decoded packet
Tsym / bps LoRa symbol time and bit rate for your SF/BW/CR
Sens Sensitivity estimate

Layout: on short, wide panels (for example the Heltec V4 TFT) the stats, packet counts and legend move into a column beside the plot.

Hardware limit: on the T-Watch (S7XG radio) the module cannot read live channel power: the waterfall only gets a sample when a packet was decoded.

See the CHANGELOG for when Airview features were added or changed.


Page 13 — Log

In plain words: A list of the latest radio packets your device heard. Useful for checking that you receive anything at all.

A scrollable receive log showing the most recent 48 received packets. Each row displays:

  • Relative timestamp (e.g. 5 m ago)
  • SNR and RSSI values
  • Route type (Flood or Direct)
  • Payload type and version
  • Sender identity (resolved to name if the contact is known)
  • Destination hash (if present)
  • Path length (number of hops)

Each entry uses the consistent identity colour for the sender, making it easy to track a specific node's packets in the log.

The log automatically scrolls to show the newest entries. Scrolling up pauses auto-follow; the log resumes auto-follow when you scroll back to the bottom.

Tap any log row to open a full-detail overlay showing the complete raw frame data including the decoded routing path.


Page 14 — Sensors

In plain words: If your device has sensors (or you plug some in), this page shows their readings with small graphs. If a reading is slightly off, you can correct it with an offset.

Everything about the node's own sensors on one page (Mgmt → Tele was merged into it). The same sections appear in the WebUI under Mgmt → Sensors.

Live — one row per reading, with a small graph of the last 96 samples and the current value, for example:

Reading Unit
Battery voltage V
Temperature °C
Relative humidity %
Pressure hPa
CO₂ concentration ppm
TVOC index —
Voltage / current / power (INA2xx) V / mA / W
Distance, light cm / lux
🔧 Supported I²C sensors and addresses

Supported I2C sensors (all boards): AHT10/AHT20 (0x38), BME280 / BMP280 / BME680 (0x76/0x77), BMP085/BMP180 (0x77), SHTC3 (0x70), SHT4x (0x44), LPS22HB (0x5C), INA219 (0x40), INA260 (0x41), INA3221 (0x42), INA226 (0x44), MLX90614 (0x5A) and VL53L0X (0x29) — the full MeshCore sensor set. Plug one into the board's I2C bus and it is found at boot (only addresses that answer are initialised). On the SenseCAP Indicator this is the ESP32 bus; its built-in CO₂/temperature/humidity/VOC sensors are read by the RP2040 and appear as Indicator.

Readings only appear if the hardware has that sensor. If two sensors report the same kind of value, the sensor name is shown in front (e.g. BME280 Temp). The value refreshes every 5 s while the page is open. The graphs are recorded in the background, every Refresh (s) seconds (default 60 s, so 96 samples ≈ 96 minutes), so they are already filled when you open the page. Tap a Live row for a full-screen graph with its min/max; the header Back button returns. Hold a row to copy its value.

Status — GPS state, location, altitude and, on the SenseCAP Indicator, how long ago the RP2040 last sent sensor data.

Calibration — every detected sensor (name and I2C address) with its readings and an Offset per reading (below); INA219 boards also have a Range row. The chip temperatures are sensors too: ESP32 (all ESP32 boards) and RP2040 (SenseCAP Indicator) each have a live graph and a temperature offset, and are sent as telemetry like any other sensor.

Telemetry — Refresh (s) (graph sample interval, 0 = off) and Base Tele, Loc Tele, Env Tele (tap to cycle Off / On request / Broadcast: what this node answers to telemetry requests or broadcasts).

Calibration offsets — set a calibration offset per reading: temperature (°C), humidity (%RH), pressure (hPa), distance (cm), voltage (V), current (mA), power (W), CO₂ (ppm), VOC/IAQ index, light (lux) and altitude (m). Available on the device (tap Offset on a reading) and in the WebUI (Mgmt → Sensors).

  • Offset = reference value − sensor value. Example: a trusted thermometer shows 21.0 °C and the sensor shows 22.5 °C → enter -1.5. Leave the sensor settled for a while before comparing; self-heating (enclosure, board) is the usual reason for warm readings.
  • The corrected value is used everywhere: Live graphs, WebUI, companion app, and telemetry sent to other nodes.
🔧 Offset limits, sensor IDs and driver notes
  • Limits: ±20.0 °C, ±30.0 %RH, ±200.0 hPa, ±100.0 cm, ±5.00 V, ±1000 mA, ±100 W, ±2000 ppm, ±500 (index), ±5000 lux, ±1000 m. Humidity is sent in 0.5 % steps (Cayenne LPP), so a humidity offset is applied in 0.5 % steps.
  • An offset belongs to the physical sensor, stored under its ID (model + I2C address, e.g. BME280@76, or model + instance for non-I2C sensors, e.g. ESP32#0, RP2040#0, Indicator#0), so it survives reboots and stays with that sensor when others are added or removed. Enter 0 to remove it.
  • A pressure offset corrects the pressure only. The altitude some sensors report is calculated by their driver from the uncorrected pressure and a fixed sea-level reference (1013.25 hPa), so it does not change.
  • A reading that fails (sensor unplugged, bad checksum, out of range) is left out of that report instead of being sent as a wrong value.
  • SenseCAP Indicator: the built-in sensors on the RP2040 coprocessor (SCD41, or AHT20 as fallback, for temperature/humidity; CO₂; SGP40 VOC index) appear as Indicator. Their values are the last ones the coprocessor reported, refreshed on request.

Page 15 — Contacts

In plain words: Decide whether your device adds new people automatically when it hears them, and clean up the list. Auto-add is convenient; in a busy mesh, limit it by type and hop count so the list stays useful.

Setting Description
Auto Add Contacts When enabled, overheard adverts can add contacts (Note: adds from adverts)
Manual add contact Tap Add to enter a public key and name without hearing an advert
Auto Add Types Tap Set (when auto-add is on) to toggle USR, RPT, SRV, SNS, and OW (Overwrite oldest)
AutoAdd Max Hops Edit — limit path length for auto-add (No Limit, Direct (0), or N hops)
ACT/MAX Contacts Current contact count vs device maximum
Purge Contacts Remove all contacts (confirmation required)
Purge w/o favs Remove all non-favourite contacts

Manual add is useful for pre-loading a known public key before nodes are in range, e.g. one shared over another channel.

The WebUI's Mgmt → Contacts page has the same Auto Add, Max Hops, and Add types bitmask (as a single 0–31 number field) plus a Client Repeat toggle not shown on the device — this field is marked deprecated in firmware (_client_repeat, superseded by the repeater's own forwarding setting) and kept only for backward compatibility. The WebUI page has no Manual add contact field and no Purge buttons; purging contacts is device-only.


Page 16 — Channels

In plain words: Add or join group chats, share a channel's secret with friends, and delete channels you no longer need.

Control Description
Add channel Create a new channel
Join channel Join by name/PSK; Public restores the default public channel if missing
Scopes Edit region-scope definitions used for geo-filtered channels
Default Scope Default scope applied to new channels
Unscoped Flood Toggle whether flood messages with no region scope are still relayed (protocol v12+ flood-scope-key behaviour)
Per-channel row Scope, Share, Del — delete requires confirmation; Public channel can be re-added with Public

Share a channel shows a popup with the channel's secret (base64, or hex for a 128-bit secret) and its stored message count — there is no QR code. On the WebUI, the same popup also copies the secret to your clipboard automatically.


Page 17 — Date/Time

In plain words: Your device needs the right time for message timestamps. Easiest setup: enter your time zone (for example CET, UK or UTC+2), connect WiFi and leave the default Sync Prio order (NTP → GPS → Message). The clock then sets itself. No internet? Use GPS or set the time by hand.

Setting Description
Date/Time Current local clock; tap Set to enter local date/time (YYYY-MM-DD HH:MM:SS). Shows -- if unset. Manual set always wins until the next automatic sync from a higher-priority source.
GPS Time Status: No GPS, Disabled, No fix, or Fix. Tap Sync for a one-shot GPS copy into the RTC when a fix is valid (does not require GPS in a prio slot).
NTP TimeZone Short form (CET, UTC+2, UTC-5, GMT, BST) or full POSIX TZ string. MeshCoreTerm converts short forms automatically.
NTP Server Hostname; default pool.ntp.org. Tap Set to edit. Used when NTP appears in a sync priority slot.
NTP Sync every Cycle: 1h, 6h, 12h, 24h (default), 48h, or OneTime. Controls how often the device starts a new NTP (SNTP) sync while NTP is in a prio slot and WiFi is up. OneTime = one successful NTP apply per boot (retries about every 60 s until success, then stops until reboot). Changing interval forces the next sync when due.
Sync Prio1 / Prio2 / Prio3 Cycle each slot: Disabled, NTP, GPS, or Message. Prio1 is tried first, then Prio2, then Prio3 — the first configured source that is available right now updates the RTC (see refresh table below). If all three are Disabled, the clock is left unchanged (no NTP/GPS/message auto-sync). Default: NTP → GPS → Message. Message uses DM/channel timestamps (not repeater/room traffic).
NTP Status Read-only: last successful NTP sync (e.g. 5m ago, 2h ago) or Syncing... / No reply / Not tried / NTP off / Once (done). If it stays on Syncing..., use serial debug clock on (see Date/Time debug) and check WiFi, NTP in a prio slot, and [CLK] lines for may_apply / sntp_cb.
🔧 Automatic sync: how often each source runs

Automatic sync — how often each slot option runs

Only sources that appear in Prio1–3 (and are not blocked by a higher-priority source that is already available) can change the RTC. Manual Date/Time → Set and GPS Time → Sync are separate one-shot actions and do not depend on these slots.

Slot option Check / retry interval When the RTC is actually updated
Disabled Never (automatic) No automatic updates. Current time is kept until you enable another slot or use manual Set / GPS Sync.
NTP New SNTP sessions follow NTP Sync every (default 24 h; OneTime = once per boot). Until the first success, retries are about every 60 s (or 20 s on some remote WiFi pin-config builds). WiFi reconnect can trigger a sync when the interval is due (or for OneTime if not yet synced this boot). On each successful SNTP response (network latency applies). Only if NTP is the highest-priority source that is available (WiFi up).
GPS Main loop evaluates GPS about every 60 s (boards with GPS). Some GPS drivers may also push time after GPS Sync or about every 30 min when a fix is valid. Only if GPS wins priority over other available sources and the RTC is invalid (before 2020) or local time differs from GPS by more than 1 day (and GPS is not wildly different from NTP when NTP is already valid).
Message On each incoming DM or channel message (not repeater/room). No background timer. Only if Message is the highest-priority source that is available for that message and the sender timestamp differs from local RTC by at least 60 s (and passes sanity checks, including within 1 day of NTP when NTP time is already valid).

NTP Timezone examples:

What you type Meaning
UTC or GMT UTC, no DST
UTC+2 Fixed UTC+2 (no DST)
UTC-5 Fixed UTC−5 (no DST)
CET Central Europe with DST (CET/CEST)
BST or UK UK with DST (GMT/BST)
EST US Eastern with DST
🔧 Advanced time zones (POSIX strings)

Advanced (POSIX — optional):

Region POSIX string
UK (GMT + BST) GMT0BST,M3.5.0/1,M10.5.0/2
Central Europe (CET + CEST) CET-1CEST,M3.5.0,M10.5.0/3
US Eastern EST5EDT,M3.2.0,M11.1.0

Do not use IANA names like Europe/London or Europe/Vienna — they are not supported on ESP32.

The device stores UTC internally. Status bar, message timestamps, and Date/Time display apply your TZ string as local time. Date/Time → Set expects local date/time, not UTC.

NTP runs when NTP is assigned to a sync priority slot and WiFi has an IP; the device retries SNTP periodically while WiFi stays up. Editing timezone/server triggers an immediate sync attempt. Legacy installs migrate from the old NTP Enabled / Sync from Msg toggles to the three priority slots (default NTP / GPS / Message).

Accurate time is important for message timestamps and for ensuring the routing path cache behaves correctly. GPS time sync provides an alternative to NTP in environments without internet access.


Page 18 — CLI

In plain words: A text console for advanced users. Beginners can ignore this page.

A full local command-line interface for sending raw mesh commands to the connected node. The CLI overlays a scrollable terminal with history, identical in appearance and behaviour to the remote repeater CLI in the contact admin view. On touch-only boards, three buttons under the output — Cmd (open the keyboard to type a command), Last (recall the previous command), Clear (clear the output) — replace the up/down history keys the T-Deck Plus's physical keyboard uses instead.

The CLI is primarily an advanced diagnostic and configuration tool.


Page 19 — Backup (device only)

In plain words: Make a complete snapshot of your device (identity, contacts, channels, settings) on the SD card, so you can restore it later. Keep the card safe — the snapshot contains your private key.

Available on builds with SD backup support (overview page 1 corner tile, or page 19 in the page index). This index is a different page in the browser: the WebUI's page 19 is Storage (an SD/internal file browser), and it has no equivalent of this Backup page at all — creating, restoring, repairing or deleting a backup slot can only be done on the device.

The page title Backup is centred in the header between the pager arrows (same layout as the Log page).

Control Description
New Create a new backup slot on SD (progress spinner with file counts)
Refresh Rescan the backup slot list
Restore Active once a slot is selected; asks to confirm, then reboots the device into the restored state
Delete Active once a slot is selected (or, in Multi-sel, once at least one slot is marked); asks to confirm
Repair Active once a slot is selected. Rebuilds that slot's metadata file (checksum, timestamp, which store — Internal or SD — it was made from) from the files already on disk, without touching their content. Use it if a slot's listing looks wrong or its checksum shows as stale, for example after files were copied onto the card by hand.
Multi-sel Switches the slot list into multi-select mode (tap slots to mark/unmark, Delete removes every marked slot); tap again (Exit Sel) to leave it
Slot list Tap a slot to select it (or mark it, in Multi-sel)

A backup slot is a full snapshot: node identity (including the private key), contacts, channels, advert path cache, MC-Term settings and UI preferences, region scopes and channel-scope assignments. Because the private key is included, treat a backup slot — and the SD card holding it — the same as your node's original identity: restoring one on a different device replaces that device's identity with yours. Backup slots are not the same as day-to-day settings sync via /MCTerm/prefs.txt (see §8.1): a prefs.txt copy carries only the UI/MC-Term settings, not contacts, channels or the identity, and is far lighter to copy around than a full slot.


Page 20 — Alarm

In plain words: Alarm turns your device into a remotely triggerable siren. You agree on a secret trigger phrase (for example SOS). When a message containing that phrase arrives – as a direct message or in a channel – your device sounds a loud alarm and can show a blinking full-screen popup saying who sent it. It is useful for waking someone up, calling attention to a base station, or an emergency call-out in a group.

It is off by default. Nothing happens until you set Alarm Seconds to a number above 0 and switch on at least one trigger.

How to open it: tap Mgmt, then Alarm (overview page 2, third tile, or page 20). In the WebUI: Mgmt → Alarm. On hardware with no buzzer, I²S speaker or haptic motor (LilyGo T-Display P4) the page shows a single Alarm: Not supported row.

What the alarm does when it triggers

  1. Plays the chosen siren (Wail, Police, Fire, Ambulance) on the buzzer/speaker – or on the T-Display P4, the haptic motor – for Alarm Seconds.
  2. Optionally shows a full-screen blinking popup with the sender's name and any text that followed the phrase (Blink on Alarm → Display).
  3. Optionally blinks the keyboard backlight while the siren sounds (T-Deck Plus only).
  4. Silencing it: the first touch anywhere on the device (not only on this page) stops the sound and the blinking but leaves the popup on screen; a second, separate touch closes the popup.

Set up a "SOS" alarm in 6 steps (example)

Step Where Setting
1 Alert Alarm Seconds → 30 (the siren sounds for 30 s; 0 = feature off)
2 Alert Alarm Sound → pick one by tapping (Wail / Police / Fire / Ambulance)
3 DM Trigger Trigger: DM → on
4 DM Trigger DM Phrase → Set → type SOS
5 DM Trigger DM Match → Whole word (so SOS fires on "help SOS!" but not on "SOSO")
6 DM Trigger DM Senders → tap, pick the trusted contact(s) who may trigger it (up to 8)

Test it: from the allowed contact, send you a direct message such as SOS test. The siren sounds, and if Blink on Alarm is on you see the popup. Touch the screen once to silence, again to close the popup.

Safety tip: Prefer the DM trigger with a sender filter for anything important. Direct-message senders are verified by their public key. Channel-message senders are only a name written in the text, so anyone posting in that channel could imitate it. Also pick a phrase that people will not type by accident.

All settings explained

Alert (applies to both triggers)

Setting Description
Alarm Seconds 0–999 seconds the alarm sounds once triggered. 0 disables the whole feature – both triggers below only arm once this is non-zero.
Alarm Sound Tap to cycle: Wail, Police, Fire, Ambulance.

DM Trigger – react to direct messages

Setting Description
Trigger: DM Enable/disable matching incoming direct messages.
DM Phrase Tap Set to enter the trigger text (up to 23 characters). Matching is case-insensitive and surrounding spaces are ignored.
DM Match Tap to cycle how the phrase must appear in the message (see table below).
DM Senders Any sender, or tap to open a picker and mark up to 8 specific contacts by their public key.

Channel Trigger – react to group channel messages

Setting Description
Trigger: Channel Enable/disable matching incoming channel messages.
Ch Phrase Same as DM Phrase, for channel messages.
Ch Match Same match modes as DM Match.
Channels All channels, or tap to open a picker and mark specific channels.
Ch Senders Any sender, or tap to open a picker and mark up to 8 sender names. Channel messages carry the sender's name as plain text, not a cryptographic identity, so — unlike the DM sender filter's real public-key match — this is a best-effort match anyone posting to the channel could spoof.

Match modes (same for DM and channel) – example phrase SOS:

Mode Fires when the message… Example that fires Example that does not
Starts with (default) begins with the phrase SOS come now help SOS
Contains has the phrase anywhere, even inside a word help SOS!, SOSO S O S
Ends with ends with the phrase help SOS SOS come now
Exact is exactly the phrase SOS SOS now
Whole word has the phrase as a separate word anywhere help SOS! SOSO

Display – popup on the screen

Setting Description
Blink on Alarm Off by default. When enabled, a triggered alarm also shows a full-screen, blinking popup naming who sent the trigger and any text after the phrase.
Blink Interval Tap to cycle 200ms, 500ms, 1s, 2s, 3s, 4s, 5s.

Keyboard (LilyGo T-Deck Plus only)

Setting Description
Blink on Alarm Off by default. Blinks the physical keyboard backlight for as long as the alarm is actively sounding — independent of the Display blink above.
Blink Interval Same cycle as the Display section.

WebUI: Mgmt → Alarm mirrors every one of these settings, including the specific DM sender / channel / channel-sender picks (the same persisted lists). Instead of tap-to-cycle it uses per-row Save buttons.

Good to know

  • The alarm only reacts to messages your device receives, so the device must be switched on and in radio range (directly or through repeaters).
  • If nothing happens: check Alarm Seconds is above 0, the trigger switch is on, the phrase and match mode fit the test message, the sender/channel filter allows it, and Mgmt → Sound is not muted (see Troubleshooting).
  • The CHANGELOG lists alarm changes (match modes, WebUI page, keyboard/display blink fixes).

4.8 Text Editor & On-Screen Keyboard

The text editor overlay appears whenever the interface requires text input — for messages, settings, passwords, channel names, and search fields. On hardware keyboard devices (T-Deck Plus), physical key input is active in all text fields without needing to open the on-screen keyboard explicitly.

Layout

┌────────────────────────────────────┐
│ Field title            [counter]   │
│ ┌──────────────────────────────┐   │
│ │ typed text with cursor █     │   │
│ └──────────────────────────────┘   │
│ ┌──────────────────────────────┐   │
│ │ Q W E R T Y U I O P         │   │
│ │  A S D F G H J K L          │   │
│ │   Z X C V B N M  ←   ↵      │   │
│ │ ⇧   123    [space]  . OK  × │   │
│ └──────────────────────────────┘   │
└────────────────────────────────────┘

Keyboard Modes

Mode How to activate
UPPERCASE Default mode on open
lowercase Tap the shift key (⇧)
Symbol set 1 (SYM1) Tap 123
Symbol set 2 (SYM2) Tap #+= from SYM1

Input Actions

Action Touch Hardware keyboard
Insert character Tap key Type key
Delete character Tap ← Backspace
Confirm / Send Tap OK Enter
Cancel Tap × Alt+C
Move cursor left/right Tap in text area ← → arrow keys
Copy a word Double-tap the word —
Paste from clipboard Double-tap in empty area —
Symbol printed on a key (# 1 @ ! ? …) SYM1 / SYM2 Sym+key
Open the on-screen symbol pad Tap 123 Alt+S

T-Deck Plus Alt Symbols

The T-Deck keyboard cannot type some ASCII characters. While a text field is open, Alt+key inserts them. Each one relates to the symbol printed on its key (e.g. D carries 5 → %, N carries , → <). An Alt combination never types the plain letter. Alt+B (keyboard light), Alt+C (cancel), Alt+L (lock) and Alt+S (symbol pad) are reserved. The editor shows this list on screen.

Alt+ O D F Z N M T Y G V I K
Inserts = % ^ & < > [ ] \ | ~ `

Internal Clipboard

The GUI maintains a private clipboard (up to 256 characters) for copy and paste within the device.

  • Copy a word: double-tap any word in a message detail view. A brief notification shows the copied text.
  • Copy public key: open Mgmt → Global → Public Key (Identity detail) and long-press the public-key block, or long-press the Device ID row to copy the short ID.
  • Paste: double-tap in an empty text input area. A character counter in the title shows remaining space.
  • The clipboard is saved to the SD card as /clipboard.txt and is restored on reboot.

Password Fields

Fields designated as passwords — BLE PIN, WiFi password, repeater admin passwords — display characters as • dots. The actual value is withheld from the display but can be copied from a clipboard operation in specific flows (e.g. copying a displayed credential for transfer).

Character Counter

For fields with a maximum length (channel messages are limited to 125 characters), a counter is shown in the top-right corner of the input box. The counter turns red as the limit approaches.


4.9 Confirm Dialogs

Destructive or irreversible actions always present a confirmation dialog before executing, showing a title and description of the action with OK and Cancel buttons.

A 150 ms suppression window is applied after the dialog opens. This prevents the finger-up event of the opening tap from immediately and accidentally dismissing the dialog.

Action Location
Delete channel Long-press channel title row in transcript header
Delete DM thread Long-press thread row in Users list
Join hashtag channel Tapping a #tag in a message
Switch transport Mgmt → WiFi → Use WiFi or Mgmt → BLE → Use BLE (CrowPanel 7: Switcher → Safe reboot)
Share channel (shows the secret) Mgmt → Channels → Share
Purge all contacts Mgmt → Contacts → Purge Contacts
Purge contacts (keep favourites) Mgmt → Contacts → Purge w/o favs
Disable all flood adverts Mgmt → Advert
Disable all direct adverts Mgmt → Advert
Delete WiFi profile Mgmt → WiFi → Profiles

4.10 Lock Screen & Autolock

Enabling Autolock

  1. Go to Mgmt → Lock.
  2. Set Autolock to Enabled.
  3. Tap Set on Autolock Timer and enter idle seconds (5–3600).
  4. Optional: set Lock Background to Picture, place a PNG at Picture PNG (or upload from WebUI), and pick Lock Text Color.

The timer resets on every touch, keypress, or navigation event. The lock does not engage during the boot splash screen.

Behaviour While Locked

When locked, normal UI input is blocked and a full-screen overlay is drawn:

  • Lock Background → None: black screen (display may soft-off until you touch; see below).
  • Lock Background → Picture: your PNG fills the screen; touch or a key press turns the panel on and shows the time and hints on top.
  • Shows HH:MM:SS (device local time), Locked, and — if F-Advert Tracking is enabled — an orange Tracking badge.
  • Mesh receive, message storage, and radio activity continue; only the interactive UI is suspended.

Configure appearance under Mgmt → Lock (Page 5).

Unlocking

On touch devices:

  1. Long-press anywhere for 2 seconds. A progress bar and Hold: X.Xs countdown appear.
  2. Release early and the attempt resets; hold until the bar completes.

On keyboard devices (e.g. T-Deck):

  • Press Alt+L to toggle lock, or use the same 2 s long-press where touch is available.

After unlocking:

A short grace period (~1.5–3 s) prevents the unlock gesture from immediately activating a control underneath.

Soft-Off (Display Sleep)

Mgmt → UI → Disp. Timeout dims the backlight after inactivity; a tap wakes brightness. This is independent of autolock — both can be active. Entering lock while soft-off forces the panel on so the lock screen remains visible when Lock Background → Picture is used.


4.11 Touch Gestures Reference

Gesture Effect
Single tap Select, open, activate
Short tap battery indicator Cycle status label: Percent → Volts → Duty → Percent
Tap status bar clock Open Mgmt → Date/Time
Long-press Contacts tab (2 s) Toggle Discovered nodes view
Short tap Contacts tab Cycle contact sort mode (not in Discovered view)
Short tap Msgs tab Cycle Channels → DMs → Rooms lists
Long-press Msgs tab (2 s) Open join-channel secret-key editor
Long-press Back arrow in transcript Clear transcript (with confirmation)
Long-press channel/DM title in transcript header Delete channel or DM thread (with confirmation)
Long-press transcript header middle button (1 s) Edit Custom QuickSend text
Long-press map node marker Select contact
Long-press lock screen Unlock (2-second hold)
Double-tap word in detail view Copy word to clipboard
Double-tap empty editor area Paste from clipboard
Swipe up/down Scroll any list or log
Swipe left/right Switch Msgs frames, Mgmt pages, contact detail pages
Drag on map Pan map
🔧 Touch handling internals (scroll gating, dropout protection)

Scroll Gating

Fixed headers, title bars, and action bars do not initiate drag-scroll when a touch begins in their region. Only the scrollable content area below responds to vertical drag. This prevents unintentional scrolling when tapping buttons in headers.

Touch Dropout Protection

A 150 ms grace window joins brief touch-panel dropout events into the preceding gesture, so that a momentary lift during a slow drag does not break the scroll. The suppression window after dialogs and editor overlays also prevents ghost taps from the closing interaction.


4.12 Keyboard Shortcuts (T-Deck Plus)

Map Tab

Key Action
W Pan up
A Pan left
S Pan down
D Pan right
I Zoom in
O Zoom out
R Re-centre on your location
T Toggle altitude bar

Text Editor

Key Action
Printable characters Insert at cursor position
Backspace Delete character before cursor
← / → Move cursor left/right
Enter Confirm and send
Esc Cancel and close editor

Repeater / Local CLI

Key Action
Printable characters Add to command input
Enter Send command
↑ / ↓ Navigate command history
Backspace Delete last character

5. WebUI Documentation

5.1 Relationship to the GUI

The WebUI is a browser-based interface that mirrors the on-device GUI in structure, appearance, and functionality. It is served directly from the device itself over WiFi — no external server or cloud service is involved. When the device is connected to a WiFi network (or acting as a WiFi access point), any device on the same network can open the WebUI in a web browser.

The WebUI offers the same four main tabs as the on-device GUI: Contacts, Msgs, Map, and Mgmt. (Channels, DMs, and room-server threads all live under Msgs, not separate top-level tabs.) All data visible in the WebUI comes from the device in real time via a WebSocket connection; changes made in the WebUI are immediately reflected on the device and vice versa.


5.2 Accessing the WebUI

In plain words — quick version:

  1. On the device: Mgmt → WiFi → set WebUI to Enabled and make sure WiFi is the active connection (Use WiFi).
  2. Connect your phone/laptop to the device's WiFi (Access Point mode), or put both on the same network (Station mode).
  3. Open http://192.168.4.1 (Access Point mode) or http://<IP shown under Mgmt → WiFi> in a browser.
  4. Log in with user admin and the six-digit Custom PIN from Mgmt → BLE.

If the page does not load, see Troubleshooting.

🔧 Full requirements, login and session behaviour

The on-device HTTP/WebSocket server (port 80) starts only when both are true:

  1. WebUI is Enabled (Mgmt → WiFi → WebUI — default is often disabled on first boot).
  2. WiFi is the active transport (not BLE or Off) and the link has a usable IP (Station associated or Access Point running, e.g. 192.168.4.1).

Enabling WebUI while the device is on BLE turns the setting on but does not start the server. After you switch transport to WiFi and the link has an IP, the server starts automatically. Mgmt → WiFi → WebUI Server shows Running only when the listener is actually bound; Enabled with Stopped means waiting for WiFi or an IP.

Anyone who can reach the device IP on the LAN can open the login page; you must sign in before data or settings are available.

Prerequisites

  1. WiFi transport selected and up (Station or AP) — see §8.3.
  2. WebUI: Enabled on the device.
  3. The device's Custom PIN (Mgmt → BLE → Custom PIN). This is the WebUI password.

When connected to an existing WiFi network (Station mode):

  1. Connect the device to your WiFi (active WiFi profile, Station mode).
  2. On the device, note the IP in Mgmt → WiFi (e.g. 192.168.1.45) or use the address your router assigned.
  3. On a phone or PC on the same network, open a browser: http://<device-ip> (example: http://192.168.1.45).

When using the device as a WiFi access point:

  1. Use a WiFi profile in Access Point mode; connect clients to the AP SSID (see §8.3).
  2. Open http://192.168.4.1 in the browser (typical AP address when the status line shows the AP is up).

Login (required)

The first screen is the MeshCore WebUI login overlay:

Field Value
User admin (fixed; shown on the form)
Password The device's 6-digit Custom PIN (same PIN used for BLE pairing)

Tap Login. On success, the overlay closes and the WebUI loads contacts, channels, map, and management pages. A session token is stored in the browser (localStorage); the next visit on the same browser may skip the login step until that token expires or is cleared.

Wrong credentials show Login failed; API and WebSocket requests without a valid token return 401 Unauthorized.

After login

  • The browser opens a WebSocket to the device for live data (messages, contacts, GPS, debug tiles).
  • If the connection drops, the client retries with backoff (about 1.5 s up to ~12 s). If the session is no longer valid, you are returned to the login screen.
  • Logging out or clearing site data removes the saved token; you must log in again.
  • Keyboard shortcuts use Alt + a letter (e.g. Alt+S opens map search on the Map tab). These are browser shortcuts in the WebUI, not the T-Deck Map pan keys (W/A/S/D). Full list: §5.3.2.

Security: The WebUI has no separate account password — knowledge of the Custom PIN (and network access to the device IP) is enough to sign in. Do not expose the WebUI to the public internet without a VPN or tunnel; see §5.4.


5.3 Feature Overview

The WebUI provides full access to device state and configuration:

Tab Features
Contacts Search (name / pubkey / type), sort (Last Heard, A-Z, Last Msg, Distance, Favs), manual + Add by pubkey, contact detail (GPS, telemetry, path, actions), repeater admin, room-server console
Msgs Three frames like the device: Msgs (channels), DMs, Rooms — use header ◀ ▶ arrows. Channel/DM threads with auto-read on open, per-row Del / RPL / Q1 / Q2, composer with byte counter. + Add panel for new channels (name + optional base64/hex/psk: key)
Map Interactive map; Alt+S search — §5.3.1. Layer switch, path overlay, Clear Path
Mgmt The same 21 logical pages as the device (Global … Alarm), except index 19: on the device this is Backup, but in the browser it is Storage (a file manager) — the WebUI has no backup-slot UI at all. A Debug page (index 20, diagnostics) exists only in the browser, ahead of Alarm. Most settings use per-row Save (not batch commit). Overview grid lists all pages

WebUI vs device (Mgmt highlights):

Page WebUI notes
Global Firmware .bin upload, identity import/export (file + hex), primary storage switch with progress overlay
UI Brightness slider, screen timeout and — on the SenseCAP Indicator — Rotation; Color Scheme, UI Zoom and Battery 100% are device-only
WiFi Extra reconnect/diagnostic rows (sleep inhibit, last event, disconnect reason)
GPS Simpler status block, but the same actions as the device — Restart GPS, Repair receiver, Restore Defaults, Use Map Center, Clear Loc. The detailed UART diagnostics (FixQ, HDOP, hAcc, C/N0, Bytes/Msgs/PVT, Last byte) are device-only.
Radio Also shows RX Delay Base and RX Boosted Gain, which have no row on the device
Advert Also shows Tracking / Track Dist m here (the device keeps those on the GPS page only)
Messages Multi ACKs dropdown offers 0–2; the device accepts 0–99 typed directly
Sound Quiet hours use two time-of-day pickers instead of the device's HHMM digit entry; no Play preview buttons
Contacts (Mgmt 15) Auto Add, Max Hops and the Add-types bitmask, plus a deprecated Client Repeat toggle not on the device; no Manual add contact field and no Purge buttons (device-only)
Channels Same Add/Join/Scopes/Unscoped Flood/Share/Del as the device; Share copies the secret to your clipboard automatically
Sensors Same sections as the device (Live graphs, Status, Calibration, Telemetry permissions); click a Live row for a large graph
Date/Time Sync Prio1–3, timezone, server — no manual Date/Time / GPS Time rows (use device)
Alarm Every device option, including the specific DM sender / channel / channel-sender picks, with per-row Save instead of tap-to-cycle
Storage (19) File manager: browse folders on internal flash or SD, view/edit a text file, delete, see capacity used. A different feature from the device's Backup at the same index — the WebUI has no backup-slot UI
Debug (20) Live diagnostics cards (CPU/heap, UI state, mesh JSON, memory breakdown). Copy Debug Snapshot in Help. Browser-only page, not on the device

The WebUI supports large contact lists through paginated delivery — contacts are loaded in batches to avoid overloading the connection. All updates from the mesh (new messages, new contacts, GPS movements, signal changes) are pushed to the browser automatically without requiring a page refresh.

Tab-bar mail badges: unread channel and DM counts appear as small envelope icons on the Msgs tab (and update on every tab while connected).

Debug page (browser-only, listed ahead of Alarm): Live diagnostics pushed over WebSocket — CPU/heap/PSRAM, UI state (display, soft-off, lock, tab), timers, battery, WebSocket client counts, message-store sizes, SD queue, and mesh/radio JSON stats. Tap a card to expand detail. Use Copy Debug Snapshot (Help) when reporting issues. There is no WebUI backup UI; use the device Backup page when SD backup is supported.


5.3.1 WebUI Map Tab

The browser Map tab uses Leaflet with tiles loaded from the device (same sources as the on-device map: local cache and/or network fetch via the radio).

Control Action
+ (top-right) Open map search panel — filter by name, hash, or type; tap a result to centre the map and open that marker's popup. Same as Alt+S when the Map tab is active (§5.3.2).
Layer buttons (Dark / Light / Topo) Switch basemap style (stored in the browser for the session). Same as Alt+D / Alt+L / Alt+T.
Clear Path (bottom-left) Visible only while a message path overlay is active — removes hop lines and shows all contacts again (zoom/pan unchanged)
Marker popup Coordinates, distance, Open Contact Detail; repeaters can be added to a manual path when Build Path on Map is active from contact detail

Message path overlay

  1. In Msgs (channel or DM thread), open a message that has path metadata.
  2. In message detail, tap Show Path On Map.
  3. The Map tab opens with numbered hop markers, route polylines, and only contacts on that path visible (same filtering idea as the device GUI overlay in §4.6).
  4. To exit overlay mode and restore the full contact map, tap Clear Path (bottom-left) or press Alt+C while the Map tab is focused.

Note: Clear Path clears the view overlay only. It does not change stored routing paths on contacts or messages. Build Path on Map (contact detail) is a separate flow for editing a contact's outbound path; cancel that with Alt+P or the path-picker Cancel button.

Live marker updates while you stay on the Map tab (WebSocket pushes) refresh positions without reloading the page; path overlay geometry is updated incrementally when overlay mode is active.

Map Alt+ shortcuts are listed in §5.3.2. In the WebUI help overlay (Map tab → ? or Alt+H), the same shortcuts appear under Map Shortcuts.


5.3.2 WebUI Keyboard Shortcuts

The WebUI is used in a desktop or mobile browser. Shortcuts are Alt + letter (hold Alt, tap the letter). They are not the on-device T-Deck Map keys (W / A / S / D pan the hardware map; Alt+S in the browser opens search on the WebUI map).

Tip: On macOS, Option is the same modifier as Alt for these shortcuts.

Map tab shortcuts

Works when the WebUI Map tab is selected (focus is in the page). Alt+M switches to Map from any other tab.

Shortcut Action
Alt+S Map search — open the top-right search panel, focus the search field, and show matching contacts (name, pubkey, type, hash). Enter selects the first result; Escape closes search.
Alt+M Switch to the Map tab
Alt+F Centre map on this device (self GPS)
Alt+D Basemap: Dark
Alt+L Basemap: Light
Alt+T Basemap: Topo
Alt+C Clear Path — exit message path overlay; show all contacts again
Alt+P Cancel Build Path on Map picker (if active)
Alt+H Open Map Shortcuts help (marker legend + shortcut list)

Map search workflow (Alt+S or + button):

  1. Open the Map tab (or press Alt+M).
  2. Press Alt+S (or tap + at the top-right of the map).
  3. Type in the search field — results update as you type (up to 24 matches).
  4. Click a result (or press Enter with the field focused) to pan/zoom to that node and open its popup.
  5. Press Escape or tap × on + to close the search panel.

5.4 Remote Usage

The WebUI is designed for local network use. It is not intended to be exposed directly to the internet. For remote access over the internet, use a VPN or a secure tunnel.

Practical limitations:

  • The WebUI requires the device to be on WiFi or acting as an AP. It is not available when the device is in BLE-only mode.
  • Map tiles in the WebUI come from the same source as the on-device GUI. Network tile downloads (from OpenStreetMap) pass through the device — if the device has internet access, the map will auto-load tiles; if not, only pre-loaded SD card tiles are available.
  • Very large contact lists (hundreds of contacts) load progressively; the initial page may show a partial list for a few seconds on first connection.

6. Features & Capabilities

6.1 Messaging

MeshCore supports two types of text messaging: direct messages (one-to-one, end-to-end encrypted) and channel messages (group, PSK-encrypted).

Direct Messages

  • Maximum message length: 125 characters
  • Encryption: end-to-end using the recipient's public key
  • Delivery tracking: each sent message is assigned a pending state; it transitions to delivered (✓) when an acknowledgement is received, or undelivered (✗) if no acknowledgement arrives within the timeout
  • Route caching: the path to the recipient is cached after the first successful exchange. Subsequent messages reuse this path without flooding. If delivery fails, a path reset and re-flood are triggered automatically (if Auto Retry is enabled)
  • Message history is stored on the device and persists across reboots

Channel Messages

  • Maximum message length: 125 characters
  • Encryption: all participants share a pre-shared key (PSK); messages are decryptable by anyone with the key
  • All channel messages use flood routing, so they propagate across the entire reachable mesh
  • Message history per channel is stored on the device and persists across reboots
  • Up to the device storage limit, multiple channels can be joined simultaneously

Quick Send and quick replies

MeshCore provides three configurable message shortcuts in Mgmt → Messages:

Setting UI label What it does
Custom QuickSend Custom / Qck (thread header) Sends the phrase immediately to the open channel or DM — no composer
Custom QuickR1 Q1 (WebUI); QuickR1 (device composer) Inserts expanded template text into the composer for a reply to a specific message
Custom QuickR2 Q2 (WebUI); QuickR2 (device composer) Second quick-reply template (same behaviour as Q1)

Quick Send (Custom QuickSend):

  • Tap Custom / Qck in the channel or DM transcript header (sends immediately to the open thread).
  • Long-press the middle header button in an open transcript (about 1 s) to edit the QuickSend phrase (same text as Mgmt → Messages → Custom QuickSend).
  • If unset, the device falls back to a default test phrase (RangeTest - ACK?).

Useful for canned status lines such as OK or Heading back.

Quick replies Q1 / Q2 (Custom QuickR1 / QuickR2):

  • Configure both strings under Mgmt → Messages (up to 128 characters each).
  • WebUI: in an open channel or DM thread, tap Q1 or Q2 on a message row. The composer is prefilled with the template after placeholder expansion; for incoming channel traffic the WebUI may add an @[sender] prefix.
  • Device: in a channel thread, tap a message → Reply → tap QuickR1 or QuickR2 in the editor. Placeholders (HP), [HP], (HC), [HC], (SNR), [SNR], (RSSI), [RSSI] are filled from that message’s route/SNR/RSSI data. Edit if needed, then confirm OK to send.
  • If a template is empty, the device shows QuickR1 not set / QuickR2 not set; the WebUI shows a similar notice.

Quick Send and Q1/Q2 are separate: Quick Send transmits directly; Q1/Q2 only prepare (or prefill) a reply tied to a chosen message.

Replace HashCodes

MeshCore routes packets using shortened path hashes — the first 1, 2, or 3 bytes of each node’s public key (see Mgmt → Advert → Path Hash Mode and your Device ID on Mgmt → Global). On the air and in stored message text, those hops often appear as bracketed hex:

Pattern Path hash size Example
[XX] 1 byte [A3]
[XXXX] 2 bytes [A3F2]
[XXXXXX] 3 bytes [A3F2C1]

Bots, repeaters, and users may embed these tokens in channel or DM text (for example route reports, diagnostics, or templates that expand (HP) / [HP] to a hop list).

Replace HashCodes (Mgmt → Messages, default Enabled) controls display only:

  • Enabled: in channel/DM transcripts and message detail, each matching [XX] / [XXXX] / [XXXXXX] token is shown as [ContactName] when that prefix matches a node in your Contacts list (same lookup as the map hash badge and route overlay).
  • Disabled: messages show the literal hex tokens as received — useful for debugging, support logs, or copying exact on-air path data.

This does not change what was transmitted or what is saved on SD; it only changes how the device UI and WebUI render message bodies. Unknown hashes (no matching contact) stay as [A3] etc. The WebUI setting is the same (Replace HashCodes under node/message settings); unresolved hashes are shown in monospace grey, resolved ones as a name badge plus the hash.

When to use it:

  • Leave Enabled for day-to-day reading — channel traffic and quick-reply expansions are easier to follow when hop codes become repeater or user names you already know.
  • Turn Disabled if you need the exact hash bytes (troubleshooting routes, comparing with a packet log, or matching Path Hash Mode on another node).

Ensure repeaters and peers you care about are in Contacts (auto-add or manual); replacement only works for public-key prefixes you have stored locally.

Unread state and marking read

  • Unread badges appear on the Msgs tab, channel rows, and DM rows when messages have not been marked read on the device.
  • Open a thread and scroll to the bottom to mark visible traffic read automatically, or tap Read in the transcript header to mark the whole thread at once.
  • Tap Newest to jump to the latest message without scrolling manually.
  • While a phone or browser companion session is connected over Wi‑Fi/BLE, newly arriving messages are ingested as read on the device; use Read after disconnect if you cleared unread state only on the companion app.

6.2 Channels & Group Communication

Joining Channels

Channels can be joined in two ways:

  1. By name: open the Msgs tab, tap +, and enter a channel name. A channel with no PSK is effectively a public channel — anyone using the same name on the same radio frequency can participate.
  2. By name + PSK: tap +, enter the name, and enter the pre-shared key (base64 is usual; the WebUI also accepts hex or a psk: prefix). Only devices with the matching key can decrypt messages.
  3. By hashtag link: tapping a #channelname reference in any received message immediately prompts you to join that channel.
  4. Mgmt → Channels: use Add channel or Join channel — same channel list as the Msgs tab; changes are saved immediately.

Joined channels are written to the same store as contacts. With Primary Disk → SD Card, channel data is saved on the SD card (not only internal flash), so new channels survive reboot when the card is present.

The Public Channel

A default Public channel exists that is pre-configured on all MeshCore nodes. It has a known public key, so any node on the same frequency can participate. The Public channel is restored automatically if deleted.

Channel Management

  • Delete a channel: long-press the channel title row in the transcript header, or use Mgmt → Channels → Delete.
  • Clear transcript: long-press the Back arrow inside a channel transcript.
  • Cycle scope: short-tap the channel title row in a transcript, or Mgmt → Channels → Scope per channel.
  • Share a channel: Mgmt → Channels → Share shows the channel's secret as text (there is no QR code) — see Page 16 — Channels.

Region scopes

Optional geo-filter tags for flood traffic. Define named scopes under Mgmt → Channels → Scopes; assign per channel or set a Default Scope. Scope badges on channel rows and Scope: in message detail show which region applied. See §4.5 Region scopes.


6.3 Contact Management

Auto-Population

New nodes are discovered from their advertisement packets. When Auto Add Contacts is enabled, the GUI automatically adds incoming advertisements to the contact list based on:

  • Type filter — only the selected node types (USR, RPT, SVR, SNS) are added
  • Hop limit — only nodes reachable within the configured maximum number of hops are added

Manual Import

If you know a node's public key but it is not in radio range, you can add it manually:

  1. Go to Mgmt → Contacts → Manual Add.
  2. Enter the full 32-byte hexadecimal public key.
  3. Enter a display name.
  4. Tap Add.

The contact appears in the list immediately and will be available for messaging.

Favourites

Star any contact by tapping FAV in the contact detail view. Favourite contacts:

  • Are always shown regardless of the Favs Only filter
  • Are preserved when Purge Contacts (keep favourites) is used
  • Display a ⭐ badge in the contact list

Telemetry Permissions

By default, contacts do not automatically share their GPS coordinates and sensor readings with you unless you grant them permission. Tap TPERM in the contact detail view to toggle this. When permission is granted, the contact's telemetry fields are populated in the detail view as the node broadcasts data.


6.4 Map & GPS

GPS Acquisition

On first boot or after enabling the GPS module, allow up to 5 minutes for an initial satellite fix, especially indoors or in built-up areas. The GPS status icon in the status bar shows whether the module is searching or has a valid fix. Once a fix is acquired, the map automatically places the "ME" marker at your location.

For best results, position the device with a clear view of the sky. Some device variants (e.g. T-Deck Plus) have specific antenna placement requirements — consult your device's documentation for the optimal antenna orientation.

GPS Coordinate Sharing

When Advert Location is enabled (Mgmt → Advert), your GPS coordinates are included in advertisement packets. Other nodes receive these coordinates and can plot your position on their maps. Disable Advert Location if you do not want to share your position.

GPS coordinates are saved to persistent storage every 5 minutes while a fix is active. After a reboot, the last saved position is shown on the map immediately.

Movement tracking (Tracker)

Mgmt → GPS → Tracking controls automatic flood adverts when your position changes:

  1. Set F-Advert Tracking to Enabled.
  2. Set Send tracking advert every to the distance in metres you must move before another tracking advert is sent (default 15 m).
  3. Ensure GPS function is on and the module has a valid fix (Advert Location → GPS if you want coordinates in those adverts).

Each time you move at least that far from the last tracking anchor, the device issues a flood advert (rate-limited to about one attempt every 1.5 s). Other nodes can discover your updated position without waiting for the normal auto-advert schedule. An orange tracking icon in the status bar indicates tracking is enabled.

On the WebUI, the same options appear under node settings as Tracking and Track Dist m.

Offline Mapping

For offline map tiles, use the slippy-tile format ({z}/{x}/{y}.png) under Mgmt → Map → Tiles Folder, on internal flash or microSD depending on Mgmt → Global → Primary Disk. You can copy tiles from a PC (MOBAC, MAPC2MAPC, etc., zoom 8–16) or let the device download them when Network Tiles and Local Tiles are enabled and WiFi is connected (see §8.2).

The device also keeps 32 map tiles in RAM to reduce storage reads while panning.

Message path on the map

On the device, tap Path: in message detail to show the hop route on the Map tab (§4.6). In the WebUI, use Show Path On Map and Clear Path / Alt+C (§5.3.1).


6.5 Telemetry & Sensors

Mgmt → Sensors (device and WebUI) shows the node's own readings — battery, temperature, humidity, pressure, CO₂, TVOC, INA2xx power values and more, depending on the hardware — each with a live graph of the last 96 samples, plus status rows, calibration offsets and the telemetry permissions (see the Sensors page description above). Local telemetry is independent of radio communication — it reads the hardware sensors directly.

Remote telemetry from other node types (sensor nodes, repeaters) is visible in the contact detail view under the Telemetry field. The contact must have TPERM granted and must broadcast its sensor data in advertisements.


6.6 Radio Configuration

In plain words: Think of the radio settings as the "channel" and "speed mode" of a walkie-talkie.

Want… Do… Cost
More range Higher SF, lower bandwidth Messages take longer to transmit and block the channel longer
Faster messages Lower SF, wider bandwidth Shorter range
More robust in noisy places Higher CR A little more airtime

Golden rule: Frequency, bandwidth, SF and CR must be identical on every device in your group. If you can't hear anyone, check this first.

Respect your country's legal limits for frequency, transmit power and airtime.

MeshCore uses LoRa radio modulation. The key configurable parameters are:

Frequency: The centre frequency in MHz. All nodes on the same mesh must use the same frequency. Consult your regional radio regulations for authorised ISM-band frequencies (e.g. 868 MHz in Europe, 915 MHz in North America).

Bandwidth (BW): The LoRa channel width. Narrower bandwidth gives better sensitivity and longer range but lower data rates and slower messaging. Wider bandwidth allows faster communication at shorter range. Common values: 62.5 kHz (maximum range), 125 kHz (balanced), 250/500 kHz (high throughput, shorter range).

Spreading Factor (SF): Controls the encoding spread. Higher SF = greater range and interference resilience, lower data rate, longer airtime. Lower SF = shorter range, faster messages. SF 7–8 is typical for shorter distances; SF 11–12 for maximum range on very sparse networks.

Coding Rate (CR): Forward error correction overhead. CR 5 (4/5 encoding) has less overhead; CR 8 (4/8 encoding) is more robust in noisy environments. Typically left at 5 unless experiencing high packet error rates.

TX Power: Output power in dBm. Higher power extends range but increases current draw and may exceed regulatory limits. Always verify the legal limit for your region and frequency band before increasing power.

Airtime factor / duty cycle: Mgmt → Radio sets the Duty Cycle in percent (10 = 10 %), shows the derived Airtime Fact, and Duty Live (TX time since boot). TX Budget shows how much of the allowed airtime is left; when it is used up the device keeps outgoing packets queued and the round radio dot at the top left of the status bar (device and WebUI) shows a yellow X ("HOLDING" on the TX Budget row) until sending is allowed again. Monitor Duty Live against regional limits (e.g. 1 % in some EU SRD sub-bands). The lowest duty cycle you can set is 10 % (the firmware limits the airtime factor to 9), so for stricter limits keep your own traffic low.

All nodes communicating on the same mesh must have identical frequency, bandwidth, spreading factor, and coding rate settings. If any parameter differs, two nodes will not hear each other. On device, edit each row with Edit — there is no batch RADIO commit button.


6.7 Time Synchronisation

In plain words: Set your time zone and let WiFi (NTP) or GPS set the clock. Manual entry is the fallback.

Accurate time is used for message timestamps and routing cache management. Four synchronisation methods are available:

  1. Manual entry (Mgmt → Date/Time → Date/Time) — tap Set and enter local date/time.
  2. GPS sync (Mgmt → Date/Time → GPS Time → Sync) — copy time from a valid GPS fix.
  3. NTP — put NTP in Sync Prio1–3 and connect WiFi; the device retries SNTP about every 60 s and applies time on each good response (see Page 17 — Date/Time).
  4. Sync priorities — assign NTP, GPS, and/or Message to Sync Prio1–3; the device uses the first configured source that is available, with the per-source intervals in that section.

The NTP server hostname and timezone string are configurable. Use short forms like CET or UTC+2, or a full POSIX string (see Page 17 — Date/Time). The firmware validates NTP timestamps and rejects implausible values.

Quick check: after saving the timezone, the status-bar clock should match local UK/EU/US time before NTP sync (TZ alone shifts display). With NTP in a prio slot and WiFi connected, Clock Status should eventually show e.g. NTP Prio1 after a successful sync.


6.8 Connectivity Transports

In plain words: To use your phone or computer with the device you can connect by Bluetooth (phone app), WiFi (browser/WebUI) or USB cable. Most devices use one of Bluetooth/WiFi at a time; switch on the Mgmt → WiFi or Mgmt → BLE page.

The companion firmware can connect to external client applications (mobile apps, WebUI, Python/JavaScript tools) via three transports:

Transport Description
BLE Bluetooth Low Energy. Suitable for short-range connections to a paired phone or tablet. Uses a fixed 6-digit PIN for pairing.
WiFi Connects to an existing WiFi access point (STA mode) or creates its own network (AP mode). Enables the WebUI and remote access.
USB Serial-over-USB. Used for direct connection to a computer running a compatible client. No wireless configuration required.

Only one primary transport (BLE or WiFi) is active at a time on most devices. Switch with Use WiFi on Mgmt → WiFi or Use BLE on Mgmt → BLE when the other transport is active. On CrowPanel 7 (hosted WiFi/BLE), the row shows Switcher → Safe reboot and reboots into the selected transport. Some native builds apply the switch without a full reboot.

Access Point vs Station: Each saved WiFi profile stores whether it uses AP or STA mode plus the credentials for that mode. Switching profiles is the recommended way to move between a field hotspot, home router, and office WLAN (see §8.3). New devices default to AP when no Station SSID is configured.

Access Point mode: The device creates its own WiFi network (SSID/password from the active profile), assigns clients an address via DHCP (192.168.4.1/24 on the device), and allows up to three associated clients. The WebUI is reachable at http://192.168.4.1 when WebUI is enabled.


6.9 Firmware Updates

Firmware updates can be performed:

  1. Via the web flasher — connect the device via USB and use https://flasher.meshcore.io as described in Section 2.2. Settings are preserved unless a full erase is performed.
  2. Over-the-air (OTA) — when the build includes auto-update and WiFi is connected (with password set where required), use OTA Update on Mgmt → Global. Some boards also offer Update ESP32-C6 for coprocessor firmware. OTA downloads firmware over WiFi; a reboot follows.

SenseCap Indicator: OTA updates the ESP32 companion only. After any companion update, flash the matching RP2040 .uf2 from Releases as described in SenseCap Indicator — RP2040 coprocessor.

After any firmware update, verify that your radio settings (frequency, bandwidth, etc.) are still correct before transmitting.


6.10 Power Management

MeshCore is designed with power efficiency in mind.

Display sleep: The display enters soft-off (zero brightness) after Disp. Timeout (Mgmt → UI) elapses. The touch panel remains powered, so a touch wakes the display without a hardware button. This is the largest single contributor to battery life improvement.

Brightness: Lower Mgmt → UI → Brightness to reduce backlight current. On T-Deck Plus, Keyboard Light on Mgmt → Light is separate from the display.

GPS: The GPS module is a significant power consumer. Disable it (Mgmt → GPS → GPS function) when location is not required.

Radio: The LoRa radio is active continuously for reception. Reducing TX power and decreasing advertisement frequency reduce transmit power consumption.

Sounds: Active buzzers draw current when producing sound. Disabling notifications reduces idle power draw on devices with always-on buzzer hardware.

Autolock: Use autolock with a short timer (30–60 seconds) to ensure the display enters soft-off promptly after the device is set down. This prevents the display from remaining bright in a pocket or bag.


6.11 Audio Notifications

Devices with onboard audio hardware (buzzer or speaker) can play notification sounds for various events. All audio settings are in Mgmt → Sound:

  • All Sounds — master enable for notification audio
  • When Connected — tone when a BLE or WiFi client connects
  • Boot Sound, New DM, New Channel, Ack — per-event tones (each has a Play preview on device)

Volume can be set to Low, Medium, or High. Disabling individual notification sounds does not affect the other sounds.

Note: Audio is only available on devices with dedicated audio hardware. On the Heltec V4, audio support depends on hardware configuration; sound may be compiled as a no-operation on units without a confirmed buzzer connection.


7. Device Compatibility

7.1 Supported Hardware

Device Processor Display GPS Audio SD Card BLE WiFi
LilyGO T-Deck Plus ESP32-S3 320×240 TFT ✓ Speaker ✓ ✓ ✓
LilyGO T-Deck (OG) ESP32-S3 320×240 TFT — — ✓ ✓ ✓
Seeed SenseCap Indicator ESP32-S3 + RP2040 480×480 TFT — — — ✓ ✓
Elecrow CrowPanel 3.5" ESP32-S3 480×320 TFT — — ✓ ✓ ✓
Elecrow CrowPanel Advanced 7" ESP32-P4 1024×600 IPS — — ✓ ✓ (via C6) ✓ (via C6)
Heltec V4 (extended) ESP32-S3 TFT — Optional buzzer — ✓ ✓

7.2 Device-Specific Features & Limitations

LilyGO T-Deck Plus

  • Physical QWERTY keyboard and trackball provide the most complete input experience
  • Keyboard backlight blink notification is available on this device only
  • GPS module requires correct UART baud rate (38400) and antenna orientation; external antenna strongly recommended for reliable fix acquisition
  • Up to 32 GB SD cards supported; FAT32 format required
  • Screenshots can be captured from within the device (consult the FAQ for the key combination)

LilyGO T-Deck (Original)

  • No GPS module; GPS-related settings and map ME / follow-me behaviour are limited
  • No speaker; Mgmt → Sound rows may show as unavailable
  • Physical QWERTY keyboard and trackball; no Keyboard Light / keyboard-blink rows (those are T-Deck Plus only)
  • Map tab still supports keyboard pan/zoom (W/A/S/D, I/O, R, T for altitude bar)
  • Same core messaging, channels, and management pages otherwise

Seeed Studio SenseCap Indicator

  • Touchscreen only; no physical keyboard or trackball
  • Hardware button on the top edge toggles the display on/off
  • No built-in GPS; GPS features unavailable
  • Dual-MCU architecture (ESP32-S3 + RP2040): ESP32 runs the companion; RP2040 owns the onboard microSD, sensors, buzzer, and battery measurement — flash both on every release (§2.2 RP2040 UF2)
  • Map tiles and primary data can use the RP2040-attached SD when Mgmt → Global → Primary Disk is set to SD Card; network download remains available when SD is empty

Elecrow CrowPanel 3.5"

  • Capacitive touchscreen only
  • SD card slot available for map tiles
  • No built-in GPS

Elecrow CrowPanel Advanced 7" (ESP32-P4)

  • Largest supported display: 1024×600 MIPI-DSI IPS
  • WiFi and Bluetooth provided through an integrated ESP32-C6 coprocessor
  • Switching from BLE to WiFi involves the coprocessor and requires slightly longer transition delays than native ESP32 devices
  • GPS not built in; no audio hardware
  • Requires USB-C power delivery capable of 8–10 W for the display and coprocessor; underpowered USB ports may cause display instability

Heltec Vision Master V4

  • Touch TFT variant only (non-TFT variants use e-paper and are not covered by this GUI guide)
  • Audio support depends on hardware variant; buzzer notifications may be inactive on some units
  • No GPS, no SD card in the standard configuration

7.3 Default Radio Settings

The following defaults are applied on first boot when no saved settings exist (tuned for EU/UK ISM bands):

Parameter Default Value
Frequency 869.618 MHz
Bandwidth 62.5 kHz
Spreading Factor 8
Coding Rate 8
TX Power 22 dBm

For other regions, adjust these settings immediately after first boot via Mgmt → Radio before transmitting. Example settings for other regions:

Region Typical Frequency Notes
Europe (EU863-870) 869.525 MHz or 869.618 MHz 1 % duty cycle applies
North America (US915) 915.0 MHz Check local SUB-GHz regulations
Australia (AU915) 915.0–928.0 MHz Channel plan varies
Asia (AS920-923) 923.0 MHz Varies by country

8. Advanced Usage

This chapter is mainly for technical users. Beginners can safely skip to Troubleshooting and Best Practices.

8.1 Settings Persistence & Sync

In plain words: Your settings are saved automatically on the device. If you have an SD card, a readable copy (/MCTerm/prefs.txt) is kept there too. To be safe, occasionally copy that file somewhere, or make a Backup slot (Mgmt → Backup). After changing settings, wait a moment before pulling out the SD card.

🔧 Technical details: storage layers, prefs.txt keys, Primary Disk switch

Settings use two layers:

  1. Binary prefs blob — the authoritative NodePrefs store (radio, telemetry, GPS, message options, scopes, etc.) plus manual position, written by savePrefs() to internal flash or SD depending on Primary Disk.
  2. /MCTerm/prefs.txt — a portable INI-style sidecar (key=value, one per line) on the SD card when SD is available.

On boot, the firmware compares sync_version in internal storage and in prefs.txt and reconciles UI-oriented fields from the newer copy. The binary blob path follows Primary Disk (below).

What is in prefs.txt

Besides sync_version and UI keys (timeouts, map toggles, region scopes, sound, WebUI flags, zoom/brightness, and similar), the file includes every field written by the binary prefs save — for example:

Category Example keys
Identity / node node_name, ble_pin
Radio freq, bw, sf, cr, tx_power_dbm, airtime_factor, duty_cycle_pct, multi_acks, rx_delay_base, rx_boosted_gain, client_repeat, path_hash_mode
Telemetry / advert telemetry_mode_base, telemetry_mode_loc, telemetry_mode_env, advert_loc_policy, auto_advert_zerohop_hours, auto_advert_flood_hours
GPS / position gps_enabled, gps_interval, manual_lat, manual_lon, manual_alt
Contacts / messaging manual_add_contacts, autoadd_config, autoadd_max_hops, quick_send_text, quick_reply1_text, quick_reply2_text, msg_auto_retry, msg_auto_reset_path, msg_mark_delivered_fast, msg_replace_hashes
Map / tracking map_network_tiles_enabled, tracking_enabled, tracking_distance_m
Scope defaults default_scope_name, default_scope_key
Other buzzer_quiet, identity key lines when exported, region scope rows (ui_rgn…), etc.

Whenever settings change in firmware (Mgmt edits, WebUI Save, GPS interval updates, and any other path that calls the internal prefs save), the sidecar is scheduled for rewrite (~120 ms debounce). After editing, wait briefly before removing the SD card, or leave Mgmt / let autolock run to force an immediate flush.

Primary Disk (Mgmt → Global → Actions) selects which store is authoritative for the binary prefs blob when SD is available:

Primary Behaviour
Internal Internal storage is source of truth; SD file is updated from internal when synced
SD Card SD prefs file is source of truth when the card is present; switching may copy the blob between stores (watch boot log / progress UI)

What Primary Disk switch copies

Before the switch finishes, firmware flushes every pending save, then copies the complete managed state — not just radio fields:

Layer Included
Node / radio Full NodePrefs binary blob (new_prefs), including GPS interval, manual position, quick-send/reply text, map tiles flag, tracking, scopes, and message options
UI settings All Mgmt/WebUI options in internal storage (timeouts, autolock, map, sound, NTP, WebUI, zoom/brightness, identity key path, etc.)
Region scopes Region definitions and per-channel scope assignments (internal + prefs.txt)
Mesh data Contacts, channels, main identity, advert path blobs, WiFi profiles
Internal namespace Entire meshcore internal export (transport, GPS pin/baud overrides, boot transport, OTA flags, and other dynamic keys)
Sidecars /MCTerm/prefs.txt (full key set above), advert-path sidecar, clipboard (per primary mode)

When SD Card is primary, day-to-day saves for contacts and channels go to the SD mirror paths (for example channels2.bin under /MCTerm/primary_state_v2/). Adding or joining a channel from the Msgs tab, Mgmt → Channels, or the WebUI persists there; you do not need a separate “apply” step beyond confirming the add/join dialog.

Progress is shown on device (Storage switch). Wait until it completes before removing the SD card.

prefs.txt is also updated from current in-memory settings whenever SD is mounted (see debounce note above). Moving an SD card between devices can transfer settings if the sync version on the card is newer. The internal clipboard is stored separately at /clipboard.txt on SD and is restored on boot when present.

SD Backup (Mgmt page 19) snapshots SPIFFS-style data to named slots on the card; it is separate from day-to-day prefs.txt sync (see page 19 notes above).


8.2 Map Tiles Setup

In plain words: The map needs picture tiles. Easiest way: connect the device to WiFi with internet, turn on Mgmt → Map → Network Tiles and Local Tiles, and pan around — tiles are downloaded and saved for offline use. Alternatively copy a prepared tile folder onto an SD card.

Map imagery uses the standard slippy-tile layout: each file is {z}/{x}/{y}.png (e.g. 12/2048/1365.png). The root directory is set in Mgmt → Map → Tiles Folder (default is often /tiles).

You can load tiles in two ways: copy them onto the device in advance, or let the firmware download them over WiFi when Network Tiles is enabled.

Where tiles are stored (Primary Disk)

The local tile cache — both pre-copied tiles and tiles saved after a network download — is written to:

Mgmt → Global → Primary Disk Tile cache backend
Internal (default on many boards) Device internal flash (SPIFFS), under the path from Tiles Folder
SD Card microSD card, under Tiles Folder on that card

Switching Primary Disk changes where new network downloads are saved and where Local Tiles reads from. Use Mgmt → Map → Tiles Folder → Open to pick the subdirectory (e.g. /tiles) on whichever backend is active.

On boards that use a remote SD (e.g. some SenseCAP setups), SD Card primary may store tiles on the companion SD module; behaviour matches Primary Disk = SD Card in the UI.

Preparing tiles manually (offline copy)

  1. Use a tile tool such as MOBAC (Mobile Atlas Creator), MAPC2MAPC, or a wget-style slippy downloader
  2. Select OpenStreetMap or another compatible source and your area of interest
  3. Export zoom levels 8–16 (or fewer on small cards; zoom 16 grows quickly)
  4. Copy the {z}/{x}/{y}.png tree onto the chosen storage:
    • Internal primary: copy into the SPIFFS path that matches Tiles Folder (via USB mass storage, backup restore, or another supported transfer path for your board)
    • SD Card primary: copy onto the microSD, then set Tiles Folder to that directory

On-device folder selection:

  1. Set Primary Disk if you want internal flash vs SD card as the tile store
  2. Mgmt → Map → Tiles Folder → Open — browse the active backend and tap Use on the folder that contains the zoom-level directories
  3. Enable Mgmt → Map → Local Tiles

The map reads from that cache. A 32-tile LRU RAM cache avoids re-reading storage on every pan frame.

Network tile download (WiFi)

When the device is on WiFi with internet access:

  1. Enable Mgmt → Map → Network Tiles (and WebUI → Map → Network Tiles if you use the browser UI)
  2. Enable Mgmt → Map → Local Tiles — required if downloads should be saved for later offline use. With Local Tiles off and Network Tiles on, tiles are shown from the network but not written to storage (RAM-only for that session).
  3. Pan the map to areas that are not yet cached; missing tiles are fetched from OpenStreetMap, displayed immediately, and written under Tiles Folder on internal flash or SD card, according to Primary Disk

Firmware checks the local cache first, then the network. After a successful download, the PNG is stored at {Tiles Folder}/{z}/{x}/{y}.png on the selected backend so later sessions (or Local Tiles only, without WiFi) can reuse it.

Typical combinations:

Local Tiles Network Tiles WiFi Result
On On Connected Cache first, then download and save missing tiles
On Off — Offline cache only
Off On Connected Online view only; no persistence to storage
Off Off — No map imagery (grid/positions may still show)

Attribution: When using OpenStreetMap tiles, display of attribution ("© OpenStreetMap contributors") is required by the OpenStreetMap licence. The device itself does not display attribution text on the map view; if you publish screenshots or use the map data in a public context, ensure compliance with the OSM tile usage policy.


8.3 WiFi Profile Management

In plain words: A profile is a saved WiFi setup (for example "Home", "Office", "Field hotspot"). Switch between them with Mgmt → WiFi → Pick → Select.

WiFi profiles are the primary way to manage connectivity. Each profile is a complete WiFi configuration, not just an SSID/password pair:

Stored per profile Description
Mode Access Point (device is the hotspot) or Station (device joins another network)
STA SSID / password Used in Station mode
AP SSID / password Used in Access Point mode

Examples: a profile Field AP (AP mode, custom SSID for deployment), a profile Home (STA mode, home router credentials), and a profile Office (STA mode, office WLAN). Tap Pick → Select to activate a profile; the device applies mode and credentials and restarts WiFi when WiFi transport is already running.

Defaults (new or empty fields)

Setting Default
Mode (new device, no STA SSID yet) Access Point
Mode (upgraded device with STA SSID already saved) Station (preserves existing behaviour)
AP SSID Device node name (invalid characters stripped; max 32 characters)
AP password BLE PIN formatted as six digits plus 00 (8 characters for WPA2, e.g. PIN 123456 → password 12345600)
AP DHCP 192.168.4.1/24 on the device; up to 3 clients

Station IP Mode (DHCP vs static IP) is shared across profiles — it is not stored inside each profile file.

Creating a profile

  1. Set Mode, credentials, and any other fields on Mgmt → WiFi (or WebUI → WiFi with Save per row).
  2. Tap New Profile → Add, enter a name, and confirm.
  3. The new profile is saved with a copy of the current active settings. The active profile does not change unless you select the new one.

The first time you edit WiFi without any profile, firmware creates a Default profile automatically.

Switching profiles

  1. Mgmt → WiFi → Profile → Pick
  2. Each row shows the profile name and AP or STA
  3. Tap Select on the desired profile
  4. The main WiFi screen updates; if WiFi transport is active, settings are applied without a full device reboot when possible

Editing the active profile

Changes on Mgmt → WiFi (Mode, AP SSID, AP password, STA SSID, password) are written to the active profile immediately. No separate “save profile” step is required.

Deleting a profile

  1. Open the profile picker (Pick)
  2. Tap Del on the profile row
  3. Confirm deletion

If you delete the active profile, firmware selects another saved profile or clears the active name if none remain.

🔧 Legacy profiles and where profiles are stored

Legacy STA-only profiles

Older firmware stored only Station SSID and password per profile. On first boot with newer firmware, those files are upgraded automatically (MWP1 → MWP2): Station fields are kept; mode is Station if an SSID was set, otherwise Access Point. One-time global AP settings from older internal keys, if present, are merged into the active profile and removed from internal storage.

Profile persistence

Profiles are stored in SPIFFS at /state_v2/wifi_profiles.dat (format MWP2). They survive reboots and firmware updates. They are not part of prefs.txt, but they are included when you switch Primary Disk to copy full device state to or from SD (see §8.1), and may be mirrored to SD backup paths when SD mirroring is enabled. Swapping SD cards between devices can transfer profiles only when that full state copy or backup restore includes the WiFi profile file.


8.4 Repeater & Room Server Administration

In plain words: Manage a repeater or room server from your own device, over the mesh, if you have its admin password.

Remote administration is accessible from the contact detail view when the target contact is a repeater or room server and you have the admin credentials.

Key workflows covered in Section 4.4:

  • Viewing live status and statistics
  • Managing the access control list (ACL)
  • Editing device name and radio parameters
  • Setting advertisement intervals
  • Reading and correcting the remote device clock
  • Running raw CLI commands for advanced configuration

Password security notes:

  • Admin passwords are stored per-public-key in device flash. The stored form is hashed, so the cleartext password is never persisted.
  • If you forget the admin password, physical access to the repeater is required to reset it via USB.
  • ACL entries limit who can access the repeater at each permission level (RO, RW, Admin). A repeater with an empty ACL accepts connections from any node.

8.5 Manual Contact Import

When you need to message a specific node but cannot wait for its advertisement packet — for example, before deploying two devices in different locations — use the manual contact import:

  1. Obtain the target node's full 32-byte hexadecimal public key (on the target device: Mgmt → Global → Public Key, long-press the public-key block to copy it, then transfer it by any means)
  2. On your device, go to Mgmt → Contacts → Manual Add
  3. Paste or type the public key hex string
  4. Enter a display name
  5. Tap Add

The contact is immediately added to your list. Sending a message to this contact before an advertisement has been received will use flood routing to reach the destination, since the routing path is not yet known.


8.6 Optimisation Tips

Maximising Range

  • Use a lower bandwidth (62.5 kHz) and higher spreading factor (SF 11–12) for maximum link budget. Be aware this significantly slows message delivery and increases airtime.
  • Position repeaters at elevated locations — hilltops, rooftops, towers — with unobstructed line of sight.
  • Use a quality external antenna with a gain appropriate for your deployment distance. Replace the stock antenna on devices where the connector is accessible.
  • Lower coding rate (CR 5) is faster but less resilient to interference. In noisy RF environments, try CR 7 or 8.

Reducing Channel Congestion

  • Increase advertisement intervals (Mgmt → Advert). In an established network with stable membership, advertising every 30 minutes is sufficient.
  • Limit auto-add by setting Max Hops to 0 or 1 in Mgmt → Contacts. This prevents distant nodes — whose messages are unlikely to reach you directly — from flooding your contact list.
  • A mesh with many nodes all using SF 12 and frequent advertisements can quickly saturate the channel. Consider multiple frequency groups or reduce advertisement density.

Battery Life

  • Set Disp. Timeout to 10–30 s and enable Autolock with a 60 s timer
  • Set brightness to Low
  • Disable GPS when not needed
  • Disable sounds on devices with active buzzers
  • Increase advertisement intervals to reduce TX events
  • Use SF 7–8 (shorter messages = shorter airtime = less TX current)

Messaging Reliability

  • Enable Auto Retry and Auto Reset Path together: failed messages will trigger a full path re-discovery and retry automatically
  • Use Ping (contact detail → PING) to verify reachability before sending long messages
  • If a contact is consistently unreachable, use Mgmt → Advert → Scan Rpts to list overheard repeaters and their signal quality
  • Check Stats (Mgmt → Stats) for error events and duplicate counts. High traffic noise-floor degradation is visible in the noise floor reading on the Stats page.

9. Troubleshooting

First checks (try these before anything else)

  1. Is the antenna attached?
  2. Are Freq / BW / SF / CR identical to the other devices? (Mgmt → Radio)
  3. Is anyone else actually in range and switched on? Send an advert (Mgmt → Advert) and wait a minute or two.
  4. Is the screen locked? Long-press for 2 seconds to unlock.
  5. Is the USB power strong enough? (Large screens need a proper power supply.)
  6. Did you restart the device? A reboot (Mgmt → Global → Reboot) solves many transient problems.

Detailed table

Symptom Most Likely Cause Recommended Action
Screen stays dark on boot Inadequate USB power (especially CrowPanel 7") Use a USB power supply rated for at least 10 W; try a powered USB hub
No contacts appearing No nearby nodes or wrong radio settings Verify frequency, bandwidth, SF, CR in Mgmt → Radio; check that at least one other node is powered and on the same settings
Map tiles not displaying Cache empty, wrong folder, Local Tiles off, or bad files Check Primary Disk (SD inserted if SD primary); Tiles Folder must contain zoom folders; enable Local Tiles for cache reads; for network fill, also enable Network Tiles + WiFi
Map shows "No GPS fix" GPS module searching; no satellite signal Move to an open area with clear sky view; allow 3–5 minutes for cold start; verify GPS is enabled in Mgmt → GPS
Map tiles load from network but are slow WiFi connected via coprocessor with limited RPC bandwidth Normal behaviour on CrowPanel 7"; tiles load in the background — panning speed improves as the RAM cache fills
Touch not responding Autolock is active Long-press anywhere on the screen for 2 seconds to unlock
WiFi won't connect Wrong SSID or password Re-enter credentials in Mgmt → WiFi; check that the access point is reachable and using a 2.4 GHz band (5 GHz not supported)
Messages show ✗ (undelivered) Destination out of range, stale path, or no repeater coverage Tap the contact → PATH → Reset; enable Auto Retry; verify the destination node is online with a Ping
Repeater login fails Wrong admin password or insufficient ACL role Verify the password; if forgotten, reset the repeater via USB
NTP not syncing No WiFi connectivity or NTP server unreachable Check WiFi status; verify the NTP server in Mgmt → Date/Time; for offline networks use GPS or manual time entry
NTP Status stuck on Syncing... SNTP not completing, NTP blocked by higher prio, or interval Once already done Serial: debug clock on; look for [CLK] ntp configTzTime, sntp_cb, may_apply ... DENY winner=; confirm NTP in Sync Prio and WiFi IP
Clock wrong by ~1 h (e.g. UK BST) Wrong timezone or missing DST rules Use BST or UK for UK (with DST), CET for Central Europe, or UTC+2 for fixed offset; not IANA names like Europe/London; save TZ then confirm status bar; enable NTP + WiFi for sync
System clock shows wrong year Bad GPS time or rogue NTP source The firmware validates time against a 2020–2050 plausibility range; if GPS is providing a wildly wrong date, try disabling GPS time sync and using NTP only
Stats graphs appear empty No radio packets yet received Wait for radio events; graphs populate on each received and transmitted packet
Device reboots during WiFi/BLE switch Insufficient FreeRTOS scheduler time during radio transition This is mitigated in recent firmware; if recurring, try switching transports with the device stationary and fewer background operations active
WebUI does not load Device not on WiFi or wrong IP address Check WiFi status (Mgmt → WiFi); confirm the IP address displayed under WiFi Status and navigate to http://<IP> in the browser
WebUI shows stale data after reconnecting Browser WebSocket reconnecting The browser reconnects automatically; wait 1–3 seconds after the page indicates "Connected" for all data to repopulate
BLE pairing fails Wrong PIN entered on the connecting device The PIN is the 6-digit Custom PIN in Mgmt → BLE; delete the existing pairing on the phone and pair again
SD card not detected Card not fully seated or incompatible format Reseat the card; ensure it is formatted as FAT32; cards larger than 32 GB may need to be reformatted
Duplicate contacts appearing Two nearby nodes generating identical public key prefix bytes Use Manual Add to clarify identities; this is rare but can occur with large meshes
Unread badges after reading on phone only Read state is not synced from the companion app after disconnect Tap Read in the thread header, or open the thread on device; new traffic while companion is connected is marked read automatically
Alarm does not sound Alarm Seconds is 0, trigger off, phrase/match/sender filter doesn't fit, or sounds muted Set Alarm Seconds above 0; check Trigger, Phrase, Match, Senders/Channels and Mgmt → Sound → All Sounds / Quiet Hours; test with a message from an allowed sender (see Page 20 — Alarm)
Airview shows only a flat quiet column Nobody transmitting on your settings, or radio settings differ from the others Check Freq/BW/SF/CR, send an advert and look for your red TX mark (see Airview)

Something that used to be broken? Fixed bugs (for example older problems with channels on SD, the Backup page title or the contact detail view) are listed per version in the CHANGELOG. If your problem looks like one of them, update the firmware first (see Section 6.9).


10. Best Practices

Network Deployment

  • Place repeaters high. The single most effective way to extend a MeshCore mesh is putting at least one repeater at elevation (a rooftop, hill, or tower) with clear line of sight to as many participants as possible.
  • One frequency, one mesh. All nodes in a communicating group must use identical radio settings. Document the agreed settings before deploying devices in the field.
  • Use dedicated repeater hardware. Running a companion-radio device as a relay is not recommended; it does not forward packets. Use repeater firmware on dedicated hardware for infrastructure nodes.
  • Plan your hop budget. Each additional hop adds latency and consumes channel bandwidth. Design the network so that most nodes need at most 2–3 hops to reach any destination.

Security

  • Set a strong admin password on all repeater and room server nodes before deployment. An empty or default admin password allows anyone on the mesh to reconfigure or reboot the hardware.
  • Use PSK-protected channels for any communication that should not be readable by all participants. The Public channel is visible to every node on the frequency.
  • Do not share admin credentials over mesh messages. The admin password should be distributed out-of-band (in person or via encrypted link).
  • Disable telemetry sharing (TPERM) for contacts you do not trust with your location data.
  • Rotate PSKs for private channels periodically, especially after a member leaves the group.

Everyday Operation

  • Name your device clearly. Use a name that uniquely identifies you within your group (e.g. your callsign or first name + last initial). Generic names cause confusion on the contact list.
  • Use Favourites. Star the contacts you communicate with most often and activate the Favs Only filter for a clean, focused contact view during an event.
  • Keep SD tiles updated. Before a field event, download fresh map tiles for the target area and copy them to the SD card. OSM data improves continually — tiles from 6+ months ago may be noticeably outdated in actively mapped regions.
  • Check Stats before an event. Review Mgmt → Stats → noise floor and last RSSI/SNR after deploying to verify you are on a clean frequency with adequate signal margins.
  • Use Ping to verify routes. Before relying on a contact for communications, send a Ping from the contact detail view. The measured round-trip time gives a realistic indication of whether messages will get through reliably.
  • Back up your settings. Periodically copy /MCTerm/prefs.txt to a safe location. It lists UI preferences plus the full radio/node field set (see §8.1). For a full device image including contacts and message stores, use Mgmt → Backup slots in addition to keeping prefs.txt.

MeshCore is open-source software released under the MIT licence. Contributions, bug reports, and device support requests are welcome via the project repository.

Clone this wiki locally