A real-time network visualizer for Meshtastic mesh networks featuring force-directed graph visualization, session management, and live updates with <100ms response times.
- Force-Directed Graph: Dynamic network topology visualization (not radar/radial)
- Real-time Updates: <100ms response time for all network events
- Session Management: View only current session data, with everything archived to SQLite
- Live Animations: Node discovery fade-ins, packet flow tracers, connection pulses
- Color-coded Signal Strength:
- π’ Green: Excellent (>-75dBm)
- π‘ Yellow: Good (-75 to -85dBm)
- π Orange: Weak (-85 to -95dBm)
- π΄ Red: Poor (<-95dBm)
- Battery Status: Visual indicators for power levels
- Network Topology: Direct vs multi-hop connections
- Active Nodes Sidebar: Live list sorted by activity
- Event Ticker: Scrolling feed of network events
- RAK 4631 connected via USB-C (primary target)
- Auto-detection of Meshtastic devices
- Support for all Meshtastic hardware models
- Python 3.8+
- Node.js 16+
- RAK 4631 or compatible Meshtastic device connected via USB-C
# Clone the repository
git clone <repository-url>
cd meshtastic-visualizer
# Run the start script
./start.shThe start script will:
- Install Python dependencies
- Install frontend dependencies
- Initialize the database
- Start the backend server (port 8000)
- Start the frontend dev server (port 5173)
If you prefer manual setup:
# Install Python dependencies
pip3 install -r requirements.txt
# Install frontend dependencies
cd frontend
npm install
cd ..
# Start backend
uvicorn backend.main:app --reload --port 8000
# In another terminal, start frontend
cd frontend
npm run dev- Connect your RAK 4631 via USB-C
- Open browser at http://localhost:5173
- Click "Connect" to connect to your device
- Watch as nodes appear and the network forms
- Use "New Session" to clear the display and start fresh
- Click nodes to select and view details
- Hover nodes for quick information
- Zoom/Pan the network graph
- Event ticker shows real-time activity
- Backend: FastAPI + WebSocket + Python Meshtastic API
- Frontend: React + TypeScript + Cytoscape.js (WebGPU renderer)
- Database: SQLite with session-based architecture
- Real-time: WebSocket for <100ms updates
meshtastic-visualizer/
βββ backend/ # FastAPI server
β βββ main.py # Main application
β βββ meshtastic_connector.py # Device interface
β βββ database.py # SQLite operations
β βββ models.py # Data models
βββ frontend/ # React application
β βββ src/
β βββ components/ # UI components
β βββ services/ # WebSocket service
β βββ App.tsx # Main app
βββ requirements.txt # Python dependencies
βββ start.sh # Startup script
βββ README.md # This file
The backend uses FastAPI with automatic reload:
uvicorn backend.main:app --reload --port 8000API documentation available at: http://localhost:8000/docs
The frontend uses Vite for fast HMR:
cd frontend
npm run devSQLite database is created automatically at meshtastic.db. Schema includes:
- Sessions management
- Node information and history
- Message storage
- Network topology
- Telemetry data
ws://localhost:8000/ws- Real-time data stream
GET /api/session/current- Get current sessionPOST /api/session/new- Start new sessionGET /api/nodes- Get active nodesGET /api/messages- Get recent messagesGET /api/topology- Get network topologyPOST /api/device/connect- Connect to devicePOST /api/device/disconnect- Disconnect from deviceGET /api/device/status- Get connection status
- Ensure RAK 4631 is connected via USB-C (data cable, not charge-only)
- On Linux: Add user to
dialoutgroup:sudo usermod -a -G dialout $USER - On macOS: Check System Preferences > Security for USB permissions
- Check that no other application is using the serial port
- Try specifying device path manually in the Connect dialog
- Restart the Meshtastic device
- For networks >50 nodes, ensure hardware acceleration is enabled in browser
- The WebGPU renderer will automatically activate for large networks
- Check browser console for performance warnings
Contributions welcome! Please follow these guidelines:
- Fork the repository
- Create a feature branch
- Make your changes
- Test with a real Meshtastic device
- Submit a pull request
MIT License - See LICENSE file for details
- Meshtastic project for the amazing mesh networking platform
- Cytoscape.js team for the powerful graph visualization library
- FastAPI for the high-performance Python web framework
For issues, questions, or suggestions:
- Open an issue on GitHub
- Join the Meshtastic Discord community
- Check the Meshtastic documentation
Built with β€οΈ for the Meshtastic community