Install

Three install paths. Pick the one that fits.

Option 1 — x eget (canonical)

The fastest cross-platform install. x-cmd's eget detects your platform, downloads the matching archive from the latest GitHub Release, verifies the SHA256 against the per-archive .sha256 sibling file, extracts to a per-project subdir under ~/.local/share/ljh-sh/<project>/, and symlinks the binary into ~/.local/bin.

$ x eget ljh-sh/fio
# ↓ detaches your platform, downloads, verifies, installs
$ fio --version
fio-3.41

$ which fio
~/.local/bin/fio

The ~/.local/bin directory is on $PATH if x-cmd is loaded (most shells auto-add it). See x-cmd install.

Option 2 — curl + tar + manual install

Pick your platform from the download table, then:

Linux (x86_64 or aarch64)

# Download (replace arch with x86_64-linux-musl or aarch64-linux-musl)
curl -L -O https://github.com/ljh-sh/fio/releases/download/v0.1.0/fio-x86_64-linux-musl.tar.gz
curl -L -O https://github.com/ljh-sh/fio/releases/download/v0.1.0/fio-x86_64-linux-musl.tar.gz.sha256

# Verify
sha256sum -c fio-x86_64-linux-musl.tar.gz.sha256
# fio-x86_64-linux-musl.tar.gz: OK

# Extract + install
tar xzf fio-x86_64-linux-musl.tar.gz
sudo install -m 0755 fio-x86_64-linux-musl/bin/fio /usr/local/bin/fio
sudo install -m 0644 fio-x86_64-linux-musl/man/man1/fio.1 /usr/local/share/man/man1/

# Verify
fio --version       # fio-3.41
ldd $(which fio)    # "not a dynamic executable" — fully static

macOS (aarch64 or x86_64)

curl -L -O https://github.com/ljh-sh/fio/releases/download/v0.1.0/fio-aarch64-macos.tar.gz
curl -L -O https://github.com/ljh-sh/fio/releases/download/v0.1.0/fio-aarch64-macos.tar.gz.sha256
shasum -a 256 -c fio-aarch64-macos.tar.gz.sha256
tar xzf fio-aarch64-macos.tar.gz
sudo install -m 0755 fio-aarch64-macos/bin/fio /usr/local/bin/fio
sudo install -m 0644 fio-aarch64-macos/man/man1/fio.1 /usr/local/share/man/man1/
fio --version       # fio-3.41

Windows (x86_64)

# In PowerShell
Invoke-WebRequest -Uri "https://github.com/ljh-sh/fio/releases/download/v0.1.0/fio-x86_64-windows.zip" -OutFile "fio-x86_64-windows.zip"
Invoke-WebRequest -Uri "https://github.com/ljh-sh/fio/releases/download/v0.1.0/fio-x86_64-windows.zip.sha256" -OutFile "fio-x86_64-windows.zip.sha256"

# Verify
$h = (Get-FileHash -Algorithm SHA256 -Path "fio-x86_64-windows.zip").Hash.ToLower()
$expected = (Get-Content "fio-x86_64-windows.zip.sha256" -Raw).Split()[0]
if ($h -eq $expected) { "OK" } else { "MISMATCH" }

# Extract
Expand-Archive -Path "fio-x86_64-windows.zip" -DestinationPath "."

# Move fio.exe onto PATH (one option)
$env:PATH = "$PWD\fio-x86_64-windows\bin;$env:PATH"
fio --version       # fio-3.41

Option 3 — Build from source

You only need this if you want a custom build (different engine set, different toolchain, etc.).

git clone https://github.com/ljh-sh/fio.git
cd fio
bash scripts/build.sh         # native build (Linux/macOS)
bash scripts/smoke.sh          # version + null + disk round-trip

# For musl-static Linux:
docker run --rm -v "$PWD":/w -w /w alpine:3.20 \
    sh -c 'apk add --no-cache bash >/dev/null \
        && bash /w/scripts/build-alpine.sh && bash /w/scripts/smoke.sh'

See scripts/build.sh for the canonical build recipe and what knobs it accepts.