Skip to content

Releases: d4rkmen/plai

v2.1

04 Apr 15:06

Choose a tag to compare

Plai v2.1

New Features

Map View

  • Node map view with OpenStreetMap raster tiles
  • Multiple map styles — switch with [TAB] or select default in Settings
  • Default map zoom set to 10
  • Script to download OSM tiles for offline use (map/download_osm_tiles.py)

Quick Messages

  • Predefined message templates — press [Q] in Nodes or Channels to send
  • Quick message editor — press [Q] to customize templates

Nodes

  • Sort by distance — hold [CTRL] to see distance
  • Unread message nodes displayed first in the list

Chat

  • Hops and SNR info in chat view — hold [CTRL] to reveal

Settings

  • MQTT related settings in LoRa config (#10)

Monitor

  • MQTT flag displayed in packet details

Bug Fixes

  • Fix invalid channel PSK expansion for 8-bit keys (#9)
  • Fix text wrapping with emojis in chat views
  • Fix emoji rendering in long node names
  • Fix variable character length input in string editor (emoji etc)
  • Fix watchdog timer issue in dialogs
  • Fix pixel color encoding in screenshots

Improvements

  • Improved keyboard layout in dialogs
  • Redesigned system bar battery indicator
  • Updated message info layout
  • Unified delay handling across the codebase
  • Refined text color rendering in Channels, Monitor, and Stats

v2.0

27 Mar 20:53

Choose a tag to compare

Plai v2.0

New Features

Emoji Support

Plai now renders Unicode emoji from PNG images stored on the SD card (/sdcard/emoji/u<HEX>.png). The last 10 emoji are cached in RAM for instant repeated rendering with zero SD card I/O. Ships with Google Noto Color Emoji pack (12×12). LovyanGFX patched to enable emoji rendering and properly skip Unicode modifier codepoints.

Neighbors

Exchange and view direct-neighbor information with any node in the mesh.

  • Exchange neighbors — Press [B] on a node to send your direct neighbors and request theirs back via NEIGHBORINFO_APP
  • Neighbors list — Press [Fn]+[B] to open the cached neighbor list for the selected node
  • Navigation — Arrow keys, [PgUp]/[PgDown], [Fn]+[↑] Home / [Fn]+[↓] End
  • Jump to node — [ENTER] selects a neighbor and focuses it in the node list
  • Neighbor data stored per node on SD (neighbors/<node_id>.dat); cleaned up when a node is deleted

Stats Enhancements

  • CPU usage — Tasks tab now shows per-task CPU usage
  • Broadcast countdown — Position and telemetry tabs display time remaining until next broadcast
  • Layout improvements across all Stats tabs

Undelivered Packet Details

Hold [CTRL] in any chat view (DM or channel) to see error details for undelivered packets — quickly identify why a message failed.

Neighbor Info in Settings

Neighbor info exchange interval is now configurable from the Settings app.

Improvements

  • Human-friendly datetime — Timestamps throughout the app now use a more readable format
  • Cyrillic relay names — Small font updated to render Cyrillic characters, used in relay node display
  • Channel preset names — Empty channel slots now show the modem preset name instead of a blank label
  • Sound feedback — Audible confirmation when toggling favorites or ignored status on a node
  • Monitor performance — Relay node info lookup uses an index for significantly faster packet list scrolling
  • Heap optimization — Replaced static heap allocators with dynamic allocation, freeing memory for other tasks
  • Storage refactor — Removed legacy conversation-count limit from initial testing; storage is now limited only by SD card size
  • Packet sending refactor — Mesh packet sending consolidated into shared code for consistency and maintainability
  • Node input refactor — Input handlers in the Nodes app cleaned up and streamlined
  • Fn hint updated — Node list footer now shows accurate [Fn] key hints

Bug Fixes

  • Frequency calculation — Fixed default-slot (slot 0) frequency calculation that could place the radio on the wrong channel
  • Keyboard driver — Resolved TCA8418 driver issue that caused key events to stop registering
  • DM scrolling — Fixed broken scroll behavior in the Direct Messages view
  • Neighbor cleanup — Deleting a node now correctly removes its cached neighbor data
  • Watchdog — Improved WDT feeding to prevent spurious resets during long operations

Upgrade Notes

Breaking changes to message history format. Channel and DM messages history will be cleared after update.

Copy emoji folder to SD card root for rendering emojis

v1.9

20 Mar 18:12

Choose a tag to compare

Plai v1.9

Release notes for v1.9 (changes since v1.8).

Mesh & radio

  • Channel activity detection — detects activity on the channel (#3).
  • Frequency slot — default slot selection now follows the primary channel name correctly.
  • TX timing — reply packets use configurable TX delay; TX delay logic refactored for consistency (#3).
  • Hidden clients — telemetry broadcasts are skipped for CLIENT_HIDDEN role.

Monitor app

  • Richer packet details (extra rows, improved formatting).
  • Hold CTRL for additional packet information.

Nodes app

  • Remembers last sort order and selected node across sessions.
  • Traceroute success uses a dedicated sound.
  • Channel sounds — new notification options and an extra channel alert sound.

Stats app

  • System tab shows firmware version; all tabs use scroll where needed.
  • Node DB tab shows online node count (nodes seen within the last hour).
  • Tasks tab lists running tasks (with layout tweaks).
  • Statistics use all counted packets, not only the last 50.
  • Battery info on the node view; GPS tab layout fixed for the screen; node info layout fixes and color tweaks.

Settings & UI

  • Derive public key from private key in settings.
  • Select dialogs — restored missing hint text.
  • GPS status icon hidden when there is no GPS fix.

Messages

  • Timestamps use local time correctly.

Platform & maintenance

  • ESP-IDF 5.5.3 toolchain / config update.
  • Factory partition size adjusted (0x1700000x150000); Makefile/partition updates aligned with layout changes.
  • Unused components removed from the tree; heap usage optimized.
  • Presets consolidated in one place; timers use a single macro consistently.
  • Powersave (WIP) — LED driver suspend/resume around power-saving paths.

For earlier releases and full project history, see the repository commit log and README.

v1.8

15 Mar 16:24

Choose a tag to compare

Plai v1.8

Standalone Meshtastic communicator for M5Stack CardPuter ADV.
No phone. No BLE. No WiFi. LoRa mesh communication with full on-device UI.

What's New

Stats App

  • New Stats app — Tabbed system and network overview at a glance
  • Node tab — Node ID, long/short name, role, PKI status
  • System tab — Heap (total/free/min), PSRAM, SD storage, uptime, date/time
  • Radio tab — Frequency, modem preset, waveform (SF/BW/CR), TX power, RX/TX packet counts
  • Node DB tab — Total nodes, favorites count, ignored count, messages sent/received
  • GPS tab — Fix quality, satellites (used/in view), coordinates, altitude, HDOP
  • Mesh tab — RX/TX totals, port distribution (Text, NodeInfo, Position, etc.) with percentages; CRC errors shown separately
  • Tab navigation — [←][→] switch tabs; [↑][↓] scroll long content
  • Auto-refresh every 2 seconds

v1.7

10 Mar 21:50

Choose a tag to compare

Plai v1.7

Standalone Meshtastic communicator for M5Stack CardPuter ADV.
No phone. No BLE. No WiFi. LoRa mesh communication with full on-device UI.

What's New

Power Saving

  • Display sleep — Screen turns off when idle to save power
  • Skip UI when sleeping — No UI updates while display is off; wake on keypress or radio activity
  • Improved main task wait — More efficient idle handling during sleep
  • Display blink fix — Fixed power-on display blink behavior
  • Volume and brightness callbacks — Moved to callback-based handling for better integration

Nodes

  • Persistent favorites and ignored lists (#1) — Favorites and ignored nodes stored in NodeDB, survive node database resets
  • Ignore nodes — Mark nodes as ignored to filter their traffic
  • Exchange position and node info — New hotkeys [P] and [N] for exchange position and node info dialogs
  • Node name centering — Node names centered in chat views
  • Node name helpers — Added helpers for node name display
  • Initial [CTRL] state — Fixed initial state when holding CTRL in node views
  • Traceroute navigation — PageUp/PageDown in traceroute log and details
  • Role fix — Fixed missing role in node info display
  • Config-based node rendering — Use config for our node rendering vs node_db

Mesh & Compatibility

  • Meshtastic UserId alignment (#2) — UserId now uses same MAC-based scheme as Meshtastic (!xxxx97cc) for consistent identity across firmware flashes and backups
  • Packet decoding fix — Fixed decoding of our packets when relayed by other nodes
  • Node info response — Respond with node info only when packet was for us
  • Force info broadcast — Restored logic for forcing node info broadcast on settings change
  • ROUTING error codes — Added correct mesh error codes for ROUTING packets

Monitor

  • Packet payload refactor — Refactored packet payload handling and display
  • ROUTING error details — Extended error codes and details for ROUTING packets
  • Packet payload details — Added packet payload details in monitor view
  • Implicit ACK logging — Log implicit ACKs in monitor
  • Keyboard control — Improved keyboard navigation in details view

Settings

  • Position settings — Fixed position settings; added "location = off" option
  • Scroll position — Fixed back item scroll position in settings
  • Input validation — Fixed UTF-8 input string size validation (bytes vs chars) in dialogs
  • Import settings fix — Apply LoRa/mesh configuration correctly after successful import

Refactoring

  • Timezone apply — Refactored timezone application logic
  • GPS fix — Refactored GPS fix from polling to callback-based
  • Code cleanup — Added helpers to simplify code

v1.6

05 Mar 09:05

Choose a tag to compare

Plai v1.6

Standalone Meshtastic communicator for M5Stack CardPuter ADV.
No phone. No BLE. No WiFi. LoRa mesh communication with full on-device UI.

Features

  • Nodes — list up to 1000 nodes, 8 sort modes, DM with delivery status, traceroute with hop/SNR detail
  • Channels — up to 8 channels, per-channel notification sounds, unread counters
  • Greetings & #ping reply — auto-greet new nodes and auto-reply to #ping with configurable macro templates (#short, #long, #hops, #snr, #rssi)
  • Channel invitation — send/receive channel invites via DM (#invite name=key); warns before sending unencrypted
  • Monitor — live TX/RX packet feed, last 50 packets, port labels, node name resolution
  • Persistent air time — channel utilization and TX air time survive reboots (saved to SD card)
  • SD-backed storage — message history, node database, and profile stored on SD card; survives firmware updates
  • Settings — LoRa, security, node info, position, telemetry, export/import to SD