Installation
proton is a single self-contained binary. 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 |
| 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 |
| Go | go install github.com/roman-16/proton-cli/cmd/proton@latest |
The install scripts drop the binary in ~/.local/bin (Linux, macOS) or %LOCALAPPDATA%\Programs\proton-cli (Windows). Both 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"Debian, Ubuntu, Linux Mint
Section titled “Debian, Ubuntu, Linux Mint”The APT repository updates proton with the rest of your system:
sudo install -d -m 0755 /etc/apt/keyringscurl -fsSL https://roman-16.github.io/proton-cli/gpg.key | sudo tee /etc/apt/keyrings/proton-cli.asc >/dev/nullecho "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.listsudo apt update && sudo apt install proton-cliNix flake
Section titled “Nix flake”To 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];Downloading a binary
Section titled “Downloading a binary”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_amd64curl -LO https://github.com/roman-16/proton-cli/releases/latest/download/checksums.txtsha256sum --check --ignore-missing checksums.txtchmod +x proton-cli_linux_amd64sudo 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 / .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.
Shell completions
Section titled “Shell completions”Package installs wire these up for you. For a manual install:
proton completion bash > /etc/bash_completion.d/protonproton completion zsh > "${fpath[1]}/_proton"proton completion fish > ~/.config/fish/completions/proton.fishOne script covers both 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.fishUpdating
Section titled “Updating”Installed with a package manager? Update with it. Otherwise proton updates itself:
proton update # install the latest releaseproton update --check # only report whether an update existsproton update 2.5.0 # install a specific versionAn install that no package manager owns has nothing to tell it a release happened, so proton says so itself, once a day, 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. PROTON_NO_UPDATE_CHECK=1 ends it for good.
proton changelog prints what each release changed - the whole file, one version, or --since 2.3.0 --until 2.4.0 for a range.
Uninstalling
Section titled “Uninstalling”Package installs go out the way they came in. Script and manual installs remove themselves:
proton uninstall --dry-run # show what would be removedproton uninstall --yes # remove the binary without askingproton 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.
Building from source
Section titled “Building from source”Needs Go 1.26 or newer:
git clone https://github.com/roman-16/proton-cli.gitcd proton-cligo build ./cmd/protonThat plain build has no CAPTCHA helper. For a release-shaped binary, see Contributing.