Maintenance window active (0300-0500 UTC). Service may have brief interruptions.
Get started from any APRS radio or client
Send REG to QRX
That's it. QRX will hold messages you miss while offline.
What is QRX?
QRX is a passive APRS message safety net. It monitors APRS-IS for messages
addressed to your callsign, watches for acknowledgment, and stores any
unacknowledged messages for later retrieval.
When you come back online (detected via position beacon), QRX notifies you
of missed messages. Think of it as voicemail for APRS.
QRX never ACKs on your behalf, never retransmits messages, and never injects
itself into the delivery path. It is purely an observer that catches what falls
through the cracks.
How It Works
- Someone sends you an APRS message while your radio is off
- QRX sees the message on APRS-IS, waits 5 minutes for your ACK
- No ACK observed — QRX stores the message
- You turn your radio on and beacon a position
- QRX sees your beacon and sends you a notification
- You send R to read messages one by one, like voicemail
Commands
Send as standard APRS messages to QRX. Single-letter shortcuts work.
| Command | Alias | Description |
| REG | | Register your callsign (central inbox for all SSIDs) |
| INBOX | I, L | Show inbox and reset to newest |
| READ | R | Read current message |
| NEXT | N | Skip to next message (force-advance) |
| WHO | W | Show who sent you messages |
| ACK | A | Send read receipt to sender |
| DEL | D | Delete last read message |
| DEL ALL | CLR | Clear all messages |
| IGNORE <call> | | Block messages from a callsign |
| UNIGNORE <call> | | Stop ignoring a callsign |
| IGNORE | | Show ignore list |
| SPLIT <ssid> | | Split SSID into own inbox (for testing) |
| UNSPLIT <ssid> | | Merge back to central inbox |
| STATUS | S | Check registration and inbox count |
| STATS | | System-wide statistics |
| NOTIFY ON/OFF | | Enable/disable beacon alerts |
| QUIET 60 | | Suppress notifications for N minutes |
| UNREG | | Unregister and delete all data |
| RLY | | Relay last-read message to your radio as original sender |
| RLY ALL | | Relay entire inbox to your radio |
| WHICH <call> | | Find best SSID to reach a station |
| SET IDENT <ssid> <type> | | Label SSID: HT MOBILE BASE DIGI IGATE WX |
| GET IDENT | | Show your SSID station types |
| BUG <details> | | Submit a bug report with packet trace |
| HELP <cmd> | H | Help for a specific command |
Example Session
# You come back online, radio beacons
QRX → QRX: 3 msgs from 2 stns. Send I
# You check inbox
You → I
QRX → 3 msgs from 2 stns. Newest first. Send R
# Read through messages
You → R
QRX → 1/3 W4ABC 15:30z: meet on 146.52?
You → R
QRX → 2/3 KN4XYZ 14:23z: you on the ridge?
You → A
QRX → Read receipt sent to KN4XYZ.
QRX → (to KN4XYZ) QRX: N0JLF-7 read your msg at 15:45z
# Check who sent messages
You → W
QRX → W4ABC:2 KN4XYZ:1
Details
Message retention: Unread messages are held for 7 days. Max 20 per station. When your inbox is full, QRX notifies you and oldest messages roll off.
Notification throttle: One notification per 30 minutes, even if you beacon frequently.
Beacon detection: Any beacon from any SSID of your registered callsign triggers notification if you have unread messages.
Sender notifications: When QRX stores a missed message, it notifies the sender that the message was saved and will be delivered when you're back online.
Read receipts: After reading a message, send A to notify the original sender that you've read their message.
Privacy: QRX only observes. It never ACKs on your behalf and never retransmits your messages.
Central inbox: REG creates one inbox for your base callsign. Messages to any SSID land in the same inbox, accessible from any device.
IGNORE: Block messages from specific callsigns. IGNORE KK7PW stops storing their messages. UNIGNORE KK7PW reverses it. IGNORE shows your block list.
SPLIT: For self-testing, SPLIT 7 gives -7 its own inbox so you can message yourself across SSIDs. UNSPLIT 7 merges back.
Bot filtering: Messages from known service bots are not stored in your inbox. Filtered callsigns: EMAIL, EMAIL-2, SMSGTE, WXBOT, WXYO, WXNOW, REPEAT, WHO-IS, ANSRVR, APRSPH, SOTA, POTA, MYANET, WLNK-1, WINLINK, CQSRVR, NTSGTE, JOKE, IRC, SMS, WTSAPP, WXCAN, WXSVR-AU, SHUB, MPAD, ODALRT-1, QUIZME, APSPOT, FIND, MAIL, DAGA, MTHOOD, 4FUN, WHO-15.
Maintenance & Contact
QRX has a nightly maintenance window from 0300-0500 UTC. The service remains running but there may be brief periods of unavailability.
Found a bug or have a suggestion? Email qrx@forkum.net.
Changelog
v1.3.0 — 2026-04-25
- New: IDENT — label your station types.
SET IDENT -7 HT marks your -7 SSID as a handheld. Types: HT, MOBILE, BASE, DIGI, IGATE, WX. QRX uses this (along with automatic tocall detection) to avoid sending notifications to unmanned stations like digipeaters.
- New: WHICH — contact routing advisor. Send
WHICH KN4ABC to find out which SSID is the best way to reach a station, scored by recent activity and aprs.fi data. Excludes unmanned stations automatically.
- Unmanned station detection. QRX now auto-detects digipeaters, igates, and weather stations by their tocall (Direwolf, aprx, etc.) and suppresses notifications to them. No more wasted notifications to your digi when you have messages waiting.
- Bot auto-detection. Two new protections that work without manual blocklist maintenance: fan-out detection auto-blocks sources broadcasting to 5+ users within 10 minutes, and bounce detection auto-blocks sources that respond to every QRX notification (chat bot loops). Both use 1-hour auto-expiring blocks.
- New: L command — alias for INBOX.
L lists your messages, same as I.
- Rate limit tightened from 50 to 15 commands per 5 minutes.
- Database maintenance: automatic WAL checkpoint prevents unbounded write-ahead log growth.
v1.2.8 — 2026-04-23
- Filter ANSRVR group relay messages (APRS Thursday net traffic, HOTG chat room, etc.) from user inboxes. Messages using the
N:GROUP format are now silently dropped before storage.
v1.2.7 — 2026-04-18
- Block messages relayed through known bot servers by checking the packet path, not just the source callsign. Catches group relay services like ANSRVR that spoof the original sender.
v1.2.6 — 2026-04-14
- Sanitize null bytes and control characters from incoming APRS packets. Some misconfigured digipeaters inject binary data that corrupted stored message bodies, causing garbled or missing text on delivery.
v1.2.5 — 2026-04-11
- Fix: Removed preemptive msg_id filtering that was locking out users whose radios or APRS paths don’t include message IDs. Commands now flow through the parser normally; repair and Kenwood AA detection happen only at the failure point.
v1.2.4 — 2026-04-11
- Kenwood radio support. QRX now recognizes the “AA: callsign Recieved Message” auto-acknowledge replies that Kenwood APRS radios (TM-D710, TH-D74, TM-D700, TH-D72) automatically send back when they receive a message. These are now treated as proper delivery confirmations instead of being logged as unknown commands. Kenwood users will see their messages count toward confirmed delivery stats.
- Bot loop blocked. Added 9M2PJU bot to the blocked list to stop a feedback loop where its automated “Unknown command” replies were being treated as messages to QRX users.
v1.2.3 — 2026-04-11
- Fix: Trust on first use for clients that don’t include APRS message IDs. v1.2.2’s mangled-packet repair was over-aggressive: it dropped legitimate first-attempt commands from clients (or paths) that legitimately omit msg_ids. QRX now accepts a bare command like
REG or ? the first time it sees one from a station, and only drops subsequent identical attempts as likely retransmits.
- Daily report enhancements. The daily AI-generated health report now includes system health (uptime, load, CPU, memory, disk) and QRX footprint (database, logs, total disk usage).
v1.2.2 — 2026-04-11
- Fix: R command now reliably advances through messages. Previously, sending R a second time before the body delivery was confirmed would cancel the delivery without advancing the cursor, causing the same message to appear repeatedly.
- New: N command — force-advance to the next message. Use N to skip past a delivery that is still in flight.
- Fix: mangled packet handling. Some APRS paths strip the
{ character from retransmitted message IDs, causing commands like R{01748 to arrive as R 01748 with no msg_id. QRX now recognizes these mangled retransmissions and either repairs them or silently drops them, eliminating spurious “invalid command” responses that alarmed users who never sent a second command.
- New:
SPLIT with no argument now lists your split inboxes.
- Dashboard: renamed “delivered” to “confirmed delivery” for clarity, added “dropped (no msg_id)” counter.
v1.2.1 — 2026-04-06
- WATCH retired — QRX now notifies on all unread messages by default. No need to configure watches.
- IGNORE — block messages from a specific callsign.
IGNORE KK7PW to block, UNIGNORE KK7PW to unblock, IGNORE to list.
- Fixed: UNREG now properly cleans up all data (splits, watches, ignores, notices).
v1.2.0 — 2026-04-05 Happy Easter!
- RLY — relay your last-read message directly to your radio as if the original sender sent it. Read a message with R, then send RLY.
- RLY ALL — relay your entire inbox at once. Messages are paced and delivered oldest first.
- Relay ACK tracking — when your radio ACKs a relayed message, it's automatically deleted from your inbox.
- Relay loop prevention — two layers prevent QRX from re-storing its own relayed packets.
- Relay kill switch — operators can disable relay instantly via config + SIGHUP.
- APQRX tocall — officially registered software identifier for QRX.
- Smarter notifications — "New msg from CALL. N waiting. Send R or RLY" on first notification, 8-hour reminders for unread messages, no more repeated alerts.
- 104 automated tests passing — comprehensive test suite for relay, notifications, commands, and core logic.
v1.1.6 — 2026-04-04
- Fixed: case sensitivity bug — messages sent to lowercase callsigns (e.g., f8ghe-7) are now matched correctly. (Thanks F8GHE for the report)
- Smarter notifications — any beacon triggers notification if your inbox has unread messages, regardless of which SSID the message was addressed to. Matches how radios actually handle multi-SSID ACKs.
- BUG command — send BUG to QRX to dump a 1-hour packet trace for debugging. Includes 15-minute cooldown to prevent abuse.
- APZQRX tocall — QRX now identifies itself with a proper software identifier in all outgoing packets. Permanent APQRX registration pending.
- Debug logging overhaul — logs now capture only QRX-relevant events instead of the full APRS-IS firehose, improving debuggability and log retention.
- Notification spam fix — QRX only notifies once per new message. No more repeated reminders for messages you already know about.
v1.1.5 — 2026-04-01
- Central inbox — one inbox per callsign. Messages to any SSID land in the same place, accessible from any device.
- WATCH — opt-in per-SSID notifications. WATCH 7 notifies you when -7 gets mail. WATCH ALL for everything. (Thanks KM4ACK for the feedback)
- WATCH ranges — WATCH 1-9 to watch multiple SSIDs at once
- SPLIT/UNSPLIT — split an SSID into its own inbox for self-testing
- HELP <cmd> — contextual help for any command
- Automated APRS-IS test suite (22/24 passing against QRXDEV)
v1.1.4 — 2026-03-31
- Fixed: READ no longer deletes messages from inbox — previously, reading a message marked it as read and removed it permanently. Messages now stay until you explicitly delete with D or CLR.
- UNREG ALL — removes all SSIDs of your base callsign, symmetric with REG ALL
- Exponential backoff retransmission — 30s, 60s, 120s, 240s, 480s (APRS standard decay algorithm, 5 retries over ~15 min)
- Expanded bot filter — 38 known service callsigns blocked, hot-reloadable via config
- Flexible position parser — catches non-standard beacon formats for notification
- Follow-up commands (A, D) work immediately after reading
v1.1.3 — 2026-03-30
- Reliable message delivery — READ responses are now tracked for delivery confirmation. QRX waits for your radio to ACK each message. If no ACK within 30 seconds, QRX retransmits up to 3 times (4 total attempts over 2 minutes). Cursor only advances after confirmed delivery. If all retries fail, your next R re-delivers the same message so nothing is lost. (Thanks KB1GQZ for the feedback)
v1.1.2 — 2026-03-30
- Persistent message dedup — if your radio queues retries then powers off, those stale retransmissions won't create duplicate messages when it comes back online hours later
- Automatic health checks — QRX stays green on the service registry
v1.1.1 — 2026-03-30
- Bot message filtering — WXBOT, WLNK-1, and other service messages no longer stored in your inbox
- SIGHUP hot-reload — config changes applied without restart or downtime
v1.1.0 — 2026-03-30
- WHO command (W) — see who messaged you, grouped by callsign
- ACK command (A) — send read receipt to original sender
- Sender notifications — senders are told their message was stored
- STATS command — system-wide statistics with all-time counters
- Bulletin announcements — periodic BLN advertising QRX
- Bot loop protection — known bots are silently ignored
- Persistent stats — all-time message and registration counters
- Inbox full notification — alerts when oldest messages start dropping
- Max 5,000 registered stations
v1.0.0 — 2026-03-29
- Initial release with voicemail-style message playback
- Dynamic APRS-IS filtering, MIC-E beacon detection
- Single-letter command aliases (I, R, D, S, H)
- Registered on aprs.hemna.com service registry