MeshDash runs on modest hardware, but the radio connection and Python dependencies have real minimums. Here's what works, what struggles, and what to avoid.
MeshDash is a Python application (FastAPI + SQLite + asyncio). It's not a lightweight script — the dependency tree includes 100+ packages including cryptography, Pillow, Twisted, and the full meshtastic library. Choose your server hardware accordingly.
| Resource | Minimum | Recommended | Notes |
|---|---|---|---|
| CPU | 1 core ARMv7+ or x86-64 |
2+ cores | Single-core ARM6 (Pi Zero W) will choke on pip install and struggle under load. ARMv7 (Pi 2B+) or better. |
| RAM | 512 MB | 1 GB+ | pip install with --no-cache-dir needs ~400 MB free during compilation. After install, idle usage is ~80-150 MB. 512 MB total RAM works but leaves no headroom for analytics or packet bursts. |
| Storage | 2 GB free | 4 GB+ | Python venv + dependencies is ~800 MB. SQLite databases grow with packet volume — a busy node can add 50-200 MB/month. |
| OS | Raspberry Pi OS Ubuntu 20.04+ Debian 11+ |
Debian 12 Ubuntu 22.04 |
Must support Python 3.9+. WSL2 on Windows works for development. No macOS support. |
| Python | 3.9 | 3.11+ | 3.9 is the floor. 3.11+ gives significant asyncio performance gains. 3.12 tested and recommended. |
| Network | WiFi or Ethernet to radio |
Dedicated Ethernet | TCP connections to radio need stable networking. WiFi works but Ethernet eliminates a variable. |
These are real deployments, not theoretical. "Works" means it runs MeshDash reliably with a connected radio, not that it compiles fast.
The sweet spot. More than enough CPU and RAM. Installs in under 10 minutes. Handles 16 radio slots without breaking a sweat.
Runs MeshDash comfortably. 2 GB model works; 4 GB+ recommended if running other services. pip install takes 5-10 min.
Works well for a single radio. Tight on RAM during pip install. Do not run heavy analytics alongside.
The bare minimum. pip install takes 15-20 min. Works for single-radio monitoring. Expect sluggish UI under load. Not recommended for production.
Single-core ARM6 is too slow for Python 3.9+ and the dependency tree. The pip install alone can exhaust RAM and fail. Do not use.
VPS, desktop, or NUC. Fastest install experience. No ARM compilation overhead. Recommended if you have x86 hardware.
Runs identically to native Linux. USB passthrough for serial requires WSL2 USB support (Windows 11 recommended). TCP/WiFi radio works without USB.
The original Pi Zero W has a single ARM1176 core at 1 GHz and 512 MB RAM. Python 3.9+ with MeshDash's dependency tree (cryptography, Pillow, Twisted, protobuf) will struggle to install and run. Compilation can exhaust RAM and fail. The Pi Zero 2 W (quad-core A53) is the absolute floor — but even that is tight. If you're buying hardware, start at Pi 3 B+ or above.
MeshDash works with any Meshtastic device running firmware 2.3+. The radios below are specifically tested. If your device runs Meshtastic firmware, it will connect — these are the ones we've verified. You can also connect via MQTT without owning a radio, or via MeshCore — see Connection Methods below.
How MeshDash talks to your radio — or the mesh directly. Six connection methods are available. USB Serial is the most reliable for permanent installs; MQTT and MeshCore let you monitor without any radio hardware at all.
Plug the radio into your server via USB. Auto-detects the port. Default 115200 baud. Requires dialout group membership. Works on Pi, Linux, and WSL2 (with USB passthrough).
sudo usermod -aG dialout $USERConnect over the network. Radio must have WiFi enabled (configured via the Meshtastic app). Default port 4403. No USB passthrough needed.
MESHTASTIC_CONNECTION_TYPE=TCP and point MESHTASTIC_HOST to the radio IP.Connect directly to the Meshtastic MQTT servers (mqtt.meshtastic.org) without owning a physical radio. Observe the mesh, read messages, and view telemetry from any node broadcasting to MQTT. Works as an observer — send requires a node identity. Region and channel filters supported. Under active development but stable for receiving.
MESHTASTIC_CONNECTION_TYPE=MQTT, configure MQTT_BROKER, MQTT_REGION, and MQTT_CHANNEL.Alternative protocol via the meshcore Python library. Connects to MeshCore nodes over Serial, TCP, or BLE. Translates MeshCore events into MeshDash packet format. Provides send/receive, node discovery, and channel messaging. Still in beta — may have edge cases.
MESHTASTIC_CONNECTION_TYPE=MESHCORE, configure MESHCORE_TRANSPORT (serial/tcp/ble) and transport-specific settings.Requires a Bluetooth adapter on the server. Pairing can be finicky on headless Pi installs. Scan with meshtastic --ble-scan. Less stable than Serial or TCP.
MESHTASTIC_CONNECTION_TYPE=BLE and MESHTASTIC_BLE_MAC.The browser holds the USB connection, not the server. Only Chrome and Edge (89+) support the Web Serial API. Firefox and Safari do not. Requires HTTPS or localhost. Configured from the dashboard settings, not the setup wizard.
MeshDash supports up to 16 additional radio slots (beyond the primary node_0). Each slot gets its own isolated database, SSE stream, and configuration. This is designed for operators running base stations with multiple bands or roles.
Pick your hardware, grab a radio, and have MeshDash running in under 5 minutes.