SkillAgentSearch skills...

MeshRadar

Modern web interface for Meshtastic mesh network nodes. Supports Serial/TCP connection, real-time messaging, channels, DM, traceroute, telemetry.

Install / Use

/learn @curlysasha/MeshRadar
About this skill

Quality Score

0/100

Supported Platforms

Universal

README

<div align="center">

📡 MeshRadar

Modern web interface for Meshtastic mesh network management

English Русский

hero

Python React FastAPI License

📥 Download Latest Release for Windows

Download MeshRadar

FeaturesQuick StartAPITechnologies

</div>

📸 Interface

interface

Traceroute Visualization

traceroute


✨ Features

| Feature | Description | | ------------------- | -------------------------------------------------------------- | | 🔌 Connection | Serial (USB), TCP (WiFi), and BLE (Bluetooth) to Meshtastic nodes | | 💬 Chat | Channels and direct messages with delivery confirmation (✓ ✓✓) | | 📊 Node List | All mesh nodes with telemetry (battery, SNR, position) | | 🗺️ Network Map | Interactive map visualization of all nodes | | 🛤️ Traceroute | Message route visualization between nodes | | 💾 History | Messages stored in SQLite database | | ⚡ Real-time | WebSocket for instant updates | | 🌍 Multilingual | Russian and English with switcher |


🚀 Quick Start

Requirements

  • Python 3.10+
  • Node.js 18+
  • Meshtastic node (optional for UI testing)

Backend

cd backend
python -m venv venv
source venv/bin/activate  # Windows: venv\Scripts\activate
pip install -r requirements.txt
python main.py

Backend will start at http://localhost:8000

Frontend

cd frontend
npm install
npm run dev

Frontend will start at http://localhost:5173


📦 Portable Version

To build a standalone .exe file:

# Run in project root
build.bat

Output file: dist/MeshRadar.exe


🐳 Docker Deployment

For complete Docker setup and configuration guide, see DOCKER.md

Quick start:

docker-compose up -d

Then open http://localhost:5173 and connect to your Meshtastic device through the UI.

Note: USB connection is optional. By default, Docker runs without USB device mapping. To enable USB, uncomment the devices section in docker-compose.yml.


🔌 API

REST Endpoints

| Method | Endpoint | Description | | ------ | ---------------------- | ------------------ | | POST | /api/connect | Connect to node | | POST | /api/disconnect | Disconnect | | GET | /api/status | Connection status | | GET | /api/ble-scan | Scan BLE devices | | GET | /api/nodes | List of nodes | | GET | /api/node/{id} | Node information | | GET | /api/channels | List of channels | | POST | /api/message | Send message | | POST | /api/traceroute/{id} | Traceroute to node | | GET | /api/messages | Message history |

WebSocket Events

// Connection
ws://localhost:8000/ws

// Events (server → client)
{ type: "connection_status", data: { connected: boolean, ... } }
{ type: "message", data: { sender, text, channel, ... } }
{ type: "ack", data: { packet_id, status: "ack"|"nak" } }
{ type: "node_update", data: { id, user, position, ... } }
{ type: "traceroute", data: { route: [...], snr_towards: [...] } }
<details> <summary><b>📝 API Usage Examples</b></summary>

TCP Connection:

curl -X POST http://localhost:8000/api/connect \
  -H "Content-Type: application/json" \
  -d '{"type": "tcp", "address": "192.168.1.100:4403"}'

Serial Connection:

curl -X POST http://localhost:8000/api/connect \
  -H "Content-Type: application/json" \
  -d '{"type": "serial", "address": "/dev/ttyUSB0"}'

BLE Connection (scan first):

# Scan for available BLE devices
curl http://localhost:8000/api/ble-scan

# Connect to BLE device
curl -X POST http://localhost:8000/api/connect \
  -H "Content-Type: application/json" \
  -d '{"type": "ble", "address": "F4:12:FA:D0:45:AB"}'

Note: BLE scanning may not work with all firmware versions. Known working versions: up to v2.7.14. If you experience issues with BLE scanning on firmware v2.7.15 or newer, consider downgrading to v2.7.14.

Send Message:

curl -X POST http://localhost:8000/api/message \
  -H "Content-Type: application/json" \
  -d '{"text": "Hello mesh!", "channel_index": 0}'
</details>

🛠 Technologies

<table> <tr> <td width="50%">

Backend

  • FastAPI — async web framework
  • meshtastic — Python library
  • aiosqlite — async SQLite
  • websockets — real-time
</td> <td width="50%">

Frontend

  • React 18 + TypeScript
  • Tailwind CSS — styling
  • Zustand — state management
  • Radix UI — accessible components
</td> </tr> </table>

📁 Project Structure

meshradar/
├── backend/
│   ├── main.py              # FastAPI application
│   ├── meshtastic_manager.py # Connection management
│   ├── websocket_manager.py  # WebSocket broadcast
│   ├── database.py          # SQLite operations
│   └── schemas.py           # Pydantic models
│
├── frontend/
│   ├── src/
│   │   ├── components/      # React components
│   │   ├── hooks/           # React hooks
│   │   ├── store/           # Zustand state
│   │   └── locales/         # i18n translations
│   └── package.json
│
└── assets/                  # README images

👨‍💻 Development

# Backend with hot-reload
cd backend && uvicorn main:app --reload

# Frontend with hot-reload
cd frontend && npm run dev

# Production build
cd frontend && npm run build

<div align="center">

📄 License

GPLv3 + Commons Clause © 2024

This project is licensed under GPLv3 with Commons Clause - see the LICENSE file for details.

Note: The Commons Clause means you can use, modify, and distribute this software freely, but you cannot sell it or offer it as a paid service.


💝 Support the Project

If you find MeshRadar useful, please consider supporting its development:

Ko-fi Boosty

Crypto donations:

  • USDT TRC20: TL2rEf6iNzhC9Mb2grm6S5iq5JrMxYDEZG
  • USDT TON: UQDyYPHzm6tb4KbpLIMo-KEWC2PmPHnU2Zj4tndLg9O70-w8

Made with ❤️ for Meshtastic community

</div>
View on GitHub
GitHub Stars46
CategoryCustomer
Updated7d ago
Forks3

Languages

TypeScript

Security Score

75/100

Audited on Mar 24, 2026

No findings