Trunk Recorder Pro records the calls on trunked and conventional radio systems. Point one or more SDRs at a system and it follows the control channel and records every call it can hear, as WAV files with Trunk Recorder–compatible JSON beside them. Plugins upload the calls to OpenMHz, Broadcastify Calls or Rdio Scanner, stream them, or hand them to a script of yours.
It is a rewrite of Trunk Recorder in Rust, with no GNU Radio or OP25 dependency. It is a single program of a few megabytes, with a browser interface built in, and runs on macOS, Linux (including the Raspberry Pi), Windows and Docker. The same engine also runs in the browser with nothing to install. On a Raspberry Pi 5 it uses 4–6× less CPU than Trunk Recorder on the same system (Performance).
It records:
- P25: Phase 1 and Phase 2 (TDMA) voice, C4FM and CQPSK / simulcast control channels
- SmartNet / SmartZone: 800 MHz, 900 MHz and VHF / UHF (OBT) band plans, analog and digital voice
- Trunked DMR: Capacity Plus (and Linked Capacity Plus), Capacity Max, Connect Plus, Tier III
- NXDN: NXDN48 and NXDN96, Type-C and Type-D. Tested on recordings and synthesized signals; not yet on a live trunked system.
- Conventional channels: analog FM, P25, DMR and NXDN, split by CTCSS / DCS tone, NAC, colour code or RAN
- Several systems and several sites at once; a call heard on more than one site is saved once, from the best copy
With: RTL-SDR dongles (nothing else to install), Ettus USRPs, Airspy R2 / Mini, and anything with a SoapySDR module (HackRF, SDRplay, LimeSDR…).
Download the package for your system from the releases.
| Platform | Package | Instructions |
|---|---|---|
| macOS 11+ (Apple silicon and Intel) | trunk-pro-<version>-macos.dmg |
Install on macOS |
| Windows 10 / 11 (64-bit) | trunk-pro-<version>-windows-x86_64.zip |
Install on Windows |
| Linux (x86-64, ARM64) | trunk-pro-<version>-linux-<arch>.tar.gz |
Install on Linux |
| Raspberry Pi 4 / 5 (64-bit OS) | trunk-pro-<version>-linux-aarch64.tar.gz |
Install on a Raspberry Pi |
| Docker (Linux hosts) | robotastic/trunk-recorder-pro |
Run in Docker |
| Chrome or Edge | trunk-pro-<version>-browser.zip, or trunkrecorder.pro/app |
Run in the browser |
USRP, Airspy and SoapySDR radios need their makers' drivers: see Other radios.
trunk-pro # opens http://localhost:8080- The setup guide opens the first time. Pick your radios (or import an existing Trunk Recorder
config.jsoninstead). - Let Find my system scan for a control channel, or enter the system by hand.
- Press Start. Calls are saved to
~/TrunkRecorderPro/<system>/<year>/<month>/<day>/.
Getting started walks through it step by step, including how to research a system on RadioReference and set gain and frequency correction.
Start here: docs/README.md is the full index.
| Setting up | Getting started · Radios · Find my system |
| Radio systems | P25 · SmartNet · DMR · NXDN · Several systems and sites · Talkgroups and units |
| Conventional | Conventional channels · Tones, NACs and colour codes |
| Using it | The interface · The dashboard · Recordings · Troubleshooting |
| Plugins | Using plugins · OpenMHz · Broadcastify · Rdio Scanner · simplestream · Upload script |
| Reference | Configuration · Command line |
| Coming from Trunk Recorder | Importing your config, and what's different |
| Developers | Development (building, releasing, code layout) · Architecture · Interface API · Writing a plugin · Performance |
Rust 1.95+ and Node 20+:
(cd web && npm ci && npx vite build) # the interface, embedded in the binary
cargo build --release # target/release/trunk-proDevelopment covers the browser build, packaging and making a release.
Questions, bug reports and reports from systems we haven't tested on (NXDN especially) are welcome as GitHub issues. Troubleshooting says what to include.
GPL-3.0-or-later (the P25 code derives from op25). The vocoder derives from mbelib (ISC).