XPRS

eXtended Packet Radio System

Every message you send today goes through somebody's tower, somebody's server and somebody's account. When one of them is down, busy or switched off, the message does not go.

XPRS carries small text messages over whatever is to hand: Bluetooth, LoRa, WiFi, amateur radio, or the internet when there is one. When none of it is there, the messages still move, passed from device to device by whoever hears them. Nothing to sign up for, and no service in the middle that can refuse.

Why you would use it

What a message looks like

At most 250 bytes, so it fits one cheap radio transmission:

A message to a friend:

t:message f:X1QZ3N d:X1RD89 ts:2026-08-18_09:15:00 m:arrived at the marina, see you at the cafe

A call for help, relayed further than anything else:

t:sos f:X1QZ3N pos:38.7223,-9.1393 kind:medical ts:2026-08-18_09:20:00 m:broken leg, cannot walk

The same messages travel LoRa, Bluetooth, WiFi, ham radio bands, wired networks and the internet, unchanged. And because it is a flat list of names and values, it is already JSON if your program prefers that:

{"t":"message","f":"X1QZ3N","d":"X1RD89",
 "ts":"2026-08-18_09:15:00","m":"arrived at the marina"}

Values stay text, because the unit is part of the value - temp:14.2C is "14.2C", never 14.2. Section 4.10 has the conversion both ways.

Private messages

You can send a message that only the person it is addressed to can read. Everyone else sees that a message went from someone to someone, and when - but not a word of what it says:

t:message f:X1QZ3N d:X1RD89 ts:2026-08-08_14:26:40 x:pQ4m9xT2vB8kR sig:<60 characters>

Sender, recipient and time stay in the open on purpose: a relay needs them to pass the message along, or to hold it until the recipient is back in range. It never needs the content.

What a device can be

There are six jobs on the network, and one device can do any of them. Yours probably does two or three without you thinking about it:

Nobody assigns these. You pick which ones your device takes on, how much of your battery and storage they get, and you can stop at any time. Every station is already a small archiver of its own record; saying so out loud is what offers it to everyone else.

If you already use APRS

XPRS is APRS carried forward. The idea is unchanged - small text packets, heard by anyone, repeated by volunteers.

Do you need a licence?

Not for most of it. LoRa and Bluetooth in the ISM bands, WiFi and the internet are licence-free, and your identity is a key your device makes - nothing to register, nobody to ask.

On amateur bands the amateur rules apply as always: plain text, your government-issued callsign, no encryption. XPRS respects that line rather than blurring it - sealed messages and self-made callsigns never go onto amateur spectrum.

Download

The current release, straight from GitHub. These links always point at the newest one:

The application's own page has every file of this release with its sha256, the other Android processors, and what each platform needs to install it. Every version ever released is on the releases page. Windows and Linux are unsigned, so both will warn you on first run.

Running it

Writing your own

The format is small, and fully specified.

Taking part

Credits

XPRS is built on work that came before it, and most of what makes it possible was designed by other people.