One static binary
Written in Go. No Ruby, no Node, no Python in your CI image — one file, fast cold start, trivial caching.
gplay is a fast, single-binary CLI for the Google Play Developer API. Releases, staged rollouts, store listings, reviews, compliance, and team management — built for CI pipelines and AI agents, designed to replace Fastlane on Android pipelines.
$ brew install PollyGlot/tap/gplay more options ↓
$ gplay releases upload app.aab --track internal \
--release-notes-dir ./whatsnew
versionCode: 421
track: internal
status: completed
userFraction: 1
releaseName: 421
locales: [en-US fr-FR]
$ gplay releases promote --from internal --to beta
$ gplay releases rollout --track production \
--to 0.10 --confirm Every design decision is documented in public architecture decision records. These are the load-bearing ones.
Written in Go. No Ruby, no Node, no Python in your CI image — one file, fast cold start, trivial caching.
TTY-aware: tables for humans, raw Google Play API JSON in pipes and CI. stdout carries data only; logs go to stderr.
Exit 40/50 mean "retry me", exit 3 names the missing safety flag, the rest fail fast. Retry logic without parsing error text.
Uploads and promotions to production land as drafts. Reaching real users always takes an explicit --complete or --staged, plus --confirm.
Pull listings and images into a fastlane-compatible tree, validate offline, diff with --dry-run, apply additively. Deletion is opt-in.
Dry-runs announce the safety flags a write needs, the API schema is introspectable offline, and the docs ship as llms.txt.
46 commands across 10 namespaces — every page of the
CLI reference is generated from the binary's own --help,
so docs never drift from the tool.
gplay apps Manage Android packages registered with gplay
gplay auth Manage gplay credentials
gplay compliance Manage an app's regulatory declarations (Data Safety, ...)
gplay metadata Manage Store front Listings (per-locale title/description/video)
gplay releases Manage app releases (upload, promote, rollout)
gplay reviews Read and reply to user reviews
gplay schema [experimental] Introspect the Android Publisher API surface offline
gplay team Manage the Developer account's members and permissions (users, grants)
gplay testers Manage the Google Groups authorized to test a track
gplay tracks Inspect and create release tracks (standard and custom closed)
gplay treats autonomous callers as first-class users. JSON output mirrors the Google
Play API schemas verbatim. A refused write names the exact safety flag it needs
(exit code 3) instead of dead-ending. --dry-run
previews any mutation without HTTP — and on team writes it returns a
requires array announcing the gates ahead.
The docs you're reading ship as llms.txt and llms-full.txt, including the full generated command reference. The agent guide spells out the whole contract.
Ready-made skills
$ npx skills add PollyGlot/google-play-cli-skills
Nine skills — one per namespace plus a conventions foundation — each documenting the safe command sequence for its workflow, for Claude Code and compatible tools. Browse the roster.
One binary, four ways to get it. Then the quickstart takes you from login to a release upload in five commands.
$ brew install PollyGlot/tap/gplaymacOS and Linux.
gplay is an open-source command-line interface for the Google Play Developer API, shipped as a single static Go binary. It uploads and promotes releases, runs staged rollouts, manages tracks and testers, syncs store listings and images, replies to reviews, pushes Data Safety declarations, and administers Play Console users and permissions.
No Ruby runtime — gplay is one static binary, so CI images stay small and cold starts stay fast. Output is machine-stable (raw API JSON in pipes), exit codes are semantic so scripts know what is retryable, and production uploads default to draft releases instead of publishing to 100% of users. An existing fastlane metadata tree drops in unchanged.
Yes — that is its home turf. Credentials inject via the GPLAY_SERVICE_ACCOUNT environment variable (file path or inline JSON), CI=true switches output to JSON automatically, no command ever prompts interactively, and exit codes 40/50 mark exactly the failures worth retrying.
Yes, by design. JSON output mirrors the Google Play API schemas, refusals are machine-resolvable (exit 3 names the missing acknowledgment flag), --dry-run previews any write without HTTP, gplay schema answers API-shape questions offline, and this site publishes llms.txt and llms-full.txt. A companion repo ships ready-made agent skills: npx skills add PollyGlot/google-play-cli-skills.
Yes — open source under the MIT license. The source, issue tracker, and architecture decision records are public on GitHub.
No. gplay is an independent open-source project that uses the public Google Play Developer API. It is not endorsed by, affiliated with, or sponsored by Google LLC. "Google Play" is a trademark of Google LLC.