This documentation is available as Markdown for AI agents and LLMs. See the full Markdown index or append .md to any documentation URL.
Repack app
Edit page
Repackage an existing APK, IPA, or .app with an updated JavaScript bundle without a full native rebuild.
@expo/repack-app is a CLI tool that repackages an existing Android APK, iOS IPA, or iOS .app bundle without performing a full native build. It updates the existing artifact with a new JavaScript (JS) bundle, assets, and app metadata (such as, app name, version, and package name or bundle identifier). Since there is no native compilation involved, a repack is typically much faster than a full native build.
To learn more about how fingerprint and repack work together to accelerate CI, see Accelerating Continuous Integration with Fingerprint and Repack in EAS Workflows blog post.
2 requirements
2 requirements
1.
A build artifact produced from your Expo project: an APK for Android, or an IPA or .app bundle for iOS.
2.
Required if the repacked artifact needs to be installable on a device. For more information, see Signing.
When to use repack
Repack assumes the source binary's native side is unchanged since it was built. If you added a native dependency, changed a config plugin, or upgraded the Expo SDK, a repacked artifact will have JS that expects native APIs that do not exist, and will likely crash at runtime. Use fingerprint to compare the source binary's native identity against your current project. If the fingerprints match, then repack is safe. If they differ, do a full native build instead.
Repack is not a replacement for EAS Update. EAS Update ships a new JS bundle to apps that are already installed, and users see it on the next launch. Repack produces a new installable artifact. A good rule of thumb is to use repack for internal testing (QA devices, testers, CI smoke tests) and use EAS Update to deliver JS changes to production users.
Use cases
- QA cycles: Distribute one base build to testers, then repack with JS fixes for each iteration without waiting for a native rebuild.
- CI optimization: Build native once per fingerprint, then repack the JS bundle on every subsequent PR to cut wait times from minutes to seconds.
- Branch testing: Test multiple JS branches against the same native binary to isolate JavaScript-only changes.
Usage
Standalone CLI
You need to run the commands specified for Android and iOS platforms below from your project's root directory. At minimum, --platform and --source-app are required. The tool runs npx expo export:embed under the hood to produce a fresh JS bundle, swaps it into the source binary, and writes the output artifact.
The output format always matches the --source-app input. An APK input produces an APK, an IPA produces an IPA, and a .app bundle produces a .app bundle.
Using an IPA:
Using a .app bundle (for simulator builds, the iOS device artifacts are always IPAs):
EAS Workflows
EAS Workflows provides a pre-packaged repack job type that handles signing and build management automatically. See EAS Workflows pre-packaged jobs for full syntax, parameters, and examples.
Signing
To produce an artifact installable on a physical device, pass signing credentials alongside --platform and --source-app. Without them, the Android APK is output unsigned and the iOS IPA cannot be installed on a device. iOS .app bundles intended for the simulator do not need signing and can skip this step.
If you do not already have signing credentials locally, see App credentials for how to obtain a keystore (Android) or a signing identity and provisioning profile (iOS).
See the Android-specific options for keystore password flags and other settings.
Pass a signing identity and provisioning profile:
Note: iOS repacking supports ad-hoc and development signing only.
See the iOS-specific options for the full list of signing flags.
--js-bundle-only mode
By default, repack updates the JS bundle, assets, and app metadata (app name, version, bundle identifier, and the expo-updates manifest). Pass --js-bundle-only when you intentionally want to update only the JS bundle and leave all native config untouched.
Limitations
Repack is not recommended for production Google Play Store or Apple App Store submissions. Production builds should go through the complete build pipeline for correct symbolication and signing.
CLI reference
Usage: @expo/repack-app [options] [project-root]