npm / react-native
react-native
What changed in react-native 0.79 to 0.88, from its official release notes, upgrade guides and advisories. Sources checked 2026-10-18.
21 breaking7 deprecations29 new APIs and options2 performance16 behavior and defaults12 tooling135 fixes and other
See which of these apply to your code, ranked, in your agent:
npx @unstale/cli initreact-native 0.88109 changes
Breaking changes 11
Recycled ScrollViews no longer retain automatic keyboard inset behavior.
Removed the experimental_ prefix from backgroundPosition.
Removed the experimental_ prefix from backgroundRepeat.
Removed the experimental_ prefix from backgroundSize.
Async CallInvoker work is buffered alongside callable module calls and no longer runs before the JS bundle finishes evaluating.
Codegen no longer crawls node_modules or follows symlinks when discovering components.
FileReader now fires loadstart, throws InvalidStateError on overlapping reads, and exposes error as a DOMException; aborting a read also leaves it in the correct state.
Platform.OS and Platform.select(...) inlining in react-native/babel-preset now requires inlinePlatform in addition to platform.
The minimum Metro version is now 0.87.1 so upgrading projects resolve the same Metro as freshly created ones.
Programmatic, non-user-initiated scrolls no longer cancel active touches in enclosing scroll views.
Text aligns right by default in RTL when textAlign is unset, matching Android.
Deprecations 6
Deprecated InputAccessoryView on Android.
Deprecated this import path; use react-native/setup-env instead.
Deprecated fabricEnabled on Android ReactFragment.
The String? overload is deprecated.
The String? overload is deprecated.
iOS prints warning advice when shadow styles are used without a solid background color.
New APIs and options 15
Added Java ArrayBuffer support for TurboModules with an explicit byte-ownership contract. Borrowed bytes are scoped to the synchronous call; copy them with arrayBufferWithCopiedBytes to retain them.
Copy borrowed ArrayBuffer bytes with this method to keep them beyond the synchronous call that received them.
Added a feature flag for image transparent tint color support.
When enabled, a top-level JS null TurboModule argument is passed to Objective-C as nil instead of NSNull.
Added an Android feature flag for the mounting coordinator pull model.
Added object syntax for fontVariationSettings.
Added fontVariationSettings support for Text and TextInput on Android and for Text on iOS.
Android exposes network event reporting to third-party networking stacks as an unstable API.
Users and agents can capture app screenshots with this command; performance screenshots support is also added to the experimental channel.
iOS consumers can opt into removing legacy component interop through CocoaPods and SwiftPM; the option defaults off and may become the default in a future release.
iOS consumers can opt into removing legacy module interop through CocoaPods and SwiftPM; the option defaults off and may become the default in a future release.
Added a C++ umbrella header as the public entry point for react/featureflags.
Added a C++ umbrella header as the public entry point for react/renderer/bridging.
Added a C++ umbrella header as the public entry point for react/timing.
Added iOS SceneDelegate lifecycle support.
Performance 1
The C++ method now takes moduleName and props by value.
Behavior and default changes 11
The imperative addEventListener, removeEventListener, and dispatchEvent API is enabled on native view refs in canary.
Views with the listed checkbox, radio, combobox, dropdownlist, menuitem, spinbutton, tab, option, searchbox, slider, and treeitem roles are reachable via Full Keyboard Access.
The app pbxproj no longer embeds an absolute, machine-specific HERMES_CLI_PATH; hermesc is resolved at build time instead.
Generated SwiftPM manifests derive their iOS platform floor from the app deployment target, allowing dependencies with a higher minimum to be autolinked.
Missing native component registrations are logged on iOS and Android.
Supports a lazy raw color fallback when native tokens fail to resolve.
Pull model mounting is deferred until the root attaches.
If the desktop app fails to launch, the fallback opens DevTools as a standard window in the default browser without attempting Microsoft Edge.
Long single-line TextInput placeholders are ellipsized to match iOS.
The C++ method now takes moduleName and props by value.
Android network requests now default to an app name and version User-Agent header, matching iOS.
Tooling 8
Codegen discovers third-party component libraries that do not have an iOS configuration.
Added the clearAllLogs() method to LogBox TypeScript declarations.
Added the isInstalled() method to LogBox TypeScript declarations.
TypeScript module augmentation can now extend generated props and style types.
The Babel preset now inlines Platform.OS and Platform.select(...) for React Native Platform imports in additional cases.
Added TypeScript declarations for requestIdleCallback and cancelIdleCallback.
Scaffolding reads the SwiftPM name from the podspec and stores it in package.json.
React Native DevTools adds inspection of WebSocket events in the Network panel to the canary channel.
Fixes and other changes 57
Using accessibilityRole="tabbar" no longer crashes on Android.
A view is properly re-enabled when disabled resets from true, so Pressable no longer remains partly untappable.
addListener fires again for natively driven Animated values derived with add, subtract, multiply, divide, modulo, diffClamp, or interpolate.
Text is no longer clipped when its container height decreases dynamically.
aria-* state props are no longer ignored when accessibilityState is also present.
Added missing TypeScript types for the public AssetRegistry API.
Imagesets no longer pair the wrong files for assets with non-standard scales.
Resetting border widths no longer clips children in rounded overflow-hidden views.
Setting a percentage borderRadius on Image no longer crashes.
Debug server host changes made through Change Bundle Location are persisted.
Incremental iOS builds no longer encounter a ReactCodegen dependency-cycle error when this directory contains no Native* or *NativeComponent spec files.
WebSockets no longer throttle bundle downloads or other dev server requests.
DeviceInfo constants refresh after interface dimension changes.
A ViewManager DimensionValue prop annotated with ReactProp no longer fails with an unrecognized YogaValue type.
Reverted codegen rejection of ArrayBuffer TurboModule EventEmitter payloads so declarations that worked in 0.87 continue to build.
A fatal JS error is reported instead of aborting the process if reading the error's extra data fails.
Added the missing strictMode prop to FlatList TypeScript types.
RCTReactNativeFactory forwards the callback to the user delegate.
Image source headers are preserved when using crossOrigin or referrerPolicy.
Image.getSize no longer rejects data: URIs.
Image.getSizeWithHeaders no longer rejects data: URIs.
Android represents tintColor as std::optional to support transparent (0) with props 2.0.
Inline views inside Text no longer shrink with Android system font scale.
The reactnative prefab exports jserrorhandler headers so external consumers of cxxreact/ErrorUtils.h can build.
Changing keyboardType while a TextInput is focused updates the keyboard, matching legacy architecture behavior.
Cell metrics are cleared on orientation change, and divide-by-zero is guarded against.
Providing outlineColor as a numeric color value no longer crashes.
The dotted and dashed outline styles render on views without border radii.
The RCTSwitch paperComponentName is restored, fixing testing-library/react-native queries.
The method no longer causes a main-thread watchdog hang.
Calling RCTAppearance.setColorScheme() no longer crashes CarPlay apps when connectedScenes contains a non-UIWindowScene.
Reverted the codegen change, restoring NSMutableData * for Objective-C TurboModule methods that take or return an ArrayBuffer, preserving compatibility with modules adopted in 0.87.
Deriving blob names for network responses no longer intermittently causes a CoreServices/UTType XPC native crash.
A debug-only crash from UITextView text-selection gestures on iOS 17 and later is fixed.
A child-index mismatch is reported instead of raising NSRangeException while formatting the assert message.
Resetting EmptyLayoutMetrics during recycling clears UIView.hidden on recycled views.
Third-party New Architecture CocoaPods gain a React-cxxstableapi dependency to resolve React Native C++ API guard headers.
Restored the .js fallback for legacy deep imports of untyped modules under the react-native-legacy-deep-imports condition.
Bridgeless on-demand JS segment loading no longer causes an unhandled exception when the segment file is missing from cache.
RedBox auto-retry no longer reloads while the app is backgrounded.
Fixed the timeout option being ignored.
Changing returnKeyType while a TextInput is focused updates the keyboard, matching legacy architecture behavior.
RTL is detected from the active locale rather than an arbitrary installed locale.
Pending tasks and rendering updates are now cleared when a task throws.
Fixed behavior with rapid data updates.
Autolinking no longer recreates library package roots on every sync, avoiding Xcode build failures for libraries that ship their own Package.swift.
The final text line or trailing glyph is no longer clipped due to pixel-grid rounding precision loss.
TextInput preserves its selection color when multiline changes.
The soft keyboard appears when a long-press starts text selection in TextInput.
Event emitters no longer throw when an event is emitted before the emitter callback is installed.
Exceptions rethrown from async and void TurboModule calls include the module and method name.
Extralight fonts are correctly classified as UIFontWeightUltraLight in RCTGetFontWeight.
Added the missing ListItemComponent type to VirtualizedList props.
VoiceOver text readout works when elements change asynchronously.
Startup no longer crashes when the WindowMetrics API is missing on an inconsistent Android runtime.
A nullable float ViewManager prop annotated with ReactProp no longer fails with an unrecognized Float type.
Duplicate request headers are now appended according to the specification.
react-native 0.8711 changes
Breaking changes 3
SwiftPM rejects colliding or invalid module names instead of silently dropping a module from the build.
The unused
spm.modules.publicHeaderFilesfield was removed from thespmsection ofreact-native.config.js.SwiftPM now hard-fails with a clear error when an autolinking plugin host is referenced as a dependency.
Tooling 1
SwiftPM injection sets
SWIFT_ACTIVE_COMPILATION_CONDITIONStoDEBUG.
Fixes and other changes 7
Header search paths containing spaces keep their quotes, preventing paths from being split incorrectly.
The API is typed as an event handler rather than
any.The callback payload is typed as
{value: number}rather thanany.Fixes a Hermes runtime/compiler version mismatch that caused “Wrong bytecode version” crashes in SwiftPM Release builds.
The SwiftPM pipeline now reads the configuration file correctly when it uses default exports.
Scaffolding the Swift manifest now reads
spm.namefromreact-native.config.js.SwiftPM resolves naming collisions in generated manifests.
react-native 0.8666 changes
Breaking changes 6
Custom fonts with an explicit fontWeight no longer render at the heaviest weight on the New Architecture.
Returns true source dimensions rather than Fresco's downsampled values.
Returns true source dimensions rather than Fresco's downsampled values.
observe({type: 'event'}) now defaults durationThreshold to 104ms per the W3C Event Timing spec instead of reporting all events.
Values other than false no longer affect behavior; previously, any falsey value behaved like false.
Views with non-invertible transforms, such as scaleX: 0 or scaleY: 0, no longer receive touches on Android or iOS.
Deprecations 1
The hook function's second argument is deprecated because it is not usable by apps; a stub that warns when used is passed instead.
New APIs and options 12
Adds an Android interface that lets native modules react to window creation and destruction, such as for Modal dialogs.
Dev-mode Metro bundle loads call methods on this global when it is provided, allowing integrations to receive bundle-load reports.
Android channels hardware play and pause events.
Adds an asynchronous iOS check for whether the DevServer Packager is running, without blocking the UI thread while waiting for the request.
Adds plus-lighter as a supported mixBlendMode value.
Adds an iOS API for selectively modifying HTTP requests.
Adds an iOS API for modifying multipart data task requests before they are sent.
Dispatches FPS performance events for mouse-wheel and trackpad scroll interactions on Android.
Adds an iOS provider for selectively injecting WebSocket headers.
Android TextInput gains support for additional autoComplete autofill hints.
Adds this method to UIManagerBinding for accessing a View Transition instance.
Adds a UIManagerViewTransitionDelegate interface and APIs for React Native View Transitions.
Behavior and default changes 4
The Android ripple option now accepts PlatformColor.
Android hardwareBackPress events now pass the event object, making the native event timestamp accessible.
Android NavigationBar now respects the theme's enforceNavigationBarContrast attribute.
On Android, the back button can dismiss LogBox notification toasts and the inspector overlay.
Tooling 2
React Native DevTools supports light and dark mode emulation through this method.
React Native DevTools performance traces include a custom track for React Native Renderer operations.
Fixes and other changes 41
Fixes a ConcurrentModificationException when getInitialURL re-enters during onHostResume.
For <Modal> and other nested root host views, parentNode and parentElement now return the containing element instead of the document, preserving capture and bubble event propagation to ancestors.
Fixed nodes with display: contents having hasNewLayout set incorrectly.
Fixes a promise that could remain unresolved indefinitely.
Fixes a promise that could remain unresolved indefinitely.
Fixes a promise that could remain unresolved indefinitely.
Prevents a crash caused by an unsupported background size value.
Fixes the blob content provider not working in the new architecture.
Fixes a crash when props 2.0 is enabled and borderStyle is set to undefined.
Fixes window values on Android versions below 15 when edge-to-edge is enabled.
Handles edge-to-edge when enforced by Android 15 or later, even if the edgeToEdgeEnabled Gradle property does not enable it.
C++ NativeAnimatedNodesManager processes the animation graph synchronously on every scroll event, fixing one-frame latency and matching Java behavior.
Fixes timestamp injection overriding native timestamps and corrects propagation of event timestamps from host platforms to JavaScript.
Uses the stable Hermes V1 release instead of the legacy nightly to fix a startup crash caused by a JSI ABI mismatch.
Fixes Android JNI registration so calling disable no longer invokes enable.
Fixes image content disappearing on Android API 24 when antialiased border-radius clipping is applied.
Fixes IPv6 handling for packager and inspector connections.
Fixes behavior on Android 15 and later, and when edgeToEdgeEnabled is enabled.
Fixes failure to respond to IME height changes, such as toggling the emoji panel or predictive bar.
Fixes an activity context memory leak when using bridgeless mode.
Fixes incorrect coordinates when edge-to-edge is enabled.
Forwards style to Modal's inner container View with precedence that applies consumer styles without overriding transparent or backdropColor.
Catches OutOfMemoryError during response processing to prevent app crashes.
Persists PODFILE_DIR relative to SRCROOT so project.pbxproj is portable across machines.
Fixes an NSRangeException crash when the text range is out of bounds.
Prevents a crash when delegate callbacks fire after module invalidation.
WebSocket scheme and port are derived from the dev server URL, supporting HTTPS dev servers.
Fixes inspector server host resolution for HTTPS bundle URLs by omitting the default port.
Fixes path resolution when Pods/ is a symlink.
Fixes an onHostPause crash in the legacy architecture when no feature flag is set.
Guards against transient non-descendant accessibility traversal crashes on Android.
Fixes an iOS crash when changing the value of
removeClippedSubviews.Prevents the FPS performance listener from being cleared when a ScrollView is recycled.
Applies StatusBar configuration to Modal windows, fixing visual inconsistencies.
Fixes auto-scroll failing to respond to IME height changes, such as toggling the emoji panel or predictive bar.
Fixes setAutoCapitalize stripping numeric input flags, which affected minus-sign input on Samsung keyboards.
Fixes React-CoreModules compilation by providing the missing React-featureflags header path.
Loads RCTDefines.h first in the prebuilt React umbrella and drops the module wildcard so RCT_* macros propagate to consumer pods.
Skips Hermes pods when USE_THIRD_PARTY_JSC is enabled and fixes a compilation error in createJSRuntimeFactory.
Preserves a Cookie header passed through the WebSocket constructor's headers option.
Fixes a crash when clearing zIndex with props 2.0 enabled.
react-native 0.851 changes
Fixes and other changes 1
The build now uses the pinned Hermes version when version.properties is not 1000.0.0, preventing it from selecting the wrong Hermes version.
react-native 0.843 changes
Fixes and other changes 3
Included builds in monorepos now resolve gradle.properties from parent Gradle start parameters before falling back to ../../android/gradle.properties, allowing hermesV1Enabled to be inherited correctly.
ReactPlugin.kt no longer always sets hermesV1Enabled to true.
Symbol fallbacks are provided for inspector-modern/chrome/Registration.h when HermesV1 is disabled.
react-native 0.8315 changes
New APIs and options 1
Android devsupport now supports a custom header.
Performance 1
Prebuilt iOS binaries are cached across clean installs and projects, avoiding repeated downloads from Maven.
Tooling 1
Adds RCTDevSupportHeaders to the React Umbrella for iOS precompiled binaries.
Fixes and other changes 12
Fixes Yoga node ownership for
display: contentsin absolutely positioned subtrees.The response URL is correct after an Android redirect.
Apps using additional Hermes runtimes, such as Reanimated, are no longer incorrectly flagged as multi-host.
The queue size is limited to prevent the Android inspector from being force-disconnected by large payloads.
Provides symbol fallbacks for inspector-modern/chrome/Registration.h when HERMES_V1_ENABLED is set.
Fixes the iOS banner getting stuck after reloads in quick succession.
The color scheme in appearance state is now fixed after setting it to unspecified.
On Android, file:// URIs passed to fetch no longer fail.
Fixes a Hermes crash when an async void TurboModule method throws NSException by re-throwing instead of converting it to JSError on the wrong thread.
On Android, file:// URIs passed to XMLHttpRequest no longer fail.
Fixed rncore tarball extraction for EdenFS compatibility.
Fixes a Network error that could occur on Android when uploading binary data with FormData.
react-native 0.822 changes
Fixes and other changes 2
Fixes the prebuild cp command so it works with GNU coreutils.
Fixes transform representation when a view is originally zero-sized.
react-native 0.814 changes
New APIs and options 1
ReactTextViewManager can now be extended.
Fixes and other changes 3
Fixes an iOS crash when application.delegate.window is nil.
Fixes permission requests that do not always resolve on Android 16.
Fixes Switches on the legacy architecture.
react-native 0.809 changes
Behavior and default changes 1
Stabilizes custom accessibility action IDs for TalkBack.
Fixes and other changes 8
Fixes a race condition that could leave codegen libraries missing sources.
Fixes missing dependencies in Codegen, preventing dependency-related build issues.
Updates font scale on Android when RootView is recreated.
Accessors inside HeadlessJsTaskService are open again, allowing subclasses to override them.
Fixes an Android freeze in the legacy architecture when Metro refreshes.
Fixes RefreshControl recycling on iOS.
Fixes RefreshControl not refreshing on initial mount on iOS.
Setting maxLength to 0 now prevents typing on iOS.
react-native 0.792 changes
Breaking changes 1
React Native 0.79.7 is out of support, which may affect decisions about continuing to use this release.
Fixes and other changes 1
On Android, missing parent view state in updateLayout is now treated as a soft error.