Releases: googleworkspace/cli
0.18.0
Release Notes
Minor Changes
-
908cf73: feat(gmail): auto-populate From header with display name from send-as settings
Fetch the user's send-as identities to set the From header with a display name in all mail helpers (+send, +reply, +reply-all, +forward), matching Gmail web client behavior. Also enriches bare
--fromemails with their configured display name. -
6e4daaf: Gmail helpers rollup: mail-builder migration, --attach flag (upload endpoint), +read helper
- Migrate
+send,+reply,+reply-all, and+forwardto themail-buildercrate for RFC-compliant MIME construction - Add
--fromflag to+sendfor send-as alias support - Add
-a/--attachflag to all mail helpers (+send,+reply,+reply-all,+forward) withmime_guess2auto-detection, 25MB size validation, and upload endpoint support (35MB API limit vs 5MB metadata-only) - Add
+readhelper to extract message body and headers (text, HTML, or JSON output) - Make
OriginalMessage.thread_idoptional (Option<String>) for draft compatibility - RFC 2822 display name quoting is handled natively by
mail-builder - Introduce
UploadSourceenum in executor for type-safe upload strategies
- Migrate
Patch Changes
-
1e90380: fix(gmail): remove dead
--attachmentarg from+sendThe
+sendsubcommand defined a duplicate"attachment"arg alongside the
"attach"arg already provided bycommon_mail_args. Sinceparse_attachments
reads"attach", the--attachmentflag was silently ignored. Removed the
dead duplicate. -
908cf73: fix(gmail): handle reply-all to own message correctly
Reply-all to a message you sent no longer errors with "No To recipient remains." The original To recipients are now used as reply targets, matching Gmail web client behavior.
-
2e909ae: Consolidate terminal sanitization, coloring, and output helpers into a new
output.rsmodule. Fixes raw ANSI escape codes inwatch.rsthat bypassedNO_COLORand TTY detection, upgradessanitize_for_terminalto also strip dangerous Unicode characters (bidi overrides, zero-width spaces, directional isolates), and sanitizes previously raw API error body and user query outputs.
Install gws 0.18.0
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/googleworkspace/cli/releases/download/v0.18.0/gws-installer.sh | shInstall prebuilt binaries via powershell script
powershell -ExecutionPolicy Bypass -c "irm https://github.com/googleworkspace/cli/releases/download/v0.18.0/gws-installer.ps1 | iex"Install prebuilt binaries into your npm project
npm install @googleworkspace/cli@0.18.0Download gws 0.18.0
| File | Platform | Checksum |
|---|---|---|
| gws-aarch64-apple-darwin.tar.gz | Apple Silicon macOS | checksum |
| gws-x86_64-apple-darwin.tar.gz | Intel macOS | checksum |
| gws-x86_64-pc-windows-msvc.zip | x64 Windows | checksum |
| gws-aarch64-unknown-linux-gnu.tar.gz | ARM64 Linux | checksum |
| gws-x86_64-unknown-linux-gnu.tar.gz | x64 Linux | checksum |
| gws-aarch64-unknown-linux-musl.tar.gz | ARM64 MUSL Linux | checksum |
| gws-x86_64-unknown-linux-musl.tar.gz | x64 MUSL Linux | checksum |
Verifying GitHub Artifact Attestations
The artifacts in this release have attestations generated with GitHub Artifact Attestations. These can be verified by using the GitHub CLI:
gh attestation verify <file-path of downloaded artifact> --repo googleworkspace/cliYou can also download the attestation from GitHub and verify against that directly:
gh attestation verify <file-path of downloaded artifact> --bundle <file-path of downloaded attestation>0.17.0
Release Notes
Minor Changes
- 1b0a21f: feat: support google meet video conferencing in calendar +insert
Patch Changes
-
811fe7b: Fix critical security vulnerability (TOCTOU/Symlink race) in atomic file writes.
The atomic_write and atomic_write_async utilities now use:
- Randomized temporary filenames to prevent predictability.
- O_EXCL creation flags to prevent following pre-existing symlinks.
- Strict 0600 permissions from the moment of file creation on Unix systems.
- Redundant post-write permission calls have been removed to close race windows.
-
b241a5b: fix(security): cap Retry-After sleep, sanitize upload mimeType, and validate --upload/--output paths
-
6f92e5b: Stderr/output hygiene rollup: route diagnostics to stderr, add colored error labels, propagate auth errors.
- triage.rs: "No messages found" sent to stderr so stdout stays valid JSON for pipes
- modelarmor.rs: response body printed only on success; error message now includes body for diagnostics
- error.rs: colored
error[variant]:labels on stderr (respectsNO_COLORenv var),hint:prefix for accessNotConfigured guidance - calendar, chat, docs, drive, script, sheets: auth failures now propagate as
GwsError::Authinstead of silently proceeding unauthenticated (dry-run still works without auth)
-
398e80c: Sync generated skills with latest Google Discovery API specs
-
8458104: Extend input validation to reject dangerous Unicode characters (zero-width chars, bidi overrides, Unicode line/paragraph separators) that were not caught by the previous ASCII-range check
Install gws 0.17.0
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/googleworkspace/cli/releases/download/v0.17.0/gws-installer.sh | shInstall prebuilt binaries via powershell script
powershell -ExecutionPolicy Bypass -c "irm https://github.com/googleworkspace/cli/releases/download/v0.17.0/gws-installer.ps1 | iex"Install prebuilt binaries into your npm project
npm install @googleworkspace/cli@0.17.0Download gws 0.17.0
| File | Platform | Checksum |
|---|---|---|
| gws-aarch64-apple-darwin.tar.gz | Apple Silicon macOS | checksum |
| gws-x86_64-apple-darwin.tar.gz | Intel macOS | checksum |
| gws-x86_64-pc-windows-msvc.zip | x64 Windows | checksum |
| gws-aarch64-unknown-linux-gnu.tar.gz | ARM64 Linux | checksum |
| gws-x86_64-unknown-linux-gnu.tar.gz | x64 Linux | checksum |
| gws-aarch64-unknown-linux-musl.tar.gz | ARM64 MUSL Linux | checksum |
| gws-x86_64-unknown-linux-musl.tar.gz | x64 MUSL Linux | checksum |
Verifying GitHub Artifact Attestations
The artifacts in this release have attestations generated with GitHub Artifact Attestations. These can be verified by using the GitHub CLI:
gh attestation verify <file-path of downloaded artifact> --repo googleworkspace/cliYou can also download the attestation from GitHub and verify against that directly:
gh attestation verify <file-path of downloaded artifact> --bundle <file-path of downloaded attestation>0.16.0
Release Notes
Minor Changes
- 47afe5f: Use Google account timezone instead of machine-local time for day-boundary calculations in calendar and workflow helpers. Adds
--timezoneflag to+agendafor explicit override. Timezone is fetched from Calendar Settings API and cached for 24 hours.
Patch Changes
-
c61b9cb: fix(gmail): RFC 2047 encode non-ASCII display names in To/From/Cc/Bcc headers
Fixes mojibake when sending emails to recipients with non-ASCII display names (e.g. Japanese, Spanish accented characters). The new
encode_address_header()function parses mailbox lists, encodes only the display-name portion via RFC 2047 Base64, and leaves email addresses untouched.
Install gws 0.16.0
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/googleworkspace/cli/releases/download/v0.16.0/gws-installer.sh | shInstall prebuilt binaries via powershell script
powershell -ExecutionPolicy Bypass -c "irm https://github.com/googleworkspace/cli/releases/download/v0.16.0/gws-installer.ps1 | iex"Install prebuilt binaries into your npm project
npm install @googleworkspace/cli@0.16.0Download gws 0.16.0
| File | Platform | Checksum |
|---|---|---|
| gws-aarch64-apple-darwin.tar.gz | Apple Silicon macOS | checksum |
| gws-x86_64-apple-darwin.tar.gz | Intel macOS | checksum |
| gws-x86_64-pc-windows-msvc.zip | x64 Windows | checksum |
| gws-aarch64-unknown-linux-gnu.tar.gz | ARM64 Linux | checksum |
| gws-x86_64-unknown-linux-gnu.tar.gz | x64 Linux | checksum |
| gws-aarch64-unknown-linux-musl.tar.gz | ARM64 MUSL Linux | checksum |
| gws-x86_64-unknown-linux-musl.tar.gz | x64 MUSL Linux | checksum |
Verifying GitHub Artifact Attestations
The artifacts in this release have attestations generated with GitHub Artifact Attestations. These can be verified by using the GitHub CLI:
gh attestation verify <file-path of downloaded artifact> --repo googleworkspace/cliYou can also download the attestation from GitHub and verify against that directly:
gh attestation verify <file-path of downloaded artifact> --bundle <file-path of downloaded attestation>0.15.0
Release Notes
Minor Changes
-
6f3e090: Add opt-in structured HTTP request logging via
tracingNew environment variables:
GOOGLE_WORKSPACE_CLI_LOG: stderr log filter (e.g.,gws=debug)GOOGLE_WORKSPACE_CLI_LOG_FILE: directory for JSON log files with daily rotation
Logging is completely silent by default (zero overhead). Only PII-free metadata is logged: API method ID, HTTP method, status code, latency, and content-type.
Install gws 0.15.0
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/googleworkspace/cli/releases/download/v0.15.0/gws-installer.sh | shInstall prebuilt binaries via powershell script
powershell -ExecutionPolicy Bypass -c "irm https://github.com/googleworkspace/cli/releases/download/v0.15.0/gws-installer.ps1 | iex"Install prebuilt binaries into your npm project
npm install @googleworkspace/cli@0.15.0Download gws 0.15.0
| File | Platform | Checksum |
|---|---|---|
| gws-aarch64-apple-darwin.tar.gz | Apple Silicon macOS | checksum |
| gws-x86_64-apple-darwin.tar.gz | Intel macOS | checksum |
| gws-x86_64-pc-windows-msvc.zip | x64 Windows | checksum |
| gws-aarch64-unknown-linux-gnu.tar.gz | ARM64 Linux | checksum |
| gws-x86_64-unknown-linux-gnu.tar.gz | x64 Linux | checksum |
| gws-aarch64-unknown-linux-musl.tar.gz | ARM64 MUSL Linux | checksum |
| gws-x86_64-unknown-linux-musl.tar.gz | x64 MUSL Linux | checksum |
Verifying GitHub Artifact Attestations
The artifacts in this release have attestations generated with GitHub Artifact Attestations. These can be verified by using the GitHub CLI:
gh attestation verify <file-path of downloaded artifact> --repo googleworkspace/cliYou can also download the attestation from GitHub and verify against that directly:
gh attestation verify <file-path of downloaded artifact> --bundle <file-path of downloaded attestation>0.14.0
Release Notes
Minor Changes
-
dc561e0: Add
--upload-content-typeflag and smart MIME inference for multipart uploadsPreviously, multipart uploads used the metadata
mimeTypefield for both the Drive
metadata and the media part'sContent-Typeheader. This made it impossible to upload
a file in one format (e.g. Markdown) and have Drive convert it to another (e.g. Google Docs),
because the mediaContent-Typeand the targetmimeTypemust differ for import conversions.The new
--upload-content-typeflag allows setting the mediaContent-Typeexplicitly.
When omitted, the media type is now inferred from the file extension before falling back
to the metadatamimeType. This matches Google Drive's model where metadatamimeType
is the target type (what the file should become) while the mediaContent-Typeis the
source type (what the bytes are).This means import conversions now work automatically:
# Extension inference detects text/markdown → conversion just works gws drive files create \ --json '{"name":"My Doc","mimeType":"application/vnd.google-apps.document"}' \ --upload notes.md # Explicit flag still available as an override gws drive files create \ --json '{"name":"My Doc","mimeType":"application/vnd.google-apps.document"}' \ --upload notes.md \ --upload-content-type text/markdown
Patch Changes
- 945ac91: Stream multipart uploads to avoid OOM on large files. File content is now streamed in chunks via
ReaderStreaminstead of being read entirely into memory, reducing memory usage from O(file_size) to O(64 KB).
Install gws 0.14.0
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/googleworkspace/cli/releases/download/v0.14.0/gws-installer.sh | shInstall prebuilt binaries via powershell script
powershell -ExecutionPolicy Bypass -c "irm https://github.com/googleworkspace/cli/releases/download/v0.14.0/gws-installer.ps1 | iex"Install prebuilt binaries into your npm project
npm install @googleworkspace/cli@0.14.0Download gws 0.14.0
| File | Platform | Checksum |
|---|---|---|
| gws-aarch64-apple-darwin.tar.gz | Apple Silicon macOS | checksum |
| gws-x86_64-apple-darwin.tar.gz | Intel macOS | checksum |
| gws-x86_64-pc-windows-msvc.zip | x64 Windows | checksum |
| gws-aarch64-unknown-linux-gnu.tar.gz | ARM64 Linux | checksum |
| gws-x86_64-unknown-linux-gnu.tar.gz | x64 Linux | checksum |
| gws-aarch64-unknown-linux-musl.tar.gz | ARM64 MUSL Linux | checksum |
| gws-x86_64-unknown-linux-musl.tar.gz | x64 MUSL Linux | checksum |
Verifying GitHub Artifact Attestations
The artifacts in this release have attestations generated with GitHub Artifact Attestations. These can be verified by using the GitHub CLI:
gh attestation verify <file-path of downloaded artifact> --repo googleworkspace/cliYou can also download the attestation from GitHub and verify against that directly:
gh attestation verify <file-path of downloaded artifact> --bundle <file-path of downloaded attestation>0.13.3
Release Notes
Patch Changes
- 8ef27a2: fix(calendar): use local timezone for agenda day boundaries instead of UTC
- 4d7b420: Fix
+append --json-valuesflattening multi-row arrays into a single row by preserving theVec<Vec<String>>row structure through to the API request body - bb94016: fix(security): validate space name in chat +send to prevent path traversal
- 4b827cd: chore: fix maintainer email typo in flake.nix and harden coverage.sh
- 44767ed: Map People service to
contactsanddirectoryscope prefixes sogws auth login -s peopleincludes the required OAuth scopes - 8fce003: fix(docs): correct flag names in recipes (--spreadsheet-id, --attendees, --duration)
- 21b1840: Expose
repeated: trueingws schemaoutput and expand JSON arrays into repeated query parameters forrepeatedfields - 1346d47: Sync generated skills with latest Google Discovery API specs
- 957b999: test(gmail): add unit tests for +triage argument parsing and format selection
Install gws 0.13.3
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/googleworkspace/cli/releases/download/v0.13.3/gws-installer.sh | shInstall prebuilt binaries via powershell script
powershell -ExecutionPolicy Bypass -c "irm https://github.com/googleworkspace/cli/releases/download/v0.13.3/gws-installer.ps1 | iex"Install prebuilt binaries into your npm project
npm install @googleworkspace/cli@0.13.3Download gws 0.13.3
| File | Platform | Checksum |
|---|---|---|
| gws-aarch64-apple-darwin.tar.gz | Apple Silicon macOS | checksum |
| gws-x86_64-apple-darwin.tar.gz | Intel macOS | checksum |
| gws-x86_64-pc-windows-msvc.zip | x64 Windows | checksum |
| gws-aarch64-unknown-linux-gnu.tar.gz | ARM64 Linux | checksum |
| gws-x86_64-unknown-linux-gnu.tar.gz | x64 Linux | checksum |
| gws-aarch64-unknown-linux-musl.tar.gz | ARM64 MUSL Linux | checksum |
| gws-x86_64-unknown-linux-musl.tar.gz | x64 MUSL Linux | checksum |
Verifying GitHub Artifact Attestations
The artifacts in this release have attestations generated with GitHub Artifact Attestations. These can be verified by using the GitHub CLI:
gh attestation verify <file-path of downloaded artifact> --repo googleworkspace/cliYou can also download the attestation from GitHub and verify against that directly:
gh attestation verify <file-path of downloaded artifact> --bundle <file-path of downloaded attestation>0.13.2
Release Notes
Patch Changes
- 3dcf818: Refresh OAuth access tokens for long-running Gmail watch and Workspace Events subscribe helpers before each Pub/Sub and Gmail request.
- 86ea6de: Validate
--subscriptionresource name ingmail +watchand deduplicatePUBSUB_API_BASEconstant.
Install gws 0.13.2
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/googleworkspace/cli/releases/download/v0.13.2/gws-installer.sh | shInstall prebuilt binaries via powershell script
powershell -ExecutionPolicy Bypass -c "irm https://github.com/googleworkspace/cli/releases/download/v0.13.2/gws-installer.ps1 | iex"Install prebuilt binaries into your npm project
npm install @googleworkspace/cli@0.13.2Download gws 0.13.2
| File | Platform | Checksum |
|---|---|---|
| gws-aarch64-apple-darwin.tar.gz | Apple Silicon macOS | checksum |
| gws-x86_64-apple-darwin.tar.gz | Intel macOS | checksum |
| gws-x86_64-pc-windows-msvc.zip | x64 Windows | checksum |
| gws-aarch64-unknown-linux-gnu.tar.gz | ARM64 Linux | checksum |
| gws-x86_64-unknown-linux-gnu.tar.gz | x64 Linux | checksum |
| gws-aarch64-unknown-linux-musl.tar.gz | ARM64 MUSL Linux | checksum |
| gws-x86_64-unknown-linux-musl.tar.gz | x64 MUSL Linux | checksum |
Verifying GitHub Artifact Attestations
The artifacts in this release have attestations generated with GitHub Artifact Attestations. These can be verified by using the GitHub CLI:
gh attestation verify <file-path of downloaded artifact> --repo googleworkspace/cliYou can also download the attestation from GitHub and verify against that directly:
gh attestation verify <file-path of downloaded artifact> --bundle <file-path of downloaded attestation>0.13.1
Release Notes
Patch Changes
- 510024f: Centralize token cache filenames as constants and support ServiceAccount credentials at the default plaintext path
- 510024f: Auto-recover from stale encrypted credentials after upgrade: remove undecryptable
credentials.encand fall through to other credential sources (plaintext, ADC) instead of hard-erroring. Also sync encryption key file backup when keyring has key but file is missing. - e104106: Add shell tips section to gws-shared skill warning about zsh
!history expansion, and replace single quotes with double quotes around sheet ranges containing!in recipes and skill examples
Install gws 0.13.1
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/googleworkspace/cli/releases/download/v0.13.1/gws-installer.sh | shInstall prebuilt binaries via powershell script
powershell -ExecutionPolicy Bypass -c "irm https://github.com/googleworkspace/cli/releases/download/v0.13.1/gws-installer.ps1 | iex"Install prebuilt binaries into your npm project
npm install @googleworkspace/cli@0.13.1Download gws 0.13.1
| File | Platform | Checksum |
|---|---|---|
| gws-aarch64-apple-darwin.tar.gz | Apple Silicon macOS | checksum |
| gws-x86_64-apple-darwin.tar.gz | Intel macOS | checksum |
| gws-x86_64-pc-windows-msvc.zip | x64 Windows | checksum |
| gws-aarch64-unknown-linux-gnu.tar.gz | ARM64 Linux | checksum |
| gws-x86_64-unknown-linux-gnu.tar.gz | x64 Linux | checksum |
| gws-aarch64-unknown-linux-musl.tar.gz | ARM64 MUSL Linux | checksum |
| gws-x86_64-unknown-linux-musl.tar.gz | x64 MUSL Linux | checksum |
Verifying GitHub Artifact Attestations
The artifacts in this release have attestations generated with GitHub Artifact Attestations. These can be verified by using the GitHub CLI:
gh attestation verify <file-path of downloaded artifact> --repo googleworkspace/cliYou can also download the attestation from GitHub and verify against that directly:
gh attestation verify <file-path of downloaded artifact> --bundle <file-path of downloaded attestation>0.12.0
Release Notes
Minor Changes
-
247e27a: Add structured exit codes for scriptable error handling
gwsnow exits with a type-specific code instead of always using1:Code Meaning 0Success 1API error — Google returned a 4xx/5xx response 2Auth error — credentials missing, expired, or invalid 3Validation error — bad arguments, unknown service, invalid flag 4Discovery error — could not fetch the API schema document 5Internal error — unexpected failure Exit codes are documented in
gws --helpand in the README.
Patch Changes
- 087066f: Fix
gws auth loginencrypted credential persistence by enabling native keyring backends for thekeyringcrate on supported desktop platforms instead of silently falling back to the in-memory mock store.
Install gws 0.12.0
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/googleworkspace/cli/releases/download/v0.12.0/gws-installer.sh | shInstall prebuilt binaries via powershell script
powershell -ExecutionPolicy Bypass -c "irm https://github.com/googleworkspace/cli/releases/download/v0.12.0/gws-installer.ps1 | iex"Install prebuilt binaries into your npm project
npm install @googleworkspace/cli@0.12.0Download gws 0.12.0
| File | Platform | Checksum |
|---|---|---|
| gws-aarch64-apple-darwin.tar.gz | Apple Silicon macOS | checksum |
| gws-x86_64-apple-darwin.tar.gz | Intel macOS | checksum |
| gws-x86_64-pc-windows-msvc.zip | x64 Windows | checksum |
| gws-aarch64-unknown-linux-gnu.tar.gz | ARM64 Linux | checksum |
| gws-x86_64-unknown-linux-gnu.tar.gz | x64 Linux | checksum |
| gws-aarch64-unknown-linux-musl.tar.gz | ARM64 MUSL Linux | checksum |
| gws-x86_64-unknown-linux-musl.tar.gz | x64 MUSL Linux | checksum |
Verifying GitHub Artifact Attestations
The artifacts in this release have attestations generated with GitHub Artifact Attestations. These can be verified by using the GitHub CLI:
gh attestation verify <file-path of downloaded artifact> --repo googleworkspace/cliYou can also download the attestation from GitHub and verify against that directly:
gh attestation verify <file-path of downloaded artifact> --bundle <file-path of downloaded attestation>0.11.1
Release Notes
Patch Changes
- adbca87: Fix
--format csvfor array-of-arrays responses (e.g. Sheets values API)
Install gws 0.11.1
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/googleworkspace/cli/releases/download/v0.11.1/gws-installer.sh | shInstall prebuilt binaries via powershell script
powershell -ExecutionPolicy Bypass -c "irm https://github.com/googleworkspace/cli/releases/download/v0.11.1/gws-installer.ps1 | iex"Install prebuilt binaries into your npm project
npm install @googleworkspace/cli@0.11.1Download gws 0.11.1
| File | Platform | Checksum |
|---|---|---|
| gws-aarch64-apple-darwin.tar.gz | Apple Silicon macOS | checksum |
| gws-x86_64-apple-darwin.tar.gz | Intel macOS | checksum |
| gws-x86_64-pc-windows-msvc.zip | x64 Windows | checksum |
| gws-aarch64-unknown-linux-gnu.tar.gz | ARM64 Linux | checksum |
| gws-x86_64-unknown-linux-gnu.tar.gz | x64 Linux | checksum |
| gws-aarch64-unknown-linux-musl.tar.gz | ARM64 MUSL Linux | checksum |
| gws-x86_64-unknown-linux-musl.tar.gz | x64 MUSL Linux | checksum |
Verifying GitHub Artifact Attestations
The artifacts in this release have attestations generated with GitHub Artifact Attestations. These can be verified by using the GitHub CLI:
gh attestation verify <file-path of downloaded artifact> --repo googleworkspace/cliYou can also download the attestation from GitHub and verify against that directly:
gh attestation verify <file-path of downloaded artifact> --bundle <file-path of downloaded attestation>