Download GopherTrunk

Latest release: v0.5.7 · all releases · SHA256SUMS · verify

Linux

Tarballed static binary. No librtlsdr or libusb at runtime.

Full walkthrough: Linux install guide. aarch64 covers Raspberry Pi 4 / 5 + most modern ARM SBCs; RTL-SDR needs udev rules + DVB blacklist on first install.

macOS

Static binary + sample config. Bundled with README and LICENSE.

Full walkthrough: macOS install guide. Builds are unsigned — right-click → Open the first time, or run xattr -dr com.apple.quarantine gophertrunk.

Windows 11

One-click installer (x64), portable ZIPs for x64 and ARM.

Full walkthrough: Windows install guide. The installer bundles Zadig (the WinUSB driver-binding tool) and adds a Start Menu shortcut — the OS won't see your RTL-SDR until you run it once per dongle.

Jump to: Linux quick start · macOS quick start · Windows quick start · Verify · Build from source · Docker

Every release archive includes the standalone browser console at gophertrunk-web/ alongside the daemon binary — open index.html in any browser to operate from a laptop, tablet, or phone on the LAN. Setup walkthrough: Web console quick start.

Quick start by OS

Linux

VERSION=v0.5.7
ARCH=$(uname -m)                            # x86_64 or aarch64 / arm64
case "$ARCH" in
  x86_64)         PKG=linux-amd64 ;;
  aarch64|arm64)  PKG=linux-arm64 ;;
esac
curl -L -o gophertrunk.tar.gz \
  https://github.com/MattCheramie/GopherTrunk/releases/download/${VERSION}/gophertrunk-${VERSION}-${PKG}.tar.gz
tar xzf gophertrunk.tar.gz
cd gophertrunk-${VERSION}-${PKG}
cp config.example.yaml config.yaml          # edit before launch
./gophertrunk version                       # confirms ldflags landed
./gophertrunk run                           # auto-discovers ./config.yaml

The daemon walks $GOPHERTRUNK_CONFIG~/.config/gophertrunk/config.yaml~/Documents/GopherTrunk/config.yaml./config.yaml and loads the first match — see install-linux.md for the full discovery rules and the multi-config picker.

For a systemd-managed install, copy gophertrunk.service to /etc/systemd/system/ and follow the install header.

macOS

VERSION=v0.5.7
ARCH=$(uname -m)                            # arm64 on Apple Silicon, x86_64 on Intel
case "$ARCH" in
  arm64)  PKG=darwin-arm64 ;;
  x86_64) PKG=darwin-amd64 ;;
esac
curl -L -o gophertrunk.tar.gz \
  https://github.com/MattCheramie/GopherTrunk/releases/download/${VERSION}/gophertrunk-${VERSION}-${PKG}.tar.gz
tar xzf gophertrunk.tar.gz
cd gophertrunk-${VERSION}-${PKG}
xattr -dr com.apple.quarantine gophertrunk  # bypass Gatekeeper (unsigned build)
cp config.example.yaml config.yaml
./gophertrunk version
./gophertrunk run                           # auto-discovers ./config.yaml

RTL-SDR on macOS uses the bundled IOKit driver — no kext or driver swap required.

Windows 11

Run the installer:

# Or just double-click the .exe in Explorer.
.\gophertrunk-v0.5.7-windows-amd64-setup.exe

During setup the wizard asks for one data folder (default %USERPROFILE%\Documents\GopherTrunk) to hold everything that isn’t the program: config, recordings, IQ captures, exports, the database, logs, and the browser-based web consoles (standard, Signal Lab, Config Builder) under its web\ subfolder. Start Menu shortcuts open each console’s index.html in your default browser.

After install, complete the WinUSB driver swap via the bundled Zadig — see install-windows.md for the full step-by-step (Start Menu → GopherTrunk → “Install RTL-SDR driver (Zadig)”, or tick the postinstall option before clicking Finish). The OS won’t see your RTL-SDR until that swap is done.

Verify your download

Every binary archive is SHA-256-checksummed. Refuse to install on a hash mismatch:

# Linux / macOS
curl -L -O https://github.com/MattCheramie/GopherTrunk/releases/download/v0.5.7/SHA256SUMS
sha256sum --ignore-missing -c SHA256SUMS    # Linux
shasum -a 256 --ignore-missing -c SHA256SUMS  # macOS
# Windows
$expected = (Get-Content SHA256SUMS | Select-String "windows-amd64-setup.exe").ToString().Split(" ")[0]
$actual = (Get-FileHash gophertrunk-v0.5.7-windows-amd64-setup.exe -Algorithm SHA256).Hash.ToLower()
if ($actual -ne $expected) { throw "checksum mismatch" }

The daemon also self-reports its build provenance — every release pins the commit + build time at link time:

$ ./gophertrunk version
v0.5.7 (sha=abc1234, built=2026-05-13T19:00:00Z)

The sha= value matches the commit on the release tag; built= is the UTC timestamp the CI runner produced the artefact. Both are injected via -ldflags and are empty on go run / go test builds.

Build from source

For every platform, the full source build is:

git clone https://github.com/MattCheramie/GopherTrunk.git
cd gophertrunk
make build               # → ./bin/gophertrunk (static, CGO_ENABLED=0)
make test                # unit tests
make integration         # daemon end-to-end (no SDR required)

Requires Go 1.25+ — the project’s go.mod pins the toolchain to 1.25.11 (closes the stdlib CVEs in the bare 1.25.0). See CONTRIBUTING.md for the full dev setup.

Docker

The repository ships a multi-stage Dockerfile + docker-compose.yml with RTL-SDR USB pass-through wired:

git clone https://github.com/MattCheramie/GopherTrunk.git
cd gophertrunk
docker compose up -d

See hardening.md §”Docker” for the USB pass-through + healthcheck + Prometheus scrape config.

Security

Found a vulnerability? Please follow the responsible-disclosure process in SECURITY.md — do not open a public issue. Use GitHub’s private security advisory workflow:

https://github.com/MattCheramie/GopherTrunk/security/advisories/new

Older releases

Every prior tag stays on GitHub’s Releases page; binaries remain downloadable indefinitely. Security fixes only back-port to the most recent stable tag — older tags receive best-effort support.