Skip to content
v0.8.38GitHub

Getting startedInstallation

Installation

Homebrew, the installer script, the signed APT repository, release archives and the container image.

Applies to v0.8.38stable, released 4 November 2026Release notes →

Every stable release publishes:

  • archives for linux/amd64, linux/arm64, linux/arm/v7, darwin/amd64 and darwin/arm64
  • Debian packages for amd64, arm64 and armhf, and a signed APT repository
  • a Homebrew formula in the netspeedy/s3ctl tap
  • a multi-arch image on GHCR
  • a SHA256SUMS file covering every archive and package, with a detached GPG signature

Release candidates use tags like v1.2.3-rc.1. They’re there for testing a version before it reaches the stable installer, the stable APT channel or the :latest image tag.

The easiest route on macOS and Linux:

brew tap netspeedy/s3ctl
brew install s3ctl

A single command for any POSIX host:

curl -fsSL https://netspeedy.github.io/s3ctl/install.sh | bash

The installer puts the binary in a bin directory you own. It prefers one that’s already on your PATH, such as $HOME/.local/bin, $HOME/bin or $HOME/.bin, and otherwise uses $HOME/.local/bin and tells you to add it. On macOS it also clears the download quarantine flag, which a manually downloaded binary would trip over because releases aren’t Apple-notarised yet.

Pin a version, or choose where it goes:

curl -fsSL https://netspeedy.github.io/s3ctl/install.sh | bash -s -- --version v0.8.38
curl -fsSL https://netspeedy.github.io/s3ctl/install.sh | bash -s -- --install-dir "$HOME/.local/bin"

If you do download and extract a macOS archive yourself, verify the checksum, then clear the quarantine flag:

xattr -d com.apple.quarantine ./s3ctl-darwin-arm64

For Debian and Ubuntu hosts:

sudo install -d -m 0755 /etc/apt/keyrings
curl -fsSL https://netspeedy.github.io/s3ctl/apt/s3ctl-archive-keyring.gpg \
| sudo tee /etc/apt/keyrings/s3ctl-archive-keyring.gpg >/dev/null
sudo tee /etc/apt/sources.list.d/s3ctl.sources >/dev/null <<'EOF'
Types: deb
URIs: https://netspeedy.github.io/s3ctl/apt/
Suites: stable
Components: main
Signed-By: /etc/apt/keyrings/s3ctl-archive-keyring.gpg
EOF
sudo apt update && sudo apt install s3ctl

The repository is signed with 7E6A 3D77 36C6 E573 16AC 2920 418B 37C1 CF46 53F1.

To install one package without adding the APT source:

curl -fsSLO https://github.com/netspeedy/s3ctl/releases/download/v0.8.38/s3ctl_0.8.38_amd64.deb
sudo apt install ./s3ctl_0.8.38_amd64.deb

Check the download against the signed checksums first. The detached signature comes from the same key that signs the APT repository:

curl -fsSLO https://github.com/netspeedy/s3ctl/releases/download/v0.8.38/SHA256SUMS
curl -fsSLO https://github.com/netspeedy/s3ctl/releases/download/v0.8.38/SHA256SUMS.asc
curl -fsSL https://netspeedy.github.io/s3ctl/apt/s3ctl-archive-keyring.asc | gpg --import
gpg --verify SHA256SUMS.asc SHA256SUMS
sha256sum -c SHA256SUMS --ignore-missing

The image is on GHCR, with :latest, the exact version and semver convenience tags:

docker run --rm ghcr.io/netspeedy/s3ctl:v0.8.38

To run it against the bundled examples, mount them read-only and point --config at the mount:

docker run --rm \
-v "$PWD/examples:/examples:ro" \
ghcr.io/netspeedy/s3ctl:latest \
--config /examples/aws/s3ctl.json \
--dry-run \
--output json

The examples are in the repository.