Building from Source
Requirements
- Go 1.22 or later
- A C compiler (gcc or clang) — required by Fyne for CGo
- Platform graphics libraries:
- Linux:
libgl1-mesa-devandxorg-dev - macOS: Xcode command-line tools (
xcode-select --install) - Windows: MinGW (
gcc-mingw-w64-x86-64from MSYS2 or a MinGW package)
- Linux:
Quick build
Using Nix
The repository includes a Nix flake that provides a reproducible development shell with all native dependencies set up correctly. This is the recommended way to build on Linux if you use Nix:
Installing locally (Linux)
This builds the binary, installs it to ~/.local/bin/shiv, copies the icon, and registers a .desktop entry so Shiv appears in your application launcher.
AppImage (Linux)
The AppImage bundles the binary with its shared library dependencies so it runs on any modern Linux distribution without installing anything.
This produces a Shiv-x86_64.AppImage in the current directory. Mark it executable and run it directly:
Packaged builds with Fyne
Fyne's packaging tool produces platform-native bundles — a .tar.xz on Linux, a .app on macOS, and an .exe on Windows:
Install the Fyne CLI with:
Cross-compilation
The release CI builds Windows binaries on Linux using MinGW and macOS universal binaries using two separate fyne package runs (one for arm64, one for amd64) combined with lipo. See .github/workflows/release.yml for the exact steps if you need to replicate this locally.
Running tests
The non-UI packages (internal/store, internal/events, internal/proxy, internal/http) can be tested without a display. The UI package is not unit tested and requires a running display or Xvfb.