Skip to content
proton-cli

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.

~/.local/bin on Linux and macOS, %LOCALAPPDATA%\Programs\proton-cli on Windows.

Both scripts take a version and a directory:

Terminal window
curl -fsSL …/install.sh | sh -s -- --install-dir /usr/local/bin --version 2.5.0
Terminal window
& ([scriptblock]::Create((irm …/install.ps1))) -InstallDir "C:\tools\proton-cli"

The APT repository updates proton with the rest of your system:

Terminal window
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-cli

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
];

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.

Terminal window
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/proton

On 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:

Terminal window
# bash
proton completion bash > /etc/bash_completion.d/proton
# zsh
proton completion zsh > "${fpath[1]}/_proton"
# fish
proton completion fish > ~/.config/fish/completions/proton.fish

What 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:

Terminal window
echo 'complete -c proton-cli -w proton' > ~/.config/fish/completions/proton-cli.fish

If you installed with a package manager, update with it. Otherwise proton updates itself:

Terminal window
proton update # install the latest release
proton update --dry-run # only report whether an update exists
proton update 2.5.0 # install a specific version

On an install no package manager owns, proton looks for a new release once a day and says so after the command has finished:

Terminal window
$ 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.

Package installs go out the way they came in. Script and manual installs remove themselves:

Terminal window
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 cache

Uninstalling cannot be undone from here, so it asks first, like every other permanent removal.

Needs Go 1.27 or newer:

Terminal window
git clone https://github.com/roman-16/proton-cli.git
cd proton-cli
go build ./cmd/proton

proton itself has the full reference for update, uninstall, completion, changelog, report, skill and version.