Skip to content

Ship to Google Play from your terminal

gplay is a single static binary for the Google Play Developer API: releases, staged rollouts, store listings, reviews, compliance, and team management, driven from a CI pipeline or a coding agent. JSON output is the API response verbatim, and no Ruby ships with your image: gplay replaces Fastlane supply.

$ brew install PollyGlot/tap/gplay more options ↓

commands
131
namespaces
24
static binary
1
runtime deps
0

Built for pipelines, not demos

Every design decision is documented in public architecture decision records. These are the load-bearing ones.

One static binary

Written in Go. No Ruby, no Node, no Python in your CI image: one file, fast cold start, trivial caching.

CI-first output

TTY-aware: tables for humans, raw Google Play API JSON in pipes and CI. stdout carries data only; logs go to stderr.

Semantic exit codes

Exit 40/50 mean "retry me", exit 3 names the missing safety flag, the rest fail fast. Retry logic without parsing error text.

Safe production defaults

Uploads and promotions to production land as drafts. Reaching real users always takes an explicit --complete or --staged, plus --confirm.

Store front as code

Pull listings and images into a fastlane-compatible tree, validate offline, diff with --dry-run, apply additively. Deletion is opt-in.

Agent-first design

Dry-runs announce the safety flags a write needs, the API schema is introspectable offline, and the docs ship as llms.txt.

The command surface

131 commands across 24 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 appstore [experimental] Alternative app store operations (catalog export, hosted app review) gplay auth Manage gplay credentials gplay compliance Manage an app's regulatory declarations (Data Safety, ...) gplay customapps [experimental] Create managed Google Play private apps (organisation-scoped) gplay device-tiers [experimental] Manage device tier configs (device-targeting for tiered delivery) gplay edits Manage explicit Edit transactions (begin, validate, commit, discard, status) gplay exit-codes Explain gplay's semantic exit codes gplay games [experimental] Configure a game's Play Games Services resources (achievements, leaderboards) gplay iap [experimental] Pull and apply the app's one-time-product catalog as files (declarative) gplay install-skills Install the gplay companion agent skills (requires git) gplay metadata Manage Store front Listings (per-locale title/description/video) gplay orders [experimental] Look up, refund and reconcile Google Play orders (admin commerce surface) gplay recovery [experimental] Manage app recovery actions (incident-response remediation for a bad release) gplay releases Manage app releases (upload, promote, rollout) gplay reports [experimental] Read the monthly Bulk reports (installs, ...) from the Reporting bucket gplay reviews Read and reply to user reviews gplay schema [experimental] Introspect the Android Publisher API surface offline gplay signing [experimental] Manage Play App Signing with a self-hosted Cloud KMS key (enterprise key custody) gplay subscriptions [experimental] Pull and apply the app's subscription catalog as files (declarative) 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 vitals Read post-launch quality signals (crashes, ANRs, …) from Play vitals

A CLI your AI agent already understands

Nothing in gplay assumes a human at the keyboard. 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

$ gplay install-skills

Seventeen skills, one per workflow plus a conventions foundation, each documenting the safe command sequence it covers, for Claude Code and compatible tools. Fetched with git from a pinned commit, so no package runner and no Node. Browse the roster.

Install

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/gplay

macOS and Linux.

FAQ

What is gplay?

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.

How is gplay different from Fastlane supply?

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.

Does gplay work in CI?

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.

Can AI agents drive gplay?

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, installed with gplay install-skills from a commit pinned inside the binary.

Is gplay free?

Yes, open source under the MIT license. The source, issue tracker, and architecture decision records are public on GitHub.

Is gplay affiliated with Google?

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.