Meshtastic toolkit
Connect to a Meshtastic node over Bluetooth or USB to see its nodes, telemetry, channels and config and send messages; decode and make channel URLs and QR codes; plan LoRa links for every modem preset with a terrain profile; simulate flooding through a mesh; and map nodes from MQTT.
Added · updated 28 October 2026
Works with
- LoRa airtime and duty cycle Radio and RFits Meshtastic mode opens the LoRa planner here with your preset and payload size
- Meshtastic packet decoder Radio and RFhands the channel that decrypted a packet here as a channel URL
How to use it
Six tabs. The terrain profile, simulator and map have a Full screen button (or press F); ◫ Panels hides the settings in full screen.
How to use it
-
Device — Connect Bluetooth (Chrome or Edge on desktop or Android) or Connect USB serial (desktop Chrome or Edge). The tool asks the node for its configuration (
want_config_id) and decodes the FromRadio protobufs it streams back: this node, the node database (SNR, hops, battery, last heard, position), channels (private keys masked unless you tick Show private keys), and the device and LoRa configuration (read-only). Send a text message on any channel to everyone or one node. Over Bluetooth it uses the Meshtastic service and its ToRadio, FromRadio and FromNum characteristics; over serial the 0x94 0xC3 framing (two start bytes, a 16-bit length, the protobuf), with everything outside frames shown as the device’s debug log. Demo data shows the tab without a radio. The message log stays in this browser (export or import it as JSON). -
Channels & QR — paste a channel URL (
https://meshtastic.org/e/#…, also?add=truelinks) or read a QR code from a photo: it decodes the ChannelSet — every channel’s name, key type, PSK, channel hash, position precision and MQTT flags, the LoRa settings and the frequency slot. The key type tells you how private a channel is:AQ==and the other one-byte "simple" keys are public, only a random 16- or 32-byte key is private. The maker builds a URL and QR code from your channels (random AES-256 keys made in the browser). -
LoRa planner — for each modem preset (SHORT_TURBO to VERY_LONG_SLOW): spreading factor, bandwidth, coding rate, bit rate, time on air for your payload (Semtech’s formula, 16-symbol preamble, explicit header, CRC, plus Meshtastic’s 16-byte header), the receiver sensitivity, a link budget (power, antenna gains, cable losses) and a range estimate with a log-distance path loss and fade margin. It also works out the frequency slot from the primary channel’s name (the firmware’s djb2 hash) and the region’s duty cycle.
-
Terrain — two points (type them or click the map), mast heights and a preset: the ground profile from Open-Meteo’s elevation API (Copernicus DEM, 100 points) drawn on a curved Earth (k = 4/3), with the line of sight, the first Fresnel zone and its 60% line, the worst clearance and a link budget.
-
Mesh simulator — nodes on a canvas, links coloured by SNR. Tap a node to send a packet from it and watch it flood: every node rebroadcasts once while the hop limit lasts, nodes with weaker SNR wait less (so farther nodes carry it on), a node that hears someone else rebroadcast first cancels its own, and overlapping packets collide. Delivery probability runs it 50 times with random fading. Drag nodes, tap empty space to add one, double-tap the source to make it a router. Results are repeatable for a seed.
-
Live map — nodes with positions from the connected device and from MQTT. The public broker
mqtt.meshtastic.orgonly accepts MQTT over TCP 1883 (no WebSocket listener, checked October 2026), so a web page reaches it through the gitwebsite app’s TCP relay (gw companion tcp add mqtt.meshtastic.org:1883); or use your own broker that speaks MQTT over WebSockets (Mosquitto with awebsocketslistener — see the MQTT tool). Encrypted ServiceEnvelopes are decrypted in the browser with the default key and any channel keys you add (AES-CTR; keys aren’t stored).
Units (metric or imperial) are remembered. Channel keys, the message log, the node list and passwords stay in this browser and never go into a share link.
Checks
-
Protobuf: frames built with the official
@meshtastic/protobufs2.8 package (MyNodeInfo, NodeInfo, text, position and telemetry packets, Channel, LoRa config) decode field for field and re-encode byte for byte; the ToRadio text message andwant_config_idthe tool sends are byte-identical to the official encoder’s. The serial deframer recovers the frames from a stream mixed with log text, split into arbitrary chunks. -
Channels: the default channel URL
https://meshtastic.org/e/#CgMSAQESBggBQANIAQdecodes and re-encodes exactly;AQ==expands to the published default key1PG7OiApB1nwvP+rz05pAQ==; LongFast’s channel hash is 8 and its US frequency is slot 20, 906.875 MHz. -
An MQTT ServiceEnvelope encrypted with Node’s AES-CTR decrypts to the original message.
-
Airtime comes from the RF tool's LoRa formula, which is tested against Semtech’s calculator (SF7/125 kHz/20 bytes = 56.576 ms); LongFast’s 8.192 ms symbols and 165.9 ms preamble follow.
-
The simulator is deterministic for a seed; on a chain where nodes hear only their neighbours, hop limit 3 reaches exactly three hops.
Limits
-
Read-only configuration: the tool doesn’t write settings (admin messages) to the node.
-
Web Bluetooth isn’t in Firefox or Safari (on iOS, the Bluefy browser has it); Web Serial is desktop Chrome and Edge only.
-
Range and terrain figures are estimates: no diffraction or clutter model, a rough obstruction allowance, 90 m elevation data. Real links depend on antennas, height and what’s in the way.
-
The simulator is a model of the firmware’s flooding (contention window by SNR, duplicate cancellation, capture at 6 dB), not the firmware itself; it ignores next-hop routing for direct messages, retransmissions and acknowledgements.
-
Region limits and presets follow the firmware at the time of writing; check your own regulations.
Linking to an example
Add the tab after #: device, channels, planner, terrain, sim or map.
| Parameter | Meaning | Example |
|---|---|---|
|
Planner: region code and modem preset |
|
|
Planner: transmit power (dBm), payload (bytes), path-loss exponent |
|
|
Terrain: the two ends and their mast heights (m) |
|
|
Simulator: |
|
|
|
|
|
One of the presets below |
|
example= |
Shows |
|---|---|
LongFast in the US at 22 dBm with 2 dBi antennas |
|
MediumFast in Europe (EU_868) |
|
A 21 km link across the San Francisco Bay |
|
8 nodes in a line with hop limit 3 |
|
20 nodes scattered over a town |
Related: Meshtastic packet decoder (one packet field by field, with decryption), LoRa airtime and duty cycle, RF and wireless (LoRa airtime, link budget, Fresnel zones), MQTT client, Bluetooth explorer, serial terminal, antennas, QR codes, flight tracker (another live map), ocean lab.
Feedback is a gift. Something to improve, a feature to add, or a bug? Tell me.
Runs entirely in your browser; nothing you type leaves this page.