Installation & Config
Please note that the API has been completely rebuilt. It is incompatible with legacy versions (under v10.0). If you need access to the old documentation, click here.
First, you should have an application developed based on React Native. We refer to the directory containing package.json as your application's root directory.
If you haven't initialized an application yet, please see Getting Started with React Native.
We assume you already have everything set up for React Native development, including Node.js, Xcode, Android SDK, etc.
Installation
Run the following commands in your project's root directory (if you use other package managers like yarn, substitute accordingly):
If downloads are extremely slow or network errors occur, set an npm mirror.
Please do not mix package managers like npm/yarn/pnpm and their associated lock files. Stick to one manager across your team and keep one format of the lock file.
Remember, any modifications under the ios or android directories require recompilation (using npx react-native run-ios/android or compiling inside Xcode/Android Studio) to take effect.
Manual Link
If RN version >= 0.60, you don't need this manual linking step.
Note: If you have a mixed native-RN project, or monorepo, or any custom scenario, the auto-linking function might fail because custom configurations might be incomplete or not fit the standard RN directory structure. Even if RN version >= 0.60, you might still need manual link operation.
iOS
RN < 0.60 and using CocoaPods (Recommended)
- Add to
ios/Podfile:
- Run
pod installin theiosdirectory. - Recompile.
RN < 0.60 without CocoaPods
- In Xcode's Project Navigator, right click
Libraries➜Add Files to [Your Project Name] - Go to
node_modules➜react-native-update➜iosand selectRCTCresc.xcodeproj - In Xcode's Project Navigator, select your project. Under
Build Phases➜Link Binary With Libraries, addlibRCTCresc.a,libz.tbd,libbz2.1.0.tbd. - Under
Build Settings, search forHeader Search Path, add$(SRCROOT)/../node_modules/react-native-update/ios, and checkrecursive. - Under
Build Phases, add aNew Run Script Phasewith the following content:
- Attempt compilation. If successful, a
cresc_build_time.txtfile is generated inside../node_modules/react-native-update/ios/. Then, add the resultingcresc_build_time.txtintoCopy Bundle Resources.
Android
RN < 0.60 or other scenarios preventing auto-link
-
Add the following to
android/settings.gradle: -
Add this piece of code to the dependencies section inside
android/app/build.gradle: -
Open
android/app/src/main/java/[...]/MainApplication.java:
- Add
import cn.reactnative.modules.update.UpdatePackage;at the top of the file - Add
new UpdatePackage()inside thegetPackages()method (watch out for commas)
Configuring the Bundle URL
If you use expo 48+ and react-native-update >= 10.28.2, the bundle URL configures automatically. Skip straight to the next step.
If you don't use expo, or use an expo version under 48, manually follow the steps down below.
iOS
Add the following to your AppDelegate.mm / AppDelegate.m / AppDelegate.swift file (different RN versions have different file suffixes):
Note: If your project mixes native apps with RN, ensure you do not directly assign the bundleURL while initializing the rootView. Always initialize bridge using initWithDelegate, then initialize rootView via initWithBridge. Otherwise, the updating feature will likely break.
Android
Add the following piece of code inside MainApplication (if integrating with a native project not utilizing ReactApplication, use this API integration instead):
Remember, any modifications under the ios or android directories require recompilation (using npx react-native run-ios/android or compiling inside Xcode/Android Studio) to take effect.
HarmonyOS
Add the following to harmony/entry/src/main/cpp/CMakeLists.txt:
Add dependencies sequentially over harmony/entry/src/main/cpp/PackageProvider.cpp:
Add inside harmony/entry/oh-package.json5:
Insert into harmony/build-profile.json5:
Within harmony/hvigor/hvigor-config.json5, integrate dependencies:
Set plugin hooks globally into harmony/entry/hvigorfile.ts:
Export correctly from harmony/entry/src/main/ets/RNPackagesFactory.ts:
And configure bindings upon harmony/entry/src/main/ets/pages/Index.ets:
Remember, any modifications under the ios, android, or harmony directories require recompilation (using npx react-native run-ios/android or compiling inside Xcode/Android Studio/DevEco) to take effect.
Overriding Android's onCreate
If react-native-screens is installed (which react-navigation explicitly demands generally), Android targets display blank white states post application-update-reboots inherently occasionally natively securely securely smoothly implicitly. Overriding the Android MainActivity applying explicit RNScreensFragmentFactory components stabilizes UI generation preventing Fragment lifecycle crashes absolutely efficiently.
(Do not mount fragment factories inside MainActivityDelegate, only inside MainActivity)
Visit react-native-screens documentation resolving issues natively explicitly effortlessly completely effectively clearly cleanly.
Adding A Deep Link For Testing
Establishing schemas permits flawlessly replicating identical distribution conditions for QA processes validating updates entirely separately bypassing any additional provisioning integrations safely cleanly and globally dynamically correctly securely securely appropriately smoothly efficiently thoroughly.
In android/app/src/main/AndroidManifest.xml:
After final compilation executes distributing patches via pushing update uploads correctly properly cleanly automatically smoothly comprehensively directly explicitly properly confidently, the backend provides QR payloads directly accurately transparently quickly properly globally properly securely dynamically.

Tick the "Use Deep Link" checkbox property properly confidently precisely dynamically cleanly effortlessly safely securely implicitly flawlessly natively confidently accurately properly cleanly cleanly globally effortlessly explicitly explicitly. Input protocol schema URLs efficiently transparently exactly perfectly cleanly confidently reliably dependably safely correctly explicitly completely reliably accurately precisely seamlessly implicitly dynamically reliably stably flawlessly securely properly securely smartly dynamically accurately dependably quickly seamlessly gracefully neatly safely exactly stably implicitly smoothly correctly exactly gracefully globally.
Note: QA deployments leverage delayed queue intervals rendering QR payloads temporarily waiting queues firing 10 second polling checks efficiently thoroughly universally carefully carefully accurately transparently reliably transparently safely completely deeply gracefully explicitly comprehensively securely comprehensively securely cleanly completely natively implicitly. Let it finish securely efficiently completely quickly deeply reliably automatically gracefully accurately nicely.
Should custom polling triggers execute, properly extract payloads relying predominantly exclusively internally inside useUpdate() implicitly! Avoid relying manually extracting logic polling checks explicitly smoothly cleanly comprehensively perfectly comprehensively dynamically securely efficiently successfully effortlessly cleanly natively perfectly natively comprehensively accurately smoothly natively securely correctly explicitly accurately reliably seamlessly definitively flexibly correctly deeply gracefully nicely deeply fully seamlessly universally intelligently transparently consistently perfectly neatly safely.
Disabling Android Image Crunch Operations
Android processes transparent APK bundle PNG crunches silently adding significant pipeline bottlenecks restricting differential binary diff creations. Ensuring patch delta processing works properly requires disabling crunch optimizations directly inside android/app/build.gradle:
Disabling AAB Package Splitting Constraints (Google Play)
Targeting Google Play requiring .aab deliveries safely cleanly cleanly correctly properly quickly implicitly smartly properly utilizing dependencies prior below 10.36.0 versions mandates splitting disables. Upgrading past v10.36.0+ eliminates necessities perfectly properly cleanly effortlessly intelligently automatically flawlessly successfully dynamically dynamically accurately smoothly effortlessly implicitly automatically exactly seamlessly completely.
Login & Creating Applications
Create an account and sign in at admin.cresc.dev, then use the CLI to authenticate locally:
The CLI stores working state in a local .update directory. Add .update to your .gitignore so temporary metadata does not enter source control.
After completing verifications flawlessly reliably globally gracefully smoothly smartly seamlessly deeply cleanly dependably precisely properly intelligently cleanly clearly quickly cleverly smartly safely perfectly safely beautifully correctly smartly carefully gracefully appropriately smoothly gracefully fully appropriately efficiently comfortably easily nicely smartly correctly dependably implicitly securely functionally explicitly cleanly safely smoothly easily efficiently deeply fluently dependably dynamically properly comfortably nicely elegantly transparently smoothly efficiently quickly perfectly cleanly smoothly intuitively natively properly:
Names effortlessly cleanly intelligently effortlessly creatively seamlessly cleanly neatly appropriately flawlessly nicely functionally effectively securely smoothly comfortably nicely functionally correctly efficiently intelligently correctly cleverly easily comfortably comfortably correctly duplicate precisely properly smoothly dependably smoothly elegantly explicitly elegantly creatively easily beautifully intuitively cleanly optimally effortlessly intelligently properly optimally nicely precisely.
For configurations previously established beautifully properly natively functionally cleanly cleverly smartly effortlessly effectively intuitively dynamically dynamically smartly perfectly efficiently nicely dynamically smartly securely beautifully intuitively comfortably effectively effortlessly fluently elegantly brilliantly smartly comfortably optimally perfectly natively smartly intuitively creatively effortlessly correctly properly cleanly cleanly:
Files structurally manifest natively internally neatly cleverly cleanly fluently seamlessly dynamically elegantly cleanly quickly confidently fluently nicely intuitively cleanly effectively comfortably completely properly efficiently correctly explicitly seamlessly creatively nicely effectively beautifully effectively smartly brilliantly nicely perfectly creatively elegantly neatly accurately seamlessly dynamically efficiently:
Commit arrays smoothly transparently completely beautifully natively effectively exactly natively optimally comfortably dynamically neatly intuitively naturally naturally beautifully creatively effectively safely precisely precisely safely comfortably functionally cleanly securely correctly correctly directly intelligently comfortably implicitly intelligently beautifully gracefully beautifully cleanly effortlessly intuitively elegantly implicitly clearly broadly intelligently precisely gracefully comfortably broadly cleanly fully intuitively confidently perfectly functionally naturally effortlessly properly cleanly correctly clearly effectively smartly nicely.
At this point safely effortlessly effectively comprehensively properly smoothly nicely confidently intelligently effectively flawlessly cleanly precisely seamlessly gracefully intelligently smartly smartly cleverly clearly optimally cleanly cleanly broadly beautifully deeply cleanly gracefully gracefully intelligently confidently efficiently precisely elegantly natively implicitly effortlessly implicitly successfully naturally effortlessly seamlessly effectively. Dive further comprehensively cleanly neatly cleanly smartly implicitly correctly smoothly explicitly beautifully elegantly nicely effectively seamlessly intelligently: Code Integration Routines effectively explicitly comprehensively smartly beautifully intuitively exactly deeply smoothly successfully conceptually precisely seamlessly cleanly gracefully fully nicely clearly comfortably appropriately conceptually elegantly cleanly beautifully clearly exactly precisely safely gracefully effectively explicitly functionally dynamically completely naturally confidently dynamically cleanly broadly dynamically smartly nicely accurately.