Free · signed & notarized · runs on your desk, not the cloud

See your whole mesh. Chat, map, probe, capture — and reach a friend a metro away.

Perch is a command center for your Meshtastic radio — the dashboard the hobby deserves. Plug a $40 LoRa radio into your Mac (or Linux, or Windows), open Perch, and your city's mesh appears: every node, every message, every packet. Coop, the engine underneath, even walks you through flashing a new radio, manages its settings, and can carefully bridge a private channel to a friend across town.

macOS: brew install --cask stevenssparks/tap/perch · no account, no telemetry, nothing touches the internet unless you say so.

See it

Real screenshots, real mesh.

The big one is a live Perch install watching the St. Louis mesh through a $40 radio + community MQTT. The rest are the same build you can click around in right now (demo chats are fictional — real mesh conversations stay on the mesh).

Perch live: 615 nodes, 75.8K packets captured, metro-wide map with hop distribution

Live install — 615 nodes and 75.8K captured packets across the metro, radio + MQTT combined

Map focus preset with hop distribution and activity

Map focus — positioned nodes, hop distribution, live activity

Mesh chat with tapback reactions

Chat — tapbacks, replies, delivery tracking

Node drawer with traceroute showing per-hop SNR

Node drawer — traceroute with per-hop SNR, both directions

Diagnostics page: packet types, hop distribution, hardware mix, activity and signal

Diagnostics — packet types, hop distribution, hardware mix, signal

Searchable node roster with direct neighbors

Nodes — searchable roster, direct neighbors, signal

Live packet feed: telemetry, nodeinfo, positions streaming in

Live feed — every packet as it arrives, with SNR

What it is

Two programs, one job.

Perch is what you look at. Coop is what does the work. They install together and find each other automatically — you never configure the pair.

Perch the dashboard

  • Chat across channels and DMs — tapbacks, replies, delivery tracking, unread badges
  • Live map: every node with a position, your own station marker, shared waypoints, favorite trails
  • Node intel: hardware, battery, environment sensors, SNR trends, neighbors
  • Mesh services: traceroute with per-hop SNR, position requests
  • Diagnostics & traffic: packet types, hop distribution, in/out/MQTT counts, nodes-heard-per-day
  • Widgets you rearrange, tab presets, a notification center — and multi-engine to watch several sites at once

Coop the engine

  • Owns the radio over USB serial, Wi-Fi/TCP, or Bluetooth
  • Decodes every packet; decrypts any channel you hold keys for
  • Captures history to SQLite in your Documents folder — yours to keep, query, back up
  • Sets up & manages the radio: flash flow, region, channels, MQTT — right from the app
  • Bridges a private channel to a friend far away (MQTT Client Proxy), off by default and rate-limited
  • REST + SSE API; single Go binary that runs headless on a Pi or server
Set it up from the app

The app does the fiddly parts.

Perch ships a built-in control panel (the same one you see on the Welcome screen). It flashes a fresh board, names it, sets your region, joins your network, and exposes a clean API — no terminal required.

Set up a radio: plug in, flash Meshtastic, name it, join your network

Set up a radio, guided

New to Meshtastic? Coop opens the official web flasher, tells you exactly which port and options to pick, then names the radio and sets your region so it starts transmitting.

  • Plug in → flash → name & region → join, four clear steps
  • Fixes the classic "TX off until a region is set" gotcha for you
  • Reads GPS/fix status so you know when the radio is truly ready
Coop API reference built into the app: read and write REST endpoints with copy buttons

Manage settings & build on the API

Coop is the only piece that can transmit, so all radio controls live there — region, channels, MQTT, reboot. It also serves a readable API reference at /api you can toggle on or off.

  • Change radio & capture settings without leaving the dashboard
  • REST + SSE — point a bot, a status display, or an automation at it
  • Copy-ready curl examples; writes gated by a control key
Long range

Reach a friend a metro — or a state — away.

LoRa is line-of-sight-ish; your radio hears the neighborhood. MQTT is how Meshtastic reaches further, and Perch treats it as a good-citizen tool: observe by default, publish only when you choose, and never flood a public channel.

Community broker picker: MeshSTL, Show Me Mesh, Bay Area Mesh, PugetMesh, Chicagoland, Public Meshtastic

Observe your community read-only

Pick a community broker (or the public default) and Coop listens — it decodes far-away traffic and folds it into your map and history. It never publishes in observe mode, so you see the whole region without adding a single packet.

  • One-click community presets, plus any broker host you like
  • Duplicate packets from multiple gateways are de-duped by packet ID
  • Links straight to the Meshtastic public-server policy so you play fair
Bridge to a friend: create a private encrypted channel, per-channel uplink, share link and QR

Bridge a private channel to a friend off by default

Want to actually chat with someone across town? Create an encrypted private channel, share the link/QR with your friend, and each of you flips uplink on. Your wi-fi-less radio reaches the broker through Coop (MQTT Client Proxy) — messages hop the internet, stay end-to-end encrypted, and arrive on each other's radios.

  • Private channels only — Coop refuses to uplink public/default-key channels that would flood the mesh
  • Rate-limited and off until you enable it; the radio firmware still decides what actually goes out
  • Share by link, QR, email or text; the key stays between you and your friend
Why the guardrails? A gateway that re-broadcasts everything makes the airwaves worse for everyone nearby. Perch is built so contributing is easy and flooding is hard — see the MQTT & long-range guide for exactly what crosses the bridge and what doesn't.
Yours

On your desk, not in a cloud.

Your data stays yours

  • Capture lands in a SQLite file in your Documents — query it, back it up, keep it forever
  • No accounts, no telemetry, no phone-home; the demo is the only thing we host
  • Coop and Perch bind to localhost until you deliberately open them to your LAN

Runs where you want

  • Desktop app on macOS (signed & notarized); signed Linux & Windows builds too
  • Coop runs headless on a Raspberry Pi or home server, capturing 24/7
  • Point Perch at a remote Coop over your LAN or Tailscale — one window, many sites
Get started

From zero to seeing your mesh in about 10 minutes.

Get a radio

Any Meshtastic-supported LoRa board works. The sweet spot: the Seeed XIAO ESP32-S3 + Wio-SX1262 kit (~$40, case included) or a LILYGO T-Deck. Perch can flash it for you if it didn't ship with firmware.

Install Perch

macOS: brew install --cask stevenssparks/tap/perch, or grab Perch.app from the releases page — Coop ships inside, signed and notarized. Linux/Windows: signed binaries on the same page. No accounts, no telemetry.

Plug in and open

Connect the radio over USB and open Perch. Coop finds the serial port, handshakes, and the dashboard fills in. Wi-Fi radios work too — Coop can dial the firmware's TCP API.

Join your local mesh

Import your community's channel QR/URL right from Perch's channel manager, set your region, and you're part of the neighborhood. (St. Louis? Say hi to MeshSTL.)

Go the distance (optional)

Observe a community broker to see the whole region, or make a private channel and bridge it to a friend far away. Both live under Coop's MQTT tab.

Documentation

Every detail, written down.

The complete manual — from "which radio do I buy" to the raw API. Also worth a look: the troubleshooting guide and FAQ.