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/amd64anddarwin/arm64 - Debian packages for
amd64,arm64andarmhf, and a signed APT repository - a Homebrew formula in the netspeedy/s3ctl tap
- a multi-arch image on GHCR
- a
SHA256SUMSfile 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.
Homebrew
Section titled “Homebrew”The easiest route on macOS and Linux:
brew tap netspeedy/s3ctlbrew install s3ctlInstaller script
Section titled “Installer script”A single command for any POSIX host:
curl -fsSL https://netspeedy.github.io/s3ctl/install.sh | bashThe 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.38curl -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-arm64Signed APT repository
Section titled “Signed APT repository”For Debian and Ubuntu hosts:
sudo install -d -m 0755 /etc/apt/keyringscurl -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: debURIs: https://netspeedy.github.io/s3ctl/apt/Suites: stableComponents: mainSigned-By: /etc/apt/keyrings/s3ctl-archive-keyring.gpgEOF
sudo apt update && sudo apt install s3ctlThe repository is signed with 7E6A 3D77 36C6 E573 16AC 2920 418B 37C1 CF46 53F1.
A single Debian package
Section titled “A single Debian package”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.debsudo apt install ./s3ctl_0.8.38_amd64.debCheck 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/SHA256SUMScurl -fsSLO https://github.com/netspeedy/s3ctl/releases/download/v0.8.38/SHA256SUMS.asccurl -fsSL https://netspeedy.github.io/s3ctl/apt/s3ctl-archive-keyring.asc | gpg --importgpg --verify SHA256SUMS.asc SHA256SUMSsha256sum -c SHA256SUMS --ignore-missingContainer
Section titled “Container”The image is on GHCR, with :latest,
the exact version and semver convenience tags:
docker run --rm ghcr.io/netspeedy/s3ctl:v0.8.38To 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 jsonThe examples are in the repository.