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

rn-build-version

v1.2.3

Published

A powerful React Native CLI tool for version management, build automation, and changelog generation for Android and iOS apps.

Readme

rn-build-version

A React Native tool for managing version numbers on Android (versionCode / versionName in build.gradle) and iOS (MARKETING_VERSION / CURRENT_PROJECT_VERSION in project.pbxproj, or CFBundleShortVersionString / CFBundleVersion in Info.plist). It simplifies version management by providing interactive prompts and automates backups and changelog updates.

Features

  • Version Management:
    • Increment patch (e.g., 0.0.1 -> 0.0.2), minor (e.g., 0.0.1 -> 0.1.0), or major (e.g., 0.0.1 -> 1.0.0) versions.
    • Set custom versionCode and versionName.
    • Skip version updates for local testing builds.
  • Automation:
    • Backup the version file before modifications.
    • Generate or update a CHANGELOG.md file with version details.
  • Flexibility:
    • Choose the platform to update: android, ios, or both.
    • Custom file path support via CLI options.
    • Dry-run mode to simulate changes without applying them.

Prerequisites

  • Ensure your build.gradle contains versionCode and versionName (e.g., in defaultConfig).
  • For iOS, ensure either project.pbxproj defines MARKETING_VERSION / CURRENT_PROJECT_VERSION, or Info.plist defines CFBundleShortVersionString / CFBundleVersion.
  • Configure signing for release builds.

Notes

  • The tool assumes a standard React Native project structure.
  • Run chmod +x android/gradlew on macOS/Linux if Gradle permissions are an issue.

Installation

Install the package globally or as a development dependency in your React Native project:

# Globally
npm install -g rn-build-version

# As a dev dependency
npm install --save-dev rn-build-version

# Using yarn
yarn add --dev rn-build-version

Usage

1. Add Scripts to Your package.json

Integrate the tool into your React Native project by adding these scripts. The --platform flag decides which version gets bumped (android, ios, or both).

The iOS scripts contain placeholders you MUST rename before they will work — see What you MUST rename for iOS right below.

{
  "scripts": {
    // ───────── ANDROID (built with Gradle) ─────────
    "build:android:apk": "rn-build-version --platform android && cd android && ./gradlew clean assembleRelease",
    "build:android:aab": "rn-build-version --platform android && cd android && ./gradlew clean bundleRelease",
    "build:android:apk:fast": "rn-build-version --platform android && cd android && ./gradlew assembleRelease",
    "build:android:aab:fast": "rn-build-version --platform android && cd android && ./gradlew bundleRelease",
    "build:android:apk:local": "cd android && ./gradlew clean assembleRelease",
    "build:android:aab:local": "cd android && ./gradlew clean bundleRelease",

    // ───────── iOS (built with Xcode / xcodebuild) ─────────
    // RENAME "YourApp" in BOTH the -workspace and -scheme values (see table below)
    "build:ios": "rn-build-version --platform ios && cd ios && xcodebuild -workspace YourApp.xcworkspace -scheme YourApp -configuration Release -sdk iphoneos archive -archivePath build/YourApp.xcarchive",
    "build:ios:local": "cd ios && xcodebuild -workspace YourApp.xcworkspace -scheme YourApp -configuration Release -sdk iphoneos build",

    // ───────── VERSION BUMP ONLY (no build) ─────────
    "version:android": "rn-build-version --platform android",
    "version:ios": "rn-build-version --platform ios",
    "version:both": "rn-build-version --platform both"
  }
}

Note: jsonc (JSON with comments) is shown for clarity. Remove the // ... comment lines before pasting into a real package.json — standard package.json does not allow comments.


What you MUST rename for iOS

The Android scripts work as-is. The iOS scripts will NOT run until you replace YourApp with your app's real Xcode names. There are two values to change, and they are often different from each other:

| Placeholder in the script | Replace with | Where to find it | |---|---|---| | YourApp.xcworkspace | Your .xcworkspace file name | Look inside the ios/ folder — it is the file ending in .xcworkspace (e.g. MyCoolApp.xcworkspace). | | -scheme YourApp | Your scheme name | Open Xcode -> top toolbar scheme dropdown, or run xcodebuild -list -workspace ios/YourApp.xcworkspace. | | build/YourApp.xcarchive | Any output path you like | Just keep it consistent; rename YourApp to match for tidiness. |

Example — before vs. after

Say your app is called MyCoolApp (so ios/MyCoolApp.xcworkspace exists). You would change:

// BEFORE (placeholder — will fail)
"build:ios": "rn-build-version --platform ios && cd ios && xcodebuild -workspace YourApp.xcworkspace -scheme YourApp -configuration Release -sdk iphoneos archive -archivePath build/YourApp.xcarchive"
// AFTER (renamed to MyCoolApp — works)
"build:ios": "rn-build-version --platform ios && cd ios && xcodebuild -workspace MyCoolApp.xcworkspace -scheme MyCoolApp -configuration Release -sdk iphoneos archive -archivePath build/MyCoolApp.xcarchive"

Quick way to find both names at once — run this from your project root:

ls ios/*.xcworkspace        # shows the workspace name
xcodebuild -list -workspace ios/*.xcworkspace   # shows scheme names

iOS prerequisites

  • Run cd ios && pod install once before building.
  • A real .ipa for the App Store also needs code signing + an xcodebuild -exportArchive step. For full release automation, most teams use fastlane instead of raw xcodebuildrn-build-version --platform ios still does the version bump; fastlane handles the build/upload.

2. Run the Commands

Production Builds (bump version, then build)

# Android
yarn build:android:apk
yarn build:android:aab

# iOS  (after renaming YourApp!)
yarn build:ios

These prompt you to update the version before building.

Bump version only (no build)

yarn version:android    # bump Android only
yarn version:ios        # bump iOS only
yarn version:both       # bump BOTH in sync

Local Builds (No Version Change)

yarn build:android:apk:local
yarn build:android:aab:local
yarn build:ios:local

These skip version prompts and build with the current version.

When to Use Each Command

| Command | Platform | Use Case | |---------|----------|---------| | yarn build:android:apk | Android | Full build with version bump + clean (production APK). | | yarn build:android:aab | Android | Full build with version bump + clean (production AAB / Play Store). | | yarn build:android:apk:fast | Android | Build with version bump, no clean (faster iteration). | | yarn build:android:aab:fast | Android | Build with version bump, no clean (faster iteration). | | yarn build:android:apk:local | Android | Build with clean, no version bump. | | yarn build:android:aab:local | Android | Build with clean, no version bump. | | yarn build:ios | iOS | Bump iOS version, then archive via Xcode (rename YourApp first). | | yarn build:ios:local | iOS | Build current iOS version, no bump (rename YourApp first). | | yarn version:android | Android | Bump Android version only, no build. | | yarn version:ios | iOS | Bump iOS version only, no build. | | yarn version:both | Both | Bump Android and iOS together (keep store versions in sync). |

CLI Usage

Run the tool directly with options:

rn-build-version [options]

| Option | Description | Default | |--------|-------------|---------| | -p, --platform <platform> | Which platform to update: android, ios, or both | android | | -g, --gradle <path> | Path to your Android build.gradle file | android/app/build.gradle | | -i, --ios <path> | Path to your ios directory, project.pbxproj, or Info.plist | ios | | -d, --dry-run | Simulate changes without applying them | false |

iOS support

iOS versions can live in two places depending on your React Native version. The tool auto-detects which applies:

  • Modern RN (around 0.71+)ios/<App>.xcodeproj/project.pbxproj (MARKETING_VERSION and CURRENT_PROJECT_VERSION). All build configs are updated.
  • Legacy RNios/<App>/Info.plist (CFBundleShortVersionString and CFBundleVersion).
# Update iOS only
rn-build-version --platform ios

# Update Android and iOS in one run
rn-build-version --platform both

# Point at a specific file
rn-build-version --platform ios --ios ios/MyApp.xcodeproj/project.pbxproj

Default platform is android, so existing setups keep working unchanged.

Examples

  • Use a custom Gradle path:
rn-build-version --gradle ./custom/path/build.gradle
  • Simulate changes (dry-run):
rn-build-version --dry-run
  • Combine options:
rn-build-version --gradle ./android/app/build.gradle --dry-run

Example Interaction

When you run rn-build-version or a build script with it, you will see:

=== Current Android Version Info ===
Version Code: 1
Version Name: 0.0.1
====================

? What do you want to do with the Android version? (Use arrow keys)
  > Increment patch (e.g., 1.0.1-beta -> 1.0.2-beta)
    Increment minor (e.g., 1.0.1-beta -> 1.1.0-beta)
    Increment major (e.g., 1.0.1-beta -> 2.0.0-beta)
    Set custom version
    Skip (no increment)
  • Choosing "Increment patch":

    • Updates versionCode: 2, versionName: "0.0.2".
    • Creates a backup (build.gradle.bak on Android, project.pbxproj.bak / Info.plist.bak on iOS).
    • Appends to CHANGELOG.md.
  • Choosing "Set custom version":

    • Prompts for new versionName and versionCode.
    • Example: Set versionName: "1.2.3", versionCode: 123.

Screenshots


Fixed: Now this will work all type of version naming convention.