Skip to content

0.89.0-rc.0

Pre-release
Pre-release

Choose a tag to compare

@react-native-bot react-native-bot released this 04 Nov 13:13
· 137 commits to main since this release

Breaking

  • Accessibility: AccessibilityState::selected is now std::optional<bool> in C++ props, preserving an unset selected instead of coercing it to false (af4d8eb08a by Calvin Liu)
  • Assets: Remove react-native/assets-registry. Use AssetRegistry from react-native and react-native/asset-utils instead. (56c48ac0eb by @huntie)
  • Babel: Turn off babel/plugin-transform-destructuring plugin (73711b301e by @retyui)
  • C++: Remove deprecated react/renderer/graphics/Geometry.h and react/renderer/graphics/conversions.h; include <React/Graphics.h> or <React/RendererCore.h> instead (1449daad5e by @j-piasecki)
  • CLI: react-native/community-cli-plugin will no longer be auto-detected from react-native. It must now be specified in devDependencies. (b26baaeba0 by @huntie)
  • CLI: Platform registration config for the Community CLI is removed from the react-native package. No breaking change with react-native-community/cli 21.x (required). (be9fbdd0d5 by @huntie)
  • Image: Fix explicit fadeDuration being ignored on newly created Images (98d6795e6d by @bartlomiejbloniarz)
  • JavaScript API: Mark unstable_batchedUpdates as deprecated (f6fc189b8c by @retyui)
  • VirtualizedList: Fix SectionList and VirtualizedSectionList scrollToLocation to account for section headers and sticky headers correctly. (0c35f57447 by @amroaltah)

Android specific

  • C++: Remove deprecated rncore.h; include FBReactNativeSpec.h and call FBReactNativeSpec_ModuleProvider instead (d63648bac6 by @javache)
  • New Architecture: Remove DefaultNewArchitectureEntryPoint.bridgelessEnabled and the deprecated three-argument load(turboModulesEnabled, fabricEnabled, bridgelessEnabled) overload; bridgeless is always enabled in the New Architecture (9b18b951ea by @christophpurrer)
  • New Architecture: Remove DefaultNewArchitectureEntryPoint.fabricEnabled, turboModulesEnabled, concurrentReactEnabled and isConfigurationValid (ca2e11af51 by @christophpurrer)
  • Text: Add lineBreak and wordBreak props to Text (CSS line-break / word-break) for strict/loose line breaking and phrase-based breaking on Android 13+ (f736393946 by @iray-tno)
  • TurboModules: Libraries that ship pre-generated JNI codegen fail to build until they regenerate it with 0.89's codegen: the JavaTurboModule::invokeJavaMethod overload with a cachedMethodID argument is deprecated, and codegen CMake builds with -Werror. (f78bdd4aea by @hryhoriiK97)

iOS specific

  • Animated: Delete legacy RCTNativeAnimatedModule from RN iOS (46662327fb by @christophpurrer)
  • CocoaPods: Install React-cxxreact headers under cxxreact/ inside its framework when USE_FRAMEWORKS is enabled. Pods that include <cxxreact/...> without calling install_modules_dependencies must add React_cxxreact.framework/Headers to HEADER_SEARCH_PATHS. (0a92baec87 by @j-piasecki)
  • New Architecture: Remove the deprecated bridgelessEnabled property and the deprecated initWithBundleURLBlock:newArchEnabled:turboModuleEnabled:bridgelessEnabled: / initWithBundleURL:newArchEnabled:turboModuleEnabled:bridgelessEnabled: initializers from RCTRootViewFactoryConfiguration; bridgeless is always enabled (2a9eca81b8 by @christophpurrer)
  • TurboModules: +moduleName is now optional on RCTBridgeModule instead of required, so a TurboModule resolved via a module provider need not declare it (373385efc9 by @christophpurrer)
  • TurboModules: RCTBridgeModule.h now has nullability annotations. constantsToExport is nonnull, so a Swift override declared -> [AnyHashable : Any]! no longer compiles: declare it -> [AnyHashable : Any]. Module and view registry lookups, methodsToExport, promise resolve and reject arguments and weak module properties such as bridge are now nullable. (08f96fefe4 by generatedunixname1608173377072046)

Added

  • AppState: Add useAppState() hook for subscribing to app foreground/background state changes (7104c5ef36 by @Nedunchezhiyan-M)
  • Babel: react-native/metro-babel-transformer passes Metro's own babel/runtime and its version to react-native/babel-preset, when Metro provides them (89db5ce049 by @robhogan)
  • Babel: Allow react-native/babel-preset to read enableBabelRuntime and babelRuntimeModuleName from Babel caller data (168a0d7b53 by @cortinico)
  • C++: Add <React/ComponentRegistry.h> umbrella header as the public entry point for react/renderer/componentregistry (2975534d8b by @j-piasecki)
  • C++: Added ReactNativeVersion.h to public react/utils module. (a35313a184 by @j-piasecki)
  • C++: Added an umbrella header for the react/renderer/core module (dcc872ae01 by @j-piasecki)
  • C++: Added umbrella header for the react/renderer/components/image module (a9203b8fdd by @j-piasecki)
  • C++: Added umbrella header for the react/renderer/imagemanager module (be53e3a9a1 by @j-piasecki)
  • Renderer: Allow C++ shadow node traits to be evaluated at compile time (73e3aeca88 by @javache)
  • Runtime: Polyfill Array.prototype.toSorted and Array.prototype.toReversed when the JavaScript runtime does not provide them (3ff956a2a2 by @javache)
  • Text: Add experimental longest-line width sizing for wrapped Text (03ed284a2c by @Abbondanzo)
  • View: Add an experimental_onSafeAreaInsetsChange view prop, reporting the part of a view that is covered by the system UI, with a development warning for views that report their insets in a loop (8d658f4101 by @janicduplessis)
  • VirtualizedList: Export the ViewabilityConfig and ViewabilityConfigCallbackPair types from the package root (932b34a51c by @rubennorte)
  • Web APIs: Add ArrayBuffer, DataView, typed array, boxed BigInt, and Error subclass support to structuredClone (14de25bb2d by @rubennorte)
  • Web APIs: Expose structuredClone and DOMException as global Web APIs (245bbfaf0a by @rubennorte)

Android specific

iOS specific

  • Accessibility: AccessibilityInfo.isShowBordersEnabled() and showBordersChanged (Show Borders, formerly Button Shapes) (62a1fc186d by @camilopires)
  • CocoaPods: Add RN_STRICT_API and RN_ALLOW_FRAMEWORKS CocoaPods opt-ins to enforce React Native's C++ stable API in app and library native code (0f1c6ae87d by @coado)
  • ReactHost: Add -[RCTHost jsCallInvoker] to access the React instance's CallInvoker (8f58866394 by @potomak)
  • SwiftPM: Add RN_STRICT_API and RN_ALLOW_FRAMEWORKS opt-ins for the Swift Package Manager setup to enforce React Native's C++ stable API in the app's native code (47f744d296 by @coado)
  • TurboModules: Add injectable launchOptions and performanceLogger module APIs (9d7447ab0d by @christophpurrer)

Changed

  • Accessibility: Avoid VoiceOver interruptions from hidden text updates (e04aaf62f7 by @sbuggay)
  • Animated: Avoid per-call allocations in Animated string and color interpolation (efc5161a8d by @shubh73)
  • Babel: Hermes V1 profiles no longer lower u-flag regexes, which Hermes compiles natively (92629fd498 by @robhogan)
  • Build: Changed builds to not probe Maven for 1000.0.0 versioned artifacts. (b5c152237f by @coado)
  • C++: RuntimeScheduler.h no longer transitively includes PerformanceEntryReporter.h or ShadowTreeRevisionConsistencyManager.h; include them directly where the complete types are needed (7aff51e2d1 by @j-piasecki)
  • C++: Expose enableMountingCoordinatorPullModelAndroid in public C++ feature flags and move BackgroundImagePropsConversions.h to "for frameworks" headers (fc4e7061e2 by @j-piasecki)
  • C++: Find a LongLivedObject in its collection without walking it (caf9cbcd63 by @hryhoriiK97)
  • C++: Move RecoverableError from private headers to "for frameworks" headers (f9c7007dc9 by @j-piasecki)
  • CLI: Change default transform profile to 'hermes-stable' (97bea4625d by @retyui)
  • Codegen: Codegen-generated C++ includes React Native through module umbrella headers (095e563fb3 by @j-piasecki)
  • Dependencies: Bump memoize-one package to the latest version (adc45a8a03 by @retyui)
  • EventEmitter: RCTDeviceEventEmitter.emit no longer allocates closures on every emit when tracing is disabled, reducing per-event allocation on the native-to-JS event path (7f6043bdb0 by @secitr)
  • Hermes: Bump Hermes to 260318099.0.6 (4eb4d2e795 by @fabriziocucci)
  • Metro: Bump Metro minimum to 0.87.2 (b5c65ce265 by @robhogan)
  • React Native DevTools: Upgrade the standalone app to Electron 43, add app-menu shortcuts, and add a macOS 26/27 icon (861635c35a by generatedunixname1395667395051502)
  • Renderer: Building a ShadowView for a View node no longer uses a dynamic_cast to read its layout metrics (79a562960d by @hryhoriiK97)
  • Renderer: Commits under a display: 'none' view no longer re-run layout over the whole surface when something under it was created or changed while it was hidden (fe0df65653 by @mozzius)
  • Renderer: Compare prop name pointers before their characters in RawPropsParser (3b88cb2c67 by @hryhoriiK97)
  • Renderer: Replace never-shared std::shared_mutex with std::mutex in ShadowNodeFamily (64217380a3 by @amillez)
  • Renderer: The differ no longer copies its view culling context for every child when view culling is off (7230b63b3e by @hryhoriiK97)
  • ShadowNode: Avoid a redundant copy of the children list in ShadowNode::cloneTree and UIManager::updateShadowTree (d0078c23d8 by @shubh73)
  • Text: Enable prepared text layout caching and Android text measurement optimizations by default (a5cb48b2fc by @Abbondanzo)
  • VirtualizedList: Reduce allocations in the VirtualizedList render and scroll path (avoid per-render Set allocation for stickyHeaderIndices, per-scroll-event Map iterator for the empty nested-list collection, and per-call orientation object allocation) (731ae45ae6 by @secitr)
  • VirtualizedList: Skip the cells state update when the render window doesn't change (2c635d7473 by @tomekzaw)
  • Yoga: Yoga layout no longer uses dynamic_cast for every child to check its type (392b7645b3 by @hryhoriiK97)

Android specific

iOS specific

  • AppDelegate: RCTAppSetupUtils.h no longer transitively imports HermesExecutorFactory.h (a385cecbea by @j-piasecki)
  • AppDelegate: RCTAppSetupUtils.h no longer transitively imports JSIExecutor.h or JSExecutor.h (3eb901e31a by @j-piasecki)
  • Runtime: Include errno and its description in RCTJavaScriptLoader bundle open/stat errors (156a9a29a9 by generatedunixname1608173377072046)
  • StatusBar: Reland iOS 27 StatusBar fix with tvOS guards (edf2b86e63 by @cipolleschi)
  • SwiftPM: spm add and spm update write React Native's build settings to ReactNativeSPM/ReactNativeSPM.xcconfig and its build scripts to ReactNativeSPM/Scripts/, so a version bump no longer changes project.pbxproj. A configuration that uses its own xcconfig must now #include the generated file, and a target setting that hides React Native's value must add $(inherited). spm prints the exact fix in both cases. (6a2c7c2734 by @chrfalch)
  • Text: Build a paragraph's NSAttributedString without copying each text fragment or re-attributing its runs (7fc58f2192 by @hryhoriiK97)
  • Text: Pass AttributedString by const reference in RCTTextLayoutManager and add a move constructor for AttributedStringBox. (0ffaff80a3 by @dheerajkoppu)
  • TurboModules: Look up each TurboModule method's signature once instead of on every call (1d1fade902 by @hryhoriiK97)
  • TurboModules: Strings passed from JS to native modules convert faster (ed15270c6c by @hryhoriiK97)

Deprecated

Android specific

  • UIManager: Deprecate the legacy View-based surface lifecycle methods in UIManager. (d4d0813969 by @javache)

iOS specific

  • Legacy Architecture: Deprecate RCTBridge.bundleURL, setRCTTurboModuleRegistry:, and bridgeModuleDecorator (1eb24d4b31 by @christophpurrer)
  • Legacy Architecture: Deprecate never-posted invalidation notifications still observed by Skia and Reanimated (490c4023bb by @christophpurrer)
  • Legacy Architecture: Deprecate unused old-architecture RCTBridge APIs ahead of removal (fcb13c5171 by @christophpurrer)
  • Renderer: Mark -[RCTSurfacePresenter addObserver:] as deprecated for the compiler. Use RCTMountingTransactionObserverCoordinator instead. (9979e142a7 by @tjzel)

Removed

Android specific

iOS specific

Fixed

  • Animated: Easing.bezier: fix wrong values on steep curves such as (1, 0, 0, 1); input outside [0, 1] now saturates (2ae713e898 by @greweb)
  • Animated: An Animated interpolation of a string that contains an rgb(), hsl() or hwb() color, such as a box shadow, interpolates the whole string instead of collapsing to the color (1adb75ea3b by @YevheniiKotyrlo)
  • Animated: Fix native-driven animations stepping backward when a native event update runs between frames with the shared animated backend (dee5bb5762 by @markv)
  • Animated: Non-layout props animated on the shared animation backend no longer freeze while the same view or another view on the surface animates a layout prop (14ace9beaa by @bartlomiejbloniarz)
  • Babel: experimentalImportSupport in a Metro config now takes effect when react-native/babel-preset is named in a project Babel config (a24bd322d7 by @shubh73)
  • Babel: Fix Platform.select inlining producing invalid output for object methods when discarding impure initializers is skipped (88748a7973 by @vzaidman)
  • Babel: Preserve side effects from discarded Platform.select property initializers in the Babel preset. (f3fb55031d by @mfkrause)
  • Blob: Fix Blob.slice end handling when start is omitted (7619e9c58b by @Shubham-Padkonde)
  • C++: Fix native dispatcher callback ownership and shutdown synchronization (03355ef9a1 by @Abbondanzo)
  • C++: Restore public parseUnprocessedTransformOriginString in react/renderer/components/view/conversions.h (7b11d48538 by @cipolleschi)
  • Codegen: Codegen now also reads react-native.config.cjs, so libraries declared in it are no longer skipped in ESM projects (583c8f3afb by @CAMOBAP)
  • Codegen: Reduce generated native component bundle overhead (f156ef2b02 by @rubennorte)
  • Dev Menu: Toggling Touchables in the Element Inspector no longer remounts the app and resets its state (d194d8b5c6 by @LESANF)
  • Dev Server: Skip HMR client setup when the JS bundle was not loaded from Metro (f109c0af86 by @javache)
  • DOM API: Preserve an explicit null thisArg in NodeList.forEach callbacks. (822cfc4e40 by @OskarEichler)
  • DOM API: Preserve NaN and signed zero in DOMRect values. (99aefad9fb by @OskarEichler)
  • ESLint: Align the react-native/no-deep-imports auto-fix map with the package's public API (29900fca26 by @rubennorte)
  • ESLint: Fixed the issue when using the flat config with ESLint v9. (099bcb444e by @tcK1)
  • ESLint: Stop no-deep-imports from reporting react-native/package.json, which is a supported entry point (46d00410e8 by @ahmdshrif)
  • Events: Handle native component event names that shadow Object prototype properties. (665beff9df by @OskarEichler)
  • Hermes: Hermes profiles no longer lower generators, for...of, optional chaining, nullish coalescing or optional catch binding in dev, matching release (ba0b3dbd6c by @robhogan)
  • Hermes: Retain Unicode regex semantics while lowering property escapes for Hermes builds (6e22123d6f by @andrewdacenko)
  • Image: Fix explicit resizeMode="stretch" being ignored on newly created Android Images (e560782758 by @bartlomiejbloniarz)
  • IntersectionObserver: IntersectionObserver rootMargin now affects intersection against a clipping root (5646c31dff by @edkimmel)
  • Jest: Fix react-native/jest-preset failing to resolve react-native and to transform preset sources under pnpm and Yarn pnpm-mode installs (b71d466561 by @amroaltah)
  • LayoutAnimation: Fix setLayoutAnimationEnabled not applying the value parameter (550aadd200 by @Nedunchezhiyan-M)
  • Metro: Scope Metro INTERNAL_CALLSITES_REGEX to the react-native package to avoid collapsing unrelated frames (03737541b1 by @vzaidman)
  • Networking: WebSocket no longer dispatches message events after close() has been called (a6c0c470ad by @lazerg)
  • New Architecture: Fix minimumFontScale with adjustsFontSizeToFit in the New Architecture (b7357896e2 by @conner1reimers)
  • Performance: Reject missing and non-function PerformanceObserver callbacks during construction. (c2da17514e by @OskarEichler)
  • Performance: Validate invalid PerformanceObserver observe option combinations before native registration (e0224fd40b by @ya-nsh)
  • React Native DevTools: Fix "Unable to fetch script source" when debugging code evaluated in the DevTools console (e8c06bb08b by @vzaidman)
  • React Native DevTools: Fix launch failure when Chromium uses the SUID sandbox (Linux) (954a7c2a97 by @huntie)
  • React Native DevTools: Fix React Native DevTools staying open but unresponsive after the debugged React Native instance is destroyed (eec38e3c82 by @vzaidman)
  • React Native DevTools: Fix the inspector proxy leaking a pages polling timer, and sending duplicate getPages requests, each time a device reconnects with the same device ID (268b3029ef by @vzaidman)
  • Renderer: Fix the differ creating a mounted view again, or deleting a moved view, when a child with a negative zIndex moves in a nested flatten/unflatten (361bc240e4 by @pawicao)
  • Runtime: Fix deadlock in RuntimeScheduler when a task destructor schedules work while the queues are cleared after an error (3181abc5c9 by @hcbylmz)
  • Runtime: Install globalEvalWithSourceUrl on bridgeless ReactInstance so debug bundle loaders can evaluate split bundles via JSI instead of eval() (2a2ccaa522 by @abzokhattab)
  • Styles: hsl() colors with an alpha, and alphas given as a percentage such as rgb(0 128 0 / 50%), are no longer rejected (3aee67bcb6 by @lazerg)
  • Styles: Accept unitless zero stops and reject invalid layers in backgroundImage strings (54905a2006 by @lazerg)
  • Styles: Default omitted filter amounts to 1 and reject px in processFilter (888784ce89 by @lazerg)
  • Styles: Keep percentages in translateX/translateY string transforms and parse numbers without a leading zero (bd9348a32a by @camchis)
  • Text: adjustsFontSizeToFit text grows back when its container grows (db5c52de8b by @tomekzaw)
  • Text: Avoid state updates and re-layout of unchanged Text siblings when a sibling changes (e7766ab2fa by @tomekzaw)
  • Text: Text inside Modal now updates after a live font scale change (e8e63cf79c by @simongt)
  • Touch Handling: Pressability now invokes the current onHoverIn/onHoverOut rather than the ones captured when its event handlers were created (8a4cf38576 by @rozele)
  • Touch Handling: Fix lost taps after a touched view unmounts when EventTarget event dispatching is enabled (eb90a8d251 by @rubennorte)
  • Touch Handling: Fix the responder not being released when a touch ends after its view unmounted (f754dbd20a by @lazerg)
  • TypeScript: Fix the legacy TypeScript ImageStyle type rejecting valid ViewStyle props such as filter, boxShadow and mixBlendMode (278e7f93c8 by @ramya-2196)
  • View: Reset a removed shadowRadius, shadowOffset, editable or persistentScrollbar prop to its default (86695d8eb6 by @YevheniiKotyrlo)
  • VirtualizedList: Avoid delaying urgent VirtualizedList rendering after queued no-op updates (6dcc04bf21 by @javache)
  • VirtualizedList: Clear the pending batch-update timer id in componentWillUnmount so a list hidden and revived by Suspense (react-freeze / freezeOnBlur) resumes rendering new cells (381d74d788 by @twelvearrays)
  • VirtualizedList: Do not report viewable items for a cross-orientation nested list while its parent row is off screen (4fec40e69d by @amroaltah)
  • VirtualizedList: Fix VirtualizedSectionList._setUpdateHighlightFor deleting from wrong target (memory leak) (0941e95391 by @bl4987637-code)
  • VirtualView: Fix VirtualView initial mode when initialHidden is not sent on creation (cf583810a1 by @bartlomiejbloniarz)
  • Web APIs: Sort URLSearchParams names in UTF-16 code-unit order instead of locale order. (778fef746d by @Marve10s)
  • Yoga: Avoid exponential min-content measurement during automatic minimum sizing of nested flex containers (6e2edef96e by @adityasharat)
  • Yoga: Fix Style::operator== ignoring boxSizing (e0d0f011ee by Open Source Bot)
  • Yoga: Fix a flex line collapsing to its minimum sizes when the first item clamps to its min or max main size, behind the new FlexFirstPassUsesRunningTotals errata (set by default) (ca7acf62c5 by @Dagur)
  • Yoga: Fix stale layout when a child switches to display: contents after being inserted (19a6722f91 by @kwy404)

Android specific

  • Accessibility: A View with aria-live or accessibilityLiveRegion is no longer flattened, so the live region is announced (5e13324903 by @faciledictu)
  • Accessibility: Fix accessibilityState, a removed accessibilityRole, role or accessibilityValue, and role="none" with Props 2.0 (4c103143c2 by @bartlomiejbloniarz)
  • Accessibility: Preserve complete text for accessibility when prepared text layouts are ellipsized (6afe9f134a by @javache)
  • Accessibility: Prevent invalid accessibilityRole values from crashing the app. (9a20e06f51 by @Abbondanzo)
  • Accessibility: Recycled views no longer keep the accessibility state of their previous props (6f73542a45 by @YevheniiKotyrlo)
  • Accessibility: Removing accessibilityValue no longer leaves its text in the content description or drops the accessibilityLabel (25b05acd73 by @lazerg)
  • Build: Fix Activity Result launcher compilation across AndroidX source variants (d7ff82ebe4 by @Abbondanzo)
  • Dev Menu: Pressing the menu key while the dev menu is open now closes it (0e9d314184 by @alanjhughes)
  • Dev Server: Warn when dev support is enabled but packager server access is disabled (d365e6499a by @javache)
  • Gradients: Stop logging "Unsupported type for radius property: Null" for gradient color stops without an explicit position (585b28c5f0 by @tshmieldev)
  • Gradle: Invalidate the Android autolinking cache when pnpm-lock.yaml changes (cd2de187e8 by @JoelTowell)
  • Gradle: Re-copy the prefab headers when a header under ReactCommon changes (bf4fac3587 by @YevheniiKotyrlo)
  • Hermes: Fix building Hermes from source on Windows failing on the JSI_DIR path (7b21e74587 by @YevheniiKotyrlo)
  • Hermes: Fix Hermes source builds after the Hermes repository move (f6a5042c84 by @javache)
  • i18n: Prevent a crash when resolving RTL layout direction on Android 6 (eaa9d7f3c8 by Shreesh Ayachit)
  • Image: Avoid blocking the UI thread while selecting multi-source images (cf1fc01ce9 by @Abbondanzo)
  • Image: Fix Image sources, headers and a removed tintColor with Props 2.0 (5e2f85a793 by @bartlomiejbloniarz)
  • MapBuffer: Make the React/View.h, React/Debug.h and React/MapBuffer.h umbrella headers resolvable in CMake builds (b936db95db by @j-piasecki)
  • Modal: Fix Android navigation bar transparency for Modal (b4d57abe12 by @jasozh)
  • Modal: Fix crash when dismissing a Modal whose Activity has already been destroyed (7439937ef9 by generatedunixname1608173377072046)
  • Networking: Fix WebSocket cookie lookup dropping path-scoped cookies (0eb9b300b6 by @lazerg)
  • PlatformColor: Fix PlatformColor theme attributes that resolve to a ColorStateList, such as ?attr/textColorPrimary (4d536fa8cd by @lazerg)
  • ReactHost: Fix getCurrentActivity() staying null after the Activity is destroyed during a reload (ea5882bfb8 by @lazerg)
  • Renderer: Fix batches applied out of order when a surface's root view attaches (879df0514e by @bartlomiejbloniarz)
  • Renderer: Fix preallocated views leaking when enableMountingCoordinatorPullModelAndroid is enabled (7624c9cacb by @bartlomiejbloniarz)
  • Renderer: Mount the commits of starting and stopping surfaces, and fix a freeze when the legacy stopSurface(int) runs on the UI thread (1423ef001d by @bartlomiejbloniarz)
  • Runtime: Fix crash in UiThreadUtil when the main handler is first accessed from multiple threads at once (65b3e647f5 by @locnp-active)
  • ScrollView: Finish interrupted ScrollView drags when receiving ACTION_CANCEL. (0f17f27010 by @ddx533534)
  • ScrollView: Fix crash in ScrollView accessibility delegate when accessibilityCollection is set and a child (e.g. a list header or footer) has no accessibilityCollectionItem (2915fe02ca by @iray-tno)
  • ScrollView: Fix crash when setting a percentage borderRadius on Text, TextInput, and ScrollView (5fc6ccb165 by @sbaiahmed1)
  • ScrollView: Fix mouse wheel and joystick scrolling direction in inverted FlatList (30e2d93b40 by William Khoe)
  • ScrollView: Fix Text letterSpacing and ScrollView scrollsChildToFocus, snapToAlignment, decelerationRate, nestedScrollEnabled and sendMomentumEvents with Props 2.0 (973b31ba57 by @bartlomiejbloniarz)
  • Styles: Preserve explicitly transparent colors during Props 2.0 reconciliation. (022458fbb6 by @ngocdevv)
  • Switch: Fix Switch losing its outline, boxShadow and thumbColor ripple color when backgroundColor is set (19d6d171f7 by @shubh73)
  • Text: aria-live on Text now sets accessibilityLiveRegion (9de6471df2 by @faciledictu)
  • Text: Fix ellipsizeMode="clip" being ignored on newly created Text (8cd9b763e3 by @bartlomiejbloniarz)
  • Text: Fix fontVariant being ignored on Text that doesn't also set fontFamily, fontWeight or fontStyle (ababa4de06 by Bora Shim)
  • Text: Fix double text decorations rendering as a solid band when prepared text layout is enabled (6f6fa0ad9f by @Abbondanzo)
  • Text: Fix multi-paragraph RTL Text with blank or LTR lines being drawn off-screen on Android 15+ (7b6516eb11 by @fkgozali)
  • Text: Fix single-line LTR Text being ellipsized inside its measured width on Android 15+ (12e066bfbb by generatedunixname1608173377072046)
  • Text: Prevent RTL line-start glyph ink from clipping on Android 15 and later (57f408012d by @ngocdevv)
  • Text: Respect maxFontSizeMultiplier for lineHeight and letterSpacing in Text (c93ff90778 by @sivefunc)
  • Text: The last line no longer disappears on Android 15+ when a font's glyphs overhang their advance (ReactTextView now breaks lines on advances, matching measurement) (dcdb52bc80 by @idoyana)
  • TextInput: Fix TextInput outline collapsing when its padding is below the theme default (da42db9c90 by @mehulg-meta)
  • TextInput: Fix TextInput crash when an Enter key-up triggers native focus search (04ccd832ab by @christophpurrer)
  • TextInput: Prevent TextInput from preventing scroll gestures (99fca5fcaf by @jasozh)
  • TextInput: Prevent TextInputs from interfering with nested scroll gestures (7974af7d9f by @jasozh)
  • TextInput: Restore the text input class for URL keyboard types. (0ca5cec66b by @dajiaohuang)
  • TextInput: Restore the text input class for visible-password keyboard types (f99303c9f5 by @YevheniiKotyrlo)
  • Touch Handling: Fix Pressable and TouchableNativeFeedback losing their background color and ripple when using a borderless ripple (ca3e76a7cd by @jasozh)
  • TypeScript: Export the SafeAreaInsets type (11f37bd6e7 by @janicduplessis)
  • UIManager: Avoid unnecessary getConstantsForViewManager calls during UIManager initialization. (da7c29f6d7 by @fairysword)
  • View: A NaN or infinite elevation, or deprecated scaleX or scaleY, no longer crashes the app on Android 9 and later (d8789c6212 by @YevheniiKotyrlo)
  • View: Avoid warning when clearing percentage border radii (5e6b1081bc by @Abbondanzo)
  • View: Clear the border path effect when borderStyle is removed on Android (01145c9a7f by @lazerg)
  • View: Correct safe-area inset measurements for scaled views and views clipped by ancestors. (9641acdf30 by @Abbondanzo)
  • View: Drawing a view group no longer reads every sibling's mix-blend-mode for each child it draws (089a101544 by @YevheniiKotyrlo)
  • View: Fix getOutlineWidth returning the outline offset (54b5f22c33 by @Abbondanzo)
  • View: Fix bottom-start and bottom-end border radii resolving to the wrong corners in RTL when left/right style swapping is disabled. (202d93931c by @ddx533534)
  • View: Fix View background, perspective, border width, shadow and gradient props with Props 2.0 (0f03dd9a4c by @bartlomiejbloniarz)
  • View: Preserve safe-area updates for cancelling transforms and match iOS notification precision. (95941fd368 by @Abbondanzo)
  • ViewManagers: Fix shadowColor, outlineOffset and outlineWidth not resetting to their defaults on components with a codegen view manager delegate (dfed2d925d by @shubh73)
  • ViewManagers: Make the view manager prop setter caches thread-safe (3b4abb3c7a by @brownrice777)
  • VirtualView: Fix VirtualView clipping on-screen content when its parent offset was not computed at attach time (f9340f07dc by generatedunixname1608173377072046)
  • VirtualView: Fix visible VirtualView children being clipped when an ancestor is positioned before attachment (8c2ce771d8 by @cortinico)

iOS specific

  • Accessibility: role="slider" now gets the adjustable accessibility trait, like accessibilityRole="adjustable" (05f99a7d25 by @jeltehomminga)
  • Accessibility: Fix data race on accessibility content size multipliers in RCTAccessibilityManager (ea2ca1b921 by @christophpurrer)
  • Accessibility: Prevent an accessibility module startup crash on early iOS 26.1 betas (f9855add37 by @javache)
  • Accessibility: VoiceOver announces "collapsed" for aria-expanded={false} on the new architecture (1db1d893b2 by @lazerg)
  • CocoaPods: spm_dependency embeds the dynamic frameworks of Swift packages in the app, and takes embed_frameworks for frameworks named differently from their product (d7878263ca by @mfazekas)
  • CocoaPods: Apply React Native's minimum iOS deployment target to CocoaPods resource bundles. (d45fc2d289 by @Marve10s)
  • CocoaPods: Fix "module map file not found" for spm_dependency pods whose module name differs from the pod name (87c3e8f5dc by @mfazekas)
  • CocoaPods: Fix 'folly/coro/Coroutine.h' file not found in libraries that set their own folly compiler flags (52efed6437 by @cipolleschi)
  • CocoaPods: Link platform/ios headers at react/utils/… in non-frameworks builds instead of a duplicated react/utils/react/utils/…, restoring #include <react/utils/…> and <React/Utils.h> (024d5dafd5 by @zhongwuzw)
  • Codegen: Skip third-party components whose class is not linked instead of crashing at launch (acc0cca710 by @YevheniiKotyrlo)
  • Dev Menu: Fix Cmd+D and other modifier key commands failing to open the Dev Menu when a view is the first responder (d36f77d7e1 by @vzaidman)
  • Dev Server: Allow Metro reload after an initial bundle-load failure. (df86c5e2a4 by @janicduplessis)
  • Dev Server: Clear the development loading banner when its React Native host is invalidated, including pending messages that could appear after teardown. (62002039c0 by @fairysword)
  • Dev Server: Keep a RCT_jsLocation passed as a launch argument when the packager answers /status late, instead of switching to a guessed host (1af1186b78 by @YevheniiKotyrlo)
  • Hermes: Fix Hermes Debug link failures after installing another pod following a Release build. (8bfa9dd2ae by @fairysword)
  • Image: Emit Image's onLoadStart before onLoad/onLoadEnd when the image request has already completed (5d84f62df1 by @SatyamBansal)
  • Image: Reuse prefetched images for subsequent sized image requests (0e87de0fd9 by @CHANDRAMOHANnegi)
  • Keyboard: Report zero-height keyboard show notifications with no focused text field as keyboardWillHide/keyboardDidHide (c99947ed4b by @ybcd00)
  • Modal: Fix Modal staying onscreen when dismissed while presenting a child view controller (f20f857241 by @lazerg)
  • Network Inspection: Fix the cancelled parameter type of RCTInspectorNetworkReporter's reportRequestFailed:cancelled: to match its declaration (3e5a624d2d by @Saadnajmi)
  • Networking: Fix missing nullability annotations in networking headers. (c7429b0e97 by @mrousavy)
  • PushNotificationIOS: Fix remaining main-thread watchdog hang in PushNotificationIOS.setApplicationIconBadgeNumber (79adf3498f by @fkgozali)
  • Renderer: Process at most one synchronous event beat per Core Animation commit, so a mount performed during the display phase cannot re-enter it without bound (c4b3894955 by @Abbondanzo)
  • Runtime: Fix deadlock in RCTInstance invalidation when a surface observer calls into JS (88d296713c by @zeyap)
  • ScrollView: Fix recycled RTL horizontal ScrollView starting at the end instead of the start (51db0e4b3a by @aljadan)
  • ScrollView: Hide the misplaced iOS 26 scroll edge effects on inverted ScrollViews (3b8f1f8225 by Calvin Liu)
  • SwiftPM: Scaffolded Package.swift writes resources: before publicHeadersPath:, so libraries with podspec resources and public headers resolve (d576b40bff by @chrfalch)
  • SwiftPM: SwiftPM autolinking: don't warn about spm fields mirrored in swiftpmConfig (138c1a9a6e by @chrfalch)
  • Switch: Fix crash in Switch when onChange fires after the view has been recycled (7612536be3 by anvarbek)
  • Switch: Report a disabled Switch as disabled to VoiceOver and XCUITest (7bba6225af by @arun279)
  • Text: Fix Text containing only "I" being measured zero wide after an empty Text with the same style was measured (4b0a6ebc67 by @parthematics)
  • Text: Fix words jumping between lines while LayoutAnimation resizes a Text (b97bd12bc4 by @tomekzaw)
  • Text: Natural text alignment follows the layout direction for LTR text, not the process language (a340eec183 by @qutrek)
  • Text: Render selectable text when prepared text layout is enabled (099915674f by @abskmeta)
  • Text: Text no longer redraws when only its position changes, such as when content above it changes height (631fd89f6a by @hryhoriiK97)
  • Text: Text no longer renders clipped when mounted from a synchronous event during layout (7bee8abb69 by @janicduplessis)
  • TextInput: Avoid a synchronous main-thread pasteboard query (and possible app hang) when a focused TextInput's keyboard becomes active on app foreground (79c6c23061 by generatedunixname1608173377072046)
  • TextInput: Fix TextInput dataDetectorTypes="all" having no effect on the New Architecture (0bd2cb1b42 by @Cedric921)
  • TextInput: Fix TextInput placeholder drawn below centre after its view is reused from a TextInput with lineHeight (8f5a1c0a8f by @jkasprzyk17)
  • TextInput: Fix caret and text of a single-line TextInput drawn above center while focused, after its view was reused from a TextInput with a larger font (e10d6ba3a6 by @jkasprzyk17)
  • TextInput: Preserve TextInput returnKeyType when switching between single-line and multiline backing views. (e0159c1f03 by @jamfromouterspace)
  • TextInput: Preserve transformed TextInput edits without synchronously rewriting text inside UIKit delegate callbacks (6f67e185ad by @javache)
  • TextInput: Reveal multi-line text inputs when using KeyboardAvoidingView with a ScrollView (7ce27d0d07 by @jasozh)
  • TurboModules: Stop apps from requesting the sample TurboModule that only rn-tester provides (8f5355575a by @alanjhughes)
  • TurboModules: Strings returned from native modules to JS convert faster, are no longer truncated at a \0 character, and are no longer replaced with an empty string when they contain a lone surrogate (4fac9c8f35 by @hryhoriiK97)
  • View: aria-modal on View now sets accessibilityViewIsModal (e3437cb8f0 by @faciledictu)
  • View: Apply borderCurve changes that are not accompanied by another border prop change (c4356db573 by @tshmieldev)
  • View: Opacity changes no longer rebuild a View's borders, shadows and background layers, which made opacity animations over many styled Views drop frames (51d3e67af8 by @hryhoriiK97)
  • View: Prevent unsuccessful tvOS focus requests from emitting stale focus events (3e897cfdf8 by @sbuggay)
  • View: RemoveClippedSubviews is kept on recycled views (ff78e95e59 by @mozzius)
  • View: Render a view untransformed when its transform is not finite, instead of hiding it and the siblings drawn before it (a613baf9d1 by @YevheniiKotyrlo)
  • View: Views no longer rebuild their layer styling (borders, shadows, background and mask layers) when only their position changes (c9d84b06d8 by @hryhoriiK97)

Hermes V1 dSYMS:

ReactNativeDependencies dSYMs:

ReactNative Core dSYMs:


You can file issues or pick requests against this release here.


To help you upgrade to this version, you can use the Upgrade Helper ⚛️.


View the whole changelog in the CHANGELOG.md file.