Install

gup runs on Linux, macOS, and Windows. It shells out to go, so a Go toolchain has to be on PATH whichever way you install gup itself.

Supported Go versions #

Unit tests run on Go 1.25, 1.26, and 1.27 across Linux, macOS, and Windows, with a separate job tracking the latest Go release. go.mod declares Go 1.25 as the minimum, so building from source needs Go 1.25 or newer.

The prebuilt release binaries are built with the latest Go 1.27 patch release. Go 1.27 dropped support for macOS 12 and earlier, so the macOS release binaries require macOS 13 Ventura or newer; on an older macOS, build from source with a Go version that still supports it.

go install #

go install github.com/nao1215/gup@latest

Building from source needs Go 1.25 or newer. On an older Go, take a prebuilt binary or a package below.

Package managers #

gup is in homebrew-core, so Homebrew needs no tap:

brew install gup

The GoReleaser-built formula in nao1215/tap remains published as an alternative. It installs the prebuilt release binary rather than building from source:

brew install nao1215/tap/gup
winget install --id nao1215.gup
mise use -g gup@latest
nix profile install nixpkgs#gogup

gup is in the aqua standard registry:

aqua g -i nao1215/gup

On Arch Linux, two community-maintained AUR packages exist: gup builds from source and gup-bin installs the release binary.

paru -S gup      # or: yay -S gup
paru -S gup-bin  # prebuilt binary

Prebuilt packages and binaries #

The release page carries .deb, .rpm, and .apk packages plus .tar.gz (Linux, macOS) and .zip (Windows) archives. Every artifact is built for amd64 and arm64.

Download the one matching your distribution and architecture, then:

sudo dpkg -i gup_1.8.1_linux_amd64.deb                 # Debian, Ubuntu
sudo rpm -Uvh gup_1.8.1_linux_amd64.rpm                # Fedora, RHEL, openSUSE
sudo apk add --allow-untrusted gup_1.8.1_linux_amd64.apk  # Alpine Linux

Substitute the release you downloaded for 1.8.1, and arm64 for amd64 where applicable. The packages also install the bash, fish, and zsh completion files.

Verify what you downloaded #

Every release ships a cosign-signed checksums.txt, an SPDX SBOM per archive, and SLSA build provenance attested through GitHub OIDC.

cosign verify-blob \
  --bundle checksums.txt.sigstore.json \
  --certificate-identity-regexp 'https://github.com/nao1215/gup/\.github/workflows/release\.yml@refs/tags/.*' \
  --certificate-oidc-issuer 'https://token.actions.githubusercontent.com' \
  checksums.txt
sha256sum --check --ignore-missing checksums.txt
gh attestation verify gup_1.0.0_linux_amd64.tar.gz --repo nao1215/gup

Shell completion #

gup completion --install

On Linux and macOS that writes bash, fish, and zsh completion into the paths your shell already reads.

On Windows the same command sets up PowerShell:

gup completion --install
. $PROFILE   # or open a new PowerShell window

It writes gup.completion.ps1 beside your PowerShell profile and adds one guarded dot-source line to the profile, inside a block marked # setting for gup command (auto generate). The rest of your profile is left untouched, the profile is created if it does not exist, and re-running the command never duplicates the entry. gup uses $PROFILE when it is exported, and otherwise wires up every profile that already exists under Documents\PowerShell (PowerShell 7) and Documents\WindowsPowerShell (Windows PowerShell 5.1), creating the PowerShell 7 one when neither does. Those paths resolve under USERPROFILE, falling back to HOME; with neither set the command fails with a message naming both rather than guessing.

See Completion and man pages.

If gup runs git pull --rebase #

oh-my-zsh ships a gup alias. Remove or rename it, or bypass it once:

\gup update