abusing.technology

Sep 10, 2026

Bridging APRS and Meshtastic without losing the replies

Relaying APRS into a Meshtastic mesh is a weekend project. You subscribe to an APRS-IS feed, filter it down to something local, and push text frames onto the mesh. Packets arrive. Everyone is pleased.

Then someone replies, and you discover you built a one-way pipe.

The actual problem

APRS addresses operators by callsign. Meshtastic addresses devices by node ID. An operator may carry three nodes; a node may be shared. There is no natural mapping between the two, which means a reply has nowhere specific to go.

The bridge handles this with an explicit registration step. An operator associates their callsign with one or more node IDs, and the bridge keeps that association. A reply addressed to the callsign then fans out to every device that operator registered, rather than guessing at the node that happened to transmit last.

Why fan-out beats last-seen

Last-seen routing is tempting because it needs no registration. It also fails in exactly the situation you built the bridge for: the operator moved from the handheld to the base station between the message and the reply, and the reply goes to a radio sitting in a bag.

Fanning out costs airtime, which on LoRa is the resource that actually matters. The trade is deliberate: duplicate delivery on a slow link is recoverable, whereas a reply delivered to the wrong radio is silently lost.

Source is on GitHub.