App-Store-Connect-CLI is a free, open source cloud infrastructure management project written in Go and released under MIT. It has 7,270 GitHub stars, 613 forks and 89 open issues, and was last pushed 6 hours ago. On this registry it ranks #32 of 70 tracked projects in Cloud Infrastructure Management, with 5 head-to-head comparisons available.

What is App-Store-Connect-CLI?

App-Store-Connect-CLI is a Go-based, MIT-licensed command-line tool that exposes the App Store Connect API so iOS, macOS, tvOS, and visionOS teams can automate TestFlight, builds, submissions, signing, analytics, screenshots, and subscriptions from a terminal, an IDE, or a CI/CD pipeline.

What it is

App-Store-Connect-CLI is an open-source, Go-written CLI for the App Store Connect API, published under the MIT licence and developed in the open with 7,270 stars, 613 forks, and 89 open issues at the time of this entry. It sits in the Infrastructure & Operations / Cloud Infrastructure Management category and targets the Apple developer ecosystem, with topics that name app-store-connect, apple, automation, cicd, cli, command-line-tool, developer-tools, devops, go, golang, ios, and macos. Its homepage is asccli.sh, and its last documented push was 2026-09-17. The project describes itself as fast, lightweight, and scriptable, and it is designed to drive iOS, macOS, tvOS, and visionOS release workflows from wherever the developer already works.

The concrete problem it solves is the gap between the App Store Connect API and everyday release work. Apple's release surface spans builds, TestFlight distribution, metadata, submissions, signing, analytics, screenshots, and subscriptions, and reaching it usually means either clicking through a web interface or hand-rolling HTTP calls inside bespoke scripts. This tool replaces that ad hoc scripting and manual effort with one binary and a consistent set of subcommands, and it is built to behave sensibly in both interactive and non-interactive contexts: it selects a default output of table when stdout is a TTY and json when stdout is piped, redirected to a file, or running in CI, while explicit flags always win. Authentication can be keychain-backed on a developer machine or config-backed where no keychain exists, which is the shape CI runners need.

Key capabilities

  • Authenticate with asc auth login using --name, --key-id, --issuer-id, and --private-key; individual API keys omit the issuer ID and pass --key-type individual.
  • Configure headless environments with --bypass-keychain for CI runners and shells where keychain access is unavailable.
  • Validate credentials with asc auth status --validate and asc auth doctor.
  • List apps with asc apps list, choosing --output table or --output json --pretty, and set a persistent default through ASC_DEFAULT_OUTPUT=markdown.
  • Install 25 Agent Skills through asc install-skills, pinned to reviewed commit f52c4f04323bb2dfb21ca8be82e6494e9cd0b4d8, requiring only git, verifying every installed file, preserving unrelated skills and lock entries, and rolling back the pack if a replacement fails.
  • Automate TestFlight, builds, submissions, signing, analytics, screenshots, and subscriptions through the same CLI.
  • Surface deprecation warnings that name the migration path and the command's long-term replacement.

Who uses it and how

  • Release engineers running headless CI jobs, where --bypass-keychain combined with config-backed authentication keeps pipelines working without a keychain.
  • Mobile teams shipping across iOS, macOS, tvOS, and visionOS who want build, TestFlight, and submission steps driven from the terminal rather than a browser session.
  • Automation and DevOps engineers scripting analytics pulls, screenshot handling, and subscription management inside existing shell or CI workflows.
  • Agent-driven workflows, where the global skill pack installed by asc install-skills covers builds, TestFlight, metadata sync, submissions, and signing across multiple projects.
  • Windows users who install through signed release binaries downloaded from the GitHub releases page while the WinGet package awaits acceptance, tracked in GitHub Discussion #1552.

Getting started

Install with brew install asc on Homebrew, or run curl -fsSL https://asccli.sh/install | bash on macOS and Linux; Windows uses winget install --id Rorkai.ASC --exact once accepted, with signed release binaries as the fallback. From there, asc auth login configures credentials and asc auth status --validate confirms they work.

How it compares

The facts for this entry name no similar tools and provide no list of paid products that App-Store-Connect-CLI replaces, so no licence, self-hosting, or cost-model contrast can be drawn here. Within this registry it stands alone as the scriptable CLI for the App Store Connect API.

When to use it — and when not to

Anyone running it must already hold App Store Connect API credentials, meaning a key ID, a private key file such as AuthKey.p8, and an issuer ID for team keys, and must choose between keychain-backed and config-backed storage. Teams that never touch Apple release infrastructure, or that prefer GUI-only workflows and hold no API keys, should not pick it up. The WinGet package is not yet accepted, the install section of the README is command-heavy, and 89 issues remain open, so prospective users should expect to track releases and read the documentation closely.

project readme (upstream, from github) — read inline

App Store Connect CLI

Latest Release GitHub Stars Go version from go.mod License Homebrew

A fast, lightweight, and scriptable CLI for the App Store Connect API. Automate iOS, macOS, tvOS, and visionOS release workflows from your terminal, IDE, or CI/CD pipeline.

Table of Contents

asc skills

Agent Skills for automating asc workflows including builds, TestFlight, metadata sync, submissions, and signing: https://github.com/rorkai/app-store-connect-cli-skills

Install them globally so they are available across projects:

asc install-skills

asc install-skills checks out reviewed commit f52c4f04323bb2dfb21ca8be82e6494e9cd0b4d8 and copies its 25 skills directly into the standard global agent-skills directory. It verifies the complete pack and every installed file before succeeding, preserves unrelated skills and unrelated lock entries, and pins the 25 ASC lock entries to the same reviewed commit so external checks cannot update them from a mutable branch. It rolls back the pack if any replacement fails. Only git is required; the command does not execute Node.js, npx, an npm package, or repository scripts.

git --version
asc install-skills

Quick Start

If you want to confirm the binary works before configuring authentication:

asc version
asc --help

1. Install

# Homebrew (recommended)
brew install asc

# Install script (macOS/Linux)
curl -fsSL https://asccli.sh/install | bash
# Windows (WinGet, once the package is accepted)
winget install asc

# Exact fallback when scripting
winget install --id Rorkai.ASC --exact

The WinGet package is tracked in GitHub Discussion #1552. Until it appears in winget search asc, Windows users can download the signed release binaries directly from the GitHub releases page.

For source builds and contributor setup, see CONTRIBUTING.md. Released binaries are self-contained and do not require a Go installation; source builds use the toolchain version declared by go.mod.

2. Authenticate

asc auth login \
  --name "MyApp" \
  --key-id "ABC123" \
  --issuer-id "DEF456" \
  --private-key /path/to/AuthKey.p8 \
  --network

Individual API keys have no issuer ID. Omit --issuer-id and pass --key-type individual:

asc auth login \
  --name "MyIndividualKey" \
  --key-id "ABC123" \
  --key-type individual \
  --private-key /path/to/AuthKey.p8

Generate API keys at: https://appstoreconnect.apple.com/access/integrations/api

If you are running in CI, a headless shell, or a machine where keychain access is not available, use config-backed auth instead:

asc auth login \
  --bypass-keychain \
  --name "MyCIKey" \
  --key-id "ABC123" \
  --issuer-id "DEF456" \
  --private-key /path/to/AuthKey.p8

3. Validate auth

asc auth status --validate
asc auth doctor

4. First command

asc apps list --output table
asc apps list --output json --pretty

Output defaults (TTY-aware)

asc chooses a default --output based on where stdout is connected:

  • Interactive terminal (TTY): table
  • Non-interactive output (pipes/files/CI): json

You can still set a global preference:

export ASC_DEFAULT_OUTPUT=markdown

And explicit flags always win:

asc apps list --output json

Compatibility

Commands are supported as documented. Deprecation warnings identify the available migration path and the command's long-term replacement.

Troubleshooting

Homebrew

  • Refresh Homebrew first: brew update && brew upgrade asc
  • Check which binary you are running: which asc
  • Confirm the installed version: asc version
  • If Homebrew is behind the latest GitHub release, use the install script from https://asccli.sh/install

WinGet

  • Refresh WinGet sources first: winget source update
  • Prefer the short install once available: winget install asc
  • If the short name ever becomes ambiguous, use the package identifier: winget install --id Rorkai.ASC --exact
  • Confirm the installed command resolves: Get-Command asc and asc version

Authentication

  • Validate the active profile: asc auth status --validate
  • Run the auth health check: asc auth doctor
  • If keychain access is blocked, retry with ASC_BYPASS_KEYCHAIN=1 or re-run asc auth login --bypass-keychain
  • Use asc auth login --local --bypass-keychain ... when you want repo-local credentials in ./.asc/config.json

Apple service health

  • Check Apple's developer services without credentials: asc system-status
  • Narrow unexpected API or upload failures: asc system-status --service "App Store Connect"
  • Poll only when requested: asc system-status --watch --poll-interval 30s
  • Use --issues-only for a concise incident view; summary counts still cover all matched services

Output

  • asc defaults to table in an interactive terminal and json in pipes, files, and CI
  • Use an explicit format when scripting or sharing repro steps: --output json, --output table, or --output markdown
  • Use --pretty with JSON when you want readable output in terminals or bug reports
  • Set a personal default with ASC_DEFAULT_OUTPUT, but remember --output always wins

Privacy and telemetry

asc sends pseudonymous command-level usage telemetry by default to help maintainers understand which commands are used and where reliability work is needed. Local events include a random installation ID, which lets events from one installation be grouped over time; it is not derived from an Apple account or machine identifier.

Telemetry includes the CLI version, operating system and architecture, registered command path, duration, runtime context, invocation source, a bounded outcome class, and the HTTP status when an API request fails. It may include a sanitized public flag name. It does not include raw arguments, stderr, error messages, flag values, response bodies, credentials, private keys, Apple account, team, or issuer IDs, app or bundle IDs, usernames, hostnames, repository names, or file paths.

Review or change telemetry at any time:

asc telemetry status
asc telemetry disable
asc telemetry reset-id

ASC_TELEMETRY_DISABLED=1 and DO_NOT_TRACK=1 also disable telemetry. See the telemetry reference for the exact event payload, runtime handling, collector endpoint, and all controls.

Support

  • Use GitHub Discussions for install help, authentication setup, workflow advice, and "how do I...?" questions
  • Use GitHub Issues for reproducible bugs and concrete feature requests
  • See SUPPORT.md for the support policy and bug-report checklist
  • Before filing an auth or API bug, retry with ASC_BYPASS_KEYCHAIN=1; if it is safe to do so, include redacted output from ASC_DEBUG=api asc ... or asc --api-debug ...

Wall of Apps

See the Wall of Apps →

Want to add yours? asc apps wall submit --app "1234567890" --confirm

The command uses your authenticated gh session to fork the repo and open a pull request that updates docs/wall-of-apps.json. It resolves the public App Store name, URL, and icon from the app ID automatically. For manual entries that are not on the public App Store yet, use --link with --name. Use asc apps wall submit --dry-run to preview the fork, branch, and PR plan before creating anything.

Common Workflows

TestFlight feedback and crashes

a

readme truncated — read the full docs on github

Frequently asked questions

Is App-Store-Connect-CLI free to use?

App-Store-Connect-CLI is open source under the MIT licence. There is no licence fee and no seat count — you can self-host it or, where the project offers one, pay a vendor for a managed version instead.

What does App-Store-Connect-CLI do?

Fast, scriptable CLI for the App Store Connect API. Automate TestFlight, builds, submissions, signing, analytics, screenshots, subscriptions, and more

What is App-Store-Connect-CLI written in?

App-Store-Connect-CLI is primarily written in Go. Its source is publicly available at https://github.com/rorkai/App-Store-Connect-CLI, and it has 7,270 GitHub stars.