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
· 32 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)

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)

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: Add nullability annotations to RCTBridgeModule.h. Module registry and view registry lookups, methodsToExport, promise resolve/reject arguments, and weak module properties such as bridge and moduleRegistry are now nullable. methodQueue is now nonnull, so Swift overrides must be declared as DispatchQueue rather than DispatchQueue!. (08f96fefe4 by generatedunixname1608173377072046)
  • 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

  • TurboModules: JavaTurboModule::invokeJavaMethod with a cachedMethodID argument; use the overload without it (f78bdd4aea by @hryhoriiK97)

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.