Tracks & releases
Tracks
Section titled “Tracks”Google Play provisions four standard tracks for every app, in promotion
order: internal, alpha, beta, production. Beyond those, an app can
have closed tracks with custom names (qa-team, external-beta, …) —
the only kind gplay can create, because closed testing is the only type the
API's create endpoint supports:
gplay tracks create qa-teamThere is no tracks delete — the API exposes none; removing a track is a
Play Console-only gesture.
The --track flag on release commands is passthrough: any string is
accepted, so closed tracks work everywhere the four standard names do. A
typo'd track name fails at the API — gplay never auto-creates a track as a
side effect.
Safe production defaults
Section titled “Safe production defaults”What status a new release gets depends on the target track:
| Target track | Default status | Default userFraction |
|---|---|---|
production | draft | — |
internal / alpha / beta / closed | completed | 1.0 |
Shipping to real users is always explicit: --complete (100%) or
--staged <fraction>, and on production those additionally require
--confirm. Everything else defaults to the behavior you'd expect from a
testing track.
The rollout state machine
Section titled “The rollout state machine”Each transition on a staged production rollout is its own verb:
gplay releases rollout --track production --to 0.05 # set userFractiongplay releases halt --track production # pause on bad metricsgplay releases resume --track production # continuegplay releases complete --track production # → 100%, completedTargeting a release
Section titled “Targeting a release”releases upload <aab>reads the versionCode from the AAB — never a flag, so it can't disagree with the artifact.promote/rollout/halt/resume/completetarget the latest release on the track. Override with--version-code Nor--release-name <name>. If two releases coexist on the track (e.g. oneinProgressand onehalted) and no selector is passed, gplay refuses with exit60rather than guess.
Release notes
Section titled “Release notes”Two mutually exclusive flags on releases upload:
--release-notes "<text>"— one text, applied to the app's default language.--release-notes-dir <dir>— one file per locale (en-US.txt,fr-FR.txt, …), with an optionaldefault.txtfallback for locales without a dedicated file.
Country availability
Section titled “Country availability”Per-track country availability (syncWithProduction, restOfWorld,
targeted countries) is read-only on the API, so gplay surfaces it as a
read: gplay tracks availability view --track production. Changing it is a
Play Console gesture.