storebound/docs/console-parity.md

10 KiB

Console parity: App Store Connect and Play Console in the desktop app

The desktop app (apps/desktop, desktop.md) is meant to replace App Store Connect and Play Console for everything storebound can read or write. This page lists every owner-editable thing in the two consoles that the CLI covers, and what the desktop does with it.

Columns:

  • storebound: the command that reads or writes it, and where the value lives (the source of truth in the app folder: storebound.config.ts, store/listing.md, store/appstore.md, .storebound/).
  • View: the desktop shows the current value.
  • Edit: the desktop edits it in place (validation, unsaved-changes guard, undo) and saves it into the source file.
  • Store write: the desktop writes it to the store (dry run in the window, native confirm dialog, then the real run; owner-only steps through the owner-action dialog).
  • Gap: what is missing, or why a cell stays "no" on purpose.

Status: audit before the editors (2026-10-14). Every row whose CLI can write the value but the desktop cannot edit it is a gap. Phase 2 closes them; this table is updated with the result.

App Store Connect

Console screen storebound View Edit Store write Gap
App Information > Name (per locale) apple listing (### name, apple.name, app.name) counter only no yes (apple.listing) no text editor
App Information > Subtitle apple listing (### subtitle) counter only no yes no text editor
Version > Promotional Text apple listing (### promotionalText) counter only no yes no text editor
Version > Description apple listing (### description) counter only no yes no text editor
Version > Keywords apple listing (### keywords), check --aso counter only no yes no editor, no keyword checks while typing
Version > What's New apple listing, whats-new apply (### whatsNew) no no yes no editor
Version > Support URL apple listing (app.supportUrl) no no yes not shown, no editor
Version > Marketing URL apple listing (app.marketingUrl) no no yes not shown, no editor
App Privacy > Privacy Policy URL apple listing (app.privacyPolicyUrl) no no yes not shown, no editor
Version > Copyright apple listing (app.copyright) no no yes not shown, no editor
Version > version string, build apple listing --version --build yes version field yes none
Version > Screenshots (per device, locale) shots render, apple screenshots renders no yes (apple.screenshots) no ordering or replacement of scenes
Version > App Previews shots video, apple previews renders no yes no replacement
App Information > Category, subcategories apple appinfo (apple.info.categories) yes no yes (apple.appinfo) no editor
App Information > Age Rating apple appinfo (apple.info.ageRating), console plan yes no yes no editor of the answers
App Information > Content Rights apple appinfo (apple.info.contentRights) yes no yes no editor
Pricing and Availability > Free, territories apple appinfo (apple.info.free) yes no yes no editor
Pricing and Availability > Pre-orders apple preorder no no terminal (owner) public step; terminal only
App Privacy (data types, purposes) appPrivacy.types, console fill apple-app-privacy yes no no API (console fill) no editor of the answers
App Review Information > Contact apple review-details (.storebound/credentials.json reviewContact) masked no yes (apple.review_details) no editor
App Review Information > Notes apple review-details (apple.info.reviewNotes, reviewAccess.instructions) yes no yes no editor
App Review Information > Sign-in required, demo account reviewAccess.signInRequired, credentials.json reviewDemoAccount masked no yes no editor of sign-in required
Export compliance (encryption) apple encryption (apple.usesNonExemptEncryption) yes no yes no editor
In-App Purchases > reference name, display name, description per locale apple iap (products[]) parity only no yes (apple.iap) no editor
In-App Purchases > price products[].usd, overrides, prices import yes (Prices) no yes, owner gate no editor of the base price
In-App Purchases > review note, screenshot products[].reviewNote / reviewScreenshot, apple iap-review no no yes (apple.iap_review) not shown, no editor
Subscriptions > group name per locale apple subscriptions (subscriptions[].listings) no no yes no editor
Subscriptions > name, description per locale apple subscriptions (subscriptions[].subscriptions[].listings) parity only no yes no editor
Subscriptions > level, period, price apple subscriptions parity only no yes, owner gate for live prices no editor
Subscriptions > introductory and promotional offers subscriptions[].subscriptions[].intro / offers no no yes (sync) no editor
Subscriptions > offer codes apple subscriptions (offerCodes), apple offer-codes no no terminal (owner) no editor
Subscriptions > win-back offers apple win-back (winBack) no no terminal (owner) no editor
In-App Purchases > promoted purchases apple promoted (apple.promoted) no no terminal (owner) no editor
Custom product pages apple cpp list / create / upload (apple.customProductPages) no no CLI only not in the window
In-app events apple events list / create / upload (apple.events) no no CLI only not in the window
Product Page Optimization apple ppo yes create / start / stop yes (owner start / stop) none
TestFlight > What to Test (per build) apple testflight what-to-test yes yes (text) yes per-locale text not editable
TestFlight > groups apple testflight groups sync (apple.testflight.groups) yes no yes (create missing) no group editor
TestFlight > Test Information (beta description, notes) apple testflight info (apple.testflight.description / reviewNotes) no no CLI only not in the window
TestFlight > testers owner.testflight_testers (.storebound/testers.csv) count no yes (owner) CSV not editable
Ratings and Reviews > reply reviews draft / reply / approve / send yes yes yes (owner send) none
Version > phased release owner.ios_phased yes n/a yes (owner) none
Version > Submit for review owner.apple_submit / owner.apple_resubmit yes n/a yes (owner) none

Google Play Console

Console screen storebound View Edit Store write Gap
Main store listing > App name (per language) play listing (### title, app.name) counter only no yes (play.listing) no text editor
Main store listing > Short description play listing (### short) counter only no yes no text editor
Main store listing > Full description play listing (### full) counter only no yes no text editor, no stuffing check while typing
Release > Release notes (per language) play release, whats-new apply (### What's new) counter only no with the release (owner) no editor
Main store listing > Graphics (icon, feature graphic, screenshots) icons, shots render, play images renders no yes (play.images) no ordering or replacement of scenes
Main store listing > Video (YouTube URL) play listing (play.video) no no yes not shown, no editor
Store settings > Contact email play listing app details (app.contactEmail) no no yes not shown, no editor
Store settings > Website play listing app details (app.website) no no yes not shown, no editor
Store settings > App category play.category, console plan (no API) yes no no API no editor
App content > Privacy policy app.privacyPolicyUrl, console plan no no no API not shown, no editor
App content > Data safety play data-safety (dataSafety) yes no yes (play.data_safety) no editor of the answers
App content > Content rating (IARC) social, products[].randomRewards, console fill play-content-rating yes no no API (console fill) no editor of the answers
App content > Target audience play.targetAges, console fill play-target-audience plan no no API (console fill) no editor
Monetize > In-app products: title, description per language play products (products[].listings) parity only no yes (play.products) no editor
Monetize > In-app products: price products[].usd / overrides, prices import yes (Prices) no yes, owner gate no editor of the base price
Monetize > Subscriptions: title, benefits, description per language play subscriptions parity only no yes no editor
Monetize > Subscriptions: base plans, offers, price play subscriptions parity only no yes, owner gate no editor
Pricing > regional prices (price sheet) prices export / import yes no yes (owner) sheet not editable in place
Production > Countries / regions play.countries, console plan count no no API no editor
Publishing overview > Managed publishing play.managedPublishing yes no no API no editor
Testing tracks (internal, closed, open) play release --track status n/a terminal (owner) sends builds to testers: not in the window by design
Production > staged rollout owner.play_rollout yes n/a yes (owner) none
Production > Send to production owner.play_production yes n/a yes (owner) none
Ratings and reviews > reply reviews draft / reply / approve / send yes yes yes (owner send) none
Internal app sharing play share no n/a CLI only not in the window

Both stores

What storebound View Edit Store write Gap
Pull the live texts into the files apple listing pull, play listing pull, catalog pull no n/a n/a (writes local files) not in the window
Store-only app (no folder): listing text (none) yes (status) no no store-only apps are read-only in the window
Uncommitted changes in the app folder git no n/a n/a not shown