Memphis Meshview Project: Visualizing Meshtastic with Maps and Chat Logs — hero banner

August 23, 2025·2 min read

Introduction

Meshtastic makes off-grid communication possible by linking LoRa radios into a self-healing mesh. But once you connect nodes to MQTT, the game changes — your local mesh can bridge into a global one, with all messages and positions flowing through a central broker.

This inspired the Memphis Meshview project, where I set up a dashboard to visualize Meshtastic activity around Memphis. The goal was twofold:

  1. Map the nodes reporting in via MQTT.
  2. Persist chat logs for historical reference.

Together, this creates a living snapshot of the mesh — a community map where you can see who’s online, where they are, and what messages are flowing.


MQTT as the Backbone

Meshtastic nodes normally just talk directly over LoRa. But when a node has internet access, it can publish messages to an MQTT broker (and subscribe back).

In our case:

  • The broker connects to the Memphis namespace (msh/US/memphisme.sh).
  • Every node that has MQTT enabled forwards its messages there.
  • Other MQTT-connected nodes receive the same traffic, even if they’re physically too far apart to hear each other over radio.

This creates a virtual backbone that ties together distant or isolated clusters.


Building the Live Map

The map piece uses:

  • Node coordinates: Many Meshtastic devices can report GPS location.
  • Frontend visualization: A Leaflet.js-based map hosted at meshview.chrishouse.io/map.
  • Backend logic: MQTT subscriptions feed updates into a datastore, which then updates the map markers.

Each node shows up as a point, with metadata like:

  • Callsign or device name
  • Last seen time
  • Altitude (when reported)
  • Whether it came in via radio or via MQTT

This lets the community quickly see coverage holes and hotspots.


Persistent Chat Logs

Beyond mapping, I wanted conversation history. Normally, Meshtastic messages are ephemeral — if you miss them live, they’re gone.

To fix that:

  • I subscribed to the MQTT chat topics.
  • Messages were written into a database with timestamps, user IDs, and message content.
  • A simple web front-end at meshview.chrishouse.io/chat lets you scroll back through the conversation log.

This made the mesh feel more like a living community, not just random bursts of radio packets.


Lessons Learned

  1. MQTT is a Force Multiplier
    Even if your local radio range is small, MQTT bridges make the mesh global. One solar node in Memphis can trade messages with a handheld in Colorado.

  2. Data Normalization Matters
    Different nodes send different fields. Some send GPS reliably, others don’t. Building a clean map means handling messy input gracefully.

  3. Persistence Changes Behavior
    Once people knew there was a persistent chat log, conversations became more thoughtful — it shifted from ephemeral pings to community discussions.

  4. Visualization Inspires Growth
    The map encouraged others to light up their nodes, just to “see themselves” show up in Memphis Meshview. A visible network drives participation.


Closing Thoughts

Meshtastic’s beauty lies in its simplicity: radios talking to each other with no infrastructure. But once you add MQTT, you unlock a shared digital layer that lets local meshes become part of a bigger story.

The Memphis Meshview project is one example — a mix of mapping, chat logging, and visualization that makes the invisible mesh visible. And in a world where off-grid communication matters more every year, seeing the network grow in real time is as inspiring as it is useful.


Enjoyed this post? Give it a clap!

Comments