Installing GopherTrunk on Windows 11
This is the path the prebuilt installer lays down for you. Five
minutes from a fresh download to a working gophertrunk sdr list.
1. Download the installer
Go to the GopherTrunk releases page and download the asset named:
gophertrunk-<version>-windows-amd64-setup.exe
If you’d rather skip the installer and run from a folder, grab the
matching gophertrunk-<version>-windows-amd64.zip and extract it
anywhere — the contents are the same.
Why is the download blocked? Windows SmartScreen sometimes warns on installers it hasn’t seen before. Click More info → Run anyway, or right-click the file → Properties → check Unblock. The installer is unsigned today; signing is on the roadmap.
2. Run the installer
Double-click setup.exe and accept the defaults. The installer:
- Copies
gophertrunk.exetoC:\Program Files\GopherTrunk\— a single static binary, no DLLs to ship. This is the only thing that goes in Program Files. -
Asks you for one data folder (the “Select your GopherTrunk data folder” page after the Tasks step, defaulting to
%USERPROFILE%\Documents\GopherTrunk). Everything that isn’t the program lives here, in a tidy subfolder tree Setup creates:Documents\GopherTrunk\ config\ config.yaml + your talkgroup / RID CSVs recordings\ voice-call recordings (.wav / .raw) iq\ raw IQ baseband captures exports\ CSV / PDF exports data\ calls.db + caches logs\ decoded-message logs web\ the browser consoles (standard + Signal Lab + Config Builder)You can point this anywhere you can write to — a USB stick, a network drive, your desktop. Setup seeds a starter
config.yamlintoconfig\(an existing one is never overwritten). - Bundles Zadig (the WinUSB driver-binding tool) next to the daemon and adds a Start Menu shortcut “Install RTL-SDR driver (Zadig)” so you don’t have to chase a separate download.
- Adds Start Menu entries for the daemon, the config template,
the three browser-based web consoles (open them straight
from
web\— setup + quick-start guide: Web console), and these instructions. - Optionally adds
C:\Program Files\GopherTrunkto your system PATH so you can rungophertrunkfrom any PowerShell window (off by default — tick the “Add GopherTrunk to my PATH” checkbox during install if you want it).
When the wizard finishes, it’ll offer to open this document, a console window, Zadig (to bind the WinUSB driver — see §3), and the web console in your default browser. All are harmless to skip; the Zadig one defaults off.
3. Install the WinUSB driver via Zadig (one-time, for each dongle)
Windows ships an RTL-SDR DVB-T receiver driver by default — that driver is what you’d use to watch broadcast TV, and it’s the wrong driver for SDR work. We need to swap it for WinUSB on a per-device basis. The installer bundles Zadig (GPL-3.0, from https://zadig.akeo.ie) so you don’t have to chase a download.
- Plug in the RTL-SDR dongle. The same flow works for any
0bda:2838device — generic RTL-SDR Blog units, the NooElec NESDR Smart v5, and equivalent clones. - Launch Zadig via Start Menu → GopherTrunk → “Install RTL-SDR driver (Zadig)”. Approve the UAC prompt. (Alternatively, on the last page of the installer there’s an unchecked “Run Zadig now to bind the WinUSB driver” option — tick it before clicking Finish.)
- Options → List All Devices so the RTL-SDR shows up.
- From the dropdown, pick the dongle. It’ll typically appear as
Bulk-In, Interface (Interface 0) or RTL2832U (the
NESDR Smart v5 reports as
RTL2838UHIDIR). - With WinUSB selected as the target driver, click Replace Driver (or Install Driver, first time).
- Wait ~10 seconds for the success dialog.
You only do this once per dongle. If you ever want the dongle to work as a TV tuner again, run Zadig in reverse and pick the manufacturer driver.
4. Verify everything works
Open Windows Terminal (or PowerShell) and run:
gophertrunk version
gophertrunk sdr list
sdr list should print one line per attached dongle with its
driver, index, serial, and product string. The TUNER and gains
columns are blank by design — they need the device to be opened
(USB claim + RTL2832U baseband init + I2C tuner probe), which sdr
list skips so the command is fast and never collides with a
running daemon. Pass --probe when you want those columns filled:
gophertrunk sdr list --probe
If you see no SDR devices found and you’re sure the dongle is
plugged in, the WinUSB driver swap probably didn’t take — re-run
Zadig with Options → List All Devices checked and verify the
“Driver” column shows WinUSB for your dongle.
If you didn’t tick the PATH option during install, run from the install folder instead:
cd "C:\Program Files\GopherTrunk"
.\gophertrunk.exe sdr list
5. Configure and start the daemon
The installer asked you for a data folder (default
Documents\GopherTrunk) and seeded a config.yaml in its
config\ subfolder. It also set the GOPHERTRUNK_CONFIG user
environment variable to point at that file, so the daemon discovers
it automatically — no -config flag needed. (A second variable,
GOPHERTRUNK_HOME, points at the data folder itself.) Use the Start
Menu shortcut “Edit my config.yaml (Notepad)” to open it, set your
device serial + control-channel frequencies, and save.
The seeded config.yaml uses config-relative paths
(../recordings, ../data/calls.db, ../iq, ../logs), so the
daemon writes recordings, the database, IQ captures, and logs into
the sibling folders under your data root automatically — no absolute
paths to edit. You can still hard-code an absolute path (or use
%GOPHERTRUNK_HOME%\...) if you want files somewhere else.
Then start the daemon:
gophertrunk run
The daemon prints config: loaded <path> on startup so you can
confirm it picked up the right file. To override (e.g. running
against a second config for testing), use -config:
gophertrunk run -config "C:\path\to\other.yaml"
If you drop multiple *.yaml files into the config\ folder
(e.g. config.yaml + prod.yaml + test.yaml), the daemon prints
a numbered menu on startup and asks which one to load. Pick the
number, press Enter, and that file is used. Set -config or
GOPHERTRUNK_CONFIG to skip the prompt for unattended runs (a
non-interactive launch — Windows service, scheduled task —
auto-selects the first file and logs the choice).
A read-only reference copy of the full annotated template lives at
C:\Program Files\GopherTrunk\config.example.yaml (Start Menu →
“Configuration template”).
Logs stream to the terminal. Press Ctrl+C to stop cleanly.
For a long-running setup, register GopherTrunk as a Windows service with NSSM — that’s the simplest path until a native service manifest ships:
nssm install GopherTrunk "C:\Program Files\GopherTrunk\gophertrunk.exe" `
run -config "%USERPROFILE%\Documents\GopherTrunk\config\config.yaml"
nssm set GopherTrunk AppDirectory "C:\Program Files\GopherTrunk"
nssm start GopherTrunk
Point
-configat theconfig.yamlinside your data folder’sconfig\subfolder. A service runs as a different account, so use the absolute path here rather than relying on the per-userGOPHERTRUNK_CONFIGvariable.
Uninstall
Settings → Apps → Installed apps → GopherTrunk → Uninstall.
The uninstaller removes the install folder and every Start Menu
entry, strips GopherTrunk from your PATH (if you opted in), and
clears the GOPHERTRUNK_CONFIG / GOPHERTRUNK_HOME env vars. It
then asks whether to also delete the Setup-managed parts of your
data folder — the config, data, logs, and web subfolders.
The default is No. Even if you say Yes, your captures
(recordings, iq, exports) are always kept so you never lose
recordings on an uninstall.
Troubleshooting
| Symptom | Likely cause |
|---|---|
gophertrunk not recognised |
PATH wasn’t added — open a fresh terminal or run from C:\Program Files\GopherTrunk directly. |
sdr list prints nothing |
Zadig WinUSB swap didn’t take — see step 3. |
usb: device disconnected mid-stream |
The DVB driver re-attached itself — re-run Zadig. |
WinUsb_Initialize fails |
The dongle is bound to the wrong driver — re-run Zadig and pick WinUSB. |
ERROR_GEN_FAILURE / device rejected request on sdr list |
Clone-dongle cold-start quirk — a USB control transfer is NAK’d during bring-up. v0.2.x absorbs this automatically: the sacrificial warmup probe, a control-pipe clear-and-retry, and (for R820T/R828D tuner init on NESDR v5 silicon) a per-chunk retry + chunk-size halving fallback all recover from it. If it still persists, the probe error prints a --- USB diagnostics --- block (bound driver, device/config descriptors, a control-IN read probe) — copy that whole block into a GitHub issue. Meanwhile: try a different USB port (front vs. rear use different host controllers), avoid hubs and extension cables, and confirm gophertrunk sdr doctor shows WinUSB (not libusbK) bound to interface 0. |
| Smart Screen blocks the installer | Right-click → Properties → Unblock, or More info → Run anyway. |
For anything else: open an issue at
https://github.com/MattCheramie/GopherTrunk/issues with the
gophertrunk version output and the first few lines of the
daemon log.