Google tools,
at terminal speed.
Zero-config, maximum-performance Google tools from the terminal. One binary, six services, and output that plays nicely with jq.
Configure one OAuth client ID. The CLI handles the rest.
Small binary.
Real reach.
Build-time numbers from the public package and release channels, with a quiet optional refresh in your browser.
The useful parts of your Google account, namespaced.
Keep commands close to the work they support. Every data command accepts JSON, JSONL, table, or pretty output; JSON is the default.
Gmail
Search, read, compose, label, filter, route mail, and batch without leaving your shell.
- Search and read messages
- Compose, label, and route mail
- Batch and filter messages
- Manage threads, history, and send-as
grr gmail message search "in:inbox" --max 5 More verified commands
grr gmail message search "in:inbox" --max 5grr gmail msg filter-listgrr gmail thread listgrr gmail send-as verify alias@example.com
Calendar
List calendars, manage events, watch changes, and check free-busy windows in one pass.
- List calendars and events
- Create, update, move, and delete
- Watch changes and free-busy
- Manage sharing, settings, and colors
grr calendar events --max 10 More verified commands
grr calendar events --max 10grr calendar patch <calendar-id> <event-id> --summary "Updated"grr calendar watch <calendar-id> --webhook https://example.com/hook
Drive
Find files, inspect metadata, manage sharing and comments, and control storage.
- Find files and inspect metadata
- Upload, download, and export
- Manage sharing and comments
- Restore, rename, and control storage
grr drive list --trashed --max 20 More verified commands
grr drive list --trashed --max 20grr drive comment-add <file-id> --text "Note"grr drive quota
Contacts
Query people, organize groups, batch-read profiles, and keep photos close to your workflows.
- Search and organize people
- Create, update, and manage groups
- Batch-read profiles and photos
- Adopt contacts and keep photos close
grr contacts list --max 20 More verified commands
grr contacts list --max 20grr contacts get-batch --people people/123grr contacts photo-set <people/123> --path photo.jpg
Chat
Browse spaces, manage members, read messages, and react without context switching.
- Browse spaces and members
- Add and remove members
- Read and send messages
- React and unreact to messages
grr chat spaces --max 10 More verified commands
grr chat spaces --max 10grr chat member-add <space-id> --user user@example.comgrr chat react <space-id> <message-id> --emoji "👍"
Forms
Read and update forms, pull responses, and manage watch channels for lightweight automation.
- Read and update forms
- Pull response data
- Create and manage watch channels
- Renew and delete watches
grr forms get <form-id> More verified commands
grr forms get <form-id>grr forms responses <form-id> --max 50grr forms watch-renew <form-id> <watch-id>
Every branch, still namespaced.
Gmail
message, label, draft, send, thread, history, send-as, profile, watch, import, msg; msg: label, trash, untrash, delete, batch-label, batch-delete, filter-list, filter, filter-create, filter-delete, forwarding-list, forwarding-create, forwarding-delete, autoforwarding, autoforwarding-set, pop, pop-set, imap, imap-set; thread: list, label, trash, untrash, delete; send-as: list, get, create, update, delete, verifyCalendar
list, events, get, new, create, update, delete, free-busy, set, instances, patch, move, watch, stop, colors, settings, share, shares, unshareDrive
list, search, get, mkdir, trash, restore, copy, empty-trash, download, upload, rename, delete, export, share, shares, unshare, comments, comment, comment-add, comment-delete, revisions, revision, quotaContacts
list, search, get, create, update, delete, groups, group, group-new, group-rename, group-delete, group-add, group-remove, get-batch, others, adopt, photos, photo-set, photo-removeChat
spaces, space, space-new, space-rename, space-delete, members, member, member-add, member-remove, messages, send, react, reactions, unreactForms
get, responses, new, update, watch, watches, watch-delete, watch-renewRun grr <service> --help and grr schema for the exact flags. Gmail filters, forwarding, auto-forwarding, POP, and IMAP are under grr gmail msg; thread list, send-as verify, and paginated history are also available.
One crate. Only the services you need.
The published package is grr-cli. Its default features are default = ["cli", "http3"]; the cli feature enables the complete binary and all six services (the grr binary uses required-features = ["cli"]), while gmail, calendar, drive, people, chat, and forms can be selected independently. With default-features = false, the library builds on stable Rust over HTTP/2. HTTP/3 is the http3 feature and needs nightly Rust plus the reqwest_unstable cfg.
[dependencies]
grr-cli = { version = "0.4.0", default-features = false, features = ["gmail"] } Less glue.
More signal.
grr is deliberately small at the interface: predictable commands, fast transport, and no hidden service setup.
HTTP/3 when available
The transport probes authenticated QUIC at startup and falls back silently to HTTP/2 when it cannot negotiate.
nightly Rust
The CLI enables HTTP/3 through reqwest and QUIC support, which is gated behind Rust nightly and the reqwest_unstable cfg.
keyring tokens
PKCE is always enabled; tokens are kept in the operating system keyring, with a local file fallback for headless systems.
streaming output
Results go to stdout and logs go to stderr, so jq, scripts, and agents get predictable data by default.
From inbox to insight, without the tab.
Search a message, fetch a bounded body, and keep the output parseable. The command tree is available as JSON for agents with grr schema.
$ grr auth login
✓ browser consent complete
$ grr gmail message search "in:inbox" --max 1
[{"id":"191f8ab2","threadId":"191f8ab2","subject":"Build notes"}]
$ grr gmail message get 191f8ab2 --message-format metadata --body --max-length 2000
{"message":{...},"body":"..."} Your shell is the API client.
Use a human-readable table when you need it, or keep the default JSON and let the next tool take it from there.
$ grr gmail message search "from:github.com" --max 10 | jq -r '.[0].id'
191f8ab2
$ grr transport
{"http_version":"h3","fallback":"h2"} No mystery meat.
The short version of the things people usually want to know before putting a Google account behind a terminal tool.
What is grr?
How does OAuth work?
Do I need to log in again for 0.4?
Is grr affiliated with Google?
How do I install it?
Why does it need nightly Rust?
Your Google workflows deserve a better terminal.
Grab a binary, point it at your own OAuth client, and let grr get out of the way.
Choose your install pathgrr is an independent project and is not affiliated with, sponsored by, or endorsed by Google LLC.