World Mesh: Watching the Global Network

Meshtastic has an MQTT bridge. Nodes can forward their packets to an MQTT broker, which means the global mesh is partially visible from the internet. Today we built an observer that watches it.

The mesh-observer

A Node.js/TypeScript service that subscribes to the public Meshtastic MQTT broker, parses the protobuf packets, and stores node data in a database. It runs at map.socialmesh.app and exposes a REST API.

Endpoints

  • GET /api/nodes — all recently-active nodes with position, telemetry, metadata
  • GET /api/node/:id — single node detail
  • GET /api/stats — network statistics (node count, active regions, packet rates)
  • GET /map — web-based world map visualization

The data flows like this:

MQTT broker → mesh-observer → SQLite → REST API → app / web

Per-node rate limiting prevents any single node from flooding the database. Stale nodes are pruned after a configurable TTL.

Why build this?

The app shows nodes you can directly hear on the local mesh. But the mesh is bigger than your radio range. The world map shows the global picture — thousands of nodes across continents, all reporting their positions and telemetry through the MQTT bridge.

It is also useful for debugging. If your node is not appearing on the world map, either your MQTT uplink is misconfigured or your packets are not reaching the broker. The observer provides visibility that the radio alone cannot.

The landing page

Also shipped new landing page today at socialmesh.app. Dark theme, feature sections, screenshots. Matches the app’s sci-fi aesthetic. Firebase Hosting, deployed in seconds.

The mesh-observer and landing page are the first two things that exist outside the Flutter app. The project is growing infrastructure.