Breaking
- Touchable: The
Touchableroot export (undocumented) is removed. If you are extendingTouchableas a type, please useViewPropsinstead. (0015d1e4f9 by @huntie)
iOS specific
- TurboModules: Add
RCTArrayBuffer, the ObjC representation of a JSArrayBufferfor TurboModules, with an explicit byte-ownership contract (11f9a7f449 by Kamil Paradowski)
Added
- C++: Add
<React/FeatureFlags.h>umbrella header as the public entry point forreact/featureflags(f970054a8a by @j-piasecki) - C++: Add
<React/RendererBridging.h>umbrella header as the public entry point forreact/renderer/bridging(5b680c5f9f by @j-piasecki) - C++: Add
<React/Timing.h>umbrella header as the public entry point forreact/timing(70f172d29f by @j-piasecki) - C++: Added missing mutex include in HostTarget.h (3f8f5c216a by @etodanik)
- Feature Flags: Add
enableImageTransparentTintColorfeature flag (c5bd054983 by @coado) - JavaScript API: Deprecate
'react-native/Libraries/Core/InitializeCore'. Use'react-native/setup-env'instead. (554baba159 by @huntie) - PlatformColor: Support a lazy raw color fallback for PlatformColor when native tokens fail to resolve (65008fcdd0 by @Abbondanzo)
- React Native DevTools: Experimental performance screenshots support and
Page.captureScreenshotis added to theEXPERIMENTALchannel (4be68ef785 by @huntie) - React Native DevTools: Support for inspecting WebSocket events in the Network panel is added to the
CANARYchannel (713ae6b1b9 by @huntie) - React Native DevTools: Users and agents can now capture app screenshots via the
Page.captureScreenshotcommand (00efc0a440 by @huntie) - Text: Add object syntax for
fontVariationSettings(376b99ff14 by @evankatz14) - TypeScript: Add
isInstalled()andclearAllLogs()to theLogBoxTypeScript declarations (a69badd468 by @Abbondanzo) - TypeScript: Add missing strictMode prop to FlatList TypeScript types (3e2403327c by @drhops)
- TypeScript: Add TypeScript declarations for
requestIdleCallbackandcancelIdleCallback(c086431a4b by @Critteros) - VirtualizedList: Add missing ListItemComponent type to VirtualizedList props (5306e9229c by @aravi365)
Android specific
- Feature Flags: Add
enableMountingCoordinatorPullModelAndroidfeature flag (ece0efe837 by @coado) - Network Inspection: Expose network event reporting to third-party networking stacks as an unstable API (83d0be8958 by @huntie)
- Networking: Send app name and version as the default
User-Agentheader for network requests, matching iOS (04e50d540d by Calvin Liu) - Renderer: Add inert Java plumbing (
PullTransactionMountItem,FabricUIManager.onTransactionAvailable) for the pull model (6515647d94 by @coado) - Renderer: Wire the pull-model mounting path in C++ behind
enableMountingCoordinatorPullModelAndroid(9da1a01153 by @coado) - Text: Add
fontVariationSettingssupport for<Text>(19f7d144b9 by @evankatz14) - TextInput: Add
fontVariationSettingssupport forTextInput(a688608090 by @evankatz14) - TurboModules: Add
ArrayBuffer, the Java representation of a JSArrayBufferfor TurboModules, with an explicit byte-ownership contract (5bb9639594 by Kamil Paradowski) - TurboModules: Add ArrayBuffer support to Java TurboModules (5fb3ebce1a by Kamil Paradowski)
iOS specific
- Assets: Use asset catalog for ios images (26769a00b2 by @janicduplessis)
- CocoaPods: Add a
React-cxxstableapidependency to third-party New Architecture pods so they can resolve React Native's C++ API guard headers (d3daf111e0 by @coado) - Legacy Architecture: Allow consumers to opt into
RCT_REMOVE_LEGACY_MODULE_INTEROPandRCT_REMOVE_LEGACY_COMPONENT_INTEROPfrom CocoaPods and SwiftPM. Both default to off and will become the default in a future release (b933d18177 by @christophpurrer) - SceneDelegate: Add SceneDelegate lifecycle support (7bfe32fd33 by @artus9033)
- Styles: Print warning advice when using
shadow*styles without providing a solid background color (eb4d3892ab by @hannojg) - SwiftPM:
npx react-native spmcommand + SwiftPM package-generation tooling (opt-in; CocoaPods stays supported) (47fad096a4 by @chrfalch) - TurboModules: Reject
ArrayBufferas a TurboModuleEventEmitterpayload on all platforms (ab2ea649e6 by @christophpurrer)
Changed
- Accessibility: Automatically set
accessibleprop whenroleprop is set (exceptnone/presentation) (4043e818f1 by @mdjastrzebski) - Babel:
Platform.OSandPlatform.select(...)inlining inreact-native/babel-presetnow requires theinlinePlatformoption in addition toplatform(f63b2a1cb5 by @robhogan) - Babel: Inline
Platform.OSandPlatform.select(...)for React NativePlatformimports during the Babel preset, covering some cases that were previously left un-inlined. (40c06121a1 by @robhogan) - Build: Add React Native Maven pull-through cache fallback for prebuilt artifacts. (3bfb277fec by @coado)
- Hermes: Bump hermes-v1 to 260318099.0.1 (b113cf5864 by @fabriziocucci)
- Legacy Architecture: Core components (
ActivityIndicatorView,ModalHostView,PullToRefreshView,SafeAreaView,Switch) no longer report legacyRCT-prefixed names in their view configs (904812016f by @christophpurrer) - Metro: Bump Metro to 0.87.0 (fe511aba7c by @robhogan)
- React Native DevTools: When using the fallback flow for launching DevTools (desktop app fails to launch), Microsoft Edge will not be attempted. DevTools will open as a standard window in the default browser. (9efcdfc2b4 by @huntie)
- Runtime:
RuntimeSchedulernow clears pending tasks and rendering updates when a task throws (14184ec643 by @javache) - Runtime: Async
CallInvokerwork is now buffered alongside callable module calls, so it no longer runs before the JS bundle has finished evaluating (3ca6ea3eca by @javache) - Styles: Remove
experimental_prefix frombackgroundSize,backgroundPositionandbackgroundRepeat(7844386bbd by @intergalacticspacehighway) - UIManager:
UIManager::startSurfaceandUIManager::setSurfacePropsnow takemoduleNameandpropsby value (85a81818c6 by @javache)
Android specific
- Dev Server: Removed FileIoHandler packager message handlers (e3598fac12 by @javache)
- Image: ImageProps make
tintColoranstd::optionalto support colortransparent(0) with props 2.0 (f535c97904 by @hannojg) - New Architecture: Deprecate fabricEnabled on ReactFragment (c7d62a125c by @javache)
iOS specific
- Build: Prebuilt artifacts: ReactNativeHeaders is pure-RN; third-party deps headers ship in the new ReactNativeDependenciesHeaders.xcframework sidecar (and the ReactNativeDependencies pod), published standalone to Maven (6aa147f6c9 by @chrfalch)
- CocoaPods: Cache Maven repository requests (artifact existence probes, nightly metadata) during pod install to avoid re-issuing identical requests on every podspec evaluation (88feed55c0 by @coado)
- Dev Server: Declare
RCTBundleURLProviderAllowPackagerServerAccessunconditionally (no-op when packager support is compiled out) (54656471a5 by @ramonclaudio) - Dev Server: Make iOS preserve dev bundle as a temp file on par with Android implementation (e2a4c68449 by @tjzel)
- Legacy Architecture: Compile out
RCTGetModuleClasses/RCTRegisterModuleand skip static module registration when bothRCT_REMOVE_LEGACY_MODULE_INTEROPandRCT_REMOVE_LEGACY_COMPONENT_INTEROPare defined (5d62ca4296 by @christophpurrer) - RNTester: Update RNTester and HelloWorld for SceneDelegate lifecycle behavior (609bdddabf by @artus9033)
- StatusBar: Downgrade RCTStatusBarManager error to a warning when UIViewControllerBasedStatusBarAppearance is YES (9e71c443ac by @shwanton)
- SwiftPM: Download SwiftPM prebuilt artifacts from the React Native Maven mirror first, with Maven Central as fallback (c2dac6abcc by @coado)
- TextInput: Adds localization for Text Input default return key types (507023622b by @cipolleschi)
Deprecated
Android specific
- InputAccessoryView: Deprecate
InputAccessoryView(102fde7b6b by @zoontek)
Fixed
- Accessibility: Fix accessibility list role conversion in C++. (aa96fa64d1 by @Abbondanzo)
- Animated:
addListenerfires again for natively drivenAnimatedvalues derived withadd/subtract/multiply/divide/modulo/diffClamp/interpolate(ce621bbd5b by @dennytosp) - Animated: Add
ReactRevisionMergesource to the AnimationBackendCommitHook (ca53751780 by Bartlomiej Bloniarz) - Animated: Perform AnimationEndSync commits on the React revision (7d855222cd by @j-piasecki)
- Babel: Apply normal preset defaults when invoked without a Babel API or options object. (9ad8c830bd by @OskarEichler)
- Babel: Detect trivia-separated React.createClass calls in optimized preset configuration. (619c8aed24 by @OskarEichler)
- Babel: Inline the last duplicate key from static Platform.select object literals. (bbdeb7dc1d by @OskarEichler)
- Babel: Keep private class transforms enabled for profiles that lower classes. (0c0e9f0840 by @OskarEichler)
- Blob: Retain Blob reference in FileReader during pending native reads to prevent premature deallocation by BlobCollector (568eaa6b69 by heecheolman)
- C++: Fixed MSVC compilation of NativeDOM.cpp by removing backticks (e979b0ef8d by @etodanik)
- Codegen: Codegen no longer hangs on type aliases that shadow CodegenTypes member names (42be7452d5 by @sbaiahmed1)
- Codegen: pass the target platform when generating schemas so platform-specific sources (e.g.
NativeModule.ios.ts) resolve correctly (f46ace878a by @Gregoirevda) - Codegen: React-native-codegen build.sh on AppleVirtIOFS volumes (27b5f761b1 by @etodanik)
- Codegen: Run native component codegen when Flow type arguments are separated by trivia. (0d64c9a13a by @OskarEichler)
- DeviceInfo: Refresh
DeviceInfoconstants on each read (9d10e39d32 by @artus9033) - DOM API: Resolve native EventTarget names that overlap Object prototype properties. (621ced78e9 by @OskarEichler)
- EventEmitter: Support EventEmitter event names that overlap Object prototype properties. (790289c1d6 by @OskarEichler)
- FileReader: Fire
loadstart, throwInvalidStateErroron overlapping reads, and exposeFileReader.erroras aDOMException. (544141efab by @Abbondanzo) - FileReader: Keep
FileReaderin the correct state after aborting a read. (e92816c5a5 by @fallintoplace) - Gradients: Fix radial-gradient
at <position>being ignored (and corrupting the size) when it follows an explicit size (66f27eb93e by @Titozzz) - Gradients: Reject percentage radii for circle radial gradients, matching web behavior (5821fcaf5d by @Titozzz)
- Image: Preserve Image source headers when using crossOrigin or referrerPolicy (08c7781e5a by @mfkrause)
- IntersectionObserver: Sort IntersectionObserver threshold arrays numerically. (ee32dfc8b9 by @OskarEichler)
- JavaScript API: Additional Props/Style types are now defined as
interface, fixing compatibility with certain DefinitelyTyped packages (593ae0258d by @huntie) - JavaScript API: Fix requestIdleCallback timeout option being ignored (0a1a06c5ea by @pakerwreah)
- Networking: Fix XMLHttpRequest.setRequestHeader to append duplicate headers per spec (58bf844967 by @zmunm)
- Networking: Preserve buffered and empty Cxx WebSocket frames and serialize writes. (92cd588a5c by @OskarEichler)
- Performance: Round instead of truncate when converting a
DOMHighResTimeStampback to nanoseconds, soHighResTimeStampandHighResDurationround trips are exact (c467843ed0 by @GijsWeterings) - ScrollView: Fix maintainVisibleContentPosition with rapid data updates (#53542) (5cb65244dc by @kulkarni-rohan)
- Styles: Fix
transformOriginstring parsing for decimal percentage and pixel values. (0a60ec9dea by @MayankSharma-2812) - Styles: Preserve negative values in
transformOriginstrings. (4501979c1a by @fallintoplace) - StyleSheet: Use cached results for already normalised colors (092734772a by @riteshshukla04)
- Text: Fix Text truncation when string contains NULL character \u0000 (#24129) (5906cfb060 by @kulkarni-rohan)
- Text: Prevent Text from mutating the accessibilityState prop (c300f84f2c by @mfkrause)
- TextInput: blur focused input before unregistering it on unmount, fixing the Android soft keyboard staying open after navigating away from a focused input (d13d2b0a5f by @sidorchukandrew)
- TurboModules: TurboModule event emitters no longer throw when an event is emitted before the emitter callback is installed (4bf5575490 by @christophpurrer)
- TypeScript: Fix TS2883 when building declaration files for libraries that use
codegenNativeComponentdue to unreachableNativeComponentType<T>(391723e869 by @artus9033) - VirtualizedList: Ignore stale viewability updates while enforcing minimum view time (1c4a46f4e3 by @cipolleschi)
- VirtualizedList: Invalidate list content length when orientation changes. (e59a1d252c by @fallintoplace)
- VirtualizedList: Prevent zero-sized lists from reporting viewable items (c057b1fa01 by @Abbondanzo)
Android specific
- Accessibility: Fix crash when
accessibilityRole="tabbar"is used on Android (a4733b1ca1 by @aravi365) - Build: Export
jserrorhandlerheaders in thereactnativeprefab so external consumers of cxxreact/ErrorUtils.h can build. (f2a6db9fce by @alanjhughes) - Dev Menu: Persist Change Bundle Location debug server host changes (d2ac190411 by @Phecda)
- Dev Server: Stop dev server WebSockets from throttling bundle downloads and other dev server requests (cc5dd59742 by @javache)
- Gradle: Use the JVM temp dir instead of a hardcoded
/tmpfor the build-from-source container project dirs, fixing Gradle configuration on Windows (908872a68e by @kraenhansen) - i18n: Detect RTL from the active locale instead of an arbitrary installed one (e46189e1e1 by @zoontek)
- Image: Deprecate the
String?overloads ofReactImageManager#setDefaultSourceandReactImageManager#setLoadingIndicatorSource(3a95e0e93c by @hannojg) - Image: Fix
Image.getSize()andImage.getSizeWithHeaders()rejectingdata:URIs (8cfde6d083 by Cole Huntley) - Image: Fix crash when setting a percentage borderRadius on Image (f2a250ad89 by @sbaiahmed1)
- Renderer: Fix IllegalStateException in SurfaceMountingManager.removeViewAt (3f553d76bc by @cortinico)
- Renderer: Pull model mounting is now deferred until the root attaches (2f5a8332cf by Bartlomiej Bloniarz)
- Runtime: Prevent a startup crash when the WindowMetrics API is missing on an inconsistent Android runtime (3f9cc72309 by @gooddev97)
- Runtime: Report a fatal JS error instead of aborting the process when reading the error's extra data fails (41b375eb04 by generatedunixname1608173377072046)
- Styles: Fix crashes when
outlineColoris provided as a numeric color value (53b933feca by HURRAEY) - Text: Fix Text with adjustsFontSizeToFit being clipped when container height decreases dynamically (63064687e2 by @imsankalp)
- Text: Keep inline views inside Text from shrinking with Android system font scale (551d12a787 by @TorinAsakura)
- TextInput: Ellipsize long single-line TextInput placeholders to match iOS (7f18ad0f84 by @kosmydel)
- TextInput: Show the soft keyboard when a long-press starts text selection in TextInput (9195e52706 by @idoyana)
- TurboModules: TurboModule methods taking or returning an
ArrayBuffer(d84c13d511 by @christophpurrer) - View: Resetting border widths no longer clips children in rounded overflow-hidden views. (146aaac7ee by @RealBhupesh)
- ViewManagers: Fix
Doubleprop defaults being rounded to float precision in generatedViewManagerdelegates (2c4278d83b by @dennytosp) - ViewManagers: Fix
RuntimeException: Unrecognized type: class com.facebook.yoga.YogaValuewhen aViewManagerimplements aDimensionValueprop withReactProp(091ac613ce by @dennytosp) - ViewManagers: Fix
RuntimeException: Unrecognized type: class java.lang.Floatwhen aViewManagerimplements a nullable float prop (WithDefault<Float, null>) withReactProp(8d23b14da6 by @dennytosp) - VirtualizedList: Fix ListMetricsAggregator cell metrics not clearing on orientation change and guard against divide-by-zero (3b90423076 by @aarononeal)
iOS specific
- Accessibility: Views with checkbox, radio, combobox, dropdownlist, menuitem, spinbutton, tab, option, searchbox, slider and treeitem roles are now reachable via Full Keyboard Access (05b97de823 by @fkgozali)
- Accessibility: VoiceOver text readout when changing elements asynchronously (082d787a1e by @coolsoftwaretyler)
- Appearance: RCTAppearance.setColorScheme() no longer crashes CarPlay apps when connectedScenes contains a non-UIWindowScene (00a5aa9223 by @SnowingFox)
- Assets: Asset catalog imagesets paired wrong files for assets with non-standard scales (74b984729b by @janicduplessis)
- Blob: Fix intermittent native crash (CoreServices/UTType XPC) in RCTBlobManager when deriving blob names for network responses (671705dfb1 by @1337mus)
- Codegen: Codegen now discovers third-party component libraries without an iOS configuration. (917d97eb12 by @RealBhupesh)
- Codegen: Fixed intermittent "Cycle in dependencies between targets 'ReactCodegen' and ..." Xcode build error that occurred on incremental iOS builds when an app's
codegenConfig.jsSrcsDircontained noNative*/*NativeComponentspec files. (0b0eb8d012 by @Levin-nik) - Dev Server: Create the RCTDevSettings packager connection in initWithDataSource so instances built that way also receive packager commands (e71fc4e32f by @alanjhughes)
- DeviceInfo: Refresh
DeviceInfoconstants after interface dimension changes (b743a8a35b by @artus9033) - Hermes: Set
always_out_of_dateon hermes-engine'sReplace Hermesscript phase (d89c432659 by @ramonclaudio) - i18n: Align text to the right by default in RTL when
textAlignis not set, matching Android (1b92b02f99 by @zoontek) - Image: aria-* state props are no longer ignored when accessibilityState is also present (c3caea9b5e by @mdjastrzebski)
- LogBox: Prevent RedBox auto-retry from reloading while backgrounded (b587763f40 by @Abbondanzo)
- PushNotificationIOS: Fix main-thread watchdog hang in PushNotificationIOS.setApplicationIconBadgeNumber (6f6efed3e7 by @christophpurrer)
- ReactHost: Forward
host:didInitializeRuntime:callback to user delegate inRCTReactNativeFactory(98dc7d6423 by @zhongwuzw) - Renderer: Log missing native component registrations on iOS and Android (ef28a2c9d5 by @alanleedev)
- Renderer: Report a
RCTViewComponentViewchild-index mismatch instead of raisingNSRangeExceptionwhile formatting the assert message (1291d7ce8e by @dongdongbh) - Renderer: Reset EmptyLayoutMetrics in RCTViewComponentView prepareForRecycle so recycled views clear UIView.hidden (711a9a5e07 by @kosmydel)
- Runtime: Avoid an unhandled exception in bridgeless
ReactInstance::registerSegmentwhen an on-demand JS segment file is missing from the cache at lazy-load time (fff4994af8 by generatedunixname1608173377072046) - ScrollView: Prevent recycled ScrollViews from retaining automatic keyboard inset behavior. (e0aa7a8b0a by @stareezy-1)
- ScrollView: Programmatic (non-user-initiated) scrolls no longer cancel active touches in enclosing scroll views (06eb1fefab by @tjzel)
- Styles: Render
outlineStyle: 'dotted'and'dashed'on views without border radii (9f31d5ae9f by @neutronm) - SwiftPM: stop baking an absolute, machine-specific HERMES_CLI_PATH into the app's pbxproj; resolve hermesc at build time instead (fcbeda1109 by @chrfalch)
- Switch: Restore
paperComponentName: 'RCTSwitch'to fixtesting-library/react-nativequeries (38fd9d57df by @christophpurrer) - Text: Correctly classify extralight fonts as
UIFontWeightUltraLightinRCTGetFontWeight(3b5d0a6526 by @vonovak) - Text: Prevent the final line or trailing glyph of text from being clipped due to pixel-grid rounding precision loss (5e40a1771e by @fabriziocucci)
- TextInput: Preserve TextInput selection color when changing multiline. (56c284e152 by @fallintoplace)
- TextInput: update the keyboard when
keyboardType/returnKeyTypechange while the input is focused (new architecture parity with the legacy architecture) (0f1bdddfb3 by @NoahDorfman00) - Touch Handling: Fix debug-only crash in RCTSurfaceTouchHandler from UITextView text-selection gestures on iOS 17+ (433e79d2f4 by @hryhoriiK97)
- TurboModules: Include the module and method name in exceptions rethrown from async and void TurboModule calls (253a84c8d1 by @christophpurrer)
- TurboModules: Pass a top-level JS
nullTurboModule argument to Objective-C asnilinstead ofNSNullwhenenableModuleArgumentNSNullConversionIOSis enabled (ea291d7422 by @christophpurrer)
Security
- Dependencies: Fix: upgrade shell-quote to 1.8.4 (CVE-2026-9277) (fea5e11d9c by @anupamme)
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.