Install SOW

Download a prebuilt binary or build from source, then verify the install.

SOW ships as a single static executable. Installing it means putting one file somewhere on your PATH. There is no package to install, no service to enable, and no state directory created until you run a command that needs one.

Supported platforms

The binary is built with CGO_ENABLED=0, so it has no libc dependency and runs on any reasonably modern kernel of the matching OS and CPU family.

OSamd64arm64
Linuxsupportedsupported
macOS (Darwin)supportedsupported

Windows is not supported. SOW relies on POSIX advisory locks, hardlinks, and atomic rename, and it is only tested on local POSIX filesystems — network filesystems such as NFS do not provide the locking and durability semantics it depends on.

Download a release

Prebuilt binaries for every supported platform are published on the GitHub releases page. Download the archive that matches your OS and architecture, extract it, and move the binary onto your PATH:

tar -xzf sow_*.tar.gz
sudo install -m 0755 sow /usr/local/bin/sow

If you do not have root on the machine, ~/.local/bin works just as well — SOW never needs elevated privileges for its own operation.

Build from source

Building requires only a Go toolchain. Clone the repository and build the cmd/sow entrypoint:

git clone https://github.com/pgsty/sow.git
cd sow
CGO_ENABLED=0 go build -trimpath -o sow ./cmd/sow

Set GOOS and GOARCH to cross-compile; because there is no cgo, cross-building needs no toolchain beyond Go itself:

CGO_ENABLED=0 GOOS=linux GOARCH=arm64 go build -trimpath -o sow-linux-arm64 ./cmd/sow

Verify the install

sow version
sow 0.2.0-dev darwin/arm64 go1.26.5

The version line reports the SOW version, the platform the binary was built for, and the Go toolchain that built it. sow --version prints the same string.

To see the full command tree:

sow help

Every command has its own help page — sow help create, sow help dist new, and so on — which lists the exact flags that command accepts. Flags that are not in a command’s matrix are rejected rather than ignored.

External tools

Nothing about generating repository metadata calls out to another program. SOW parses RPM headers and Debian control files itself, computes checksums itself, and writes repodata/, Packages, and Release in-process. createrepo_c, dpkg-scanpackages, reprepro, and modifyrepo_c are never invoked.

Two optional features do use the environment:

FeatureRequiresWhy
RPM package signing — sow create --sign-with, or a managed packages.mode of fill / alwaysrpm and a working GPG environmentPackage payload signatures are produced by rpm --addsign against a private staged copy
Metadata signing with an agent://<fingerprint> key referencegpg with a running gpg-agentThe private key stays in the agent and never reaches SOW

Metadata signing with a file:// or env:// key reference is done in-process and needs no external GPG. See Signing for the full setup.

Next steps

Last modified: 2026-08-08: init commit (fe725aa)