Skip to content
useffect.sh
Book 30 min with a senior
Native

Prebuilt (precompiled React Native)

React Native core shipped as precompiled binaries (iOS XCFrameworks, Android AARs) downloaded at build time instead of rebuilt from source.

Definition

“Prebuilt”, or precompiled React Native, refers to distributing React Native core as already-compiled binaries, downloaded while installing dependencies, instead of compiling it from C++ sources on every clean build. On Android, core has long been consumed as Maven artifacts (react-android, hermes-android). On iOS, compiling React Native and its dependencies (folly, boost, glog) was a large share of build time; React Native 0.80 introduced experimental prebuilt dependencies, 0.81 an opt-in precompiled core (RCT_USE_RN_DEP=1 and RCT_USE_PREBUILT_RNCORE=1), and since 0.84 the XCFrameworks are downloaded by default during pod install. Expo followed the same logic in SDK 58 with precompiled expo-modules-core binaries on Android. The trade-off: to modify or patch core, or to disable Hermes V1, you have to go back to source. You meet the term in pod install logs and in most conversations about build time.

In a real app

To see whether a project benefits, pod install prints the download of the ReactNativeCore and ReactNativeDependencies artifacts, and ios/Pods contains .xcframework bundles instead of source trees under React-Core. RCT_USE_PREBUILT_RNCORE=0 bundle exec pod install goes back to source; it is mandatory for patch-package on core, for RCT_REMOVE_LEGACY_ARCH=0, and to return to the previous Hermes. Since 0.88, artifacts download first from the React Native Maven mirror, then from Maven Central as fallback, which matters behind a corporate proxy where one of the two can be blocked.

The gain is large: the 0.81 notes announce iOS compile times cut by up to 10x. Expo gives an Android figure: on a blank SDK 58 project, a clean debug build for all four ABIs drops from about 80 to 39 seconds on an M3 Pro. Incremental builds change little. The biggest win is in CI, where every build starts from an empty cache, and on the machines of developers who rarely touch native code.

What I check: that CI does not force RCT_USE_PREBUILT_RNCORE=0 without a documented reason, that the CI cache does not hold XCFrameworks from a previous React Native version (key the cache on Podfile.lock), and on Android that android.buildExpoModulesCoreFromSource is not left on by an old workaround.

Sources

All 35 glossary terms

One of these is blocking your app?

30 minutes with a senior to look at the problem in your code. Free.