proton-cli is one self-contained binary for Linux, macOS and Windows, on amd64 and arm64. Pick the line that matches your system.
The command is proton. Every install also puts proton-cli beside it as a second name, so a line written either way runs.
| Platform | Install |
|---|---|
| Linux, macOS | curl -fsSL https://raw.githubusercontent.com/roman-16/proton-cli/main/scripts/install.sh | sh |
| Windows | irm https://raw.githubusercontent.com/roman-16/proton-cli/main/scripts/install.ps1 | iex |
| Homebrew | brew install --cask roman-16/tap/proton-cli |
| winget | winget install Roman-16.ProtonCLI |
| Arch | yay -S proton-cli-bin |
| Debian, Ubuntu | APT repository |
| Fedora, RHEL | sudo dnf install ./proton-cli_*.rpm |
| Alpine | sudo apk add --allow-untrusted ./proton-cli_*.apk |
| Nix | environment.systemPackages = [ pkgs.proton-cli ]; |
| npm | npm install -g @roman-16/proton-cli |
Then sign in and run your first commands.
~/.local/bin on Linux and macOS, %LOCALAPPDATA%\Programs\proton-cli on Windows.
Both scripts take a version and a directory:
curl -fsSL …/install.sh | sh -s -- --install-dir /usr/local/bin --version 2.5.0& ([scriptblock]::Create((irm …/install.ps1))) -InstallDir "C:\tools\proton-cli"The APT repository updates proton with the rest of your system:
sudo install -d -m 0755 /etc/apt/keyrings
curl -fsSL https://roman-16.github.io/proton-cli/gpg.key | sudo tee /etc/apt/keyrings/proton-cli.asc >/dev/null
echo "deb [signed-by=/etc/apt/keyrings/proton-cli.asc] https://roman-16.github.io/proton-cli stable main" | sudo tee /etc/apt/sources.list.d/proton-cli.list
sudo apt update && sudo apt install proton-cliTo track the latest release rather than your nixpkgs channel:
inputs.proton = {
url = "github:roman-16/proton-cli";
inputs.nixpkgs.follows = "nixpkgs";
};
environment.systemPackages = [
proton.packages.${pkgs.stdenv.hostPlatform.system}.default
];Every release ships raw binaries, archives and checksums.txt on the releases page, named proton-cli_<os>_<arch> for linux, darwin and windows on amd64 and arm64.
curl -LO https://github.com/roman-16/proton-cli/releases/latest/download/proton-cli_linux_amd64
curl -LO https://github.com/roman-16/proton-cli/releases/latest/download/checksums.txt
sha256sum --check --ignore-missing checksums.txt
chmod +x proton-cli_linux_amd64
sudo mv proton-cli_linux_amd64 /usr/local/bin/protonOn Windows, download the .exe, rename it to proton.exe, and put its folder on your PATH.
The .tar.gz and .zip archives also bundle the licence and shell completions. The .zip carries proton-cli.exe as a real file, since an archive cannot hold a link.
Package installs wire these up for you. For a manual install, run the line for your shell:
# bash
proton completion bash > /etc/bash_completion.d/proton
# zsh
proton completion zsh > "${fpath[1]}/_proton"
# fish
proton completion fish > ~/.config/fish/completions/proton.fishWhat Tab then offers is described under Tab completion.
One script covers both command names, except in fish, which looks for a file named after the command being typed:
echo 'complete -c proton-cli -w proton' > ~/.config/fish/completions/proton-cli.fishIf you installed with a package manager, update with it. Otherwise proton updates itself:
proton update # install the latest release
proton update --dry-run # only report whether an update exists
proton update 2.5.0 # install a specific versionOn an install no package manager owns, proton looks for a new release once a day and says so after the command has finished:
$ proton mail messages list
…
proton 2.4.1 → 2.5.0 available.
Run `proton update` to install it, or `proton changelog 2.5.0` for what changed.It stays quiet when a package manager owns this copy, when stderr is not a terminal, and under --quiet. To end it for good, set PROTON_NO_UPDATE_CHECK=1.
proton changelog prints what each release changed: the whole file, one version, or a range with --since 2.3.0 --until 2.4.0.
Note
proton update checks the download against checksums.txt from the same release, and neither is signed. An install from a package manager is verified by the package manager.
Package installs go out the way they came in. Script and manual installs remove themselves:
proton uninstall --dry-run # show what would be removed
proton uninstall --yes # remove the binary without asking
proton uninstall --yes --purge # also delete saved sessions and the ID cacheUninstalling cannot be undone from here, so it asks first, like every other permanent removal.
Needs Go 1.27 or newer:
git clone https://github.com/roman-16/proton-cli.git
cd proton-cli
go build ./cmd/protonproton itself has the full reference for update, uninstall, completion, changelog, report, skill and version.