Open source routing across radios that cannot reach each other
One message.
Every way out.
A mesh keeps a village talking to itself but has no route out of the valley. A satellite modem reaches anywhere and costs real money per message. MeshSat is the layer in between: it takes a message off the mesh and sends it by whatever bearer is still alive, spending satellite bytes only when nothing free is left.
Pre-release prototype. Never deployed to a real user, never used in an emergency.
The satellite leg failed and the message still arrived. That is the whole product. Routes, failover order and transform chains are configured per interface.
curl -fsSL https://get.meshsat.net | sudo bashEight bearers, nine wired interfaces
Iridium runs on two modems, the 9603N for SBD and the 9704 for IMT. Every bearer is a first-class interface with its own MTU, cost model and transform pipeline. TAK and webhooks are integrations rather than bearers. Status says what we have actually run, not what we hope.
| Category | Transport | Status |
|---|---|---|
| Mesh | Meshtastic LoRa | Field tested |
| Satellite | Iridium SBD 9603N | Field tested |
| Iridium IMT 9704 | Verified over satellite | |
| Cellular | SMS and data (A7670E) | Field tested |
| Wireless | ZigBee 3.0 (CC2652P) | Little field exposure |
| IP / Network | MQTT | Field tested |
| Webhooks | Field tested | |
| APRS (bundled Direwolf, KISS) | Field tested | |
| TAK / Cursor-on-Target | Field tested | |
| Routing | Reticulum TCP (HDLC framed) | Interoperates with Python RNS |
Multi-bearer bonding over a paid satellite link is not validated yet, and the jamming detector has only ever seen ambient noise. The repository sets out the full list of what has and has not been proven.
Satellite bytes are expensive. That is the whole design.
An Iridium line costs tens of euros a month plus credits per message, billed in 340 byte blocks. Give one to every person in a team and the bill scales with headcount. That price is the reason the routing layer exists at all.
One paid link, shared
A team carries cheap mesh radios. One gateway holds the expensive satellite line. Everyone reaches the outside through it, so cost stops scaling with the number of people.
Free bearers first
Every interface declares a cost. The router prefers the free ones, mesh, packet radio, Bluetooth and WiFi, and only reaches for satellite or SMS when nothing free is up.
Fewer bytes when it does
Anything leaving on a metered bearer is compressed first. SMAZ2 runs in under a millisecond on short text, which matters when you are billed per block rather than per byte.
Sent when the sky is right
Pass prediction from SGP4 orbital elements holds traffic for visibility windows instead of burning battery retrying against a satellite that is below the horizon.
MeshSat is free software under the GPLv3. Development is supported by SIDN fonds, and a six month field programme starts in November 2026.
What it runs on
A Raspberry Pi in a waterproof case with radios on USB and GPIO. Devices are identified at startup by USB ID and protocol probe, so plugging one in is the whole configuration step.
| Part | Role |
|---|---|
| Raspberry Pi 5 (8 GB) | Host. ARM64, or any x86_64 Linux with Docker and USB serial. |
| Heltec LoRa V4 or XIAO ESP32-S3 | Meshtastic mesh radio at 868 or 915 MHz. |
| RockBLOCK 9603 or 9704 | Iridium satellite. SBD at 340 bytes, or IMT at 100 KB. |
| LILYGO T-Call A7670E | 4G and 2G cellular, for SMS and data. |
| CC2652P dongle | ZigBee coordinator. |
| UPS and battery | Because the interesting cases are the ones where mains power has gone too. |

Signal, traffic and channel health, served by the device itself

Pass prediction, so the queue waits for a satellite that is actually up

Live mesh topology

Forwarding rules and per-gateway status
The dashboard is embedded in the binary and served from the device. No cloud dependency, no account.
What it is not
The fastest way to waste an afternoon is to expect the wrong thing from it.
Not a Starlink replacement
MeshSat moves text, positions and telemetry. If you need video calls or the web, use Starlink. This is for the cases a dish cannot serve: battery powered, pocket sized, no mains.
Not voice or video
Satellite and mesh links are high latency and low throughput. This is store and forward messaging. Think SMS, not a phone call.
Not a LoRaWAN network server
The mesh side speaks Meshtastic, which is its own protocol over LoRa. For LoRaWAN, run ChirpStack and bridge it in over MQTT.
Not an emergency service
A research prototype, not a replacement for 112, 911 or any national emergency number. Nothing here is certified and nothing here has been used in a real emergency.
The rest of the system
The Bridge is one device and works entirely on its own. Two other pieces exist for when one device is not the whole picture.
MeshSat Hub
Private beta MeshSat Hub is not launched yet. It runs as a private beta on our own infrastructure. Access for demos and beta testing is arranged on request.
Fleet management across many bridges: OAuth2 and OIDC accounts, API keys with roles, multi-tenant isolation, SOS escalation chains, per-device rate limits and an Ed25519 hash-chain audit log. Deployable standalone, clustered, or on Kubernetes.
Request beta accessMeshSat Android
A phone as a standalone gateway, with no Pi and no cables. It talks to a Meshtastic radio over Bluetooth LE, an Iridium modem over Bluetooth SPP, and uses the phone's own SMS, all at the same time. Same encryption and message formats as the Bridge.
Android sourceTry it
One command on a Linux machine with a radio plugged into it. A single device is enough to start, and anything missing is logged as a warning rather than an error.
curl -fsSL https://get.meshsat.net | sudo bashBug reports from people running hardware we have not tried are the most useful thing you can send. The supported-device list is short because it only names what we have physically run.