install grr

Pick the shortest path to your shell.

Prebuilt binaries are the easy default. If you want a package manager, a crates.io install, or a local build, the project documents each route below.

One generated command tree · 402 methods across 14 APIs
brew tap debanjanbasu/tapbrew trust debanjanbasu/tapbrew install grrwinget install debanjanbasu.grrRUSTFLAGS="--cfg reqwest_unstable" cargo install grr-cli
release channels

Install the way you already ship software.

The published binary is named grr, even though the crates.io package is grr-cli because the short crate name grr is already taken.

Prebuilt binaries

Download the archive for your platform from GitHub Releases. The release workflow publishes Windows x64, Windows on ARM, Linux x64, Linux ARM, and macOS ARM binaries with checksums, plus a generated winget manifest bundle — a manifest asset, not a platform build, so the sizes below list platforms only. Each build is UPX-packed when UPX succeeds and ships unpacked when it does not, so the archives stay as small as the packer allows.

platform archives v2.5.1
Linux arm64
3.1 MB
Linux x86_64
3.6 MB
macOS arm64
3.0 MB
Windows ARM
3.5 MB
Windows x86_64
3.2 MB

Compressed release archives for the current GitHub release. A dash means that platform is not published yet.

Open GitHub Releases

macOS + Linux

The repository’s Homebrew tap serves arm64 macOS and x86_64/arm64 Linux builds. Tap it, trust it, then install by formula name.

Since Homebrew 4.4, third-party taps are untrusted by default, so brew trust is required before Homebrew will install a formula from the tap.

homebrew
brew tap debanjanbasu/tap
brew trust debanjanbasu/tap
brew install grr

Windows

winget is not published yet: every release derives the x64 and ARM64 manifests from the shipped archives (grr-<tag>-winget-manifests.tar.gz) and auto-submits a pull request to microsoft/winget-pkgs via komac (PR #457479, awaiting moderator merge). Until that lands, install the Windows release archive (x64 or ARM64) from GitHub Releases.

crates.io

The crate publishes as grr-cli; the installed executable is grr. The default CLI enables HTTP/3, so a crates.io source install needs nightly Rust and the reqwest_unstable cfg.

cargo · unix
RUSTFLAGS="--cfg reqwest_unstable" cargo install grr-cli

PowerShell: set $env:RUSTFLAGS='--cfg reqwest_unstable' before running cargo. That is the whole feature surface: the crate has one feature, cli (on by default), and no per-service features — the command tree comes from the embedded Discovery index.

OAuth setup

Release binaries are zero-config: the OAuth client is compiled in at build time, so grr auth login works with no setup. Building from source? Run grr auth setup to create and store your own client, then log in.

first run
grr auth login
grr gmail users getProfile --user-id me
from source

Build the exact revision you want to run.

The repository pins Rust nightly in rust-toolchain.toml. A local clone uses the repository’s Cargo config, which sets the unstable reqwest cfg and the extra build-std settings needed by the CLI.

There is no stable-Rust or HTTP/2-only build: reqwest’s http3 feature is compiled in unconditionally, so a source build needs nightly and the unstable cfg. The crate has exactly one feature, cli (on by default), and no per-service features — the command tree is generated from the embedded Discovery index.

Read development notes
local clone
git clone https://github.com/debanjanbasu/grr-cli.git
cd grr-cli
cargo build --release
./target/release/grr
next step

Bring your own client, only if you build.

Release binaries need none of this — just run grr auth login. If you build from source, grr auth setup creates a Google Cloud project, enables the APIs, makes a Desktop OAuth client, and stores the client ID for you.