Skip to content

yasserstudio/gpc

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

259 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

GPC — Google Play Console CLI

npm version GitHub Stars TypeScript Node.js License npm downloads Documentation Tests Coverage

Ship Android apps from your terminal.

The complete CLI for Google Play — 187 API endpoints, one tool.
Releases, rollouts, metadata, vitals, reviews, subscriptions, reports, and more.
Free and open-source. MIT licensed.


App health at a glance

Everything you'd check in releases, vitals, crashes, and reviews — without opening a browser:

$ gpc status

App: com.example.myapp · My App  (fetched 10:42:01 AM)

RELEASES
  production   v1.4.2   completed    —
  beta         v1.5.0   inProgress  10%
  internal     v1.5.1   draft        —

VITALS  (last 7 days)
  crashes     0.80%  ✓    anr         0.20%  ✓
  slow starts 2.10%  ✓    slow render 4.30%  ⚠

REVIEWS  (last 30 days)
  ★ 4.6   142 new   89% positive   ↑ from 4.4

6 parallel API calls. Results in under 3 seconds. Cached for 1 hour — --cached skips the network entirely.

Exit code 6 if any vitals threshold is breached — use it as a quality gate in your CI pipeline.


Install

# npm (includes plugin support)
npm install -g @gpc-cli/cli

# Homebrew (macOS/Linux)
brew install yasserstudio/tap/gpc

# Standalone binary (no Node.js required)
curl -fsSL https://raw.githubusercontent.com/yasserstudio/gpc/main/scripts/install.sh | sh

Free. Open-source. No account required beyond your existing Google Play service account.


Quick Start

# Authenticate
gpc auth login --service-account path/to/key.json

# Verify your setup
gpc doctor

# App health at a glance — releases, vitals, and reviews in one command
gpc status

# Upload and release
gpc releases upload app.aab --track internal

# Promote to production with staged rollout
gpc releases promote --from internal --to production --rollout 10

# Monitor reviews
gpc reviews list --stars 1-3 --since 7d

Why GPC?

You shouldn't need a browser to ship your app.

Every Android release is the same ritual: open the Play Console, upload your AAB, copy-paste release notes, pick a track, set the rollout percentage, click through confirmation screens. Fifteen minutes of clicking. Every single time.

The alternative? Install Ruby, Bundler, and 150+ gems to run Fastlane — and get access to maybe 20 of 187 API endpoints. No reviews. No vitals. No subscriptions. No reports.

GPC covers the entire Google Play Developer API in one CLI — that's 187 endpoints, nothing left out. No Ruby. No browser. No ceremony.

GPC vs the alternatives

GPC Fastlane supply gradle-play-publisher Console UI
API coverage 187 endpoints ~20 ~15 All (manual)
Runtime Node.js or standalone binary Ruby + Bundler JVM Browser
Cold start <500ms 2-3s 3-5s 5-10s
Reviews & Vitals Yes No No Yes (manual)
Subscriptions & IAP Yes No No Yes (manual)
CI/CD native JSON + exit codes + env vars Partial Gradle tasks No
Plugin system Yes No No No
Interactive mode Yes (guided prompts) No No N/A
Test suite 1,551 tests, 90%+ coverage

Already on Fastlane? See the migration guide — most commands map one-to-one.


What You Can Do

Ship releases

From first upload to full production rollout — in one pipeline, without touching a browser.

gpc publish app.aab --track beta --notes "Bug fixes"      # End-to-end flow
gpc releases upload app.aab --track internal               # Upload to any track
gpc releases promote --from beta --to production --rollout 5
gpc releases rollout increase --track production --to 50
gpc releases rollout halt --track production               # Emergency brake
gpc validate app.aab --track beta                          # Pre-submission checks

Monitor app health

Know if something broke before your users do.

gpc status                                 # Releases + vitals + reviews in one view
gpc vitals crashes --threshold 2.0         # Exit code 6 if breached — CI gates
gpc vitals compare crashes --days 7        # This week vs last week
gpc vitals anr --version 142
watch -n 60 gpc status --cached            # Poll every 60 seconds (shell)

Manage store listings

Keep your store presence in sync — pull, edit locally, push. Works with Fastlane metadata format.

gpc listings pull --dir metadata/          # Download all listings
gpc listings push --dir metadata/          # Upload local changes (Fastlane format)
gpc listings images upload --lang en-US --type phoneScreenshots ./screens/*.png

Track reviews

Stay on top of what users are saying — filter, reply, and export without leaving your terminal.

gpc reviews list --stars 1-2 --since 7d
gpc reviews reply <review-id> "Thanks for the feedback!"
gpc reviews export --format csv --output reviews.csv

Handle monetization

Manage subscriptions and IAP without digging through the Play Console UI.

gpc subscriptions list
gpc subscriptions create --file subscription.json
gpc iap list
gpc iap sync --dir products/
gpc pricing convert --from USD --amount 9.99

Analyze bundle size

Catch size regressions before they ship.

gpc bundle analyze app.aab                   # Per-module + per-category breakdown
gpc bundle compare old.aab new.aab           # Size diff between builds
gpc bundle analyze app.aab --threshold 150   # Exit code 6 if > 150 MB — CI gate

Manage testers and users

gpc testers add user@example.com --track internal
gpc testers import --track beta --file testers.csv
gpc users list --developer-id <id>

See the full command reference for all 187 endpoints — including reports, purchases, data safety, device tiers, internal sharing, external transactions, and recovery actions.


CI/CD

Drop GPC into any pipeline. JSON output, semantic exit codes (0–6), env var config — no wrapper scripts needed.

GitHub Actions

- name: Install GPC
  run: npm install -g @gpc-cli/cli

- name: Upload to Internal Track
  env:
    GPC_SERVICE_ACCOUNT: ${{ secrets.GPC_SERVICE_ACCOUNT }}
    GPC_APP: com.example.myapp
  run: gpc releases upload app.aab --track internal

- name: Gate on Vitals
  run: |
    gpc vitals crashes --output json | jq -e '.data.crashRate < 2.0'

GitLab CI

deploy:
  image: node:20
  script:
    - npm install -g @gpc-cli/cli
    - gpc releases upload app.aab --track production --rollout 10
  variables:
    GPC_SERVICE_ACCOUNT: $GPC_SERVICE_ACCOUNT
    GPC_APP: com.example.myapp

Add @gpc-cli/plugin-ci for automatic GitHub Actions step summaries.

See the full CI/CD recipes for GitHub Actions, GitLab CI, Bitbucket Pipelines, and CircleCI.


Output

GPC auto-detects your environment:

  • Terminal: formatted tables you can read
  • Piped or CI: structured JSON your scripts can parse

Override when you need to:

gpc releases status --output json
gpc releases status --output yaml
gpc releases status --output markdown    # For $GITHUB_STEP_SUMMARY

Authentication

Four options — pick the one that fits. Works with your existing Google Play service account — no new credentials or extra permissions required.

Method Best for
Service account CI/CD pipelines, automation
OAuth Local development, quick setup
Environment variable Docker, ephemeral environments
ADC GCP-hosted runners (Cloud Build, GKE)
# Service account (recommended for CI/CD)
gpc auth login --service-account path/to/key.json

# OAuth (interactive — no service account setup needed)
gpc auth login

# Environment variable
export GPC_SERVICE_ACCOUNT=/path/to/key.json

# Application Default Credentials (GCP environments)
gpc auth login --adc

Manage multiple accounts with gpc auth profiles, gpc auth switch, gpc auth whoami.


Dry Run

Ship nothing. Learn everything. Every write command supports --dry-run — run your pipeline against real Play Console data without publishing a thing:

gpc releases upload app.aab --track beta --dry-run
gpc listings push --dir metadata/ --dry-run

Interactive Mode

Missing a flag? GPC asks. In your terminal, missing required options trigger guided prompts. In CI, they fail fast with clear error messages — GPC never hangs waiting for input.

gpc releases promote                               # Prompts: Source track? Target track?
gpc releases promote --from beta --to production   # No prompts

Disable all prompts: --no-interactive or GPC_NO_INTERACTIVE=1.


Packages (CLI + SDK)

GPC is a TypeScript monorepo. Use the CLI from your terminal, or import the SDK into your own projects — same API client, same auth, same reliability.

Need to integrate Play data into your own tools? Build custom dashboards, Slack bots, or internal release portals on top of the same client GPC uses:

import { createApiClient } from "@gpc-cli/api";
import { resolveAuth } from "@gpc-cli/auth";

const auth = await resolveAuth({
  serviceAccount: "./service-account.json",
});
const client = createApiClient({ auth });

const releases = await client.tracks.list("com.example.app");
const vitals = await client.vitals.overview("com.example.app");

CLI for your terminal. SDK for everything else.

Package Description
@gpc-cli/cli CLI entry point — the gpc command
@gpc-cli/core Business logic and command orchestration
@gpc-cli/api Typed Google Play Developer API v3 client
@gpc-cli/auth Authentication (service account, OAuth, ADC)
@gpc-cli/config Configuration loading and profiles
@gpc-cli/plugin-sdk Plugin interface for extensions
@gpc-cli/plugin-ci CI/CD helpers and step summaries

Environment Variables

Variable Description Default
GPC_SERVICE_ACCOUNT Service account JSON string or file path
GPC_APP Default package name
GPC_PROFILE Auth profile name
GPC_OUTPUT Default output format table (TTY) / json (pipe)
GPC_NO_COLOR Disable color output (GPC_NO_COLOR=1)
GPC_DEBUG Enable verbose debug output (GPC_DEBUG=1)
GPC_NO_INTERACTIVE Disable prompts (auto in CI)
GPC_MAX_RETRIES Max retry attempts 3
GPC_TIMEOUT Request timeout (ms) 30000

Exit Codes

Every exit code is documented — your CI knows exactly what happened and why:

Code Meaning
0 Success
1 General error
2 Usage error (bad arguments)
3 Authentication error
4 API error (rate limit, permission)
5 Network error
6 Threshold breach (vitals CI alerting)
10 Plugin error

Documentation

Full documentation at yasserstudio.github.io/gpc — full command reference, CI/CD recipes, and migration guides.


Get Help

  • GitHub Discussions — questions, ideas, show what you built
  • Issues — bug reports and feature requests
  • gpc doctor — diagnose setup problems locally

Contributing

Found a bug? Want to add a feature? Read the setup guide and jump in — first-time setup takes about 10 minutes.

git clone https://github.com/yasserstudio/gpc.git
cd gpc
pnpm install
pnpm build
pnpm test    # 1,551 tests across 7 packages

License

MIT


Star History

Star History Chart


GPC is an independent, open-source project. Not affiliated with, endorsed by, or sponsored by Google LLC. "Google Play" and the Google Play logo are trademarks of Google LLC. "Android" and "Google" are trademarks of Google LLC.

About

GPC — Google Play Console CLI. Manage releases, rollouts, metadata, vitals, and more from your terminal.

Topics

Resources

License

Code of conduct

Contributing

Security policy

Stars

Watchers

Forks

Sponsor this project

Packages

 
 
 

Contributors