Releases: statico/meshtastic-cli
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
v1.8.0
🤩 Special thanks to de@n for beta testing! 🤩
New Features
- Add
--port/-Pflag to specify custom HTTP port - Add
--tls/-Tflag to use HTTPS instead of HTTP - Add
--insecure/-kflag to accept self-signed SSL certificates - Support connecting to meshtasticd HTTP API (port 8080 with HTTPS)
Changes
- Default port remains 4403 (original behavior preserved)
- Self-signed certificates are automatically accepted for localhost connections
- Updated README with examples for meshtasticd connections
Usage Examples
# Connect to a Meshtastic device (default)
meshtastic-cli 192.168.0.123
# Connect to meshtasticd HTTP API
meshtastic-cli 127.0.0.1 --port 8080 --tls --insecureFull Changelog: v1.7.1...v1.8.0
v1.7.1
Bug Fixes
- Fix database pruning race condition with promise queue
- Add validation for lat/lon before URL construction
- Move rate limit reset logic before rate limit checks
- Add fallback error handling in ErrorBoundary
Improvements
- Make MeshView rate limits configurable via environment variables
- Use URLSearchParams for all MeshView API query parameters
- Clean up documentation (removed validation reports)
Full Changelog: v1.7.0...v1.7.1
v1.7.0
Improvements
- Type Safety: Replaced 'as any' with proper null checks throughout the codebase
- Database: Improved migration system with version tracking and better cleanup handling
- Error Handling: Added error boundaries for major UI sections and improved async error handling
- Security: Replaced exec() with safe spawn() to prevent command injection vulnerabilities
- Performance: Added rate limiting constants and fixed missing meshViewRequestRef
- Memory Management: Prevented memory leaks in HTTP transport and fixed race conditions in packet pruning
- Input Validation: Added comprehensive input validation and safe JSON parsing
- URL Handling: Improved URL construction with URLSearchParams
- Analysis: Added validation report for analysis plan
Full Changelog: v1.6.4...v1.7.0