npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, πŸ‘‹, I’m Ryan HefnerΒ  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you πŸ™

Β© 2026 – Pkg Stats / Ryan Hefner

storeforge

v1.0.0

Published

πŸš€ Unified App Store Deployment CLI β€” upload, metadata, release for iOS App Store & Google Play

Readme

StoreForge

πŸš€ Unified App Store Deployment CLI β€” iOS App Store & Google Play from your terminal

npm version CI License: MIT Node.js

One CLI to upload builds, sync metadata, check review status, and release to production on both iOS App Store and Google Play.

Install

npm install -g storeforge

Quick Start

# 1. Setup credentials
storeforge init

# 2. Upload your build
storeforge upload ios ./build/MyApp.ipa
storeforge upload android ./build/app-release.aab

# 3. Check status
storeforge status

# 4. Release to production
storeforge release ios
storeforge release android production

Commands

storeforge init

Interactive setup wizard to configure App Store Connect and Google Play credentials.

storeforge init

storeforge upload

Upload binaries to app stores.

# Upload IPA to App Store Connect / TestFlight
storeforge upload ios <ipa-path>

# Upload AAB to Google Play (default: internal track)
storeforge upload android <aab-path>
storeforge upload android <aab-path> --track beta
storeforge upload android <aab-path> --track production

Options:

  • -t, --track <track> β€” Target track for Android: internal, alpha, beta, production (default: internal)

storeforge metadata

Manage app metadata across both stores using YAML files.

# Sync local YAML to both stores
storeforge metadata sync metadata.yml
storeforge metadata sync metadata.yml --locale ja

# Pull current metadata from stores
storeforge metadata pull
storeforge metadata pull -o my-metadata.yml

Options:

  • --ios-app-id <id> β€” App Store Connect app ID
  • --locale <locale> β€” Target locale (default: en-US)
  • -o, --output <path> β€” Output path for pull (default: metadata.yml)

storeforge status

Check app review and processing status on both stores.

storeforge status
storeforge status --ios-app-id 1234567890

storeforge release

Promote builds from testing to production.

# iOS: Submit for App Store review
storeforge release ios
storeforge release ios --app-id 1234567890

# Android: Promote build through tracks
storeforge release android              # Auto-detect next track
storeforge release android production   # Promote to production
storeforge release android beta         # Promote to beta

storeforge config

Manage credentials and configuration.

# Show current config
storeforge config list

# Set individual values
storeforge config set apple.keyId YOUR_KEY_ID
storeforge config set apple.issuerId YOUR_ISSUER_ID
storeforge config set apple.privateKeyPath /path/to/AuthKey.p8
storeforge config set google.serviceAccountPath /path/to/service-account.json
storeforge config set google.packageName com.example.myapp

# Get a value
storeforge config get google.packageName

App Store Connect Setup

  1. Go to App Store Connect β†’ Users and Access β†’ Keys
  2. Click Generate API Key
  3. Select the Admin or App Manager role
  4. Download the .p8 private key file (you can only download it once!)
  5. Note your Issuer ID and Key ID
storeforge config set apple.issuerId "your-issuer-id"
storeforge config set apple.keyId "your-key-id"
storeforge config set apple.privateKeyPath "/path/to/AuthKey_XXXXX.p8"

Google Play Setup

  1. Go to Google Cloud Console β†’ IAM & Admin β†’ Service Accounts
  2. Create a new service account (or use existing)
  3. Grant it the Service Account User role
  4. Create a JSON key and download it
  5. Go to Google Play Console β†’ Settings β†’ API Access
  6. Link the service account and grant Release Manager permission
storeforge config set google.serviceAccountPath "/path/to/service-account.json"
storeforge config set google.packageName "com.example.myapp"

Metadata YAML Format

Store your app metadata in a version-controlled YAML file:

ios:
  en-US:
    title: "My Awesome App"
    subtitle: "Do amazing things"
    description: |
      My Awesome App helps you do amazing things.

      Features:
      - Feature one
      - Feature two
      - Feature three
    keywords:
      - awesome
      - productivity
      - tools
    whatsNew: |
      - Bug fixes and performance improvements
      - New feature X

android:
  en-US:
    title: "My Awesome App"
    shortDescription: "Do amazing things with one tap"
    description: |
      My Awesome App helps you do amazing things.

      Features:
      β˜… Feature one
      β˜… Feature two
      β˜… Feature three

CI/CD Integration

GitHub Actions

name: Deploy to Stores
on:
  release:
    types: [published]

jobs:
  deploy:
    runs-on: macos-latest
    steps:
      - uses: actions/checkout@v4

      - name: Setup Node.js
        uses: actions/setup-node@v4
        with:
          node-version: 20

      - name: Install StoreForge
        run: npm install -g storeforge

      - name: Configure credentials
        run: |
          storeforge config set apple.issuerId "${{ secrets.ASC_ISSUER_ID }}"
          storeforge config set apple.keyId "${{ secrets.ASC_KEY_ID }}"
          echo "${{ secrets.ASC_PRIVATE_KEY }}" > /tmp/AuthKey.p8
          storeforge config set apple.privateKeyPath /tmp/AuthKey.p8
          echo '${{ secrets.GOOGLE_SERVICE_ACCOUNT }}' > /tmp/sa.json
          storeforge config set google.serviceAccountPath /tmp/sa.json
          storeforge config set google.packageName com.example.myapp

      - name: Upload iOS
        run: storeforge upload ios ./build/MyApp.ipa

      - name: Upload Android
        run: storeforge upload android ./build/app-release.aab --track beta

      - name: Sync metadata
        run: storeforge metadata sync metadata.yml

      - name: Check status
        run: storeforge status

Configuration

Configuration is stored at ~/.storeforge/config.json:

{
  "apple": {
    "issuerId": "your-issuer-id",
    "keyId": "your-key-id",
    "privateKeyPath": "/path/to/AuthKey.p8"
  },
  "google": {
    "serviceAccountPath": "/path/to/service-account.json",
    "packageName": "com.example.myapp"
  }
}

Requirements

  • Node.js 20+
  • App Store Connect API key (for iOS commands)
  • Google Play service account (for Android commands)

License

MIT Β© magicpro97