What's New
Mobile — Pager-style alert playback
- Per-talkgroup and per-tone-set toggle to enable pager-style audio playback when the app is backgrounded
- When enabled, the app fetches and plays the call audio natively in the background after the push notification arrives — no app interaction needed
- Uses a native serial audio queue on both Android (
MediaPlayerviaSingleThreadExecutor) and iOS (AVAudioPlayervia a serialDispatchQueue): multiple simultaneous alerts are queued and played one after another rather than overlapping or cutting each other off - Duplicate callId deduplication in the native queue: if tone-alert and keyword-alert fire for the same call, only one playback is queued
Server — Pager-alert preference persistence
pagerAlertandtoneSetPagerAlertscolumns added touserAlertPreferences(auto-migrated on startup)GET /api/alerts/preferencesnow returns both fields;PUT /api/alerts/preferencessaves them — toggles survive app restarts
Server — VoIP/PushKit push gating
- APNs VoIP pushes are now only sent when the notification is a real pager-alert call
- Regular test pushes, disconnect alerts, and keyword-only alerts no longer trigger the CallKit UI on iOS
Server — Test endpoint respects user toggles
TestPagerAlertHandlerno longer bypasses per-device pager-alert settings
Mobile — Manual scanner URL handling
- URL field now requires an explicit
http://orhttps://prefix — no auto-detection or port scanning - "Server Found" (green) / "Not Found" (red) badge appears inline on the Scanner URL label after detection
- v6 server password field is always optional with a note: "Login credentials may be required"
- v7+ email and password fields are also optional — scanner can be added without credentials
Server — Disconnect push improvements
- Disconnect push notification is now sent to FCM (mobile) devices regardless of whether another web session is still active
- In-app disconnect beep (3 beeps) only plays when live feed is active in the mobile app
Platforms
| Platform | Architecture | Download |
|---|---|---|
| Linux | x86-64 | thinline-radio-linux-amd64-v26.04.019.tar.gz
|
| Linux | ARM64 | thinline-radio-linux-arm64-v26.04.019.tar.gz
|
| Linux | PowerPC64LE | thinline-radio-linux-ppc64le-v26.04.019.tar.gz
|
| Linux | IBM Z (s390x) | thinline-radio-linux-s390x-v26.04.019.tar.gz
|
| Linux | RISC-V 64 | thinline-radio-linux-riscv64-v26.04.019.tar.gz
|
| FreeBSD | x86-64 | thinline-radio-freebsd-amd64-v26.04.019.tar.gz
|
| FreeBSD | ARM64 | thinline-radio-freebsd-arm64-v26.04.019.tar.gz
|
| OpenBSD | x86-64 | thinline-radio-openbsd-amd64-v26.04.019.tar.gz
|
| OpenBSD | ARM64 | thinline-radio-openbsd-arm64-v26.04.019.tar.gz
|
| NetBSD | x86-64 | thinline-radio-netbsd-amd64-v26.04.019.tar.gz
|
| NetBSD | ARM64 | thinline-radio-netbsd-arm64-v26.04.019.tar.gz
|
| Solaris/Illumos | x86-64 | thinline-radio-solaris-amd64-v26.04.019.tar.gz
|
| macOS | Intel | thinline-radio-darwin-amd64-v26.04.019.tar.gz
|
| macOS | Apple Silicon | thinline-radio-darwin-arm64-v26.04.019.tar.gz
|
| macOS | Universal | thinline-radio-darwin-universal-v26.04.019.tar.gz
|
| Windows | x86-64 | thinline-radio-windows-amd64-v26.04.019.zip
|
| Windows | ARM64 | thinline-radio-windows-arm64-v26.04.019.zip
|