Releases: statico/meshtastic-cli
v1.11.0
v1.10.0
Flat config editor, diff-based change tracking, bot mode, and chat/node bug fixes.
- New flat config editor — Replace hierarchical 2-level config UI with a single flat scrollable list of every config setting. Navigate with j/k, Enter/Space to edit, / to filter, c to commit, C to discard. ConfigPanel.tsx rewritten from 1468 → 152 lines.
- Diff-based batch edit count — Toggling a value back no longer inflates the edit counter.
--botflag — Auto-reply to ping/test messages with pong/ack including SNR, RSSI, and hop count info.- Chat selection fixes — Keep viewport stable when entering selection mode; clamp selectedMessageIndex to prevent selecting past last message.
- Node navigation fixes — Deterministic sort ordering with tiebreaker; preserve node selection across list updates.
Full Changelog: v1.9.6...v1.10.0
Full Changelog: v1.9.6...v1.10.0
v1.9.6
Add MeshView URL to node details panel (clickable link when meshview server is configured)
Full Changelog: v1.9.5...v1.9.6
v1.9.5
Bug Fixes
Fixed random quit issue with comprehensive exit tracking and logging
This release addresses the issue where the program would randomly quit after running for hours without explanation. Multiple critical fixes were implemented:
Critical Fixes
- Synchronous log flushing: All exit and error logs now use
fsyncSync()to guarantee logs are written to disk before process exits. Previously, async writes could be lost during unexpected exits. - Race condition in quit flow: Fixed issue where
process.exit()was called immediately after Ink'sexit()without allowing cleanup to complete. Added 100ms delay to ensure proper shutdown. - Hung iterator detection: Added automatic cleanup if the transport poll loop exits unexpectedly while still marked as running.
New Exit Tracking
- Exit log (
~/.config/meshtastic-cli/exit.log): Every program exit now logged with reason, uptime, memory usage, and full context - Heartbeat system (
~/.config/meshtastic-cli/heartbeat.log): Updates every 10 seconds to detect silent crashes - beforeExit handler: Catches when event loop becomes empty unexpectedly
- Process warning handler: Logs Node.js warnings (deprecation, experimental features)
Enhanced Logging
- Transport async iterator operations (queued outputs, pending promises, done signals)
- Poll loop lifecycle (start, heartbeat, exit with full context)
- Emit operations (resolver vs queue tracking)
- Quit dialog interactions (key presses, confirmations, cancellations)
- All critical operations now logged with detailed context
Debug Files
~/.config/meshtastic-cli/exit.log- Detailed exit tracking~/.config/meshtastic-cli/heartbeat.log- Process health monitoring~/.config/meshtastic-cli/error.log- Error tracking (existing)~/.config/meshtastic-cli/log- Verbose logging with--enable-logging
See the exit log to diagnose why the program quit. Use heartbeat timestamp to detect silent crashes.
v1.9.4
Bug Fix
- Fixed "HW null" showing in node list when hardware info is unavailable
- Now properly hides unknown hardware models instead of showing "HW null" or "HW_*" patterns
This was a regression from the previous release where null hardware values weren't being filtered correctly.
Full Changelog: v1.9.3...v1.9.4
v1.9.3
Improvements
- Fixed UI flickering issues in nodes and chat tabs with batched updates and optimized re-renders
- Reduced re-renders from dozens per second to ~10/second max when packets stream in
- Fixed React.memo comparisons to properly detect data changes
- Use terminal height - 1 to prevent Ink's full-height flickering issue
- Memoized filtered/sorted nodes to avoid recalculation on every render
- Hide null and unknown hardware info in node list for cleaner display
Technical Details
The flickering fixes include:
- Batch node updates with 100ms debounce (similar to existing packet batching)
- Fix React.memo to check array references instead of just length
- Optimize filtered nodes computation with useMemo
Full Changelog: v1.9.1...v1.9.3
v1.9.1
Performance Improvements
- Significantly reduced flickering throughout the UI by enabling Ink 6.6.0's incremental rendering and FPS limiting
- Smoother tab switching - removed forced re-renders when switching between packets/nodes/chat/dm tabs
- Optimized animations - slowed down animation frame rates to reduce cascade re-renders
- AnimatedDots: 200ms → 500ms
- LiveIndicator: 800ms → 1000ms
- Spinners: 80ms → 120ms
These changes combine to create a much more stable visual experience, especially during initial load and when scrolling through large lists of packets or nodes. The incremental rendering feature only updates changed lines instead of redrawing the entire screen.
Full Changelog: v1.9.0...v1.9.1
Full Changelog: v1.9.0...v1.9.1
v1.9.0
Features
- pcap export: Added
--pcapflag to write all packets to a pcap file for analysis with Wireshark (#10)
Bug Fixes
- Fixed argument parsing issues including bounds checks, multiple address rejection, and better error handling (thanks @davmonk for reporting #1, #2, #4, #5, #6)
- Fixed direct ping to properly send with 0 hops by setting
wantAck=falsewhenhopLimit=0(thanks @esev for reporting #9)
Documentation
- Added guidance on crediting issue authors in release notes
Full Changelog: v1.8.2...v1.9.0
v1.8.2
Performance Improvements
This release focuses on reducing UI flickering and improving overall performance through comprehensive component memoization.
✨ Features
-
Memoized Components: All major UI components are now memoized to prevent unnecessary re-renders
NodesPanelandLogPanelwith custom comparison functionsDMPanelcomponents includingAnimatedDotsandMessageRowPacketList,ChatPanel,PacketRow, andMessageRowcomponentsLiveIndicatorcomponent to isolate animation state
-
Batched Updates: Implemented 100ms debounce for packet updates to reduce render frequency
-
Animation State Isolation: Isolated animation state in
AnimatedDotsandLiveIndicatorto prevent cascading re-renders
📊 Impact
This release significantly reduces UI flickering when:
- Packets load or update
- Animations update
- Status indicators change
All Priority 1 and Priority 2 improvements from the flickering improvement plan have been completed.
Full Changelog: v1.8.1...v1.8.2
v1.8.1
Bug Fixes
This release fixes a critical connection regression that broke connections to devices on the default HTTP port.
🐛 Fixed
-
Connection Regression: Restored default HTTP port 80 behavior
- Fixed port handling to only add port if explicitly provided via
--portflag - Restored old behavior where addresses without ports use default HTTP port (80)
- Fixed issue where connections to devices on default HTTP port (80) were broken after commit 02865a4 which incorrectly defaulted to port 4403
- Fixed port handling to only add port if explicitly provided via
-
Connection Status Improvements:
- Keep status as 'connecting' while actively retrying instead of immediately showing 'disconnected'
- Show error reason in footer when disconnected
- Fixed missing dependencies in connection effect (
useTls,httpPort,insecure) - Restored initial connection test for immediate feedback
🔧 Technical Details
This release addresses a regression introduced in a previous commit that incorrectly changed the default port behavior, breaking connections to many devices that use the standard HTTP port 80.
Full Changelog: v1.8.0...v1.8.1