Advanced Features

Meshtastic Web Interface and Remote Access

Many Meshtastic users don't realize a full web-based interface is available in addition to the mobile app. The web interface provides additional tools for configuration and administration that aren't available in the app.

The Meshtastic web app (app.meshtastic.org)

The official Meshtastic web application runs in any modern browser (Chrome or Edge recommended for WebSerial support) and connects to your device via USB serial or Bluetooth.

Connecting via USB serial

  1. Connect your Meshtastic device via USB cable
  2. Open app.meshtastic.org in Chrome or Edge
  3. Click "Connect" and select "Serial"
  4. Choose your device from the port list
  5. The device configuration loads automatically

Note: WebSerial requires Chrome or Edge. Firefox and Safari do not support WebSerial. If the device doesn't appear in the port list, install the appropriate driver (CH340 for Heltec, standard CDC for nRF52-based devices).

Connecting via Bluetooth

  1. Open app.meshtastic.org in a Chromium-based browser
  2. Click "Connect" and select "Bluetooth"
  3. Pair with your device - the device should be in BLE advertising mode (typically shown by LED blink pattern)

What the web app offers beyond the mobile app

FeatureMobile appWeb app
Node configurationYesYes (more detailed)
Channel managementYesYes
Message viewYesYes
Node mapYesYes
Configuration export/import (JSON)NoYes
Raw packet logLimitedFull packet log
Serial debug consoleNoYes
Firmware update (OTA)YesNo
Full module config accessPartialYes

Configuration backup and restore

The web app's configuration export feature is the easiest way to back up and restore a Meshtastic node's settings:

  1. Connect to device via web app
  2. Navigate to Config → Export Config
  3. Save the JSON file to your computer

To restore: connect the device (after a reflash or factory reset), navigate to Config → Import Config, and upload the saved JSON file. This restores all radio settings, channel configurations, and module settings in one step.

Remote node management via WiFi

ESP32-based Meshtastic nodes (Heltec V3/V4, T-Beam, etc.) can be configured to host a web server on their local WiFi network:

meshtastic --set network.wifi_ssid "YourNetworkSSID"
meshtastic --set network.wifi_psk "YourPassword"
meshtastic --set network.wifi_enabled true

Once connected to WiFi, the device's local IP address is shown in the app or via meshtastic --info. Navigate to that IP in a browser to access the device's built-in web interface for configuration and monitoring without needing USB or Bluetooth.

Use case: A deployed rooftop repeater with WiFi access can be configured and monitored remotely from any device on the same network, eliminating the need for physical access for routine configuration changes.

Serial debug console

The web app's serial console shows raw debug output from the device firmware. This is invaluable for diagnosing unusual behavior:

The serial console is accessed via Tools → Serial Console in the web app. Output can be copied and shared when reporting bugs.

Meshtastic Module Configuration Reference

Meshtastic's module configuration system enables advanced features beyond basic mesh communication. This page covers the most commonly needed modules and their key settings.

Range Test Module

Automates systematic coverage testing by sending timed packets that include position data.

# Enable and configure via CLI
meshtastic --set range_test.enabled true
meshtastic --set range_test.sender 60 # Send every 60 seconds
meshtastic --set range_test.save true # Save results to CSV on SD card (if equipped)

The receiving node logs packets with GPS coordinates and signal data. Use MeshMapper Android app to visualize results as a coverage heatmap.

Telemetry Module

Controls how often nodes broadcast battery, environment, and air quality data.

meshtastic --set telemetry.device_update_interval 1800 # Battery/voltage every 30 min
meshtastic --set telemetry.environment_update_interval 900 # Temperature/humidity every 15 min
meshtastic --set telemetry.air_quality_enabled true # Enable if BME680 attached

Telemetry data is visible in the app's node detail view. Excessive telemetry frequency contributes to network congestion in dense deployments - don't set intervals below 5 minutes for infrastructure nodes.

Position Module

Controls how and when GPS position is broadcast.

meshtastic --set position.position_broadcast_secs 1800 # Broadcast every 30 min
meshtastic --set position.broadcast_smart_minimum_distance 100 # Smart broadcast if moved 100m
meshtastic --set position.gps_update_interval 120 # Update GPS position every 2 min
meshtastic --set position.gps_mode ENABLED # DISABLED to save power on static nodes

For static repeaters: Disable GPS or set a fixed position instead of active GPS polling to save power:

meshtastic --set position.gps_mode DISABLED
meshtastic --setlat 47.6062 --setlon -122.3321 --setalt 150

External Notification Module

Triggers a buzzer, LED, or vibration motor on message receipt. Useful for personal portable nodes where you can't always watch the screen.

meshtastic --set external_notification.enabled true
meshtastic --set external_notification.alert_message true
meshtastic --set external_notification.alert_bell true # Triggers buzzer
meshtastic --set external_notification.output_ms 1000 # Buzzer on for 1 second

Store and Forward Module

Enables a node to store messages and deliver them to nodes that were offline when the message was sent. Requires a node with sufficient flash storage (typically router nodes).

meshtastic --set store_forward.enabled true
meshtastic --set store_forward.records 100 # Store last 100 messages
meshtastic --set store_forward.history_return_max 25 # Return up to 25 historical messages on request

Note: Store and Forward is resource-intensive. Enable only on nodes with enough flash (ESP32 nodes recommended; nRF52 devices have limited storage). This feature provides some of the functionality that MeshCore's room servers offer natively.

Serial Module

Bridges mesh messages to/from a connected serial device (microcontroller, computer, sensors). Enables custom IoT integrations without modifying firmware.

meshtastic --set serial.enabled true
meshtastic --set serial.baud 115200
meshtastic --set serial.timeout 0 # No timeout
meshtastic --set serial.mode TEXTMSG # Treat serial data as text messages

Use case: Connect an Arduino to a Meshtastic node via serial. The Arduino reads sensor data and sends it as a serial string, which the Meshtastic node broadcasts as a mesh message.

Canned Messages Module

Pre-loads a set of frequently used messages that can be selected and sent without typing. Especially useful on devices without keyboards (T-Echo, T1000-E).

meshtastic --set canned_message.enabled true
meshtastic --set canned_message.messages "OK, copy|Need assistance|ETA 15 minutes|At base|En route"

Messages are separated by pipe characters. On devices with buttons, scroll through the list and press to send. On the T-Echo, use the rotary encoder to navigate and click to send.

Module configuration best practices

Traceroute and Path Diagnostics

What Is Meshtastic Traceroute?

Traceroute is a diagnostic feature built into Meshtastic firmware that lets you discover the actual path a packet takes through the mesh to reach a destination node. Unlike a simple ping, traceroute collects the ID of each intermediate node that relayed the packet, along with signal quality data for each hop, giving you a complete picture of how your mesh is routing traffic.

How It Works

When you initiate a traceroute, your node sends a special packet addressed to the destination node ID. Each router node that relays the packet appends its own node ID and the SNR at which it received the packet to the route record. When the destination receives the packet, it sends the complete hop list back to you. The result is an ordered list: source → relay 1 → relay 2 → ... → destination.

Traceroute uses the same flood-routing mechanism as normal traffic, but the route-record payload grows with each hop. This means traceroute is more bandwidth-intensive than a regular message and should be used sparingly on busy networks.

Running Traceroute from the App

In the Meshtastic Android or iOS app:

  1. Open the Node List and tap the target node.
  2. Tap the three-dot menu or the node detail view.
  3. Select Traceroute.
  4. Wait for the result - it may take 10 - 30 seconds depending on hop count and channel utilization.

The result displays each hop's node ID and the SNR value observed at that hop.

Running Traceroute from the CLI

meshtastic --traceroute !a1b2c3d4

Replace !a1b2c3d4 with the destination's node ID (the exclamation-mark prefix is required). The CLI prints each hop as it is received:

Traceroute to !a1b2c3d4:
 !a1b2c3d4 --> !11223344 (SNR: 8.25) --> !55667788 (SNR: 4.50) --> !a1b2c3d4

Interpreting the Output

Using Traceroute to Diagnose Coverage Gaps

Run traceroute from multiple points in your network to map which nodes are serving as critical relays. If a single node appears in most traceroute paths, it is a single point of failure - consider adding a redundant node nearby. An unexpectedly long hop count (e.g. 5 hops when you expect 2) suggests a shorter path exists but is not being used, possibly due to SNR thresholds or a misconfigured router role.

Comparing Two Runs to Detect Path Changes

Run traceroute to the same destination before and after a node failure or configuration change. A change in the hop list confirms that traffic is now routing differently. This is especially useful after repositioning a relay node or changing antenna - it lets you verify the improvement objectively rather than relying on signal reports alone.

Neighbor Info and Signal Mapping

What Is the Neighbor Info Module?

The Neighbor Info module is a built-in Meshtastic feature that periodically broadcasts a summary of every node your device can hear directly, along with the received signal strength (RSSI) and signal-to-noise ratio (SNR) for each. This data lets you build an objective picture of your mesh's link quality without relying on anecdotal reports.

What Neighbor Info Reports

Each Neighbor Info packet contains:

Reports are sent at a configurable interval (default: 900 seconds / 15 minutes). The data is broadcast on the mesh and visible to any node that receives it.

Enabling Neighbor Info

  1. Open the Meshtastic app and connect to your node.
  2. Go to Radio Configuration → Modules → Neighbor Info.
  3. Toggle Enabled to on.
  4. Optionally adjust the Update Interval (in seconds). Shorter intervals give fresher data but increase channel utilization.
  5. Save and reboot the node.

Via CLI: meshtastic --set neighbor_info.enabled true --set neighbor_info.update_interval 900

Reading the Data

In the Meshtastic app, go to Node List → [select a node] → Neighbor Info to see that node's reported neighbors. In the Python CLI, listen for neighbor info packets:

meshtastic --listen
# Look for portnum: NEIGHBORINFO_APP packets in the JSON output

The JSON payload includes a neighbors array with node_id, snr, and last_rx_time fields for each neighbor.

Collect neighbor info data from all nodes over a period of time to build a directional link quality graph. Each directed edge in the graph represents one node hearing another, with the SNR as the edge weight. Nodes with low average SNR to all their neighbors are candidates for antenna upgrades or repositioning.

Tools like Meshview or a custom Python script consuming the MQTT JSON feed can automatically visualize this as a network graph, coloring links by quality (green > 5 dB SNR, yellow -5 to 5 dB, red < -5 dB).

Exporting to CSV for Analysis

Using a simple Python MQTT subscriber:

import paho.mqtt.client as mqtt, json, csv, time

rows = []
def on_message(client, userdata, msg):
 d = json.loads(msg.payload)
 if d.get("type") == "neighborinfo":
 for n in d["payload"].get("neighbors", []):
 rows.append({
 "reporter": hex(d["from"]),
 "neighbor": hex(n["node_id"]),
 "snr": n["snr"],
 "time": time.strftime("%Y-%m-%d %H:%M:%S")
 })

client = mqtt.Client()
client.on_message = on_message
client.connect("localhost", 1883)
client.subscribe("msh/US/2/json/neighborinfo/#")
client.loop_forever()

Write rows to a CSV and import into a spreadsheet to sort and filter weak links.

Identifying Weak Backbone Links

Sort the exported CSV by SNR ascending. Any link with SNR consistently below -5 dB is fragile and should be treated as unreliable for backbone routing. Consider: raising antenna height, switching to a high-gain directional antenna, or adding an intermediate relay node to split the hop into two shorter, stronger links.