MeshCore Solo
ForkA fork of the official MeshCore companion radio firmware with extended features and UI enhancements. Adds GPS navigation (waypoints, compass, trail recording with GPX export), battery power-saving (hardware RX duty-cycle + adaptive power control), favourite contacts dial, extended language support with native Unicode rendering, message delivery status, screen lock, auto-reply bot, repeater mode with diagnostics, and more — all optimized for joystick-only navigation on small displays.
Fork of MeshCore (Official)
- Maintainer
- MarekZegare4 ↗
- Status
- active
- Maturity
- stable
- Lifecycle
- active
- Latest version
- 1.19
- Released
- 2026-06-16
- Runtime
- Arduino · C++
- Distribution
- community
- License
- MIT
Capabilities
Transports
- ✓ BLE
- ✓ USB serial
- ✕ Native TCP
- ✕ Wi-Fi AP
Operations
- ✕ Web flasher
- ✕ OTA updates
- ✕ BLE DFU
- ✓ Config backup
Networking
- ✓ Repeater
- ✕ Room server
- ✕ Observer
- ✕ MQTT
- ✕ KISS modem
Hardware
- ✓ GPS
- ✓ Display
- ✓ Sensors
- ✓ Low-power RX
Protocol
- ✓ MeshCore compatible
- ✓ Raw packet send
- ✓ Raw packet observe
Node roles
companionrepeaterstandalone-ui
Features
- Extended Unicode support with Lemon font and native input
- GPS navigation suite (waypoints, compass, backtrack, trail recording)
- GPX export via USB serial
- Screenshot capture over USB
- Favourites dial for pinned contacts
- Message delivery status indicators
- DM auto-resend and incoming deduplication
- Screen lock with time and sensor display
- Auto-reply bot with command responses
- Auto-advert for location sharing
- Battery power saving (RX duty-cycle + APC)
- Companion repeater mode with diagnostics
- Ping functionality in Nearby Nodes
- SOS broadcast with configurable target
- Quiet hours for sound suppression
- Mark-all-read at type level
- Lock-screen unread count
- Channel scanner home page
- Contact distance sorting
- Signal stats screen
- Display test pattern
- Power profile presets
- Solo Tools web app for screenshot capture and GPX export (https://marekzegare4.github.io/Solo-tools/)
Releases
from GitHub · updated 2026-06-21v1.19 # Latest 5 days ago · 2026-06-16 08:11 UTC
MeshCore Solo Companion Firmware v1.19
What's new
- Message delivery status — outgoing messages now show an end-to-end delivery marker, auto-scaled to the font (legible on landscape e-ink), in both the history list and the fullscreen view:
- Direct messages (and room servers): pending → delivered (✓) → failed (✗), driven by the real end-to-end ACK. While pending, a row of dots shows one per send so auto-resend progress is visible.
- Auto-resend — a pending DM whose ACK times out is re-sent automatically (reusing the original timestamp) until resends run out. Configurable count under Settings › Messages › Resend (0–5, default 2). Runs in the background, independent of which screen is open; incoming duplicates from retries are dropped.
- Channels — ✓ appears only once a repeater echo confirms the message was relayed into the mesh. No echo is normal (flood has no recipient ACK), so no pending/fail is shown.
- Auto-reply bot overhaul — the trigger/reply bot grows into a small auto-responder:
- Query commands — a DM or monitored-channel message is scanned for
!tokens (!ping !batt !loc !time !temp !hops !status !help) and answered in one combined reply. - Away / reply-to-all — a lone
*trigger replies to every message. - Separate DM and channel triggers, each with its own reply text.
- Quiet hours — silence push replies during a chosen window (wraps midnight).
- Throttling & anti-loop — per-contact DM throttle so one sender can't starve others; channel echo guard so the bot never answers itself; reply counter shown in the bot screen header.
- Query commands — a DM or monitored-channel message is scanned for
- Keyboard overhaul — one shared keyboard across all screens (reclaims duplicate RAM), icon keys (⇧ caps, ⎵ space, ⌫ delete, ✓ OK), and a second symbols page toggled with
#@/abc. - UI refresh
- Proportional scrollbar with up/down triangle caps replaces the old
^/varrows, scaling with the font (1× OLED, 2× landscape e-ink); used by every scrollable list and the fullscreen message view. The redundant>selection marker is gone and rows shifted left to reclaim space. - Status-bar single-letter indicators (M/B/A/G) replaced with scalable mini-icons (mute, bluetooth, advert, trail).
- Proportional scrollbar with up/down triangle caps replaces the old
- Nearby Nodes reorganized — one list over two sources (stored contacts + live discover scan) with a unified detail/action menu. Type filter and sort are independent axes and persist across re-entry; the active filter is shown in the title and in empty-list messages.
- Tools › Trail reorganized — a short two-level action menu (Hold Enter) replaces the flat ~12-item list; view-aware settings; a fitted square map grid; and the waypoint manager split out into its own component. No change to trail recording itself.
- OTA updates — each solo release now ships a DFU
.zip(solo-<ver>-<device>-ota.zip) for over-the-air / BLE-DFU updates, alongside the.uf2for USB flashing.
Fixes
- GPS battery drain on shutdown — GPS is powered off before
SYSTEMOFF, and uses the correct active-level (!PIN_GPS_EN_ACTIVE) instead of a hardcoded level. - Buzzer octave 8 — the RTTTL parser now fully accepts octave 8 instead of clamping it away (which could leak a digit into the next note's duration).
- Trail file robustness —
Waypoint/trail readers check every header read, so a truncated file is rejected instead of using a garbage count.
Under the hood
- OTA DFU zip is named and attached to releases by the
_solo_dualbuild workflow; the per-build Actions artifact already carried it. - Large UI consolidation: shared
drawList/ header / key-decode helpers, deduplicated status-bar indicators, reusable scalable mini-icon facility (icons.h), and an audit-pass cleanup premoving dead code and redundant scroll-clamp logic.
- Message delivery status — outgoing messages now show an end-to-end delivery marker, auto-scaled to the font (legible on landscape e-ink), in both the history list and the fullscreen view:
v1.18 # 7 days ago · 2026-06-14 08:22 UTC
MeshCore Solo Companion Firmware v1.18
New device support
- GAT562 30S Mesh Kit — the firmware now supports the GAT562 30S alongside the Wio Tracker L1 family. Pre-built
.uf2files for all supported devices are published with each release — see the Supported Devices table.
What's new
- GAT562 30S Mesh Kit support — see above.
- Battery saving (radio) — two new independent toggles under Settings › Radio:
- Pwr save — hardware duty-cycle receive (SX126x
SetRxDutyCycle): the radio cycles RX↔sleep autonomously and wakes on a preamble, cutting average RX current with only a small increase in receive latency - Auto pwr — Adaptive Power Control: trims TX power on strong links (based on ACK SNR) and ramps back up on weak or lost links; the home screen shows the live transmit power
- Pwr save — hardware duty-cycle receive (SX126x
- BLE disconnect icon fix — the BLE status icon now updates immediately when the connection drops (e.g. out of range, supervision timeout). Previously it could stay active until the next UI polling cycle.
- Bot trigger preserves case — the auto-reply trigger phrase is now stored exactly as typed. Matching remains case-insensitive, so
Ping,pingandPINGall trigger the bot, but the trigger no longer gets silently lowercased when saved. - Screenshot support in all solo builds —
ENABLE_SCREENSHOTis now enabled in every solo firmware build. No need to use a separate_devenvironment. Use the Solo Tools web app to capture screenshots directly from the browser.
Under the hood
- CI matrix for solo firmware builds is now fully dynamic — new devices are picked up automatically from
platformio.inibased on the_solo_dualenv suffix, no workflow changes required. AbstractUITask::onBLEDisconnected()virtual hook added — called bysetHasConnection()on transition to disconnected;UITaskoverrides it to set_next_refresh = 0.build.shgainsbuild-solo-firmwarescommand, backed bybuild_all_firmwares_by_suffix "_solo_dual".
- GAT562 30S Mesh Kit — the firmware now supports the GAT562 30S alongside the Wio Tracker L1 family. Pre-built
v1.17 # 12 days ago · 2026-06-09 15:33 UTC
Wio Tracker L1 — Solo Firmware v1.17
What's new
- Nearby Nodes — navigate & save waypoints from the list — the context menu now exposes Navigate and Save waypoint directly from the Nearby list and detail view, so you no longer have to open the separate Tools → Waypoints screen. Long-press Options in the detail view also opens a Ping submenu.
- Nearby Nodes — TIME sort filter — a new
[TIME]filter sorts contacts by last-seen time (most recent first) instead of distance, useful when GPS is unavailable. - Battery indicator calibrated — the 100 % ceiling of the LiPo discharge curve was corrected from 4200 mV to 4170 mV, matching what the board's charger actually delivers.
- Advert sound scope control — a new Sound → Advert setting lets you choose whether advert notifications play for all nodes or only direct (zero-hop) neighbours, cutting noise on busy meshes.
- Sound slot "None" option — DM, channel and advert melody slots can now be set to None to silence that notification category entirely without muting everything.
- Mark-as-read feedback — marking messages read (per-contact or per-channel) now shows a brief "N marked read" confirmation on screen.
- [Web tool] GPX Downloader — a standalone web page for downloading saved GPX trails from the device over the browser's Web Serial API, no desktop app required.
Under the hood
SoundNotifierextracted fromUITask::notify()— all buzzer/melody logic lives in one place, reducing future merge conflict surface with upstream.KeyboardWidgetis now a single shared instance across screens (saves ~1.5 KB heap).onDiscoveredAdvertextracted as a separate virtual so upstreamonDiscoveredContactkeeps its original 4-parameter signature.
Device compatibility (4)
✓ 4 Supported
| Device | MCU | Radio | Status | Notes |
|---|---|---|---|---|
| Seeed Studio Wio Tracker L1 | nrf52840 | Semtech SX1262 | ✓ Supported | OLED variant (SSD1306/SH1106 128x64) |
| Seeed Studio Wio Tracker L1 Pro | nrf52840 | Semtech SX1262 | ✓ Supported | OLED variant — same firmware target as wio-tracker-l1 |
| Seeed Studio Wio Tracker L1 E-ink | nrf52840 | Semtech SX1262 | ✓ Supported | E-ink variant (GxEPD2 250x122) |
| GAT-IoT GAT562 30s | nrf52 | Semtech SX1262 | ✓ Supported | GAT562 30S Mesh Kit |