under evaluation
LoRa Mesh
We set out with an idea: local-first peer-to-peer PWAs that keep running over a LoRa® mesh when the internet or the power grid fails — and in places that have neither. The measurements decided otherwise. The radio carries enough for handshakes and single signed events, not for the data of everyday applications, and not as an outage fallback. What survives the arithmetic is narrow, but real.
Findings
- Throughput: replicating even a todo list of three short entries is noticeably sluggish — and the radio is only half the explanation. The test setup used OrbitDB with network sync switched off: the courier carries the content-addressed blocks itself and side-loads them straight into the local blockstore, past the IPFS network entirely. First contact is the heavy part — manifest, access controller, identity and entries cross as a block bootstrap of a few kilobytes, roughly halved by gzip — and even afterwards, signatures and identity references keep every entry hundreds of bytes. On top sits the duty-cycle limit (EU 868: ~6 minutes of airtime per hour). The courier itself works — built and tested in funkpost, and on 4 September 2026 it first ran over a real LoRa mesh between two independent nodes, a desktop browser either side — but standard office applications are ruled out. The setup can be tried live: the demo replicates a todo list across the mesh — or, with ?mesh=bc, across two browser tabs, no radio required.
- As a fallback for internet or power outages the current adaptation is unsuitable: it ships whole OrbitDB blocks, which the data rate does not carry. A follow-up release is already being considered that works the way mesh-calendar does — a few bytes of text per event instead of block transfers. What no release removes: every participant would still need radio hardware.
- Platform: Web Bluetooth runs only in Chromium on Android and desktop — no iOS browser. An iOS device is not locked out, though: over Wi-Fi — a mobile hotspot is enough — it can reach a node through Meshtastic’s HTTP/TCP API; a native app would also work and sits outside this evaluation. Device variance is real: a GrapheneOS phone talks to the node noticeably more stably than Android Chrome.
- Adoption: hardly anyone carries a radio node today. That is less a verdict than the actual design problem: commercial applications need ideas that do two things at once — spread the nodes and offer a benefit that justifies carrying one. A use case with a clear USP distributes its own hardware.
What remains
Three planes share the one radio and nothing else. The first — OrbitDB replication — has run, and what it cost is in the findings above. These two are what remains:
A courier for small, rare, valuable payloads. The signalling handshake from design issue #161 fits in two frames; a single signed event — a booking, a handover confirmation — in a few. Where minutes of latency are acceptable and infrastructure is absent, the model still holds — and metadata that is never generated cannot leak.
Technical foundations
- funkpost — the byte courier itself: framing, ARQ and duty-cycle pacing over Meshtastic® radios — two data planes built (OrbitDB and Yjs), signalling plane designed; live demos.
- webrtc-qr — the library: two devices connect by scanning a code — no signalling server.
- qr01 — the tutorial chapter for this: a todo list moves from phone to phone by scanning a code — over a Wi-Fi hotspot, with no internet involved.
- the demonstrators — both live in the browser: a todo list replicating across the mesh (OrbitDB), and an appointment book for a shop around the corner (Yjs). With ?mesh=bc two browser tabs stand in for the radios; a Meshtastic® node over Web Bluetooth makes it real.
Test channel
Two radios only hear each other if they carry the same key — and if they do not, nothing arrives and nothing says so, which looks exactly like an empty room. This is ours, published on purpose: a meeting place for anyone wanting to try the demonstrators with someone else. It is not a secret, and nothing in them was protected by the channel key in any case.
le-space.de · EU_868 · LONG_FAST · ⌗3dd3
Both demonstrators print that fingerprint beside the channel selector. It is worth comparing across devices: a channel can carry a familiar name and a completely different key, and the name will not tell you.
Importing replaces the entire channel set — every other channel on the device is erased, including keys that exist nowhere else. Export what is on there first.
- Role CLIENT_MUTE — a default node rebroadcasts everything it hears, and on a busy mesh that is most of its airtime, spent on strangers’ packets. Muted, it carries only its own.
- Preset SHORT_TURBO for heavy testing — 21,880 bit/s against LONG_FAST’s 1,070, so the same frame costs a twentieth of the air, and range is irrelevant across a desk. It is deliberately not baked into the channel above: the preset is part of the air configuration, so everyone testing together has to switch at once or they stop hearing each other.
The band is shared and legally rationed — EU 868 gives each transmitter about six minutes of airtime per hour, and a community mesh may have a hundred neighbours in earshot. Bench etiquette has the rest, and channels explains how to make your own.
Exchange
We share measurements and the test setup. Anyone working in the same niche — Meshtastic practitioners, researchers, local-first developers — is welcome to get in touch.
Get in touch — contact@le-space.de Telegram · @lfp2p X · @le_space_beta
On the mesh, we can be reached at le-space.de e45c, YSGs0MrcH9QOcAlIxvYkJWaV64AvKgx/tXS27SiCzXM=
The public key is what identifies us; node names are assigned by whoever operates the node. It radios in the EU-868 region and is mobile — reachable wherever it currently has a mesh in range.
LoRa® is a trademark of Semtech Corporation. Meshtastic® is a registered trademark of Meshtastic LLC. Meshtastic software components are released under various licenses, see GitHub for details. No warranty is provided - use at your own risk. This site is not affiliated with or endorsed by Semtech or the Meshtastic project.