Installation
Most people never touch a compiler — grab a prebuilt binary, the Debian package, or the Docker image. Building from source is one cargo command when you want it.
Not sure which to pick? On a Raspberry Pi or Ubuntu box, use the .deb — it pulls in the radio runtime libraries for you. On macOS, use the tarball. To run it in containers, use the Docker image.
Prebuilt releases
Every release publishes signed assets on GitHub Releases: Linux x86_64 and arm64 tarballs, a macOS Apple-Silicon tarball, Debian/Ubuntu .deb packages, and a SHA256SUMS file.
Debian, Ubuntu, Raspberry Pi
The package declares its runtime dependencies, so apt installs SoapySDR and the Airspy libraries automatically:
# download the .deb for your architecture from the releases page, then:
sudo apt install ./xng_0.21.0_arm64.deb
xng --versionLinux / macOS tarball
tar xzf xng-v0.21.0-x86_64-unknown-linux-gnu.tar.gz
sudo cp xng /usr/local/bin/
xng --versionThe tarball ships just the binary, so you supply the runtime libraries yourself —libsoapysdr at minimum, plus libairspy / libairspyhfif you use the native Airspy backends:
# Debian / Ubuntu
sudo apt install libsoapysdr0.8 soapysdr-module-all libairspy0 libairspyhf1
# macOS
brew install soapysdr airspy airspyhfDocker
A multi-arch image (amd64 / arm64 / armv7) is published for every release tag:
docker run --rm ghcr.io/airframesio/xng:latest --version
# pass through a USB SDR and a config
docker run --rm -it --device /dev/bus/usb \
-v "$PWD/station.toml:/etc/xng/station.toml" \
ghcr.io/airframesio/xng:latest station /etc/xng/station.tomlContainers need access to your USB SDR — pass --device /dev/bus/usb (or the specific device node), and expose any output ports you serve, like -p 8080:8080for the web dashboard.
Build from source
You need a Rust toolchain, the protobuf compiler, and the SoapySDR development headers.
# Debian / Ubuntu build deps
sudo apt install protobuf-compiler libsoapysdr-dev soapysdr-module-all
# macOS build deps
brew install protobuf soapysdr
git clone https://github.com/airframesio/xng
cd xng
cargo build --release # binary at ./target/release/xng
cargo test --workspace # runs the vendored off-air capture testsNative Airspy backends
By default Airspy radios go through the SoapySDR shim. For a lower-overhead path, compile in the native libairspy / libairspyhf backends:
sudo apt install libairspy-dev libairspyhf-dev # or: brew install airspy airspyhf
cargo build --release --features airspy,airspyhfNo hardware?
You can build without any SDR libraries at all and still decode recorded IQ files:
cargo build --no-default-featuresThere is no cargo install from crates.io, and no Homebrew/AUR package yet. Intel Macs build from source (the free Intel CI runners were retired). The supported install paths are: release tarball, .deb, Docker image, or cargo build.
Next step
With xng --version working, head to the Quickstart to find some signals and watch them decode.