All firmwares

MCLite

Fork

A lightweight off-grid communicator firmware for the LilyGo T-Deck Plus and T-Watch Ultra. Purpose-built for emergency and outdoor communication — no internet, no cell towers needed. SD card configuration, web flasher, and room server support. Compatible with MeshCore apps.

Fork of MeshCore (Reference)

Maintainer
laserir ↗
Status
Active
Maturity
Beta
Lifecycle
Active
Latest version
0.4.1
Released
2026-06-25
Runtime
Arduino · C++
Distribution
Community
Licensing
Open source
License
MIT

Capabilities

Transports

  • BLE
  • USB serial
  • Native TCP
  • Wi-Fi AP

Operations

  • Web flasher
  • OTA updates

Networking

  • Repeater
  • Room server
  • Observer
  • KISS modem

Hardware

  • GPS
  • Display
  • Sensors
  • Low-power RX

Protocol

  • MeshCore compatible

Node role

Companion

Features

  • Web flasher (Chrome/Edge)
  • SD card configuration (one person sets up, copies to everyone)
  • Room server support (up to 8)
  • On-screen keyboard
  • GPS support
  • No accounts, no pairing, no per-device setup

Project signals

popularity 2026-06-21 verification 2026-06-21
GitHub stars
17
Forks
2
Watchers
3
Open issues
2
Contributors
3
Release downloads
179
Latest downloads
6
Source available
Yes
Releases available
Yes
CI builds
Yes

Releases

from GitHub · updated 2026-06-25
  1. v0.4.1 # Latest 2 days ago · 2026-06-25 11:41 UTC

    MeshCore 1.16 upgrade, the full companion command set (status/trace, anon-req, explicit-unscoped), and companion message-sync fixes. Update over WiFi (Admin → WiFi → Check for updates) or via the web flasher.

    Added

    • Manage rooms and channels from the companion app. The companion protocol gained the standard write/action commands the official MeshCore app uses, so things that previously failed against MCLite now work:

      • Room login (CMD_SEND_LOGIN): log into a configured room or repeater from the app. A blank password field uses the password already in the device config, and a wrong password instantly retries with the stored one. Thanks to the reporters (#32).
      • Add / remove channels (CMD_SET_CHANNEL): join a Public, hashtag, or private channel — or remove one — from the app. Adding applies instantly with no reboot — the channel is usable right away and its share QR shows the real key, not zeros, with the session staying connected. Removing a channel still reboots to apply (a known limitation — MeshCore offers no way to remove a channel from the running radio, so the device rebuilds its channel table from config at boot; the app reconnects on its own). Gated by the permissions.conversation_management setting, so a locked-down device still refuses it (#31).
      • Add / edit / remove contacts (CMD_ADD_UPDATE_CONTACT, CMD_REMOVE_CONTACT): add a contact, rename one, or delete one (and its chat history) straight from the app. Adding and renaming apply instantly (the app stays connected); removing reboots to apply (the app reconnects) — see the consistent add/remove model below. Editing maps to the contact's display name; per-contact permission flags stay device-owner settings (the config tool / on-device Admin), and the app's own contact flags remain app-local. Gated by permissions.conversation_management (#33).
      • Share a contact (CMD_SHARE_CONTACT) re-broadcasts a contact's advert so a nearby device can add them, and reboot (CMD_REBOOT) is now honoured from the app's button.
      • The app's Local vs Flood advert buttons were already handled; confirmed during this work. With this, the companion can fully manage rooms, channels, and contacts (#31, #32, #33 all closed). A consistent rule across both contacts and channels: adding and editing apply instantly; removing reboots to apply (the app reconnects on its own). The reboot on removal is required for channels — MeshCore has no way to drop a channel from the running radio — and kept for contacts so the behaviour is uniform and predictable. Live changes are reflected on the device's own UI too — a contact/channel added or renamed from the app shows up in the on-device conversation list and Admin screens right away, no reboot. In-place editing of a contact's permission flags / a channel's settings still arrives alongside on-device editing.
    • Change device settings from the companion app. With permissions.settings set to full, a connected app can now set the device name, radio parameters (frequency / spreading factor / bandwidth / coding rate), TX power, the BLE pairing PIN, and the path-hash mode (1/2/3 bytes per hop). Values are range-checked; the device name applies instantly to mesh adverts (the Bluetooth scan name refreshes on the next reboot), while radio / TX / PIN / path-hash save and apply on a quick reboot (the app reconnects). Path-hash mode is especially useful on large meshes — it lets app users match a 3-byte network without hand-editing config.json (see #36). A device left at restricted or none refuses these. Identity keys, advert location (MCLite advertises GPS at the configured precision), and auto-add stay device-managed by design and are rejected.

    • Set the region/scope from the companion app. The companion now honours CMD_SET_DEFAULT_FLOOD_SCOPE (set the persi …

  2. v0.4.0 # 5 days ago · 2026-06-22 14:47 UTC

    What's Changed

    Full Changelog: https://github.com/laserir/MCLite/compare/v0.3.9...v0.4.0

  3. v0.3.9 # 7 days ago · 2026-06-21 08:09 UTC

    Added

    • Step-wise admin permissions. Beyond the existing security.admin_enabled (global on/off for the Admin screen), a new permissions config block scopes what's reachable inside Admin: permissions.settings (full / restricted / none) — restricted keeps only the basics editable (brightness, auto-dim, dim brightness, keyboard brightness, theme) and shows everything else read-only (no chevron); none makes all settings read-only. permissions.companion (default on) hides the Companion group (WiFi/USB/Bluetooth) when off — configured services still run. permissions.conversation_management (default off) is reserved for a future release (on-device add/edit/remove of contacts/channels/rooms; they stay read-only views for now). All three are provisionable from the config tool. Defaults are fully permissive, so existing configs are unchanged.
    • Settings reorganised into per-section screens + Admin is now a pure hub. The on-device Admin screen no longer mixes settings, diagnostics and shortcuts — it's three labelled groups of links: Companion (WiFi / USB / Bluetooth), Conversations (Contacts / Channels / Rooms, read-only views), and Settings (Device, Radio, Display, Messaging, Sound, GPS, Battery, Security). Each section is its own screen mirroring the config tool, with all of its editable settings and its read-only diagnostics in one place (no more duplicated rows across Admin and Device Settings). Newly editable on-device: Radio (region preset picker — EU/UK/CH vs US/Canada — plus a TX-power slider and an advert-interval picker; frequency/SF/BW/CR/scope/path-hash stay read-only), Messaging (history, max-per-chat, location format, retries, telemetry request/badges/auto-refresh, canned messages, allow-mute), and GPS (enable, location-advert precision, timezone, clock offset, last-known max age). Offgrid mode and the live Heard-Adverts count now live at the top of the Radio screen. Each hub link carries an icon (gear for settings; @/#/R for contacts/channels/rooms; Wi-Fi/USB/Bluetooth for companion), and the 3rd-party licenses moved to an About block at the bottom of the hub. Radio/GPS changes reboot once on exit (same batched-save model as theme/language). The old single "Device Settings" screen is superseded by this layout.
    • Selectable UI themes. Choose a color palette — Dark (default), Light, Amber (a "military" night mode that preserves night vision), or High contrast — on-device (Admin → Theme, reboots to apply) or via display.theme in config. Custom palettes can be defined under display.themes (start from a built-in base, override any color with #RRGGBB). Default appearance is unchanged. On/off switches now use the theme accent colour too. Thanks @jason-s13r (#24).
    • Per-row Info + Map buttons on the Heard Adverts screen. Each heard node now has an explicit info (eye) button that opens its detail dialog, and — when the advert carries a location — a map button that opens the map centered on that node. Back now returns to the Admin screen. Thanks @jason-s13r (#15).
    • Map screen pan buttons + windowed chrome. The map gains an on-screen D-pad (up/left/centre/right/down) alongside the existing drag-to-pan. On the T-Deck the map now keeps the status bar visible and uses the standard lv_win header with a back button (the T-Watch stays full-screen). Thanks @jason-s13r (#22, supersedes #20/#21).
    • Uptime + last-charged in the Admin Battery section. Shows when the device booted (wall-clock + relative) and when charging last stopped (with the level at the time). Thanks @jason-s13r (#23).
    • On-device Device Settings. A new editable settings screen (Admin → Device Settings, behind the existing admin.enabled gate) for changing device n …
Show all 20 releases →

Device compatibility (2)

✓ 2 Supported
DeviceMCURadioStatusNotes
LilyGo T-Deckesp32-s3Semtech SX1262✓ SupportedT-Deck Plus — primary target with QWERTY keyboard, trackball, GPS.
LilyGo T-Watch Ultraesp32-s3Semtech SX1262✓ SupportedT-Watch Ultra — wrist-worn with AMOLED touchscreen.