All notable changes to MeshMonitor will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
- Multi-Channel AutoAnnounce & AutoResponder (#2078): Select multiple channels for automation targets
- AutoAnnounce: Broadcast announcements to multiple channels simultaneously via checkbox selection (replaces single-channel dropdown)
- AutoResponder: Triggers can now match messages on any combination of channels and DMs (replaces single-channel-per-trigger limitation)
- Backward Compatible: Existing single-channel configurations automatically migrate at runtime via normalization — no manual reconfiguration needed on upgrade
- Admin Commands Tab (#911): Comprehensive remote node management and administrative commands
- New Admin Tab: Dedicated interface for managing both local and remote Meshtastic nodes
- Node Selection: Search and select any node in the mesh network (local or remote)
- Device Management Commands:
- Reboot Device: Reboot with configurable delay (0-60 seconds)
- Factory Reset: Complete device reset to factory defaults
- Set Owner: Configure node owner information (long name, short name, unmessagable status)
- Set Device Config: Configure device role (CLIENT, CLIENT_MUTE, ROUTER) and node info broadcast interval
- Set LoRa Config: Full LoRa radio configuration including presets, bandwidth, spread factor, coding rate, region, hop limit, TX power, and more
- Set Position Config: Configure position broadcasting (interval, smart position, fixed position with coordinates)
- Set MQTT Config: Configure MQTT broker settings (address, credentials, encryption, JSON mode, root topic)
- Channel Management:
- Load Channels: Fetch and display all channels from remote nodes
- Edit Channels: Modify channel settings (name, PSK, role, uplink/downlink, position precision)
- Import Channels: Import channel configurations from Meshtastic URLs
- Export Channels: Export channel configurations to Meshtastic URLs with QR codes
- Configuration Import/Export:
- Full Configuration Import: Import complete device configuration (channels + LoRa settings) from Meshtastic URLs
- Full Configuration Export: Export complete device configuration to Meshtastic URLs with QR codes
- Works seamlessly with both local and remote nodes
- Remote Node Support:
- Session Passkey Management: Automatic session passkey handling for remote node authentication
- Per-Node Configuration Storage: Isolated configuration storage prevents data conflicts between nodes
- Remote Channel Loading: Load and manage channels from nodes not directly connected to MeshMonitor
- Remote Config Loading: Fetch device, LoRa, and position configurations from remote nodes
- Database Management:
- Purge Node Database: Remove all nodes from the device's node database
- UI Features:
- Consistent styling matching Device Configuration page
- Real-time loading states and progress indicators
- Comprehensive error handling with user-friendly messages
- Confirmation dialogs for destructive operations
- Search functionality for node selection
- Security: Admin-only access with proper authentication and session management
- Backend API: New
/api/admin/*endpoints for remote node operations/api/admin/commands- Generic admin command execution/api/admin/load-config- Load device/LoRa/position config from remote nodes/api/admin/get-channel- Fetch individual channel from remote node/api/admin/export-config- Export configuration for remote nodes/api/admin/import-config- Import configuration to remote nodes/api/admin/ensure-session-passkey- Manage remote node authentication
- Protobuf Enhancements: Improved AdminMessage decoding with proper nested object conversion
- Boolean Normalization: Consistent boolean handling for channel uplink/downlink settings across local and remote nodes
- Node Favorites & Ignored Management (#940): Complete support for managing favorite and ignored nodes
- Local Node Management: Toggle favorite and ignored status directly from the nodes page
- Remote Node Management: Manage favorite and ignored nodes on remote devices via Admin Commands tab
- Device Synchronization: Two-way sync between MeshMonitor database and Meshtastic device
- Database Migration: Automatic migration to add
isIgnoredcolumn to nodes table - Optimistic UI Updates: Immediate visual feedback with proper polling reconciliation
- Firmware Compatibility: Gracefully handles devices running firmware < 2.7.0 (feature requires 2.7.0+)
- API Endpoints: New
/api/nodes/:nodeId/favoriteand/api/nodes/:nodeId/ignoredendpoints
- Draggable UI Components (#940): Enhanced user experience with movable and resizable interface elements
- Nodes Sidebar: Draggable and resizable nodes list with position and size persistence
- Map Legend: Draggable Hops legend that doesn't interfere with map panning
- Map Controls: Draggable Features box with improved positioning
- localStorage Persistence: All component positions and sizes saved across sessions
- Smooth Interactions: Proper event handling to prevent conflicts with Leaflet map controls
- Auto-Upgrade: Fixed version check endpoint to prevent multiple upgrade triggers when an upgrade is already in progress
- Added pre-check using
isUpgradeInProgress()before callingtriggerUpgrade() - Prevents unnecessary upgrade attempts when polling the version check endpoint frequently
- Handles race conditions where an upgrade might start between the check and trigger call
- Made
isUpgradeInProgress()public to allow external status checks
- Added pre-check using
- Protobuf Error Messages: Fixed
requestRemoteOwner()to provide clear error message when protobuf definitions are not loaded- Added explicit null check for
getProtobufRoot()before use - Now matches the error handling pattern used in
requestRemoteSessionPasskey()andrequestRemoteChannel() - Provides informative "Protobuf definitions not loaded" error instead of misleading "AdminMessage type not found"
- Added explicit null check for
- Channel Import: Fixed boolean normalization for
uplinkEnabledanddownlinkEnabledto default totrue(enabled) for consistency with local node behavior - Export Modal: Fixed
useEffectdependency array to prevent unwanted resets of user channel selections - Error Handling: Fixed
handleLoadChannelsandhandleLoadLoRaConfigto properly re-throw errors forPromise.allrejection handling - Config Structure: Fixed remote node configuration loading to correctly assign
getConfigResponsewithout incorrect object spreading - Protobuf Root: Added explicit null checks for
getProtobufRoot()with informative error messages - Button States: Fixed Edit, Export, and Import channel buttons to properly disable when no node is selected
- API Authentication: Added
credentials: 'include'to admin API calls to ensure session cookies are sent - Hop Count Calculation: Fixed
hopCountassignment to verifyrouteArrayis actually an array before accessing.length- Prevents
undefinedhopCount values for malformed route data - Added
Array.isArray()check in all traceroute endpoints
- Prevents
- Race Condition in Remote Requests: Fixed data clearing order in
requestRemoteConfig,requestRemoteChannel, andrequestRemoteOwner- Data is now cleared before sending requests instead of after
- Prevents race conditions where incoming responses are immediately deleted, causing polling timeouts
- Tapback Routing: Fixed tapback emoji reactions to respect
alwaysUseDMflag- Tapbacks now correctly route via DM when
alwaysUseDMis enabled, matching message reply behavior
- Tapbacks now correctly route via DM when
- CORS Configuration: Fixed development environment CORS check to correctly recognize localhost origins
- Prevents false positive CORS error banners in development mode
- Remote Node Favorite/Ignored Management (#950): Fixed incorrect status display and management for remote nodes
- Added separate state tracking for remote node favorite/ignored status
- UI now correctly displays and manages favorite/ignored status for remote nodes independently from local node status
- Fixed button disable conditions to allow management of remote nodes even when local node has different status
- Remote node status is cleared when switching target nodes to prevent stale data
- Prevents incorrect UI state and disabled buttons when managing favorite/ignored status on remote devices
- Clickable URL Rendering in Messages (#614): Automatic URL detection with rich link previews
- Automatic URL Detection: Detects HTTP/HTTPS URLs in all message text using regex pattern
- Clickable Links: URLs converted to clickable links that open in new tabs with security (
rel="noopener noreferrer") - Rich Link Previews: Display preview cards with metadata (title, description, image, site name)
- Fetches Open Graph, Twitter Card, and standard meta tags from target URLs
- Beautiful card-based layout with responsive design (max-width 400px)
- Displays website favicons, titles, descriptions, and preview images
- Styled with Catppuccin theme variables for consistency
- Lazy Loading with Intersection Observer: Performance-optimized preview fetching
- Only fetches previews for messages in or near the viewport (100px margin)
- Prevents excessive API calls on initial page load
- One-time fetch per message with URL
- Smooth UX with loading states and animations
- Backend Link Preview Endpoint: New
/api/link-previewendpoint- Fetches and parses HTML metadata from URLs
- 5-second timeout to prevent hanging requests
- Protocol validation (only HTTP/HTTPS allowed)
- HTML entity decoding for safe text display
- Resolves relative URLs to absolute
- BASE_URL Support: Properly respects BASE_URL configuration via ApiService
- Security Features:
- Links open in new tabs with security attributes
- URL protocol validation
- Request timeouts
- Safe HTML entity handling
- Works in All Message Types: Channel messages, direct messages, and traceroute messages
-
Auto Welcome Functionality (#412): Automatically send personalized welcome messages to new nodes joining the mesh network
- Dynamic Token System: 7 customizable tokens for personalized messages
{LONG_NAME},{SHORT_NAME}- Node identification{VERSION}- MeshMonitor version{DURATION}- Time since node first seen{FEATURES}- Enabled automation features with emojis{NODECOUNT},{DIRECTCOUNT}- Network statistics
- Smart Welcome Logic: 24-hour cooldown to prevent spam
- Wait for Name Feature: Skip nodes with default names until personalized
- Routing Options: Send as DM or to specific channel
- Database Migration: Automatic migration prevents "thundering herd" of welcome messages on first boot
- Comprehensive Testing: 27 new tests covering integration and migration scenarios
- Dynamic Token System: 7 customizable tokens for personalized messages
-
Auto Announce Scheduled Sends (#413): Precise time-based scheduling using cron expressions as alternative to fixed intervals
- Cron Expression Scheduling: Schedule announcements at specific times (e.g., daily at 9 AM)
- Live Validation: Real-time validation with visual feedback (green checkmark/red error)
- Integrated Help: Direct link to crontab.guru for cron expression assistance
- Smart UI: Conditional display of interval OR cron input based on selected mode
- Immediate Apply: Schedule changes restart scheduler instantly - no container restart needed
- Default Expression:
0 */6 * * *(every 6 hours at top of hour) - Dual-Mode Scheduler: Supports both interval-based and cron-based execution
- New Dependencies:
node-cronfor backend scheduling,cron-validatorfor frontend validation
-
Security Monitoring Page (#414): Comprehensive mesh network security monitoring
- New Security Tab: Dedicated interface for monitoring encryption key security
- Low-Entropy Key Detection: Identifies nodes using weak encryption keys vulnerable to brute-force attacks
- Displays key entropy scores with severity indicators (High Risk, Medium Risk, Low Risk)
- Shows hardware model information for affected nodes
- Direct links to detailed remediation documentation
- Duplicate Key Detection: Identifies nodes sharing the same encryption key
- Groups nodes by duplicate encryption keys
- Highlights privacy violations between devices
- Shows impacted node count per duplicate key
- Links to comprehensive fix instructions
- Security Permission: New granular permission for accessing security monitoring
- Read permission for viewing security scan results
- Write permission for initiating security scans
- Integrated into user management UI with proper Read/Write checkboxes
- Comprehensive Documentation: User-facing guides for fixing security issues
docs/security-low-entropy-keys.md(257 lines) - Complete guide to fixing weak keysdocs/security-duplicate-keys.md(355 lines) - Complete guide to resolving duplicate keys- Platform-specific instructions for iOS, Android, and CLI
- Real-world security scenarios and attack explanations
- Step-by-step remediation instructions
- FAQ sections addressing common concerns
- Permission UI: Fixed Security permission displaying incorrect text in Users panel
- Changed from "Can initiate traceroutes" to proper Read/Write checkboxes
- Security permission now displays consistently with other resources
- User Management: Enhanced permission model to include security resource
- Added 'security' to default admin permissions
- Security resource excluded from default user permissions
- Auto Announce Architecture: Enhanced scheduler to support both interval and cron-based execution modes
-
Enhanced Node Details Block (#366, #384): Added comprehensive node information display on Messages page
- New "Node Details" block displays between message conversation and telemetry graphs
- Node ID display in hex and decimal formats (e.g., 0x43588558 and 1129874776)
- Shows battery level with voltage (color-coded: green >75%, yellow 25-75%, red <25%)
- Displays signal quality metrics (SNR and RSSI with quality indicators)
- Shows network utilization (channel utilization and air utilization TX)
- Displays device information (hardware model with image, role, firmware version)
- Hardware images fetched from Meshtastic web-flasher repository (70+ device images)
- Friendly hardware names (e.g., "STATION G2" instead of "STATION_G2")
- Shows network position (hops away, MQTT connection status)
- Displays last heard timestamp with relative time formatting
- Responsive grid layout (2 columns on desktop, 1 column on mobile)
- Graceful handling of missing metrics (shows "N/A" for unavailable data)
- Color-coded indicators for battery, signal quality, and utilization levels
- Comprehensive hardware model decoder (116 device types from Meshtastic protobufs)
- Device role decoder (Client, Router, Tracker, Sensor, etc.)
-
Device Configuration Backup Improvements (#381): Enhanced backup functionality and user experience
- Improved backup filename format with timestamp (NodeID-YYYY-MM-DD-HH-MM-SS.yaml)
- Enhanced backup modal UI with clearer instructions
- Better error handling and user feedback
-
Map Popup Visibility (#383, #386): Improved popup centering when clicking node markers
- Dynamic viewport-relative offset (1/4 of map height) adapts to different screen sizes
- Single smooth animation instead of competing pan operations
- Popup consistently centers in viewport without being cut off
- Eliminated "fighting" animations between map controller and popup opening
-
Connection Status Detection (#378, #387): Added timeout to detect backend unavailability
- 10-second timeout on fetch requests prevents indefinite hanging
- Connection status updates to "Disconnected" within 10-15 seconds when backend unavailable
- Improved browser compatibility with DOMException and Error handling
- Memory leak prevention with proper timeout cleanup in finally block
-
Apprise URL Validation (#385): Loosened URL validation to support special characters
- Improved compatibility with Apprise notification services
- Supports special characters in Apprise URLs
- Better error messages for invalid URLs
- Traceroute History: View complete traceroute history for any node pair
- New "View History" button in Messages tab for nodes with traceroute data
- Displays all traceroute attempts including successful and failed attempts
- Shows both forward and return routes with SNR values
- Includes calculated total distance for each route
- Tracks auto-traceroute and manual user-initiated traceroutes
- Persistent storage with configurable history limit (50 records per node pair)
- Improved database performance with dedicated index for traceroute queries
- Fixed potential race condition in traceroute recording with database transactions
- Enhanced API input validation for better security
- Replaced magic numbers with configuration constants for improved maintainability
- Optimized traceroute display performance with memoized route formatting
- Telemetry Dashboard Enhancements: Enhanced telemetry dashboard with advanced data management
- Filter telemetry by node name or ID with instant search
- Sort nodes by name, ID, battery level, voltage, or last update time
- Drag-and-drop to reorder telemetry cards for personalized layout
- Persistent card order saved to local storage
- Clear visual indicators for search and sort states
- Session Management: Added SESSION_ROLLING option for improved user experience
- When enabled, active users stay logged in indefinitely by resetting session expiry on each request
- Defaults to
truefor better UX - users won't be logged out while actively using the app - Configurable via
SESSION_ROLLINGenvironment variable - Works in conjunction with
SESSION_MAX_AGEfor flexible session control
- Enhanced telemetry card layout with better visual hierarchy
- Improved UX for managing large numbers of nodes
- Updated README with SESSION_ROLLING documentation
- OIDC Callback Parameter Preservation: Fixed OIDC authentication failure with RFC 9207-compliant providers (PocketID, etc.) that include the
iss(issuer) parameter in authorization callbacks- Modified callback handler to preserve all query parameters from authorization callback instead of reconstructing URL with only code/state
- Now passes complete callback URL to openid-client's authorizationCodeGrant function
- Maintains full backward compatibility with existing OIDC providers (Authentik, Keycloak, Auth0, Okta, Azure AD)
- Resolves "response parameter iss (issuer) missing" error
- Fixes #197
-
Connection Control: Manual disconnect/reconnect from Meshtastic node with permission control
- Disconnect button in header to manually stop connection to node
- Reconnect button appears when user has manually disconnected
- New
connectionpermission resource to control access to disconnect/reconnect functionality - Cached data remains accessible while disconnected (read-only mode)
- Prevents automatic reconnection when user has manually disconnected
- Connection state preserved through page refreshes
-
Traceroute Permission: Fine-grained control over traceroute initiation
- New
traceroutepermission resource to control who can initiate traceroute requests - Separate permission from viewing traceroute results (which uses
info:read) - Traceroute button in Messages tab now requires
traceroute:writepermission - Default permissions: admins can initiate, regular users can view only
- New
-
Permission UI Enhancements:
- Single-checkbox UI for binary permissions (connection, traceroute)
- Intuitive "Can Control Connection" and "Can Initiate Traceroutes" labels
- Simplified permission management for action-based resources
-
Header Improvements:
- Display connected node name in header: "LongName (ShortName) - !ID"
- IP address shown in tooltip on hover
- Better visibility of which node you're connected to
- Traceroute endpoint now requires
traceroute:writepermission instead ofinfo:write - Connection status now includes
user-disconnectedstate - Frontend polling respects user-disconnected state
- Route segments and neighbor info remain accessible when disconnected
- Database migrations 003 and 004 for new permission resources
- User disconnected state management in MeshtasticManager
- Comprehensive test coverage for new connection control endpoints
- Permission model tests updated for connection and traceroute resources
- All test suites (515 tests) passing successfully
- Data display when manually disconnected from node
- Route segments functionality while disconnected
- Page refresh behavior when in disconnected state
- Cookie security configuration with
COOKIE_SECUREandCOOKIE_SAMESITEenvironment variables
- Authentication and user management system
- Role-based access control with granular permissions
- Update notification system with GitHub release checking
- Two-Way Favorites Sync: Synchronize favorite nodes to Meshtastic device
- Send
set_favorite_nodeandremove_favorite_nodeadmin messages to device - Session passkey management with automatic refresh (300 second expiry)
- Graceful degradation: database updates succeed even if device sync fails
- Device sync status reporting in API responses
- Frontend displays sync success/failure status in console
- Send
- Favorites API Enhancement:
/api/nodes/:nodeId/favoriteendpoint now supports device sync- Added
syncToDeviceparameter (default: true) to toggle device synchronization - Response includes
deviceSyncobject with status ('success', 'failed', 'skipped') and optional error message - Database update and device sync are independent operations
- Added
- Admin message creation methods in protobufService:
createGetOwnerRequest()- Request session passkey from devicecreateSetFavoriteNodeMessage()- Send favorite node to devicecreateRemoveFavoriteNodeMessage()- Remove favorite from devicedecodeAdminMessage()- Parse admin message responsescreateAdminPacket()- Wrap admin messages in ToRadio packets
- Session passkey lifecycle management in meshtasticManager
- Admin message processing for extracting session passkey from responses
- Automatic passkey refresh with 290-second buffer before expiry
- Telemetry Favorites Dashboard: Pin your favorite telemetry metrics for quick access
- Star/unstar nodes to mark as favorites
- Dedicated favorites dashboard showing only starred nodes
- Persistent favorites storage in database
- Quick toggle between all nodes and favorites view
- Major Dependency Updates:
- Upgraded to React 19 with improved performance and features
- Upgraded to react-leaflet v5 for better map functionality
- Upgraded to Express 5 for enhanced server capabilities
- Upgraded to Node.js 22 (deprecated Node 18 support)
- Upgraded to ESLint 9 and TypeScript ESLint 8
- Upgraded to Vite 6 for faster builds
- Express 5 wildcard route compatibility issue preventing server startup
- Docker build issues with missing @meshtastic/protobufs dependency
- Server test failures after jsdom v27 upgrade
- Various dependency vulnerabilities through updates
- Modernized entire dependency stack for better security and performance
- Improved build times with updated tooling
- Enhanced type safety with latest TypeScript ESLint
- Better development experience with latest Vite and React
-
GitHub Container Registry Publishing: Pre-built Docker images now available
- Automated Docker image building and publishing to
ghcr.io/yeraze/meshmonitor - GitHub Actions workflow for continuous image publishing
- Multi-tag strategy:
latest, version tags (1.1.0,1.1,1), and branch names - Docker buildx with layer caching for optimal build performance
- No local build step required for deployment
- Automated Docker image building and publishing to
-
Enhanced Deployment Options:
- Pre-built images available at GitHub Container Registry
- Updated docker-compose.yml to use GHCR images by default
- Documented local build option for developers
- Version pinning support for production stability
-
Improved Documentation:
- Docker image version and size badges in README
- Comprehensive deployment instructions for both pre-built and local builds
- Available image tags documentation
- Quick start guide updated with GHCR instructions
- docker-compose.yml now uses
ghcr.io/yeraze/meshmonitor:latestby default - Enhanced .dockerignore for optimized build context
- Updated Docker support feature list
- GitHub Actions workflow with PR build validation
- Automated multi-architecture image builds
- Layer caching for faster subsequent builds
- Public GHCR package for easy access
This is the initial stable release of MeshMonitor, a comprehensive web application for monitoring Meshtastic mesh networks over IP.
-
Automatic Traceroute Scheduler: Intelligent network topology discovery
- Runs every 3 minutes to discover mesh network routes
- Selects nodes needing traceroutes (no data or oldest traceroute)
- Stores complete route paths with SNR data for each hop
- Traceroute messages filtered from Primary channel display
-
Network Mapping & Route Visualization:
- Interactive map with "Show Routes" toggle checkbox
- Weighted route lines (2-8px thickness based on segment usage)
- Routes appearing in multiple traceroutes shown with thicker lines
- Purple polylines matching Catppuccin theme
- Real-time route data refresh every 10 seconds
-
Node Role Display:
- Role information displayed in node list (Client, Router, Repeater, etc.)
- Role badges shown next to node names
- Database schema updated with
rolecolumn
-
Hops Away Tracking:
- Network distance display for each node
- Shows how many hops away each node is from local node
- Database schema updated with
hopsAwaycolumn
-
Traceroute API Endpoints:
GET /api/traceroutes/recent- Retrieve recent traceroutes with filteringPOST /api/traceroutes/send- Manually trigger traceroute to specific node
-
Database Enhancements:
- New
traceroutestable with route path and SNR storage roleandhopsAwaycolumns added tonodestable- Foreign key relationships for data integrity
- Automatic schema migration on startup
- New
- Map controls repositioned to right side of interface
- Route visualization made toggleable for cleaner map view
- Traceroute data persistence for historical network analysis
-
Protobuf parsing enhanced for traceroute response handling
-
Intelligent node selection algorithm for traceroute scheduling
-
Optimized database queries for traceroute data retrieval
-
iPhone Messages-Style UI: Complete redesign of channel messaging interface
- Message bubbles with proper left/right alignment based on sender
- Sender identification dots showing shortName with longName tooltips
- Real-time delivery status indicators (⏳ pending → ✓ delivered)
- Optimistic UI updates for instant message feedback
-
Enhanced Channel Management:
- Whitelist-based channel filtering to prevent invalid channels
- Automatic cleanup of inappropriate channel names (WiFi SSIDs, random strings)
- Support for known Meshtastic channels: Primary, admin, gauntlet, telemetry, Secondary, LongFast, VeryLong
- Channel cleanup API endpoint (
POST /api/cleanup/channels)
-
Message Acknowledgment System:
- Content-based message matching for accurate delivery confirmation
- Temporary message ID handling for optimistic updates
- Automatic replacement of temporary messages with server-confirmed ones
- Message persistence across sessions
-
Full Docker Support:
- Multi-stage Docker builds for optimized production images
- Docker Compose configuration for easy deployment
- Persistent data volumes for database storage
- Environment-based configuration
-
Enhanced Database Operations:
- Export/import functionality for data backup
- Message and node cleanup utilities
- Better SQLite performance with WAL mode
- Comprehensive indexing for faster queries
-
API Improvements:
- RESTful endpoint structure
- Health check and connection status endpoints
- Comprehensive error handling and logging
- CORS support for cross-origin requests
-
Core Functionality:
- Real-time Meshtastic node monitoring via HTTP API
- Node discovery and telemetry data collection
- Text message sending and receiving
- Channel-based message organization
-
User Interface:
- React-based single-page application
- Catppuccin Mocha dark theme
- Responsive design for mobile and desktop
- Real-time connection status indicator
- Interactive telemetry graphs and node indicators
- Node list sorting and filtering
-
Data Persistence:
- SQLite database for messages, nodes, and traceroutes
- Automatic data deduplication
- Cross-restart persistence
- Node relationship tracking
- Foreign key relationships for data integrity
-
Meshtastic Integration:
- HTTP API client for node communication
- Enhanced protobuf message parsing
- Automatic node discovery
- Configuration and device data retrieval
- Message persistence issues (sent messages no longer disappear)
- Channel detection and invalid channel creation
- ShortName display logic improvements
- Database connection stability
- Memory leaks in protobuf parsing
- Graceful error handling for network issues
- Telemetry parsing and direct message handling
- Environment telemetry storage
- Migrated to TypeScript for better type safety
- Enhanced message UI with iPhone Messages aesthetic
- More restrictive channel detection algorithm
- Improved project structure and organization
- Enhanced development workflow with hot reloading
- React 18 with modern hooks and TypeScript
- Express.js backend with comprehensive API
- Better-sqlite3 for high-performance database operations
- Vite for fast development and optimized builds
- Docker with multi-stage builds for production deployment
- Comprehensive TypeScript type safety
- Enhanced error handling and logging throughout
- Real-time WebSocket Updates: Replace polling with WebSocket connections
- Message Search: Full-text search across message history
- Advanced Analytics: Network statistics and visualization dashboards
- Mobile Application: React Native companion app
- Multi-node Support: Connect to multiple Meshtastic nodes simultaneously
- Advanced Channel Management: Custom channel creation and PSK management
- Plugin System: Extensible architecture for custom functionality
- Enhanced Authentication: Built-in user authentication and access control