Mobile6 min read

React Native 0.89 RC: The Native Module Audit to Run Before the December 7 Stable

React Native 0.89 is a cleanup release: bridgeless switches, old bridge APIs and pre-generated codegen stop working. Here is the audit to run on the release candidate before the December 7 stable.

Umair Abbas

Umair Abbas

· Updated

  • React Native
  • React Native 0.89
  • Upgrade
  • Android
  • iOS
  • Expo
React Native 0.89 RC: The Native Module Audit to Run Before the December 7 Stable — cover illustration
X LinkedIn

React Native 0.89 is close. The first release candidate, v0.89.0-rc.0 , went up on November 4, 2026, a second one followed on November 10, and the official release schedule puts the stable release on December 7. That gives you about four weeks to find out what breaks in your app before it matters. Unlike 0.88, which the core team shipped with no user-facing breaking changes, 0.89 is a cleanup release. Most of what it removes is old plumbing left over from the move to the New Architecture. Your JavaScript will mostly be fine. The time goes into native modules, build tooling and the third-party libraries you depend on. This post is the audit we run before an upgrade like this, written for founders and product leads who need to know how big the job is, not just what changed.

Why this release needs a plan

React Native 0.82 made the New Architecture the only architecture. Since then, a set of switches and old APIs stayed around so older code would keep compiling. In 0.89 many of them are gone. The 0.89 changelog removes the bridgelessEnabled flags on both Android and iOS, along with the old three-argument load() overload on Android and the deprecated bridge-era initializers on iOS. Bridgeless mode is simply always on. If your app is a fairly standard Expo or React Native project, that may mean a quiet upgrade. If you have custom native modules, a brownfield app that embeds React Native inside an existing native app, or libraries that have not shipped an update in a year, this is where the surprises come from.

The breaking changes most teams will hit

From the 0.89 changelog, these are the items that show up in real B2B apps rather than in edge cases: CLI setup. @react-native/community-cli-plugin is no longer picked up automatically from react-native . It now has to be listed in your devDependencies , and React Native Community CLI 21.x is required. Assets. The separate @react-native/assets-registry package is removed. Code that imports it should use AssetRegistry from react-native and @react-native/asset-utils instead. Some older image and icon libraries import it directly. Removed props and APIs. The deprecated blurOnSubmit prop on TextInput is gone (use submitBehavior ), as are hasTVPreferredFocus and unstable_getScrollParent . unstable_batchedUpdates is now deprecated. Babel. The destructuring transform plugin is turned off in the preset, and the default transform profile is now hermes-stable . Most apps will not notice, but a custom Babel setup should be tested.

Android: codegen, Gradle and the target SDK

Android is where we expect the most build failures. Libraries that ship pre-generated JNI codegen will not build until they regenerate it with 0.89's codegen, because the codegen CMake build now uses -Werror and treats warnings as errors. The deprecated rncore.h header is removed, and the old New Architecture entry-point settings such as fabricEnabled and turboModulesEnabled are removed too. The release also moves the toolchain forward. The changelog lists the Android targetSdk moving to 37, Kotlin updated to 2.3.21 and the NDK bumped to r28c. A new target SDK can change runtime behaviour, not just the build, so plan a round of device testing on recent Android versions rather than only checking that the build is green.

iOS: Swift modules and removed bridge APIs

On iOS, RCTBridgeModule.h now has nullability annotations. The changelog gives a concrete example: a Swift module that overrides constantsToExport with an implicitly unwrapped return type, -> [AnyHashable : Any]! , no longer compiles and must return [AnyHashable : Any] . Several RCTBridge initializers and helpers are removed, and the legacy RCTNativeAnimatedModule is deleted. Projects using CocoaPods with USE_FRAMEWORKS may also need a header search path change for cxxreact . iOS packaging is a separate story. We covered the move from CocoaPods to Swift Package Manager in our CocoaPods exit plan ; check the final 0.89 release notes for exactly where that rollout lands.

A one-afternoon audit before you upgrade

You can size most of the work before anyone touches the upgrade. These searches across your app and node_modules find the removed APIs quickly:

bash
# Removed or moved APIs (app code and dependencies)
grep -rn "assets-registry" --include=*.js --include=*.ts* src node_modules/*/package.json
grep -rn "blurOnSubmit\|unstable_getScrollParent\|unstable_batchedUpdates" src
# Native code on Android
grep -rn "rncore.h\|bridgelessEnabled\|fabricEnabled" android node_modules/*/android
# Swift modules returning implicitly unwrapped constants
grep -rn "constantsToExport" ios node_modules/*/ios | grep "!"

Then do three things. First, list every dependency with native code and check whether its maintainers have tested against the 0.89 release candidates. Second, create an upgrade branch with the latest RC and build a release variant for both platforms, not just a debug build. Third, run your main flows on real devices: sign in, push notification open, deep links, payments and any screen that uses a native SDK.

Expo teams: what this means for you

If you use Expo, you will usually take React Native 0.89 through the next Expo SDK rather than on its own. The current Expo SDK 58 ships React Native 0.88. One date in Expo's notes matters now: the opt-out that lets you defer React Native's Strict TypeScript API migration is set to be removed after React Native 0.89, and Expo advises planning that migration during the SDK 58 cycle. If you set that opt-out, schedule the TypeScript work now. Our Expo SDK 58 upgrade plan covers the rest of that upgrade.

Should you upgrade in December?

Not necessarily on day one. The release schedule lists 0.88 and 0.87 as actively supported, so a production app on 0.88 is in good shape. A reasonable plan for most teams is to run the audit and the RC branch in November, fix or replace blocking libraries, and then upgrade in the weeks after the stable release once the first patch versions are out. What you should avoid is skipping several releases in a row. As we wrote when 0.88 shipped , each skipped version makes the next jump bigger and harder to test. If you also ship to the App Store, line this up with Apple's next deadline. Our post on Apple's April 2027 SDK requirement covers the iOS side, and doing both in the same quarter means one round of regression testing instead of two.

Founder takeaway

React Native 0.89 is a cleanup release, and cleanup releases are where old native code finally stops compiling. The cost depends almost entirely on your native modules and third-party libraries, and you can measure that in an afternoon with the RC. Do the audit in November, fix the blockers early, and upgrade after December 7 on your own schedule. Want a team to run the audit and the upgrade for you? Talk to CodeFlamme about your React Native app.

Related insights

Continue reading

  • Kotlin Multiplatform vs React Native for B2B Shared Logic — cover illustration

    Mobile

    Kotlin Multiplatform vs React Native for B2B Shared Logic

    Kotlin Multiplatform vs React Native for B2B apps: a founder guide to choosing whether to share business rules or screens, with hiring, offline sync and a ninety-day proof plan.

    Read article
  • Flutter Impeller Opt-Out Is Deprecated: Drop Skia Before Android Loses the Fallback — cover illustration

    Mobile

    Flutter Impeller Opt-Out Is Deprecated: Drop Skia Before Android Loses the Fallback

    Flutter prints Action Required when you disable Impeller, and the 2026 roadmap removes the legacy Skia backend on Android 10+. A founder checklist to inventory opt-outs, reproduce on Impeller, and retire the escape hatch.

    Read article
  • Apple's April 2027 Deadline: iOS 27 SDK, an iOS 15 Floor, and UIScene — cover illustration

    Mobile

    Apple's April 2027 Deadline: iOS 27 SDK, an iOS 15 Floor, and UIScene

    Apple says App Store uploads from April 2027 need the iOS 27 SDK and an iOS 15 target, and apps built with it must adopt UIScene or fail to launch. A founder plan for React Native, Expo, Flutter and native teams.

    Read article

Ready to build something powerful?

Tell us what you are building. We will respond within 24 hours with a clear, honest assessment — no pressure, no sales pitch.

NDA protected · Reply within 24 hours · No commitment required