v0.14.0
googleworkspace/cliv0.14.0Mar 13, 2026by github-actions[bot]
AI Summary
Minor release improving Drive file upload handling and memory efficiency.
Key Highlights
- Added --upload-content-type flag for smart MIME inference.
- Allows file conversion by separating source MIME type from target MIME type.
- Streamed uploads to reduce memory usage from O(file_size) to O(64 KB).
New Features
- Smart MIME inference for Drive uploads.
- Streaming support for large file uploads.
Full Release Notes
## Release Notes
### Minor Changes
- dc561e0: Add `--upload-content-type` flag and smart MIME inference for multipart uploads
Previously, multipart uploads used the metadata `mimeType` field for both the Drive
metadata and the media part's `Content-Type` header. 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 media `Content-Type` and the target `mimeType` must differ for import conversions.
The new `--upload-content-type` flag allows setting the media `Content-Type` explicitly.
When omitted, the media type is now inferred from the file extension before falling back
to the metadata `mimeType`. This matches Google Drive's model where metadata `mimeType`
is the _target_ type (what the file should become) while the media `Content-Type` is the
_source_ type (what the bytes are).
This means import conversions now work automatically:
```bash
# 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 `ReaderStream` instead 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
```sh
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/googleworkspace/cli/releases/download/v0.14.0/gws-installer.sh | sh
```
### Install prebuilt binaries via powershell script
```sh
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
```sh
npm install @googleworkspace/cli@0.14.0
```
## Download gws 0.14.0
| File | Platform | Checksum |
|--------|----------|----------|
| [gws-aarch64-apple-darwin.tar.gz](https://github.com/googleworkspace/cli/releases/download/v0.14.0/gws-aarch64-apple-darwin.tar.gz) | Apple Silicon macOS | [checksum](https://github.com/googleworkspace/cli/releases/download/v0.14.0/gws-aarch64-apple-darwin.tar.gz.sha256) |
| [gws-x86_64-apple-darwin.tar.gz](https://github.com/googleworkspace/cli/releases/download/v0.14.0/gws-x86_64-apple-darwin.tar.gz) | Intel macOS | [checksum](https://github.com/googleworkspace/cli/releases/download/v0.14.0/gws-x86_64-apple-darwin.tar.gz.sha256) |
| [gws-x86_64-pc-windows-msvc.zip](https://github.com/googleworkspace/cli/releases/download/v0.14.0/gws-x86_64-pc-windows-msvc.zip) | x64 Windows | [checksum](https://github.com/googleworkspace/cli/releases/download/v0.14.0/gws-x86_64-pc-windows-msvc.zip.sha256) |
| [gws-aarch64-unknown-linux-gnu.tar.gz](https://github.com/googleworkspace/cli/releases/download/v0.14.0/gws-aarch64-unknown-linux-gnu.tar.gz) | ARM64 Linux | [checksum](https://github.com/googleworkspace/cli/releases/download/v0.14.0/gws-aarch64-unknown-linux-gnu.tar.gz.sha256) |
| [gws-x86_64-unknown-linux-gnu.tar.gz](https://github.com/googleworkspace/cli/releases/download/v0.14.0/gws-x86_64-unknown-linux-gnu.tar.gz) | x64 Linux | [checksum](https://github.com/googleworkspace/cli/releases/download/v0.14.0/gws-x86_64-unknown-linux-gnu.tar.gz.sha256) |
| [gws-aarch64-unknown-linux-musl.tar.gz](https://github.com/googleworkspace/cli/releases/download/v0.14.0/gws-aarch64-unknown-linux-musl.tar.gz) | ARM64 MUSL Linux | [checksum](https://github.com/googleworkspace/cli/releases/download/v0.14.0/gws-aarch64-unknown-linux-musl.tar.gz.sha256) |
| [gws-x86_64-unknown-linux-musl.tar.gz](https://github.com/googleworkspace/cli/releases/download/v0.14.0/gws-x86_64-unknown-linux-musl.tar.gz) | x64 MUSL Linux | [checksum](https://github.com/googleworkspace/cli/releases/download/v0.14.0/gws-x86_64-unknown-linux-musl.tar.gz.sha256) |
## 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](https://cli.github.com/manual/gh_attestation_verify):
```sh
gh attestation verify <file-path of downloaded artifact> --repo googleworkspace/cli
```
You can also download the attestation from [GitHub](https://github.com/googleworkspace/cli/attestations) and verify against that directly:
```sh
gh attestation verify <file-path of downloaded artifact> --bundle <file-path of downloaded attestation>
```