Install
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.
Where the install scripts put it
Section titled “Where the install scripts put it”~/.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"Debian, Ubuntu and Linux Mint
Section titled “Debian, Ubuntu and 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];Download a binary
Section titled “Download 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 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.
Shell completions
Section titled “Shell completions”Package installs wire these up for you. For a manual install, run the line for your shell:
# bashproton completion bash > /etc/bash_completion.d/proton
# zshproton completion zsh > "${fpath[1]}/_proton"
# fishproton 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.fishUpdating
Section titled “Updating”If you installed with a package manager, update with it. Otherwise proton updates itself:
proton update # install the latest releaseproton update --dry-run # only report whether an update existsproton 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.
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.
Build from source
Section titled “Build from source”Needs Go 1.27 or newer:
git clone https://github.com/roman-16/proton-cli.gitcd proton-cligo build ./cmd/protonEvery command that manages the install
Section titled “Every command that manages the install”proton itself has the full reference for update, uninstall, completion, changelog, report, skill and version.