MeshCore Ninja
← MeshCore Low-Power

MeshCore Low-Power · Releases

from GitHub · updated 2026-06-21

14 releases

  1. v1.16.dev_0621 # 3 hours ago · 2026-06-21 07:24 UTC

    v1.16_0621

    • Configuration portal for Companion, Repeater, and Room Server — configure, back up, restore, and update firmware without the CLI. (ESP32 devices only)

      Open it the same way as before — start ota in the CLI, or Start OTA from the companion Settings menu. Previously this landed on a firmware-only upload page; it now opens the full configuration portal where you can configure, back up, restore, flash firmware, and reboot — all from one page in the browser.

      The companion backup covers custom preferences (Quick Send presets, saved locations, channel hop limits, display settings, WiFi credentials,...) that upstream MeshCore doesn't have — handy when moving to a new device. For the Repeater and Room Server, this is the first time backup and restore are available at all — no more re-entering everything from scratch after a node failure or hardware swap.

      The portal is password-protected. Companion: set one with set portal.password in the CLI. Repeater / Room Server: the existing admin password is used automatically.

      The backup format is compatible with the official MeshCore app — upstream preferences in the backup can be restored by the app. Passwords are never written to backup files.

    • Config portal AP: open network, login page, 1-client limit, 10-minute idle auto-shutdown.

      The WiFi AP is open (no AP password); access is gated by a browser login page using the portal password described above. Only one device can associate with the AP at a time. If no device connects within 10 minutes of the AP opening, it shuts down automatically.

      config-portal
    • Fix: full-flash (_merged.bin) images for Vision Master E213 and E290 were built with the wrong flash size.

      Both boards have 16 MB of flash, but their merged full-flash images were generated with an 8 MB flash-size header. The pre-merged images are now built with the correct 16 MB size. If you previously flashed an E213 or E290 using a _merged.bin, re-flash with the corrected image. OTA (.bin) updates were not affected.

  2. v1.16.dev_0614 # 7 days ago · 2026-06-14 04:15 UTC

    v1.16_0614

    • New devices: Heltec Vision Master E213, Wireless Paper, and Vision Master E290 — full e-ink companion support (Companion, Repeater, Room Server).

      Three e-ink boards are now fully supported with the complete companion UI — Quick Send, Contacts, Settings, Saved Locations, GPS Trace, and message preview. Repeater and Room Server firmware are provided for all three.

      • Heltec Vision Master E213 (author-tested, v1.1.1) — ESP32-S3 with a 2.13" e-ink display (250×122 px), SX1262 LoRa, and a QuickLink I2C port. Has a second user button (GPIO21): press to scroll up in any list, or to go back — faster than double clicking the main button.
      • Heltec Wireless Paper — ESP32-S3 with the same 2.13" e-ink panel as the E213 in a more compact form factor. Shares the same companion UI and firmware variants as the E213. Single button only.
      • Heltec Vision Master E290 — ESP32-S3R8 with a larger 2.9" e-ink display (296×128 px), SX1262 LoRa, and a QuickLink I2C port. Also has a second button (GPIO21) like the E213. The companion UI adapts automatically to the wider panel — more message lines and a larger clock on the Home screen.

      Common characteristics across all three e-ink boards:

      • Always-on display — e-ink retains content indefinitely without power; no screen timeout.
      • Native multilingual text — Latin, Cyrillic, and Greek scripts render natively.
      • Font Weight setting — choose between Thin and Bold via Settings → Font Weight. Preference is saved to flash.
      • I2C sensor support — environment sensors can be connected via the QuickLink I2C port.
    • Companion: unified BLE / USB / WiFi connection mode for all ESP32-S3 boards.

      All ESP32-S3 companion builds (Heltec V3, V4, E213, Wireless Paper, E290, XIAO S3) now ship as a single unified firmware image that supports all three connection transports: BLE, USB serial, and WiFi TCP. The active mode is saved to flash and selected at boot — no per-mode build is needed.

      Switching is done via Settings → Connection Mode, which opens a direct selection screen listing all three modes with the current one marked *. Navigate to the desired mode and confirm — the device reboots into the new mode.

      Alternatively, switch via TerminalCLI: set conn.mode wifi|ble|usb. WiFi credentials are configured with set wifi.ssid / set wifi.password, or from the OTA update page which now includes a WiFi credentials form alongside the firmware upload button.

      In WiFi mode, the node connects as a STA to your router and the Home screen shows the IP address and port. All three modes meet the low-power criteria of this repo.

    • Companion UI: Home screen always shows a large clock; message count shown in the header.

      The center of the Home screen now always shows the current time (HH:MM) in a large font — MSG: N is gone. If there are messages stored in memory, their count and a small envelope icon appear in the header (where the small clock used to be); the header is left empty when count is zero. The header clock is visible again on all other pages as before.

      On e-ink displays (E213, Wireless Paper, E290), the clock is rendered in a large font; pairing pin or connection status appears at the bottom-left, and the date at the bottom-right. On OLED and T096, the layout is: large clock → date → connection status, stacked top to bottom.

      Before the clock is synchronized with the app or GPS, the display shows uptime counting up from 00:00 since boot, consistent with the small header clock.

    • Repeater/Room Server: flood hop limits now correctly ignore leading-zero path padding.

      Some senders limit how far a packet propagates by pre-filling the path with zero entries — a TTL trick used by custom firmware, and by companions in this firmware via ch.hops. Previously, repeaters counted these zeros as real relay hops, causi …

  3. pre-release-Heltec-E213-Wireless-Paper-E290 # Pre-release 10 days ago · 2026-06-11 11:45 UTC

    v1.16_0611 pre-release for Heltec E213, Wireless Paper and E290

    • New device: Heltec Vision Master E213 — full support (Companion, Repeater, Room Server).

      The Heltec Vision Master E213 is now fully supported. It is an ESP32-S3 based board with a 2.13" e-ink display, SX1262 LoRa radio, and a USB-C port. The complete companion UI runs on the e-ink display — Quick Send, Contacts, Settings, Saved Locations, GPS Trace, and message preview. Repeater and Room Server firmware are also provided.

      Notable characteristics:

      • Always-on e-ink display — no screen timeout; the display retains its content indefinitely without power.
      • Native multilingual text — Latin, Cyrillic, and Greek scripts render natively.
      • I2C sensor support — environment sensors (temperature, humidity, pressure...) can be connected via the QuickLink I2C port.
      • Two user buttons — the second button (GPIO21) makes navigation faster: press it to scroll up in any list, or to go back/exit any menu.
    • New devices: Heltec Wireless Paper and Heltec Vision Master E290 — full support (Companion, Repeater, Room Server).

      Two new e-ink boards are now supported:

      • Heltec Wireless Paper — ESP32-S3 with a 2.13" e-ink display (same resolution as E213), SX1262 LoRa radio, and a compact form factor. Shares the same companion UI and firmware variants as E213.

      • Heltec Vision Master E290 — ESP32-S3R8 with a larger 2.9" e-ink display (296×128), SX1262 LoRa radio, and a QuickLink I2C port for external sensors. The companion UI adapts automatically to the wider, taller display — showing more message lines and better-spaced layouts compared to the 2.13" boards.

  4. v1.16.dev_0607 # 14 days ago · 2026-06-07 05:01 UTC

    v1.16_0607

    • Companion UI: Native multilingual display on Heltec T096 (ST7735S)

      Node names and messages now render natively on the T096 color TFT — characters are displayed as-is instead of being converted to ASCII equivalents. Supported languages include all 31 from v1.14 plus additional scripts:

      Latin-based: Catalan, Croatian, Czech, Danish, Dutch, Estonian, Finnish, French, German, Hungarian, Icelandic, Italian, Latvian, Lithuanian, Maltese, Norwegian, Polish, Portuguese, Romanian, Slovak, Slovenian, Spanish, Swedish, Turkish, Vietnamese, Welsh

      Cyrillic: Belarusian, Bulgarian, Macedonian, Russian, Serbian, Ukrainian

      Greek: Greek

    • Companion UI: Contacts screen now includes room servers; request telemetry from any contact.

      Room servers appear in the contact list tagged [R]. Selecting any contact — chat node or room server — and long pressing opens an action menu: Send message or Request telemetry. Requesting telemetry displays the node's battery voltage and GPS coordinates (if present); long press to open the GPS Trace screen for that location.

      GPS coordinates follow the Pos. Format selected in Settings (DD, UTM, or MGRS).

      The message inbox group list now tags group/channel entries with [G] and room server entries with [R] for consistent visual distinction. Each room message shows the original author's name. When viewing a room message, long press to open the popup and select Reply to post back to the room (visible to all subscribers).

      Private room servers: messaging requires a prior login. Public rooms (no password) work without any login. For private rooms, log in once via the MeshCore app — if your account has admin rights on that room server, the session persists across reboots. Regular user sessions are not saved to flash and will require re-login after the room server reboots.

    • Companion: switch the app connection between BLE and USB serial without reflashing.

      In USB mode the node behaves like a standard usb build — the PC app connects over the USB serial port directly. Toggle via Settings → Connection Mode on the display, or via TerminalCLI: set conn.mode usb / set conn.mode ble. The setting persists across reboots. BLE toggle is hidden in the Settings menu while USB mode is active.

    • Repeater, Room Sever: hold user button 5 seconds to power off.

      Hold the user button for 5 seconds to power off the node — faster than reaching for the CLI when you're standing next to it. The LED blinks 5 times as a warning before shutdown.

    • Repeater, Room Server: advert.hops.max default changed to 8; room server support added; flood.max.advert alias.

      advert.hops.max now defaults to 8 instead of flood.max — advert relay limiting is active out of the box without any configuration. Room servers now also enforce this limit (previously repeater-only). The command flood.max.advert is accepted as an alias for compatibility with upstream firmware.

  5. v1.15.dev_0531 # 21 days ago · 2026-05-31 02:29 UTC

    v1.15_0531

    • Full support for Heltec T096 — companion, repeater, and room server

      The Heltec T096 is now fully supported across all node types. The hardware is an nRF52840-based board with an SX1262 radio, KCT8103L FEM, UC6580 GPS, and a 0.96" 160×80 color TFT display (ST7735S).

      The complete companion UI — Quick Send, Contacts, Settings, GPS, Saved Locations, GPS Trace, and message preview — runs on the color TFT.

      Differences from other supported boards:

      • Color TFT display. All companion pages render in color on the 160×80 ST7735S — unlike other supported boards which use a monochrome OLED.

      • Brightness control. A Brightness item in the Settings page adjusts the TFT backlight intensity: 255075100. Setting is saved to flash.

      • KCT8103L FEM — same as Heltec V4.3. set radio.rxgain on / off works identically.

      • UC6580 GPS. gps.interval works the same as on Heltec V4. Constellation selection (gps.mode) uses a different set of options:

        Value Constellations
        1 GPS L1 only
        2 All-system L1 (GPS+BDS+GLO+GAL)
        3 All-system + QZSS dual-band (default)
    • AGC auto-reset improvements (all node types).

      Coordination between AGC auto-reset and channel busy detection has been improved. While the noise floor baseline is being re-established after a reset, channel sensing falls back to hardware CAD only.

    • Fix: excessive flash writes on nRF52 Companion (T096, RAK4631).

      Each received advertisement previously triggered an immediate flash write — both to the advert blob store and to the contact list. In areas with high advert traffic this caused unnecessary flash wear, and a malicious node spamming adverts could wear out ExtraFS in hours. Advert blobs are now buffered in RAM and flushed to flash at most once every 10 minutes. Auto-discovered contacts use the same 10-minute pattern instead of a short debounce timer.

  6. v1.15.dev_0524 # 28 days ago · 2026-05-24 01:53 UTC

    v1.15_0524

    • Fix: radio deafness recovery in noisy environments (all node types).

      When strong in-band interference causes the SX1262 AGC to become overwhelmed, the radio can go deaf — severely degraded in receive sensitivity. The firmware now detects this condition automatically and triggers an immediate hardware recalibration, restoring sensitivity without waiting for the scheduled agc.reset.interval. The agc.reset.interval setting remains available but is now unnecessary.

      Two new commands let you monitor and reset the AGC reset counter:

      Command Effect
      get agc.resets Show how many times the AGC has been auto-reset since boot or last clear
      clear agc.resets Reset the counter to zero

      Real-world validation: A repeater installed near a periodic in-band interference source (confirmed via RTL-SDR) accumulated 918 auto-resets over 8.5 hours (~1.8/min), matching the observed interference sweep cycle. A second repeater at a clean location recorded 0 resets over the same period, confirming no false positives. Without this feature, the first repeater was unreachable remotely due to persistent deafness.

    • GPS update interval configurable at runtime on Heltec V4 (all node types).

      A new gps.interval setting controls the sleep time between GPS position updates. After each fix, GPS powers down for the configured interval, then wakes and acquires a new fix. Set it to 0 to keep GPS always on. Default is 10 seconds.

      Available on Companion via TerminalCLI and on Repeater / Room Server via the Command Line:

      Command Effect
      get gps.interval Show current interval (always on if 0)
      set gps.interval 0 GPS always on — maximum accuracy, highest power draw
      set gps.interval 30 GPS sleeps 30s after each fix, then re-acquires
      set gps.interval 300 GPS sleeps 5 minutes after each fix

      Setting is saved to flash and takes effect immediately — no reboot needed.

    • GPS constellation selection for L78K on Heltec V4 (gps.mode) (all node types).

      Choose which satellite constellations the L78K module tracks. Average current draw is essentially the same across all configurations in duty cycle mode with gps.interval greater than 10 (~23 mA mean current measured on Heltec V4.3 Companion with gps.mode = 4 and gps.interval = 10). Leave at the default 4 for the most robust fix; adjust only if you have a specific coverage reason.

      Value Constellations
      1 GPS only
      2 GPS + BeiDou
      3 GPS + GLONASS
      4 GPS + BeiDou + GLONASS (default)

      Available on Companion via TerminalCLI and on Repeater / Room Server via the Command Line:

      Command Effect
      get gps.mode Show current constellation selection
      set gps.mode 4 GPS + BeiDou + GLONASS (default)
      set gps.mode 1 GPS only

      Setting is saved to flash. Change takes effect on next GPS on.

    • Companion: GPS screen shows interval and constellation when GPS is off.

      When GPS is off, the GPS page now shows the configured update interval (intv) and constellation selection (mode, Heltec V4 only), so you can verify settings before enabling GPS.

  7. v1.15.dev_0517 # 1 month ago · 2026-05-17 03:19 UTC

    v1.15_0517

    • Companion: per-channel outgoing hop limit (ch.hops).

      Limit how far your outgoing messages travel on a specific channel, without affecting any other channel or any other node in the network. Useful for keeping a private or local-area channel confined to a small radius — for example, a home-to-nearby-relay link — without touching the rest of the city mesh.

      Configure via TerminalCLI:

      Command Effect
      set ch.hops <channel> <N> Limit outgoing messages on <channel> to at most N hops
      set ch.hops <channel> off Remove the limit
      get ch.hops <channel> Show current limit
      ch.hops status List all channels with an active limit
      ch.hops clear Remove all limits
      set ch.hops Public 2         # Public channel messages travel at most 2 hops
      set ch.hops My Local Net 3   # My Local Net channel travel at most 3 hops
      set ch.hops Public off       # remove the limit
      ch.hops status
      

      The limit applies to your outgoing messages only — other nodes sending on the same channel are unaffected. No repeater configuration or network coordination required.

      The repeater's group.hops.max algorithm has been updated to correctly account for sender-side pre-fill, so ch.hops and group.hops.max work together without conflict — update repeater firmware to get full compatibility.

      Settings are stored in flash and persist after reboot.

    • Companion: toggle RxGain directly from the Radio screen.

      Long press on the Radio page cycles through RxGain modes (OFF → ON → Auto) and shows a popup confirming the new mode. The current mode is now also displayed on the Radio page itself (RxG: OFF / RxG: ON / RxG: Auto), so you can check it at a glance without going into Settings. (Auto is available on Heltec V4.2 only.)

    • Fix: noise floor stuck at -120 in noisy environments (all node types)

      In environments with strong in-band interference, the noise floor could remain at -120 dBm for a long time instead of updating to reflect actual conditions. Fixed.

  8. v1.15.dev_0510 # 1 month ago · 2026-05-10 02:47 UTC

    v1.15_0510

    • Repeater: per-type relay hop cap (advert.hops.max / group.hops.max).

      Two new settings let you independently limit how far advertisement packets and group messages are relayed across the mesh, without affecting direct messages, ACKs, or path discovery.

      Setting Controls Default
      advert.hops.max Max hops to relay node advertisement (ADVERT) packets = flood.max
      group.hops.max Max hops to relay group messages (GRP_TXT / GRP_DATA) = flood.max

      These are repeater-only settings. Configure via the Command Line in the MeshCore App:

      set advert.hops.max 3    # relay adverts at most 3 hops from sender
      set group.hops.max 5     # relay group messages at most 5 hops
      get advert.hops.max
      get group.hops.max
      

      Setting either value to 0 completely suppresses that packet type — no relay at all, while everything else (DM, ACK, path) continues to work normally.

      Why this matters — advert storm reduction:

      Each repeater periodically broadcasts an advertisement that every other repeater in range relays, up to flood.max times (default 64). In a network of 35 repeaters and 35 companions, advert traffic alone consumes roughly 4% of airtime. Limiting to 3 hops brings that down to under 0.5% — a 7× reduction — with no loss of communication capability.

      No coordination required. Each repeater applies its own cap independently. You do not need all repeaters to agree on the same value — even a partial deployment reduces airtime. No region configuration, no App UI changes needed.

      Recommended profiles:

      Profile advert.hops.max group.hops.max Airtime (35R / 35C) Use case
      Default = flood.max = flood.max ~4% No change
      Optimized 3 5 ~0.5% Most deployments
      DM-focused 0 3 ~0.2% Prioritise direct messages
      EU compliance 0 3 ~0.2% Large EU networks (legal requirement)

      Relationship with flood.max and path hash size: flood.max is the master hop cap for all flood payloads. Its default of 64 is calibrated for 1-byte path hash mode. With larger hashes the packet fills up sooner — 2-byte hash caps at 32 hops, 3-byte hash caps at 21 hops — so flood.max is typically set to match. advert.hops.max and group.hops.max are automatically clamped to flood.max and work correctly with all hash sizes. If you want to suppress adverts entirely while keeping everything else unrestricted, set advert.hops.max 0 — leave flood.max untouched.

    • Repeater: combining hop caps with region scope for full community isolation.

      advert.hops.max and group.hops.max work standalone — no coordination needed. For operators who also want to restrict which community's group messages get relayed, combine them with region rules and the companion's scope settings:

      1. Each companion sets a region scope — either per-channel via the burger menu, or globally via Settings → Experimental → Default Region Scope. All outgoing flood packets (including DM path discovery) are tagged with the community name.
      2. Each repeater: denyf * + allowf <community> — only relay community-tagged traffic.
      3. Add set advert.hops.max 0 to also suppress advert relay.

      With a global Default Region Scope, DM path discovery is tagged and passes through denyf * repeaters — direct messaging works normally inside the community.

      Default Region Scope is in the App's Experimental Settings and is opt-in. Per-channel scope (burger menu) only tags group messages for that channel, not advertisements or DM path discovery.

    • Companion: GPS coordinate display formats — DD / UTM / MGRS.

      A new Pos. Format item in the Settings page lets you choose how GPS coordinates are shown on the GPS page, GPS Trace screen, and Quick Send status bar.

      Format Example
      D
  9. v1.15.dev_0427 # Pre-release 2 months ago · 2026-04-27 09:32 UTC

    v1.15_0427

    • Repeater: per-type relay hop cap (advert.hops.max / group.hops.max).

      Two new settings let you independently limit how far advertisement packets and group messages are relayed across the mesh, without affecting direct messages, ACKs, or path discovery.

      Setting Controls Default
      advert.hops.max Max hops to relay node advertisement (ADVERT) packets 64 (unchanged)
      group.hops.max Max hops to relay group messages (GRP_TXT / GRP_DATA) 64 (unchanged)

      These are repeater-only settings. Configure via the Command Line in the MeshCore App:

      set advert.hops.max 3    # relay adverts at most 3 hops from sender
      set group.hops.max 5     # relay group messages at most 5 hops
      get advert.hops.max
      get group.hops.max
      

      Setting either value to 0 completely suppresses that packet type — no relay at all, while everything else (DM, ACK, path) continues to work normally.

      Why this matters — advert storm reduction:

      Each repeater periodically broadcasts an advertisement that every other repeater in range relays, up to flood.max times (default 64). In a network of 35 repeaters and 35 companions, advert traffic alone consumes roughly 4% of airtime. Limiting to 3 hops brings that down to under 0.5% — a 7× reduction — with no loss of communication capability.

      No coordination required. Each repeater applies its own cap independently. You do not need all repeaters to agree on the same value — even a partial deployment reduces airtime. No region configuration, no App UI changes needed.

      Recommended profiles:

      Profile advert.hops.max group.hops.max Airtime (35R / 35C) Use case
      Default 64 64 ~4% No change
      Optimized 3 5 ~0.5% Most deployments
      DM-focused 0 3 ~0.2% Prioritise direct messages
      EU compliance 0 3 ~0.2% Large EU networks (legal requirement)

      Relationship with flood.max: flood.max (long-standing setting, default 64) is the master hop cap for all flood payloads — DMs on first send, path discovery, group messages, adverts. It applies regardless of payload type. advert.hops.max and group.hops.max add finer per-type control on top: they can only be equal to or stricter than flood.max, never looser. Setting flood.max lower automatically clamps both values to match. If you want to suppress adverts entirely while keeping DMs unrestricted, lower advert.hops.max to 0 — leave flood.max untouched.

  10. v1.15.dev_0426 # 2 months ago · 2026-04-26 04:49 UTC

    v1.15_0426

    • Companion: redesigned message preview.

      Messages are now grouped by sender or channel so you can read a conversation in one place instead of hunting through a mixed list.

      From the group list you can scroll back through older messages from any sender or channel, including ones you've already read. Long press a group to open it.

      When new messages arrive, you go straight to a new messages view that shows only the unread ones — from all senders and channels — one by one. Once you've read them all, a single click takes you home.

      Long messages scroll one full page at a time with no overlap. Small arrows ( / ) appear at the corner of the screen to let you know there is more content above or below.

    • Companion: reply directly from message preview.

      While reading any message, long press to open the menu. A new Reply option lets you send a preset message back without leaving the screen:

      • If the message came from a contact, the reply goes to that contact as a private direct message.
      • If the message came from a channel (Public, #SOS, or any other), the reply goes back to that same channel.

      Note: The Quick Send page always sends to the Public channel. Use Reply from the message preview when you want to respond to a specific contact or a non-Public channel.

    • Companion: Contacts page and direct messaging.

      A new Contacts page sits between Quick Send and Saved Locations. Long press it to open the contact list, only chat-capable nodes are listed (repeaters, room servers and sensors are excluded — they cannot receive direct messages). Select a contact and long press to send them a direct message using your Quick Send presets.

    • Companion: configurable Screen Off timeout in Settings.

      A new Screen Off item in the Settings page lets you choose how long the display stays on after the last button press: 15s3minNever. Setting is saved to flash and persists after reboot.

    • Companion: Flip Screen setting in Settings.

      A new Flip Screen toggle in the Settings page rotates the display 180°. Setting is saved to flash and persists after reboot.

    • fix bugs

  11. v1.15.dev_0419 # 2 months ago · 2026-04-19 04:50 UTC

    bump to 1.15.dev

  12. v1.14_0417 # 4 variants 2 months ago · 2026-04-17 14:04 UTC
    Heltec V3 WSL3 low power Heltec-V3-WSL3-low-power-v1.14_0417 View ↗
    Heltec V4 OLED low power Heltec-V4-OLED-low-power-v1.14_0417 View ↗
    RAK4631 low power RAK4631-low-power-v1.14_0417 View ↗
    XIAO S3 Wio low power XIAO-S3-Wio-low-power-v1.14_0417 View ↗

    v1.14_0417

    • Hybrid RSSI + hardware CAD channel sensing (all node types).

      isChannelActive() now performs a two-stage check before transmitting:

      1. RSSI check (fast, single SPI register read) — defers if signal is above noise_floor + int.thresh.
      2. Hardware CAD (scanChannel()) — if RSSI misses, performs LoRa chirp correlation to detect signals below the noise floor (~16ms blocking scan on SX126x).

      RSSI also detects any in-band signal (interference, jamming), while CAD only correlates LoRa chirp patterns and ignores non-LoRa noise entirely. With hybrid, RSSI acts as the first guard — CAD only runs when the channel appears clear to RSSI.

      int.thresh=0 disables both RSSI and CAD. int.thresh=1 enables full hybrid at maximum sensitivity.

      On repeaters (single source sending): results depend on topology. Field tests with 4 repeaters (SF8/BW62.5kHz, txdelay=2, 100 messages):

      • Repeaters close together / strong inter-repeater signal: RSSI handles detection well, CAD rarely fires. Example: int.thresh=1 → 9% collision rate.
      • Spread-out repeaters, some pairs below noise floor: RSSI misses sub-NF pairs; CAD fills the gap. Example: hybrid/CAD 8% vs RSSI-only 17%.
      • Many hidden node pairs: neither RSSI nor CAD helps. Only txdelay reduces the floor. Example: ~20–24% regardless of sensing method.

      On companions (multiple sources sending concurrently): channel sensing still helps, but with diminishing returns. Tested with 2 concurrent companions plus a third node sending long messages every 5s (SF8/BW62.5kHz):

      • int.thresh=3: 53–64% of messages successfully relayed by all 4 repeaters (confirmed by hearing each relay back)
      • int.thresh=0 (no sensing): 0–1% relayed by all 4; most messages are relayed by 0–1 repeaters only — collisions occur at two levels: concurrent companion transmissions corrupt each other at the repeater, and the resulting relay transmissions from multiple repeaters collide on the way back

      Channel sensing — even imperfect — is far better than none. The remaining loss at int.thresh=3 is a fundamental ALOHA-style limitation: uncoordinated LoRa nodes cannot eliminate simultaneous transmission without a shared scheduling mechanism that does not exist in this protocol.

    • Companion: get/set txdelay, get/set direct.txdelay, get/set int.thresh via TerminalCLI.

      Relay timing and interference threshold are now configurable without reflashing.

    • Companion: "Heard N Repeats" alert after Quick Send.

      After sending from the Quick Send screen, the display shows how many repeaters have relayed the message (e.g. "Heard 3 Repeats"). The counter updates in real time as each relay is heard.

    • Companion: local time and date on the display.

      All pages now show the current time (HH:MM) in the header, between the page title and the battery icon. The Home page also shows the full date at the bottom (e.g. 14 Apr 2026).

      Time is sourced from the device RTC, which is synchronized upon app connection or GPS fix. Configure your local timezone offset once via TerminalCLI:

      set tz.offset 7    # UTC+7
      set tz.offset -5   # UTC-5
      get tz.offset
      

      Offset is saved to flash. All internal timestamps remain UTC — the offset is applied only for display.

    • Companion: Metric / Imperial units.

      A new Units item in the Settings page toggles between Metric and Imperial. Setting is saved to flash and persists after reboot.

      Display Metric Imperial
      GPS Trace distance 150m / 1.2km 492ft / 0.7mi
      GPS page altitude 245m 804ft
      Home page date 14 Apr 2026 Apr 14 2026
    • Companion: GPS Privacy mode.

      A new GPS Privacy item in the Settings page lets you stop GPS coordinates from being attached to Quick Send me …

  13. v1.14_0410 # 2 variants 2 months ago · 2026-04-10 04:40 UTC
    Heltec V3 WSL3 low power Heltec-V3-WSL3-low-power-v1.14_0410 View ↗
    Heltec V4 OLED low power Heltec-V4-OLED-low-power-v1.14_0410 View ↗

    v1.14_0410

    • Message preview: scroll long messages & see all 256 buffered messages.

      The message preview screen is rebuilt from the ground up. All 256 buffered messages are now navigable — previously capped at 32. Long messages that overflow the screen can be scrolled line by line.

      Button controls in message preview

      Action Effect
      Single click Scroll text down (3 lines); advances to next older message at end of text
      Double click Scroll text up (3 lines); goes to next newer message at top; at newest → home
      Long press Open menu: Save location (if message has GPS coords) / Home

      Counter and unread tracking

      ┌──────────────────────────────┐
      │ 5/19                    42s  │
      │──────────────────────────────│
      │ (2) Alien:                   │
      │ Hello everyone, just wanted  │
      │ to check in. We made it to   │
      │ base camp safe and sound.    │
      │                           ▼  │
      └──────────────────────────────┘
      

      5/19 = viewing message 5 (newest = 19, oldest = 1). = more text below. 42s = time since received. The counter tracks unread messages — when you close preview and return, only new messages since last session are counted.

    • Saved Locations: save GPS coordinates from messages to flash.

      When viewing a message with GPS coordinates, long press opens a menu. Choose Save location, then pick one of 10 slots to save into. Saved locations persist in flash memory — they survive reboot.

      Navigate to the SAVED LOCS page on the home screen to browse your saved locations and open the GPS Trace screen for any of them.

      ┌──────────────────────────────┐
      │ SAVED  2/10                  │
      │──────────────────────────────│
      │ > Alien: I need help         │
      │   Big Boy: Heading home      │
      │                              │
      │                              │
      └──────────────────────────────┘
      

      Each entry shows sender + message snippet so you can identify entries even when multiple locations from the same person are saved.

      Press Effect
      Single click Move highlight to next entry
      Long press Open GPS Trace screen for that location
      Double click Return to home
    • GPS Trace screen: live distance & bearing to a saved location.

      ┌──────────────────────────────┐
      │ Alien: I need help       5m  │
      │──────────────────────────────│
      │      10.7769  106.7009       │
      │                              │
      │           1.2km              │
      │                              │
      │          247°  WSW           │
      └──────────────────────────────┘
      

      The timer in the top-right corner shows how long you have been on this Trace screen. Requires own GPS fix for distance/bearing. Raw coordinates are always shown. Any button returns to the Saved Locations list.

    • Saved locations CLI commands (TerminalCLI).

      Manage saved locations from the terminal without touching the display:

      Command Effect
      get loc List all occupied slots (N:lat,lon:name, N is 0-based)
      set loc.<N> <name> <lat> <lon> Save to slot N (0-based; display shows 1–10)
      del loc.<N> Clear slot N (0-based)
      del loc.all Clear all slots
  14. v1.14_0404 # 3 variants 3 months ago · 2026-04-04 10:51 UTC
    Heltec V3 WSL3 low power Heltec-V3-WSL3-low-power-v1.14_0404 View ↗
    Heltec V4 OLED low power Heltec-V4-OLED-low-power-v1.14_0404 View ↗
    RAK4631 low power RAK4631-low-power-v1.14_0404 View ↗

    Ported the BLE random disconnection fix from ESP32 to nRF52.