Every team shipping an Android app eventually hits the same wall: Fastlane
supply drags a Ruby runtime into your CI image, output meant for humans,
and generic exit codes that make retry logic guesswork. gplay is what
you'd build today if you started fresh — one static binary, no runtime,
JSON output that matches the Google Play Developer API verbatim, semantic
exit codes, safe production defaults.
Two ways to drive it: the raw CLI (flags, scripts, CI) or agent skills that run it from natural-language prompts.
Public preview — pre-1.0. A broad surface is already implemented: auth, apps, releases, tracks, reviews, metadata, compliance (Data Safety), team, and closed-track testers. Breaking changes are still possible before
v1.0. See docs/BACKLOG.md for what's out of scope and ADR-0010 for the versioning policy.
- Standalone Go binary. No Ruby, no Node, no Python — one file in your CI image.
- Built for CI and agents. TTY-aware output (
tableby default,jsonin pipes), explicit flags, semantic exit codes for retry decisions. - API-faithful.
--output jsonreturns the raw Google Play Developer API response shape — no custom envelope to learn. The Google docs are the schema docs. - Safe by default on production. Uploading or promoting to the
productiontrack creates adraftrelease unless you explicitly--completeor--staged <fraction>. See ADR-0002.
All install methods are live: go install, Homebrew, the install script, and
pre-built binaries for Linux, macOS, and Windows on the
releases page.
# go install
go install github.com/PollyGlot/google-play-cli/cmd/gplay@latest
# Homebrew
brew install PollyGlot/tap/gplay
# Install script
curl -fsSL https://gplay.sh/install | shThe install script verifies the archive's SHA-256 against the release
checksums.txt and fails closed — a missing, incomplete, or mismatched
checksum aborts the install. Set GPLAY_INSTALL_NO_VERIFY=1 to bypass (prints
a warning, greppable in CI). To add cosign and provenance checks on top, see
Verify a release.
# Point gplay at a Google Cloud service account JSON.
gplay auth login --service-account ./service_account.json
# List configured accounts and see which one is active.
gplay auth list
gplay auth status
# Verify the SA actually has access to your app.
gplay auth doctor --package com.example.myapp
# Bootstrap a project-local config (cascading: project → user → defaults).
gplay initFull command reference: gplay --help (or gplay <subcommand> --help).
gplay is built to be driven by AI agents, not just typed by hand. Agent
skills turn a natural-language prompt into the right gplay invocation, with
the safety rails baked in:
"Promote the latest internal build of com.example.myapp to beta." → the
gplay-release-flowskill runsgplay releases promote --from internal --to betafor you.
Skills live in a companion repo —
PollyGlot/google-play-cli-skills.
Each is a folder with a SKILL.md documenting its intent, the commands it
runs, and the rails it enforces. The roster is fixed by
ADR-0021: one skill per shipped
namespace, plus a gplay-cli-usage foundation.
npx skills add PollyGlot/google-play-cli-skills| Skill | Drives |
|---|---|
gplay-cli-usage |
Cross-cutting conventions (foundation) |
gplay-setup |
Auth onboarding |
gplay-apps |
Apps registry + details |
gplay-release-flow |
upload / promote / rollout |
gplay-tracks |
Tracks + testers |
gplay-reviews |
reviews list / reply |
gplay-metadata-sync |
Listings + images |
gplay-compliance |
Data Safety |
gplay-team |
users / grants / permissions |
gplay-vitals and gplay-subscription-management are gated until those CLI
surfaces land (#49,
#51).
The CLI the skills above drive — all working today (public preview):
# Upload an AAB to the internal track, with localized release notes.
gplay releases upload app.aab \
--package com.example.myapp \
--track internal \
--release-notes-dir ./whatsnew
# Promote the latest internal build to beta.
gplay releases promote --package com.example.myapp --from internal --to beta
# Stage a production rollout, then advance it.
gplay releases rollout --package com.example.myapp --track production --to 0.10
# Read the most recent reviews (API exposes the last 7 days only) and reply.
gplay reviews list --package com.example.myapp --stars 1-2
gplay reviews reply --review-id REVIEW_ID --reply "Thanks for the feedback!"Documentation-first: decisions are pinned before code so contributors and agents converge.
- CLAUDE.md — project context and agent working instructions (read order, conventions, build/test, PR gate).
- CONTEXT.md — glossary of canonical terms (Edit, Account, Project, ...). Use them verbatim.
- docs/DESIGN.md — CLI conventions across commands (auth precedence, exit codes, output format, verbosity, edit lifecycle).
- docs/BACKLOG.md — explicitly out-of-scope features.
- docs/CI_CD.md — how to wire
gplayinto a CI pipeline (GitHub Actions example). - docs/adr/ — Architecture Decision Records.
Confirm an artifact came from this repo's release pipeline (cosign + provenance).
Every release publishes a cosign signature over checksums.txt and a GitHub
build-provenance attestation over each archive — two independent ways to
confirm an artifact really came from this repo's release pipeline before you
trust it in CI.
# 1. Build-provenance attestation (needs the GitHub CLI; no extra download).
# Proves the archive was built by this repo's release workflow.
gh attestation verify gplay_<version>_<os>_<arch>.tar.gz \
-R PollyGlot/google-play-cli
# 2. cosign signature over checksums.txt (needs cosign). The checksum file
# transitively covers every archive it lists, so verify it, then check
# your archive against it.
cosign verify-blob checksums.txt \
--bundle checksums.txt.sigstore.json \
--certificate-identity-regexp '^https://github.com/PollyGlot/google-play-cli/\.github/workflows/release\.yml@' \
--certificate-oidc-issuer https://token.actions.githubusercontent.com
shasum -a 256 -c <(grep " gplay_<version>_<os>_<arch>.tar.gz$" checksums.txt)Download checksums.txt and checksums.txt.sigstore.json from the same
release as the
archive. The install script already checks the SHA-256 against checksums.txt
and fails closed; these commands add provenance and signature
verification on top.
See CONTRIBUTING.md. TL;DR: open an issue first for
anything bigger than a typo, branch from main, open a PR.
MIT — © 2026 Pavlo Trinko and contributors.
gplay is an independent open-source project. It uses the public Google
Play Developer API and is not endorsed by, affiliated with, or sponsored by
Google LLC. "Google Play" is a trademark of Google LLC.
