Download & Install
SOW is one static executable. There is no installer, no package to add, no service to
enable, and no state directory until you run a command that needs one. Installing it
means putting a single file on your PATH.
Prebuilt binaries
Release archives for every supported platform are published on the GitHub releases page. Download the archive that matches your OS and CPU, extract it, and move the binary into place:
tar -xzf sow_*.tar.gz
sudo install -m 0755 sow /usr/local/bin/sow
Without root, ~/.local/bin works just as well. SOW never needs elevated privileges for
its own operation.
Platform matrix
The binary is built with CGO_ENABLED=0, so it carries no libc dependency and runs on
any reasonably modern kernel of the matching OS and CPU family.
| OS | amd64 | arm64 | Notes |
|---|---|---|---|
| Linux | supported | supported | primary target |
| macOS (Darwin) | supported | supported | Intel and Apple Silicon |
| Windows | — | — | not supported |
Windows is out of scope: SOW depends on POSIX advisory locks, hardlinks, and atomic
rename. For the same reason, keep repositories on local POSIX filesystems — network
filesystems such as NFS do not provide the locking and durability semantics it relies on.
Build from source
A Go toolchain is the only build requirement. The project targets Go 1.26 or newer.
git clone https://github.com/pgsty/sow.git
cd sow
CGO_ENABLED=0 go build -trimpath -o sow ./cmd/sow
Because there is no cgo, cross-compiling needs nothing beyond Go itself:
CGO_ENABLED=0 GOOS=linux GOARCH=arm64 go build -trimpath -o sow-linux-arm64 ./cmd/sow
Verify
sow version
sow 0.2.0-dev darwin/arm64 go1.26.5
The line reports the SOW version, the platform the binary targets, and the Go toolchain
that built it. sow --version prints the same string, and sow help lists the full
command tree.
What you do not install
Generating repository metadata never shells out. SOW parses RPM headers and Debian
control files itself, computes its own checksums, and writes repodata/, Packages, and
Release in-process — createrepo_c, dpkg-scanpackages, reprepro, and modifyrepo_c
are never invoked.
Only two optional features touch the environment: RPM package signing needs rpm and
a working GPG setup, and an agent:// key reference needs a running gpg-agent.
Everything else, including file:// and env:// metadata signing, runs inside the
binary. See Installation for the details.
Next steps
- Quick Start — turn a directory of packages into a servable repository in five minutes.
- First Workspace — build a curated, multi-architecture repository.
- Compatibility — the tested client matrix.