A decentralized mesh network for amateur radio.
No sessions. No hubs. No closed-source software.
Just datagrams and beacons — short, efficient bursts.
Many existing amateur radio data systems behave like “phone calls.” MOP is built for short bursts, broadcast reach, and mesh forwarding.
Connect → Handshake → ARQ Setup → Send data → Wait for ACK → Disconnect. That’s multiple seconds of overhead for a short message. Not great for beacons or one-to-many traffic. One session can dominate the channel.
Key PTT → Transmit a compact frame → Done. Short airtime, natural broadcast reach, and multi-hop relay without “call setup.” Open source, cross-platform, and built around radio-first constraints.
When a single service is the “center,” the network inherits that dependency. If a hub is unreachable, everything feels fragile. It also limits how freely stations can roam between regions.
No directory. No single point of failure. Gateways can peer directly. Route knowledge is learned from beacons and gossip. If one node goes down, the mesh can route around it. Resilience comes from redundancy.
Watch beacons propagate, routes form, and messages travel through the mesh. Each node only acts on what it has heard — there is no central knowledge.
Five clean layers. The modem doesn’t know about routing. The mesh doesn’t know about modulation. Each layer is replaceable.
Each message includes an open, non-obscuring integrity tag that lets receivers verify origin and detect tampering or corruption. Message contents remain readable to any receiving station in compliance with FCC Part 97.
Gateways beacon every 10 min, relays every 15 min. Route knowledge ripples outward through re-broadcasts. No central directory — your routing table builds itself from what you hear.
Listen before talk. If channel is busy, defer. Random backoff avoids collisions between stations that were both waiting. Directed frames get retried with exponential backoff.
First working version of a custom OFDM modem — early tests are very promising. Built in Python with numpy + sounddevice. Beacons use 1200 baud AFSK for APRS visibility.
3 kHz audio bandwidth. PTT via CAT command (Yaesu), VOX, or GPIO. No special hardware — any radio with a soundcard interface.
FCC note: MOP is designed for amateur radio use where transmissions are intentionally readable by any receiving station. Integrity/origin checks are used to detect corruption or spoofing, not to obscure message meaning.
Every MOP packet on air or wire follows this binary format. Compact, CRC-protected, and designed for short bursts.
W6QQQ in Los Angeles sends a message to K1ZZZ in New York. No hub. No directory. Just mesh routing.
Built from beacons heard on the local frequency. Knows about KO6IKR-GW (gateway, 1 hop, has internet). Doesn’t know K1ZZZ directly.
A compact message frame is transmitted as a single datagram — ~0.6 seconds of airtime. The frame includes an open integrity/origin tag so receivers can validate what they received. No handshake. No session.
Relay node hears the packet. Not addressed to N6XXX. TTL > 0, no loop detected. Adds itself to PATH, decrements TTL, re-transmits toward the gateway.
Gateway receives the message. K1ZZZ is not in its local station list. Checks peer gossip table: K1ZZZ was reported by W1ABC-GW in New York.
Gateway forwards the raw MOP frame to W1ABC-GW over a direct internet link.
Origin validation tags reduce spoofing and accidental duplicates.
No central hub involved — direct peer-to-peer.
NY gateway receives the frame. K1ZZZ is a known local station but not currently on air. Stores in spool. Waits.
K1ZZZ turns on their radio. Hears W1ABC-GW beacon. Sends MAIL-CHECK frame. Gateway responds with the queued message.
K1ZZZ receives and reads the message, then broadcasts ACK. ACK propagates back through the mesh to W6QQQ. ✅
| Aspect | VARA FM + Winlink | 1200 Baud Packet | MOP Mesh |
|---|---|---|---|
| 200B Message TX Time | Seconds of session overhead | ~2.0 sec | ~0.6 sec |
| Beacon / Broadcast | Limited | Native (UI frames) | Native (short bursts) |
| Concurrent Listeners | Often limited by sessions | Unlimited | Unlimited |
| Channel Efficiency | Poor for short traffic | Good | Excellent |
| Routing | Often hub-dependent | Manual / digipeaters | Automatic (beacons) |
| Data Readability | Readable | Readable | Readable |
| Integrity / Anti-Spoofing | Varies | Varies | Open integrity + origin ID |
| Relay / Mesh | Session constraints | Limited (digi) | Store-and-forward mesh |
| Emergency Mode | Conventional procedures | APRS emergency | All-relay flood, max TTL |
| Open Source | Varies | Yes (Direwolf) | Yes (everything) |
| Cross-Platform | Varies | Native everywhere | Native everywhere |
| Central Dependency | Often yes | None | None required |
| Raw Throughput | Varies | ~1200 bps | ~4800 bps |
When an emergency frame is transmitted, every station in the mesh relays it — regardless of role (station, relay, or gateway). Maximum TTL for maximum propagation. Emergency traffic is sacred on amateur radio. The frame floods through the mesh like a shockwave. Every MOP station within reach will display the alert and re-broadcast it.
MOP gateway beacons are transmitted as standard AX.25 UI frames at 1200 baud AFSK. Any APRS station, Direwolf instance, or aprs.fi can see them.
Actual message traffic uses the custom OFDM modem at 4800 bps. The beacon compatibility layer makes gateways visible to existing APRS infrastructure without any special software.
The stack is implemented in Python with a clean separation of layers. Core protocol uses only stdlib; modem features can use optional packages.
Binary frame format with CRC32. CSMA/CA MAC layer. MeshNode routing brain with beacons, relay, dedup, spool, emergency flood. AX.25 APRS-visible beacons. TCP ether simulator with collision model. Custom OFDM modem — first working version, early tests very promising, needs more testing. 6-station mesh test passes.
Extended OFDM modem testing. Range-limited ether model (force multi-hop). Gateway peering. Integration with MOP client app. On-air testing with FT-991A and FT5D.