MeshCore Ninja
← All firmwares

MeshCore Solo

Fork

A 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-21
  1. v1.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.
    • 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 ^/v arrows, 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).
    • 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 .uf2 for 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 robustnessWaypoint/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_dual build 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.
  2. 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 .uf2 files 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
    • 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, ping and PING all trigger the bot, but the trigger no longer gets silently lowercased when saved.
    • Screenshot support in all solo buildsENABLE_SCREENSHOT is now enabled in every solo firmware build. No need to use a separate _dev environment. 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.ini based on the _solo_dual env suffix, no workflow changes required.
    • AbstractUITask::onBLEDisconnected() virtual hook added — called by setHasConnection() on transition to disconnected; UITask overrides it to set _next_refresh = 0.
    • build.sh gains build-solo-firmwares command, backed by build_all_firmwares_by_suffix "_solo_dual".
  3. 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

    • SoundNotifier extracted from UITask::notify() — all buzzer/melody logic lives in one place, reducing future merge conflict surface with upstream.
    • KeyboardWidget is now a single shared instance across screens (saves ~1.5 KB heap).
    • onDiscoveredAdvert extracted as a separate virtual so upstream onDiscoveredContact keeps its original 4-parameter signature.
Show all 20 releases →

Device compatibility (4)

✓ 4 Supported
DeviceMCURadioStatusNotes
Seeed Studio Wio Tracker L1nrf52840Semtech SX1262✓ SupportedOLED variant (SSD1306/SH1106 128x64)
Seeed Studio Wio Tracker L1 Pronrf52840Semtech SX1262✓ SupportedOLED variant — same firmware target as wio-tracker-l1
Seeed Studio Wio Tracker L1 E-inknrf52840Semtech SX1262✓ SupportedE-ink variant (GxEPD2 250x122)
GAT-IoT GAT562 30snrf52Semtech SX1262✓ SupportedGAT562 30S Mesh Kit