Repository navigation
0.89.0-rc.0
Pre-release
Pre-release
·
32 commits
to main
since this release
Breaking
- Accessibility:
AccessibilityState::selectedis nowstd::optional<bool>in C++ props, preserving an unsetselectedinstead of coercing it tofalse(af4d8eb08a by Calvin Liu) - Assets: Remove
react-native/assets-registry. UseAssetRegistryfromreact-nativeandreact-native/asset-utilsinstead. (56c48ac0eb by @huntie) - Babel: Turn off
babel/plugin-transform-destructuringplugin (73711b301e by @retyui) - C++: Remove deprecated
react/renderer/graphics/Geometry.handreact/renderer/graphics/conversions.h; include<React/Graphics.h>or<React/RendererCore.h>instead (1449daad5e by @j-piasecki) - CLI:
react-native/community-cli-pluginwill no longer be auto-detected fromreact-native. It must now be specified indevDependencies. (b26baaeba0 by @huntie) - CLI: Platform registration config for the Community CLI is removed from the
react-nativepackage. No breaking change withreact-native-community/cli21.x (required). (be9fbdd0d5 by @huntie) - Image: Fix explicit
fadeDurationbeing ignored on newly createdImages (98d6795e6d by @bartlomiejbloniarz) - JavaScript API: Mark
unstable_batchedUpdatesas deprecated (f6fc189b8c by @retyui) - VirtualizedList: Fix
SectionListandVirtualizedSectionListscrollToLocationto account for section headers and sticky headers correctly. (0c35f57447 by @amroaltah)
Android specific
- C++: Remove deprecated
rncore.h; includeFBReactNativeSpec.hand callFBReactNativeSpec_ModuleProviderinstead (d63648bac6 by @javache) - New Architecture: Remove
DefaultNewArchitectureEntryPoint.bridgelessEnabledand the deprecated three-argumentload(turboModulesEnabled, fabricEnabled, bridgelessEnabled)overload; bridgeless is always enabled in the New Architecture (9b18b951ea by @christophpurrer) - New Architecture: Remove
DefaultNewArchitectureEntryPoint.fabricEnabled,turboModulesEnabled,concurrentReactEnabledandisConfigurationValid(ca2e11af51 by @christophpurrer) - Text: Add
lineBreakandwordBreakprops toText(CSSline-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-cxxreactheaders undercxxreact/inside its framework whenUSE_FRAMEWORKSis enabled. Pods that include<cxxreact/...>without callinginstall_modules_dependenciesmust addReact_cxxreact.framework/HeaderstoHEADER_SEARCH_PATHS. (0a92baec87 by @j-piasecki) - New Architecture: Remove the deprecated
bridgelessEnabledproperty and the deprecatedinitWithBundleURLBlock:newArchEnabled:turboModuleEnabled:bridgelessEnabled:/initWithBundleURL:newArchEnabled:turboModuleEnabled:bridgelessEnabled:initializers fromRCTRootViewFactoryConfiguration; bridgeless is always enabled (2a9eca81b8 by @christophpurrer) - TurboModules:
+moduleNameis now optional onRCTBridgeModuleinstead 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-transformerpasses Metro's ownbabel/runtimeand its version toreact-native/babel-preset, when Metro provides them (89db5ce049 by @robhogan) - Babel: Allow
react-native/babel-presetto readenableBabelRuntimeandbabelRuntimeModuleNamefrom Babel caller data (168a0d7b53 by @cortinico) - C++: Add
<React/ComponentRegistry.h>umbrella header as the public entry point forreact/renderer/componentregistry(2975534d8b by @j-piasecki) - C++: Added
ReactNativeVersion.hto publicreact/utilsmodule. (a35313a184 by @j-piasecki) - C++: Added an umbrella header for the
react/renderer/coremodule (dcc872ae01 by @j-piasecki) - C++: Added umbrella header for the
react/renderer/components/imagemodule (a9203b8fdd by @j-piasecki) - C++: Added umbrella header for the
react/renderer/imagemanagermodule (be53e3a9a1 by @j-piasecki) - Renderer: Allow C++ shadow node traits to be evaluated at compile time (73e3aeca88 by @javache)
- Runtime: Polyfill
Array.prototype.toSortedandArray.prototype.toReversedwhen 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_onSafeAreaInsetsChangeview 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
ViewabilityConfigandViewabilityConfigCallbackPairtypes 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
structuredCloneandDOMExceptionas global Web APIs (245bbfaf0a by @rubennorte)
Android specific
- Accessibility: Add support for direct progress accessibility actions (1413a59de6 by @AndrewBlackMeta)
- Build: Introduce PCH for codegen targets to improve compilation time (7ca1b42002 by @lukmccall)
- Events: Add
eventTimeto theonHWKeyEventdevice event payload (15bb7e23f2 by @bumjung) - Gradle: Add
strictCxxApiEnabledGradle property to enforce React Native's C++ stable API in app native code (b5d9b6c03a by @j-piasecki) - Performance: C++
TraceSectionmarkers now appear in Perfetto and systrace captures (7728787c25 by @tomekzaw) - Renderer: Add
unstable_ImmediateUpdateMode support inupdateState. (0876643b91 by @intergalacticspacehighway) - Renderer: Stop re-arming the idle DISPATCH_UI Choreographer frame callback (behind feature flag) (8baeb2deeb by @capt-muji)
- Text: Log unrecognized font families, matching iOS (c1401a16a0 by @mosab-nasrallah)
- TurboModules: Add support for Activity Result API for native modules (ec2b536e14 by @matinzd)
- Yoga: Add
YogaNode.setNodeTypeto select pixel rounding for measured nodes (928fd149cb by @pentiumao)
iOS specific
- Accessibility:
AccessibilityInfo.isShowBordersEnabled()andshowBordersChanged(Show Borders, formerly Button Shapes) (62a1fc186d by @camilopires) - CocoaPods: Add
RN_STRICT_APIandRN_ALLOW_FRAMEWORKSCocoaPods 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'sCallInvoker(8f58866394 by @potomak) - SwiftPM: Add
RN_STRICT_APIandRN_ALLOW_FRAMEWORKSopt-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.0versioned artifacts. (b5c152237f by @coado) - C++:
RuntimeScheduler.hno longer transitively includesPerformanceEntryReporter.horShadowTreeRevisionConsistencyManager.h; include them directly where the complete types are needed (7aff51e2d1 by @j-piasecki) - C++: Expose
enableMountingCoordinatorPullModelAndroidin public C++ feature flags and moveBackgroundImagePropsConversions.hto "for frameworks" headers (fc4e7061e2 by @j-piasecki) - C++: Find a LongLivedObject in its collection without walking it (caf9cbcd63 by @hryhoriiK97)
- C++: Move
RecoverableErrorfrom 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-onepackage 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
ShadowViewfor a View node no longer uses adynamic_castto 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::cloneTreeandUIManager::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
VirtualizedListrender and scroll path (avoid per-renderSetallocation forstickyHeaderIndices, per-scroll-eventMapiterator for the empty nested-list collection, and per-callorientationobject 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_castfor every child to check its type (392b7645b3 by @hryhoriiK97)
Android specific
- Build: Update
targetSdkto 37 (9fae71c2dd by @alanjhughes) - C++: Include React Native through module umbrella headers in app-facing JNI headers and the generated autolinking header (738e793b78 by @j-piasecki)
- Dependencies: Bump fbjni to 0.8.1 (1d13ec9889 by @cortinico)
- Dependencies: Bump NDK to r28c, fbjni 0.8.1 and fresco 3.9.0 (a948811cca by @Kudo)
- Dependencies: Upgrade AndroidX Activity to 1.10.1 (3b755040db by @Abbondanzo)
- Image: Images from the app bundle look up their resource without throwing an exception (98291bcb99 by @hryhoriiK97)
- Kotlin: Bump Kotlin to 2.2.10 to match the version required by AGP 9.2.1 (f03f6c2b85 by @lukmccall)
- Kotlin: Bumped the Gradle plugin minimum Kotlin API version to 2.1 (3cee68fa7a by @Abbondanzo)
- Kotlin: Update Kotlin to 2.3.21 (43a49f7fe3 by @cortinico)
- Renderer: Create StateWrapperImpl from C++ with its state (c48341282e by @tomekzaw)
- ScrollView: Build the scroll event payload in one JNI call (3908ef3153 by @tomekzaw)
- Text: Share one JNI global reference between copies of a prepared text layout, instead of creating one per copy (9c7b0f5faf by @hryhoriiK97)
- Text: Skip an unnecessary measuring pass when laying out
Text(3f5c2f3dbb by @tomekzaw) - Text: Text nodes cloned without changes share their measured layout instead of creating a new JNI global reference (0e041ddf8f by @hryhoriiK97)
- Touch Handling: Build touch event payloads in native code, making each touch event cheaper on the main thread (f5feafd404 by @hryhoriiK97)
- TurboModules: Parse each TurboModule method's JNI signature once instead of on every call (f7de20301c by @hryhoriiK97)
- TurboModules: Skip a redundant JNI Object.toString() call in WritableNativeMap.putString. (ba1ede621c by @riteshshukla04)
- View: Views with four equal rounded corners get their outline without building a path (42ba24ab03 by @hryhoriiK97)
iOS specific
- AppDelegate:
RCTAppSetupUtils.hno longer transitively importsHermesExecutorFactory.h(a385cecbea by @j-piasecki) - AppDelegate:
RCTAppSetupUtils.hno longer transitively importsJSIExecutor.horJSExecutor.h(3eb901e31a by @j-piasecki) - Runtime: Include
errnoand its description inRCTJavaScriptLoaderbundle open/stat errors (156a9a29a9 by generatedunixname1608173377072046) - StatusBar: Reland iOS 27 StatusBar fix with tvOS guards (edf2b86e63 by @cipolleschi)
- SwiftPM:
spm addandspm updatewrite React Native's build settings toReactNativeSPM/ReactNativeSPM.xcconfigand its build scripts toReactNativeSPM/Scripts/, so a version bump no longer changesproject.pbxproj. A configuration that uses its own xcconfig must now#includethe generated file, and a target setting that hides React Native's value must add$(inherited).spmprints 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
AttributedStringby const reference inRCTTextLayoutManagerand add a move constructor forAttributedStringBox. (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 asbridgeandmoduleRegistryare nownullable.methodQueueis now nonnull, so Swift overrides must be declared asDispatchQueuerather thanDispatchQueue!. (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::invokeJavaMethodwith acachedMethodIDargument; 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:, andbridgeModuleDecorator(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
RCTBridgeAPIs ahead of removal (fcb13c5171 by @christophpurrer) - Renderer: Mark
-[RCTSurfacePresenter addObserver:]as deprecated for the compiler. UseRCTMountingTransactionObserverCoordinatorinstead. (9979e142a7 by @tjzel)
Removed
- C++: Removed unused
InspectorData.h(0a9bf3292e by @j-piasecki) - ScrollView: Remove unstable_getScrollParent. Implement scroll-parent discovery in userland instead. (3818b20eed by @rubennorte)
- Text: Remove the unused
maximumFontSizeparagraph attribute (7e02fc7e68 by @conner1reimers) - TextInput: Remove deprecated
TextInputblurOnSubmitprop (usesubmitBehaviorinstead) (ab373989c3 by @zoontek) - TurboModules: Remove the sample TurboModule from React Native's public API (4ffc4a6523 by @Abbondanzo)
- View: Remove the deprecated
hasTVPreferredFocusprop (6622ee55a1 by @Abbondanzo)
Android specific
- JavaScript API: Remove experimental split-bundle loading APIs (2771618619 by @javache)
- Legacy Architecture: Remove legacy TimingModule.kt (e15b667cd3 by @christophpurrer)
iOS specific
- JavaScript API: Remove deprecated RCTProfile systrace API (d3c2bb8ed4 by @christophpurrer)
- Legacy Architecture: Remove dead
RCTBridgeflag functions,batchDidComplete, and unused callback typedef (01d55273bc by @christophpurrer) - Legacy Architecture: Remove deprecated
RCTBridgeinitializers (bfa64ad01a by @christophpurrer) - Legacy Architecture: Remove deprecated
RCTBridgeDelegatesourceURLForBridge:(34795cbc36 by @christophpurrer) - Legacy Architecture: Remove deprecated
RCTFabricSurfacebridge initializer andRCTBridgesurface-presenter category (d4fee6d983 by @christophpurrer) - Legacy Architecture: Remove deprecated
RCTModuleDataclass and its call-invoker provider protocol (f76f251b62 by @christophpurrer) - Legacy Architecture: Remove legacy RCTTimingModule (0e01003f53 by @christophpurrer)
- Legacy Architecture: Remove unused
RCTBridge (Inspector)category (e57dcb3cc4 by @christophpurrer) - Legacy Architecture: Remove unused
RCTCxxBridgeDelegateprotocol (e362239300 by @christophpurrer) - Legacy Architecture: Remove unused per-module
RCTBridgeaccessors (0c68446f08 by @christophpurrer) - Performance: Remove the non-functional Views counter from the PerfMonitor HUD (200245eb09 by @christophpurrer)
- Runtime: Remove
RCTInstanceSetRuntimeDiagnosticFlagsandRCTInstanceRuntimeDiagnosticFlags(935f73302b by @javache)
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()orhwb()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:
experimentalImportSupportin a Metro config now takes effect whenreact-native/babel-presetis 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
parseUnprocessedTransformOriginStringinreact/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
thisArgin 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-importsauto-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-importsfrom reportingreact-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 AndroidImages (e560782758 by @bartlomiejbloniarz) - IntersectionObserver: IntersectionObserver rootMargin now affects intersection against a clipping root (5646c31dff by @edkimmel)
- Jest: Fix
react-native/jest-presetfailing to resolvereact-nativeand 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_REGEXto thereact-nativepackage to avoid collapsing unrelated frames (03737541b1 by @vzaidman) - Networking: WebSocket no longer dispatches
messageevents afterclose()has been called (a6c0c470ad by @lazerg) - New Architecture: Fix
minimumFontScalewithadjustsFontSizeToFitin 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
getPagesrequests, 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
zIndexmoves in a nested flatten/unflatten (361bc240e4 by @pawicao) - Runtime: Fix deadlock in
RuntimeSchedulerwhen 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 asrgb(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/translateYstring transforms and parse numbers without a leading zero (bd9348a32a by @camchis) - Text:
adjustsFontSizeToFittext grows back when its container grows (db5c52de8b by @tomekzaw) - Text: Avoid state updates and re-layout of unchanged
Textsiblings when a sibling changes (e7766ab2fa by @tomekzaw) - Text: Text inside Modal now updates after a live font scale change (e8e63cf79c by @simongt)
- Touch Handling:
Pressabilitynow invokes the currentonHoverIn/onHoverOutrather 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
ImageStyletype rejecting validViewStyleprops such asfilter,boxShadowandmixBlendMode(278e7f93c8 by @ramya-2196) - View: Reset a removed
shadowRadius,shadowOffset,editableorpersistentScrollbarprop to its default (86695d8eb6 by @YevheniiKotyrlo) - VirtualizedList: Avoid delaying urgent
VirtualizedListrendering 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
VirtualViewinitial mode wheninitialHiddenis 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==ignoringboxSizing(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
FlexFirstPassUsesRunningTotalserrata (set by default) (ca7acf62c5 by @Dagur) - Yoga: Fix stale layout when a child switches to
display: contentsafter being inserted (19a6722f91 by @kwy404)
Android specific
- Accessibility: A
Viewwitharia-liveoraccessibilityLiveRegionis 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
accessibilityRolevalues 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
accessibilityValueno longer leaves its text in the content description or drops theaccessibilityLabel(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.yamlchanges (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.handReact/MapBuffer.humbrella 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
PlatformColortheme 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
enableMountingCoordinatorPullModelAndroidis 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
UiThreadUtilwhen 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
accessibilityCollectionis set and a child (e.g. a list header or footer) has noaccessibilityCollectionItem(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
Switchlosing its outline,boxShadowandthumbColorripple color whenbackgroundColoris set (19d6d171f7 by @shubh73) - Text:
aria-liveonTextnow setsaccessibilityLiveRegion(9de6471df2 by @faciledictu) - Text: Fix
ellipsizeMode="clip"being ignored on newly createdText(8cd9b763e3 by @bartlomiejbloniarz) - Text: Fix
fontVariantbeing ignored onTextthat doesn't also setfontFamily,fontWeightorfontStyle(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
Textwith blank or LTR lines being drawn off-screen on Android 15+ (7b6516eb11 by @fkgozali) - Text: Fix single-line LTR
Textbeing 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
TextInputoutline 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
SafeAreaInsetstype (11f37bd6e7 by @janicduplessis) - UIManager: Avoid unnecessary getConstantsForViewManager calls during UIManager initialization. (da7c29f6d7 by @fairysword)
- View: A
NaNor infiniteelevation, or deprecatedscaleXorscaleY, 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
getOutlineWidthreturning 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,outlineOffsetandoutlineWidthnot 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
VirtualViewchildren being clipped when an ancestor is positioned before attachment (8c2ce771d8 by @cortinico)
iOS specific
- Accessibility:
role="slider"now gets the adjustable accessibility trait, likeaccessibilityRole="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_dependencyembeds the dynamic frameworks of Swift packages in the app, and takesembed_frameworksfor 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_dependencypods whose module name differs from the pod name (87c3e8f5dc by @mfazekas) - CocoaPods: Fix
'folly/coro/Coroutine.h' file not foundin libraries that set their own folly compiler flags (52efed6437 by @cipolleschi) - CocoaPods: Link
platform/iosheaders atreact/utils/…in non-frameworks builds instead of a duplicatedreact/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_jsLocationpassed as a launch argument when the packager answers/statuslate, 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'sonLoadStartbeforeonLoad/onLoadEndwhen 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
cancelledparameter type ofRCTInspectorNetworkReporter'sreportRequestFailed: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
RCTInstanceinvalidation 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.swiftwritesresources:beforepublicHeadersPath:, 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
SwitchwhenonChangefires after the view has been recycled (7612536be3 by anvarbek) - Switch: Report a disabled
Switchas disabled to VoiceOver and XCUITest (7bba6225af by @arun279) - Text: Fix
Textcontaining only "I" being measured zero wide after an emptyTextwith the same style was measured (4b0a6ebc67 by @parthematics) - Text: Fix words jumping between lines while
LayoutAnimationresizes aText(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
TextInputdataDetectorTypes="all"having no effect on the New Architecture (0bd2cb1b42 by @Cedric921) - TextInput: Fix
TextInputplaceholder drawn below centre after its view is reused from aTextInputwithlineHeight(8f5a1c0a8f by @jkasprzyk17) - TextInput: Fix caret and text of a single-line
TextInputdrawn above center while focused, after its view was reused from aTextInputwith 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
TextInputedits 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
\0character, and are no longer replaced with an empty string when they contain a lone surrogate (4fac9c8f35 by @hryhoriiK97) - View:
aria-modalonViewnow setsaccessibilityViewIsModal(e3437cb8f0 by @faciledictu) - View: Apply
borderCurvechanges 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.