Building from source.
Dependencies per distro, the udev rules people forget, the cargo variants, and the whole SteamOS procedure.
Building on Linux
You need the Rust toolchain (via rustup) and a git client. No particular versions are pinned.
Dependencies
# Debian / Ubuntu sudo apt-get install pkg-config libdbus-1-dev libpulse0 # Fedora sudo dnf install pkgconf-pkg-config dbus-devel pulseaudio-libs
Only if you want the optional text-to-speech feature:
# Debian / Ubuntu sudo apt-get install clang libspeechd-dev # Fedora sudo dnf install clang speech-dispatcher-devel
Get the source
git clone https://github.com/GoXLR-on-Linux/goxlr-utility.git cd goxlr-utility
To build a development branch instead of the default, check it out first
(git checkout dev-0.12.0). To refresh a clone you already have, git pull.
Device permissions
Packages do this for you; a manual build doesn’t. The rules file ships in the repository root, so from inside the clone:
sudo cp 50-goxlr.rules /etc/udev/rules.d/50-goxlr.rules sudo udevadm control --reload-rules sudo udevadm trigger
the build will succeed and the daemon will still refuse to see your mixer. It’s a permissions problem, not a build problem.
Build it
cargo build # debug cargo build --release # release cargo build --features "tts" # with text-to-speech cargo build --features "tts" --release
There’s also ci/build-and-install.sh in the repo, which does the build and install in one go.
Binaries land in target/debug or target/release:
goxlr-daemon, goxlr-client, goxlr-launcher, goxlr-defaults,
goxlr-initialiser (deprecated), and goxlr-firmware — about which the project’s
own guide says only that we don’t talk about it.
SteamOS
SteamOS’s root filesystem is read-only, and the usual advice of unlocking it is both risky and undone
by the next update. This procedure avoids all of that: everything happens in your home directory, from
Desktop Mode, with no sudo and no pacman. The missing development headers come from an Arch
bootstrap tarball unpacked as a sysroot.
1. Arch sysroot for the headers
mkdir ~/arch-sysroot
curl -OL https://archive.archlinux.org/iso/2026.07.01/archlinux-bootstrap-x86_64.tar.zst
tar --zstd -xf archlinux-bootstrap-x86_64.tar.zst -C ~/arch-sysroot \
--strip-components=1 --no-same-owner root.x86_64/usr
export CFLAGS="--sysroot=$HOME/arch-sysroot"
Note that only root.x86_64/usr is extracted, and that CFLAGS has to be exported in
the same shell you then build in.
2. Rust
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh . "$HOME/.cargo/env"
The default rustup options are fine.
3. Build
git clone https://github.com/goxlr-on-linux/goxlr-utility cd goxlr-utility cargo build --release
4. Keep the binaries somewhere safe
mkdir ~/goxlr-bin
cp target/release/{goxlr-launcher,goxlr-daemon,goxlr-client,goxlr-defaults} ~/goxlr-bin/
Double-click goxlr-launcher in the file manager to start it; the UI is reachable from the
system tray icon. Autostart is a setting inside the app, under System → Utility Settings.
Optionally, the project’s
UI wrapper AppImage (goxlr-utility-ui-wrapper-app, v0.0.6)
dropped into ~/goxlr-bin/ replaces the browser-popup UI with a proper application window.
This gets you a working GoXLR in Desktop Mode. It does not make the device available in Game Mode — that needs further steps which aren’t documented.
Written from the GoXLR Utility project’s own documentation (Compilation Guide, GoXLR Utility on SteamOS) and reproduced here in our own words, so you don’t have to leave the site. The project’s originals remain the authority if anything here goes stale.