Features

Everything the current Android build does, in one list. It describes the app as built — nothing here is planned or hoped for; what's still coming is on the status page.

Messaging

  • One conversation thread per station, kept in order. Five thread kinds: direct, service, bulletin, SMS, and net rooms.
  • Six delivery states per message: queued, sent, digipeated, delivered, rejected, not delivered. Digipeated is confirmed off the air — the app matches its own packet coming back through a repeater, which is proof it was radiated.
  • Automatic retries: 30 seconds initially, doubling to a 5-minute ceiling, six attempts. Messages still in flight when the app is killed are picked up and resumed on relaunch.
  • Failed messages show a retry button on the bubble itself, and the thread list flags the conversation.
  • Stop sending a message mid-retry — and the app tells you what actually happened: stopped in time, a copy already went out, a digipeater repeated it, or it was already delivered.
  • Retransmit any message. Pending ones reuse the same wire ID so a late acknowledgement still matches; answered ones go out as a new message.
  • Incoming messages addressed to you are acknowledged automatically. Duplicate retransmissions are acknowledged again but don't re-notify.
  • A live byte counter against the APRS 67-byte limit; longer text is split into parts automatically, and a multi-part send reports the state of its least-delivered part.
  • Message templates in four groups (everyday, POTA/SOTA, nets, emergency).
  • Search across every message ever stored, with matches highlighted and inbox and archive results separated.
  • Thread list filters by kind, with counts; the selection persists across launches.
  • Per-thread mute, archive, block, and delete. Muted threads keep their unread count — mute means don't buzz, not don't tell.
  • Unread boundary line and day dividers in every thread; a jump-to-latest button when you've scrolled up.
  • Thread headers show when the station was last heard and its distance and bearing from you — or "not heard yet", never a made-up value.
  • SMS conversations can be named locally, and you can set the alias the gateway knows you by.
  • Bulletins are collected into one room per group, with each one attributed to the station that sent it — and you can post your own: a general bulletin, or one addressed to a group (WX, a club, an event).
  • Ask any station where it is with the standard ?APRSP position query, straight from its page. The request is tracked like any message, and the answer arrives as a fresh position — not a chat bubble.
  • The compose screen covers every network from one place: radio, plus each message gateway (SMS, email, Winlink, WhatsApp) with per-channel validation and recipient formats. Callsign suggestions come only from stations actually heard.

Services

  • A built-in directory of 22 APRS services, each presented as a guided screen: what it does, who runs it, and forms for each command — no syntax to memorise.
  • The exact packet each button will send can always be shown before sending (a settings toggle), and you can always type a command by hand instead.
  • Nets & groups: #APRSThursday, the #APRSThursday logger (APRSPH), ANSRVR group messaging, MAIL mailboxes, IRC-style channel chat, and CQSRVR.
  • Gateways: SMS text messages, Winlink email (APRSLink), the email gateway, a WhatsApp gateway, and ARRL NTS radiograms filed as a guided multi-message exchange.
  • Missed messages: register with the QRX mailbox and messages sent while you were off the air wait for you — the app shows how many are waiting and pulls them down.
  • Activations: APSPOT self-spotting to POTA, SOTA, WWFF and SiOTA, and APRS2SOTA for SOTAwatch spots.
  • Weather: WXBOT forecasts (by your beaconed position, city, ZIP, grid, or callsign) and WXNOW current conditions from the nearest weather stations.
  • Utilities: WHO-IS callsign lookup, the MPAD multi-purpose bot, the REPEAT repeater finder, the 9M2PJU-4 all-in-one bot — and JOKE, which sends a joke to your radio.
  • WHO-IS, REPEAT, WXNOW, and APRS OTA get purpose-built screens rather than generic forms.
  • Replies from a service thread back like any conversation, with the same delivery tracking.
  • A reachability note warns when a service appears to be RF-only or offline and a reply may not come — it warns, it doesn't block.
  • Services that haven't been verified against the live bot are labelled as unconfirmed in the directory.
  • The directory is data, not code: export it as JSON, edit or add services, and import — with a preview of exactly what will change and a one-tap reset to the built-in set.

Groups & nets

  • A directory of ANSRVR groups: browse what exists, what each is for, and which you've joined.
  • Joining a group turns it into a net room: everyone's traffic collected into one conversation instead of a thread per stranger, with your check-in status and time remaining shown at the top.
  • Check in, renew, post to the group, and leave from one screen; a roster shows the operators heard in the net.
  • #APRSThursday is wired in as the weekly net it is, including logging a check-in without relaying it to the whole group.

APRS OTA

  • Host an op from anywhere: one tap announces you on the air through the aprsota.org bot.
  • Callers arrive as cards with their message and location; confirming a contact is one tap plus an optional note, and the screen shows your QSL count and time remaining, with a button to extend.
  • Chase from the same screen: one tap sends CQ to ask the bot who is on the air right now, hosts you've already worked are check-marked, and the default chase message is yours to edit.
  • The exact packet each action will transmit is shown on the button.
  • Works entirely over RF — the phone talks to the radio, the radio carries the rest.

Radio & connectivity

  • Bluetooth Classic KISS TNCs: paired devices listed with likely TNCs sorted first, plus setup hints for recognised radios.
  • KISS over TCP for Direwolf or a network TNC.
  • APRS-IS over the network: regional Tier-2 server presets or any host you type, with the receive filter shown and editable. The passcode is derived — you never type one.
  • A true receive-only APRS-IS mode: with transmit off, the app logs in read-only and refuses to send, rather than letting the server silently discard.
  • Any combination of transports at once; RF and internet status are shown as two separate indicators on the messaging screens, with connected and connecting visually distinct.
  • Per-beacon and per-message routing: radio + internet, radio only, or internet only.
  • Background reception behind a visible foreground notification. A stale connection that claims to be up but has gone silent is detected and restarted.
  • When reception was interrupted, the packet log marks the gap — how long, and why.
  • The radio screen distinguishes intent from reality: a switched-on transport that isn't actually working says so, in words, with the reason.
  • The battery-optimization state is read from the system and shown honestly, with a shortcut to fix it — and the screen is equally honest that background reception costs battery and doesn't survive swiping the app away.

Beaconing

  • Multiple independent beacons: your station beacon plus any number of extra position or object beacons, each with its own symbol, comment, path, rate, and routing — including transmitting as a different callsign (a club call, an event object).
  • Smart beaconing by default: the interval scales with speed (90 seconds at highway speed to 30 minutes parked, by default), and corner pegging beacons on real heading changes while ignoring compass jitter when stationary. Every parameter is editable.
  • Or a fixed interval: 1, 5, 10, 30 minutes, or any custom value.
  • Position ambiguity per beacon, five levels from exact down to a ~70-mile cell. The digits are genuinely removed before the packet is built, and reduced precision is flagged in the beacon summary so it can't stay on by accident.
  • A stale GPS never lies: a station last seen stopped keeps beaconing its position, but one last seen moving goes silent rather than re-sending a place it has left.
  • Position from GPS or a fixed location; long-press the map to place a beacon or object at an exact point.
  • A searchable symbol picker covering the full APRS symbol set (~190 symbols, by name — type "4x4", get the jeep).
  • Advertise your voice frequency in spec format (with tone and offset) so radios like a TH-D75 can tune straight to it, with a live preview of what goes on air; a PHG field decodes itself into watts, height, and antenna as you type.
  • Beaconing continues in the background — and a fresh install transmits nothing until you turn beaconing on.
  • Each beacon reports its own status: how many sent, how long ago — or the exact problem keeping it off the air.
  • Per-beacon packet format: standard readable text, or Mic-E — about half the bytes, and the only format that carries a one-word status code other radios display beside your callsign. The trade-offs are stated on the switch itself.
  • Answering the ?APRSP position query is opt-in and off by default — nobody gets to make your station transmit but you. Turned on, an asking station gets one ordinary beacon (position blur included), rate-limited per asker, and the screen logs every query heard and what became of it.

Map

  • A vector basemap rendered on the device. Every tile you view is cached — capped at a size you choose, up to 10 GB — and redraws with no connection.
  • Stations, objects, and beacons drawn with their real APRS symbols, including overlay characters. Overlapping markers open a picker instead of guessing.
  • Trails show where stations have been, following the same time window as the rest of the app; tap any point on a trail for the exact time, position, speed, and the packet behind it.
  • A weather radar layer (NEXRAD, US only), off by default and labelled with what it costs in data.
  • A station reporting reduced position precision is drawn with its uncertainty as a real box on the map, with the size named in words.
  • A station that hasn't moved says "hasn't moved · N reports" instead of drawing a GPS-jitter scribble.
  • Follow-me mode that only uses GPS while the map is actually open, and says which position source it's following.
  • Station labels appear at closer zooms to keep wide views readable; a reset-north button appears only when the map is rotated.
  • "Find on map" from any station page centres the map on it and opens its card.
  • A marker rings the moment its packet lands — reception you can watch happen. Toggleable in the Layers panel.
  • Select a station and the map animates the path its packets actually took, hop by hop through the digipeaters that repeated them.

Stations

  • One list of everything heard — stations and objects — sorted nearest first when your position is known, newest first otherwise, and the header says which.
  • Filter chips (all / stations / objects / on frequency) plus free-text search across callsign, comment, status, frequency, and device model.
  • Every row and screen carries a provenance badge: heard over RF, via the internet, or both.
  • Station detail shows the decoded picture: device model identified from its beacon — including radios that identify themselves in Mic-E comment bytes, which are decoded and stripped rather than shown as garbage — path, position with a reverse-geocoded place name, course and speed, altitude, Mic-E status, first heard, and packet counts.
  • Other SSIDs of the same operator are listed and linked.
  • Weather stations get inline history charts of every measure they actually report, built from the packets on file — and an implausible reading from a broken sensor is recorded as absent rather than allowed to rescale a week of real data.
  • WHO-IS lookups are cached: revisit a station and the answer is already there, with its age, and one tap to refresh over the air.
  • External lookups per station: qrz.com, aprs.fi, and aprs.to — shown only where they make sense (no QRZ link on an object or a weather-network ID).
  • A shared view filter across map, stations, and packets: age window, RF/internet origin, and station kind (digis, igates, weather, mobile, fixed). Set once, applies everywhere, persists.

Packet log

  • Every frame received is stored and shown live, with the rate per minute and a LIVE / STALE / RETRYING / OFFLINE health badge.
  • Quick filters (all / RF only / mine / errors) plus free-text filtering of the raw line.
  • Packets that fail to decode are flagged and kept, never hidden — real APRS traffic contains malformed packets.
  • The packet inspector decodes field by field: source, device from the destination call, the path with used digipeats drawn as a graph (and internet routing honestly marked as not-a-digipeat), type, position, symbol, message IDs, plus a copyable hex dump.
  • Reception gaps appear inline in the log: how long reception was down and why.
  • Export exactly what's on screen, filters applied — or save the entire log as a standard capture file, one packet per line with timestamps.
  • Import and replay captures: file them silently at their original times, or replay at 1×, 10×, or 60× with gaps preserved. Replayed traffic is marked as such and never transmits.

Backup & data

  • Everything lives in a database on the phone; the app is fully usable with no connection.
  • Export a JSON backup of settings, conversations (with delivery state and read state), and your blocked list — sections individually selectable, saved to a folder or shared to another app.
  • Import as a merge (adds what's missing, deletes nothing, safe to run twice) or a restore (replaces, and the button says so in red).
  • Every import shows a preview first — file age, app version, and exactly what will be added, changed, or skipped and why. A file that can't be imported is refused whole, with every problem listed.
  • Block stations by callsign, per-SSID, with your own notes. Blocking stops threads, notifications, and acks — the screen is explicit that packets still arrive and still appear on the map and in the log.
  • Clearing data is deliberately hard: two-tap confirmations that state exact counts, and the danger zone links to taking a backup first.

General

  • Callsign + SSID identity with guidance on conventional SSIDs; additional SSIDs and club calls are just more beacons.
  • A device-ID database identifies the hardware behind each station heard (updated weekly if you allow it, ~40 KB, from the APRS Foundation's public list).
  • Message notifications on a dedicated Android channel, so APRS can be silenced independently of everything else. Delivery failures notify too, with tap-to-retry, and a thread's notifications clear when you open it.
  • An emergency screen with real guard rails: activating takes a three-second hold and a confirmation — a pocket can't do it, and a false alarm on amateur radio is a serious matter. It transmits your position with the Mic-E emergency status, and while active it reports plainly what has gone out, when — and when nothing has.
  • Hearing another station switch into Mic-E emergency raises an alert on its own notification channel, with one tap to see where they are. The alert fires on the transition, so a beacon repeating every few seconds doesn't buzz you every few seconds.
  • US or metric units — one setting, applied everywhere.
  • Monospace type for callsigns and packets throughout, chosen so 0/O and 1/l can't be confused.
  • 12- or 24-hour clock for display; times on the air stay UTC.
  • App updates arrive over the air and apply on the next start — or immediately, if you choose to restart. The about screen states exactly which build is running.
  • Usage statistics are a single switch in settings; reports never include callsigns — yours or anyone else's.
  • In-app feedback that sends over HTTPS when there's a network, and keeps the draft — only if you ask it to — when there isn't.
  • Support conversations and release news arrive as their own threads in the app, carried over HTTPS — deliberately not over APRS, because app chatter is not what amateur spectrum is for.

Missing something you'd expect? Say so on the support page — the list of what's still ahead is on the status page.