Skip to content

Interoperability and MeshCore

Lwb89dev edited this page Oct 19, 2026 · 1 revision

Interoperability and MeshCore

Roadstr can exchange road reports with other apps that use the open jooray/roadstr format, and — experimentally — over a MeshCore LoRa radio, with or without internet. Everything on this page is optional and off or harmless by default.

Honest status. Reading the jooray/roadstr format was checked read-only against four public relays (138 real events, all signatures valid). Publishing the compatible copy has only been tested against a simulated relay. MeshCore has never been tested on real hardware: the protocol client and bridge are tested against a simulated radio written from MeshCore's documentation, and the Android Bluetooth layer has never run on a device.

The jooray/roadstr format

Roadstr and jooray/roadstr are independent projects that both use Nostr kinds 1315 and 1316 for road reports, with different layouts. Roadstr reads and writes the other's layout; it does not depend on its code, developers or servers.

Settings → Interoperability (experimental):

Setting What it does
Show compatible reports (on) Shows reports from other apps using the open format. Their lifetime follows that format, not Roadstr's own, and the details sheet says where a report came from.
Also publish in the compatible format (off) Each report is sent twice: Roadstr's own, and a copy other apps can read. Your signer may ask to approve the second event. Older Roadstr versions will show both markers, since they cannot tell the two are one report.
Sign the compatible copy with a one-time key (off) The copy is not linked to your account and needs no second approval — but other Roadstr users will then see two markers rather than one, because nobody can tell the copy is yours.

Compact binary frames (110 bytes for a report, 134 for a confirmation) can carry these events over a radio and are rebuilt bit for bit: the exact signed event, same id, same key, same signature — or the app refuses to encode. The format is described in detail, with golden test vectors that an independent Python implementation generates, in the interoperability specification.

MeshCore radio (experimental)

MeshCore is an open LoRa mesh. With a MeshCore radio paired by Bluetooth, Roadstr can send and receive road reports over the air.

Settings → MeshCore — Experimental:

Setting What it does
Radio — choose, Set up the Roadstr channel, Forget this radio Scans for MeshCore radios and pairs one by Bluetooth. The Nearby devices permission is requested only when you pair. The status line says whether the radio is connected, has the Roadstr channel, its firmware and battery.
Receive reports from the radio Reports heard on the radio appear on the map, checked first. Works without internet.
Send my reports by radio Your compatible reports and votes are also broadcast on the radio. Needs Also publish in the compatible format.
Bridge: radio to Nostr Republishes reports heard on the radio to the relays, still signed by their original authors; kept and retried while offline.
Bridge: Nostr to radio Broadcasts nearby compatible reports from the relays on the radio, a few per hour. Needs sending.
Clear the waiting queue Empties the reports waiting to be transmitted.

The radio connects while Roadstr is open and a radio feature is on.

  • Roadstr asks once, in plain words, before it transmits or bridges anything.
  • The radio needs companion firmware, version 1.12 or later. Roadstr says “firmware too old” if the radio does not know channel datagrams.
  • Roadstr uses a development data_type value until MeshCore allocates a stable one.

Privacy of the radio

The radio is public and not anonymous. Anything sent can be read by anyone in range, with or without internet: position, time and the public key that signed the report. A one-time key (never stored) can sign the compatible copy so it is not linked to your account — that hides who, not where or when.

Help wanted

The most useful contribution is running the hardware checklist (§12 of the specification) on real radios and reporting what happens. See Contributing.

Clone this wiki locally