storepulse_

open source · cli · built for expo & react native teams

Which version is LIVE?
Which is stuck IN REVIEW?
One command. Both stores.

storepulse pulls release status for every iOS & Android app you manage — versions, review states, rollout percentages, test tracks — into a single terminal board. Read-only by design. Your store credentials never leave your machine.

~/work — zsh
$ 

  storepulse  ·  one board, both stores

  APP                  OS        PRODUCTION                      BETA / TESTFLIGHT    INTERNAL
  ─────────────────────────────────────────────────────────────────────────────────────────────
  Aurora [prod]        iOS       2.4.1 LIVE  ·  2.5.0 REVIEW    2.5.0 LIVE (108)     
                       Android   2.4.1 50% (241)                2.5.0 LIVE (250)     2.5.1 draft (251)
  Aurora Dev [dev]     iOS                                     2.6.0 LIVE (12)      
                       Android                                                     2.6.0 LIVE (12)
  Borealis [prod]      iOS       1.9.2 LIVE  ·  1.9.3 REJECTED  1.9.3 LIVE (87)      
                       Android   1.9.2 LIVE (192)               1.10.0 LIVE (200)    

why

Built to be trusted with your store keys

Read-only by design

storepulse never submits, promotes, or halts anything. It asks both stores one question — "what state are my releases in?" — and renders the answer. Nothing to break, nothing to fear.

Credentials stay local

Calls go straight from your machine to Apple and Google. No server, no account, no telemetry. Secrets live in your .env, which is git-ignored from day one.

A library first

The core is a credential-injected library; the CLI and the web dashboard are just its first surfaces. Notifiers are next — same engine, more screens. Add your own source by implementing two methods.

features

Everything the two consoles show — in one table

normalized model
App Store states and Play tracks translated into one vocabulary: channels (production / beta / internal) × states (live, in-review, rollout, rejected…).
rollout tracking
iOS phased release day and Android staged rollout shown as a plain percentage — 2.4.1 50% means half your users have it.
review visibility
See 2.4.1 LIVE · 2.5.0 REVIEW side by side — the in-between moment both consoles make you dig for.
resilient board
One expired credential shows an error on its own row — it never blanks the rest of the board.
demo mode
pnpm demo renders the full board with sample data — evaluate the tool before creating a single API key.
web dashboard
storepulse serve opens the same board in your browser — same design, auto-refreshing, bound to 127.0.0.1 by default. Rows expand into release notes, dates, and TestFlight expiry; chips filter by OS and group. storepulse snapshot exports it as JSON.
expo-friendly
Works with any iOS/Android app, but built by an Expo team for Expo teams — set an EAS_TOKEN and a per-app easProjectId, and every store version links back to the EAS build that produced it: commit, build profile, submission status.

quick start

From zero to your real board in ~15 minutes

1

Try the demo — no credentials needed

$ git clone https://github.com/dioKR/storepulse.git
$ cd storepulse && pnpm install
$ pnpm demo
2

List your apps, add your keys

Apps go in storepulse.config.json; secrets go in .env (an App Store Connect API key + a Play service account — both are five-minute, one-time setups).

$ npx storepulse init  # scaffolds both files — then fill them in
3

Run it

$ npx storepulse

Your real board appears. Full step-by-step tutorial →

roadmap

Where this is going

core + connectors cli with demo mode eas connector slack / discord alerts web dashboard npx storepulse english / korean cli output