Skip to content

feat: merge 0.84-merge into main - #3030

Open
Saad Najmi (Saadnajmi) wants to merge 499 commits into
microsoft:mainfrom
Saadnajmi:0.84-merge
Open

Saad Najmi (Saadnajmi) wants to merge 499 commits into
microsoft:mainfrom
Saadnajmi:0.84-merge

Conversation

@Saadnajmi

@Saadnajmi Saad Najmi (Saadnajmi) commented Jul 16, 2026

Copy link
Copy Markdown
Collaborator

Current release stack

Depends on #3099. #3031 is the separate 0.84 release; #3033 continues mainline.

Validation and backups

The branch-specific repaired source passed hardened immutable installation, constraints, and its complete release-helper selection. The selected 18-head packet records 1,406 passing helper tests. Exact source-tree equivalence is used for rewritten endpoints where applicable; the two changed linear RC checkpoints were tested separately.

Native/API evidence retains its recorded scope. The SwiftPM and RNTester repairs have six focused native build passes. Public stable versions and runtime/API contents were preserved except for the independently reviewed SwiftPM destination repair where applicable.

Public-registry lock correction passed all 18 hosted generation, hardened immutable, constraints, and metadata-audit jobs in run 35769816507. Only equivalent executable-path spelling changes are permitted; dependency versions, checksums, and ranges are unchanged. The previous functional test results remain applicable to this metadata-only correction. Fresh GitHub CI and review remain required. Previous heads are preserved on the same repository under backup/pre-ci-repair-20260922/<original-branch> and backup/pre-public-registry-20260922/<original-branch>; local complete-history bundles were verified as well.

The 0.87 PR sequence is one first-parent path: #3037#3104#3105#3106#3100#3101#3107. The redundant #3102/#3103 reviews are consolidated into #3105.

This section supersedes earlier stack order, source identity, and validation-status notes below.


Summary

Merge up to the merge base of 0.84-stable (the first commit on the upstream 0.84-stable branch, 2166ab782a6), prepping this branch for the 0.84 release. For the cross-platform 0.84 changes (Hermes V1, precompiled iOS binaries, removal of legacy iOS architecture components, Node.js 22, etc.), see the RN 0.84 release notes.

The branch is rebased onto Microsoft main at ef09dd72. The recreated mechanical merge is 86e07385 with exact parents ef09dd72 (Microsoft main) and 2166ab78 (the Facebook 0.84 fork point); the 0.84-stable tip is not merged.

New for react-native-macos since 0.83:

Build & distribution

  • Adopt upstream DotSlash debugger distribution while retaining Electron as a development-only dependency
  • Port the upstream SwiftPM Fabric target split without dropping or duplicating macOS sources
  • Retain the complete fork-only react-native-test-library package

Fabric, accessibility & input on macOS

  • Port new 0.84 Apple and SwiftUI sources to AppKit/RCTUIKit
  • Adopt upstream HostInstance focus and blur command signatures
  • Port RCTViewAccessibilityElement to upstream's setter-based accessibility ordering while keeping the macOS proxy leaf-only and synchronized
  • Align keyboard events with upstream's payload and KeyDownEvent / KeyUpEvent model while preserving emitted macOS fields

Hermes

  • Keep Hermes source-built from a merge-base-compatible revision for 0.84
  • Avoid the moving-nightly JSI ABI mismatch while retaining the fork's Microsoft Hermes resolution path

The history is intentionally layered into a mechanical merge commit followed by focused, reversible macOS ports so the merge can be recreated or rebased cleanly.

Conflict resolution appendix

The original fork-point merge produced 153 conflicted paths / 281 conflict hunks. Its final adjudication was 11 upstream/stale-local, 28 preserve-macOS, 242 combine, 0 unresolved. Rebasing onto current Microsoft main produced 55 unique index-conflict paths: 53 were already in the original inventory and two were new base-integration paths (.flowconfig and packages/rn-tester/Podfile). The combined unique inventory below therefore contains 155 paths. Package manifests, lockfiles, and generated project metadata were reconciled mechanically; the table below focuses on behavior and architecture that warrant reviewer attention.

Reviewer guide

Area Upstream 0.84 change macOS behavior retained Final resolution
App setup, bridge, root views, and wrappers New bundle configuration flows through RCTReactNativeFactory/RCTHost; legacy-architecture compile-out and header moves reshape AppDelegate setup. macOS window placement, surface-hosting dev menu support, RCTUIKit types, and wrapper/controller hosting remain required. Combine: upstream factory/configuration structure with narrow macOS platform branches in AppDelegate, setup utilities, root-view factories, bridge utilities, and wrappers.
View focus/blur Upstream PR react#54085 generalized focus/blur to HostInstance command arguments across JS and native code. The fork already exposed focus/blur, but with older no-argument command signatures and macOS native implementations. Upstream model + macOS implementation: ViewNativeComponent.js takes the upstream signature; native commands remain available on macOS and duplicate UIKit-only methods are platform-guarded. The JS spec and native implementation were kept atomic.
Keyboard events, Pressability, Pressable, TextInput 0.84 standardizes raw KeyboardEventPayload plus KeyDownEvent/KeyUpEvent synthetic wrappers. macOS emits additional modifier fields and does not emit a physical code; capture handlers and legacy handled-key props remain supported. Combine, then corrective follow-up: one upstream-shaped payload, optional code, real macOS modifier fields, canonical wrappers across View/Pressability/TextInput, deprecated compatibility aliases, regenerated API types, and focused normalization tests. See ff3eb390.
Text and text input Upstream reorganizes style processing and extends TextInput/Fabric behavior. macOS border-radius style overrides, focus-ring/ghost-text/selection behavior, appearance-sensitive text color, and AppKit input/accessory abstractions remain required. Combine: upstream processing remains the owner and macOS behavior is additive. The Text override was corrected to stay inside upstream style scope in bf975098; the Fabric accessory reset is excluded on both macOS and visionOS in 021f7cd8.
Fabric accessibility and View Upstream PR react#52644 moved accessibilityElements ownership to a setter on RCTViewComponentView. macOS needs an NSAccessibilityElement proxy when an accessibility order refers to the view itself; using the NSView as its own child creates a VoiceOver traversal cycle. Combine, not resurrection: retain RCTViewAccessibilityElement as a leaf proxy instantiated by the upstream setter path. b1bd0184 keeps traits synchronized, reuses the shared role mapping, and prevents duplicate child subtrees.
Fabric scroll, pointer/touch, paragraph, and shadows 0.84 changes component-view lifecycle, virtual-view support, refresh/scroll behavior, pointer handling, and renderer state. macOS overlay scrollbars, content inset/resize behavior, right-click handling, text selection, transforms/hit testing, and platform colors remain active fork features. Combine: upstream lifecycle and component structure with minimal macOS clauses. Newly introduced 0.84 VirtualView/LegacyViewManagerInterop/Modal sources were ported to RCTUIKit/AppKit in e2251e82.
Image Upstream removes leaked provider maps, updates public types, and formats/reorganizes loaders and managers. The fork's RCTUIImage/RCTPlatformImage abstraction, animated image view, local/bundle loaders, and AppKit-compatible blur/loading behavior are still used. Combine: upstream module/type cleanup with the complete macOS image abstraction and animated implementation retained. No obsolete UIKit-only implementation was restored.
Native animation Upstream adds animation families and removes stale provider-map/feature-flag paths. macOS uses the RCTUIKit split and platform view abstractions in interpolation and node management. Combine: upstream animation semantics with existing RCTUIKit/macOS view handling.
Core modules and developer support 0.84 changes DevLoadingView interaction/window behavior, DevMenu configuration, inspector connection handling, module registration, and legacy compile-outs. macOS has platform-specific DevMenu, LogBox, FPS/perf monitor, accessibility, action-sheet, and device-info windows/views. Combine: upstream ownership and protocols with AppKit/RCTUIKit aliases and platform guards. The new 0.84 sources were ported in e2251e82; the visionOS alert fallback was corrected without changing iOS/macOS behavior in 68888b7f.
Legacy UIManager and views Upstream compiles out more legacy iOS paths and updates activity indicator, modal, refresh control, safe-area, switch, and scroll APIs. macOS still ships AppKit implementations and RCTPlatform/RCTUIKit abstractions for these components. Combine: adopt upstream declarations and lifecycle changes while retaining macOS implementations behind platform-specific types/branches. Modal, scroll, safe-area, switch, and refresh behavior remain mapped to their existing owners rather than duplicated into new targets.
Renderer C++ / platform graphics and text layout Upstream adds animation-backend dimensions, evolves text-input events, and updates text/graphics infrastructure. macOS platform colors, font/text layout, native text selection, default label color, right-click semantics, and RCTUIKit image/color conversion remain required. Combine: upstream cross-platform C++ shape with Apple-platform implementations that continue to dispatch through RCTPlatform*/RCTUIKit abstractions.
SwiftPM and CocoaPods ownership Upstream replaces the monolithic Fabric-components target with per-component targets and adds source-build configuration. macOS needs real View platform sources, RCTUIKit linkage/exclusions, ReactCore public headers, observers/intersection, Fabric image, and the SwiftUI wrapper. Structural combine: all 11 real old source directories map exactly once to 8 split targets plus the header-only VirtualText search path; 0 dropped, 0 duplicated. view/platform/macos remains owned by reactFabric; nonexistent textinput/platform/macos and textlayoutmanager/platform/macos paths were not invented. SwiftPM/CocoaPods ownership and MacOSSwitchShadowNode.mm exclusions remain aligned.
New 0.84 Apple/SwiftUI sources 0.84 introduces SwiftUI filter wrappers, VirtualView/LegacyViewManagerInterop changes, modal component-view updates, and new UIKit assumptions. The fork builds those sources through RCTUIKit/AppKit and supports macOS alongside iOS/visionOS. Follow-up port: minimal aliases and platform guards were layered in e2251e82, rather than obscuring them inside the mechanical merge.
Hermes Upstream introduces Hermes V1/version-properties handling, new artifact coordinates, and nightly-by-default selection. react-native-macos must resolve Microsoft Hermes from the compatible merge-base lineage; taking a moving nightly produced a Runtime vs IRuntime JSI ABI mismatch. Combine + compatibility pin: preserve upstream V1/version-properties flow, keep merge-base-aware source selection, remove the moving-nightly preinstall, and use source-built Hermes 1000.0.0 with hermes-compiler: 0.0.0. See a8959b6c.
Debugger distribution and prebuild tooling Upstream replaces production Electron delivery with DotSlash and expands prebuilt XCFramework tooling. The fork's Electron bump was dependency/CVE maintenance for the old architecture; direct Electron is still useful only for explicit development mode. Upstream production model + narrow local retention: fb-dotslash is the production dependency; Electron 39.8.1 is dev-only and excluded from the published package. Shell-interpolated prebuild/release commands were converted to argument-safe process/filesystem APIs in 38e24834 and b49508e9.
Upstream deletion: Network overlay Upstream PR react#54868 removes the Perf and Network tabs under RFC0777, deleting NetworkOverlay.js. The local history contained only mechanical package-rename ancestry, not macOS-specific behavior. Upstream deletion: do not resurrect the removed overlay.
react-native-test-library and RNTester tests Upstream no longer carries the fork-only test package and removes several legacy RNTester test files. react-native-test-library remains an active macOS package, including its native component fixtures and macOS example; selected UIManager/event/view tests still cover fork behavior. Preserve selectively: restore the complete 50-file react-native-test-library package, including the three explicit modify/delete conflicts; retain still-relevant RNTester tests and scheme wiring, while accepting upstream deletion where no macOS requirement exists.

Complete conflicted-path inventory

Build, manifests, Hermes, and generated metadata (45)
  • .github/actions/setup-xcode/action.yml
  • .gitignore
  • .flowconfig
  • README.md
  • package.json
  • packages/assets/package.json
  • packages/babel-plugin-codegen/package.json
  • packages/community-cli-plugin/package.json
  • packages/core-cli-utils/package.json
  • packages/debugger-frontend/package.json
  • packages/debugger-shell/package.json
  • packages/dev-middleware/package.json
  • packages/eslint-config-react-native/package.json
  • packages/eslint-plugin-react-native/package.json
  • packages/eslint-plugin-specs/package.json
  • packages/gradle-plugin/package.json
  • packages/metro-config/package.json
  • packages/new-app-screen/package.json
  • packages/normalize-color/package.json
  • packages/polyfills/package.json
  • packages/react-native-babel-preset/package.json
  • packages/react-native-babel-transformer/package.json
  • packages/react-native-codegen/package.json
  • packages/react-native-compatibility-check/package.json
  • packages/react-native-popup-menu-android/package.json
  • packages/react-native/Package.swift
  • packages/react-native/ReactCommon/react/runtime/platform/ios/ReactCommon/RCTHermesInstance.h
  • packages/react-native/package.json
  • packages/react-native/scripts/ios-prebuild/hermes.js
  • packages/react-native/scripts/ios-prebuild/xcframework.js
  • packages/react-native/sdks/hermes-engine/hermes-engine.podspec
  • packages/react-native/sdks/hermes-engine/hermes-utils.rb
  • packages/react-native/sdks/hermes-engine/utils/build-ios-framework.sh
  • packages/rn-tester/Podfile
  • packages/rn-tester/Podfile.lock
  • packages/rn-tester/RNTesterPods.xcodeproj/project.pbxproj
  • packages/rn-tester/RNTesterPods.xcodeproj/xcshareddata/xcschemes/RNTesterUnitTests.xcscheme
  • packages/rn-tester/package.json
  • packages/typescript-config/package.json
  • packages/virtualized-lists/package.json
  • private/helloworld/Gemfile
  • private/helloworld/Gemfile.lock
  • private/helloworld/package.json
  • private/react-native-codegen-typescript-test/package.json
  • yarn.lock
JavaScript behavior and public types (14)
  • packages/react-native/Libraries/Components/Pressable/Pressable.js
  • packages/react-native/Libraries/Components/TextInput/TextInput.flow.js
  • packages/react-native/Libraries/Components/TextInput/TextInput.js
  • packages/react-native/Libraries/Components/TextInput/TextInputState.js
  • packages/react-native/Libraries/Components/Touchable/TouchableWithoutFeedback.js
  • packages/react-native/Libraries/Components/View/View.js
  • packages/react-native/Libraries/Components/View/ViewNativeComponent.js
  • packages/react-native/Libraries/Pressability/Pressability.js
  • packages/react-native/Libraries/Text/Text.js
  • packages/react-native/Libraries/Types/CoreEventTypes.js
  • packages/react-native/Libraries/Utilities/__tests__/Platform-test.js
  • packages/react-native/src/private/devsupport/devmenu/elementinspector/NetworkOverlay.js
  • packages/rn-tester/js/examples/Cursor/CursorExample.js
  • packages/rn-tester/js/examples/PlatformColor/PlatformColorExample.js
App setup, bridge, and wrappers (16)
  • packages/react-native/Libraries/AppDelegate/RCTAppDelegate.h
  • packages/react-native/Libraries/AppDelegate/RCTAppSetupUtils.h
  • packages/react-native/Libraries/AppDelegate/RCTAppSetupUtils.mm
  • packages/react-native/Libraries/AppDelegate/RCTDefaultReactNativeFactoryDelegate.mm
  • packages/react-native/Libraries/AppDelegate/RCTReactNativeFactory.h
  • packages/react-native/Libraries/AppDelegate/RCTRootViewFactory.h
  • packages/react-native/Libraries/AppDelegate/RCTRootViewFactory.mm
  • packages/react-native/Libraries/Wrapper/Example/RCTWrapperReactRootViewController.h
  • packages/react-native/Libraries/Wrapper/RCTWrapper.h
  • packages/react-native/Libraries/Wrapper/RCTWrapperView.h
  • packages/react-native/Libraries/Wrapper/RCTWrapperViewControllerHostingView.h
  • packages/react-native/React/Base/RCTBridgeProxy.mm
  • packages/react-native/React/Base/RCTBundleManager.h
  • packages/react-native/React/Base/RCTRootView.h
  • packages/react-native/React/Base/RCTUtils.h
  • packages/react-native/React/Base/RCTUtils.mm
Image, linking, and native animation (10)
  • packages/react-native/Libraries/Image/Image.ios.js
  • packages/react-native/Libraries/Image/RCTBundleAssetImageLoader.mm
  • packages/react-native/Libraries/Image/RCTImageBlurUtils.mm
  • packages/react-native/Libraries/Image/RCTImageLoader.mm
  • packages/react-native/Libraries/Image/RCTImageViewManager.mm
  • packages/react-native/Libraries/Image/RCTLocalAssetImageLoader.mm
  • packages/react-native/Libraries/Image/RCTUIImageViewAnimated.mm
  • packages/react-native/Libraries/LinkingIOS/RCTLinkingManager.mm
  • packages/react-native/Libraries/NativeAnimation/Nodes/RCTInterpolationAnimatedNode.mm
  • packages/react-native/Libraries/NativeAnimation/RCTNativeAnimatedNodesManager.mm
Core modules and developer support (13)
  • packages/react-native/React/CoreModules/CoreModulesPlugins.mm
  • packages/react-native/React/CoreModules/RCTAccessibilityManager.mm
  • packages/react-native/React/CoreModules/RCTActionSheetManager.mm
  • packages/react-native/React/CoreModules/RCTDevLoadingView.mm
  • packages/react-native/React/CoreModules/RCTDevMenu.h
  • packages/react-native/React/CoreModules/RCTDevMenu.mm
  • packages/react-native/React/CoreModules/RCTDeviceInfo.mm
  • packages/react-native/React/CoreModules/RCTFPSGraph.mm
  • packages/react-native/React/CoreModules/RCTLogBoxView.h
  • packages/react-native/React/CoreModules/RCTLogBoxView.mm
  • packages/react-native/React/CoreModules/RCTPerfMonitor.mm
  • packages/react-native/React/DevSupport/RCTDevLoadingViewProtocol.h
  • packages/react-native/React/DevSupport/RCTInspectorDevServerHelper.mm
Fabric component views and input (12)
  • packages/react-native/React/Fabric/Mounting/ComponentViews/ScrollView/RCTEnhancedScrollView.mm
  • packages/react-native/React/Fabric/Mounting/ComponentViews/ScrollView/RCTPullToRefreshViewComponentView.mm
  • packages/react-native/React/Fabric/Mounting/ComponentViews/ScrollView/RCTScrollViewComponentView.mm
  • packages/react-native/React/Fabric/Mounting/ComponentViews/Text/RCTParagraphComponentView.mm
  • packages/react-native/React/Fabric/Mounting/ComponentViews/TextInput/RCTTextInputComponentView.mm
  • packages/react-native/React/Fabric/Mounting/ComponentViews/View/RCTViewAccessibilityElement.h
  • packages/react-native/React/Fabric/Mounting/ComponentViews/View/RCTViewAccessibilityElement.mm
  • packages/react-native/React/Fabric/Mounting/ComponentViews/View/RCTViewComponentView.mm
  • packages/react-native/React/Fabric/Mounting/RCTComponentViewDescriptor.h
  • packages/react-native/React/Fabric/RCTSurfacePointerHandler.mm
  • packages/react-native/React/Fabric/RCTSurfaceTouchHandler.mm
  • packages/react-native/React/Fabric/Utils/RCTBoxShadow.mm
Legacy views, text, and UIManager (24)
  • packages/react-native/Libraries/Text/Text/RCTTextView.h
  • packages/react-native/Libraries/Text/Text/RCTTextView.mm
  • packages/react-native/Libraries/Text/TextInput/RCTBaseTextInputView.h
  • packages/react-native/Libraries/Text/TextInput/RCTInputAccessoryView.h
  • packages/react-native/Libraries/Text/TextInput/RCTInputAccessoryViewContent.h
  • packages/react-native/Libraries/Text/VirtualText/RCTVirtualTextView.h
  • packages/react-native/React/Modules/RCTUIManager.h
  • packages/react-native/React/Modules/RCTUIManager.mm
  • packages/react-native/React/Views/RCTActivityIndicatorView.m
  • packages/react-native/React/Views/RCTModalHostView.h
  • packages/react-native/React/Views/RCTModalHostView.m
  • packages/react-native/React/Views/RCTModalHostViewController.h
  • packages/react-native/React/Views/RCTModalHostViewController.m
  • packages/react-native/React/Views/RCTModalHostViewManager.h
  • packages/react-native/React/Views/RCTModalHostViewManager.m
  • packages/react-native/React/Views/RCTSwitch.h
  • packages/react-native/React/Views/RefreshControl/RCTRefreshControl.h
  • packages/react-native/React/Views/RefreshControl/RCTRefreshControl.m
  • packages/react-native/React/Views/RefreshControl/RCTRefreshControlManager.m
  • packages/react-native/React/Views/SafeAreaView/RCTSafeAreaView.m
  • packages/react-native/React/Views/SafeAreaView/RCTSafeAreaViewManager.m
  • packages/react-native/React/Views/ScrollView/RCTScrollView.h
  • packages/react-native/React/Views/ScrollView/RCTScrollView.m
  • packages/react-native/React/Views/ScrollView/RCTScrollViewManager.h
Renderer C++ and platform graphics (10)
  • packages/react-native/ReactCommon/react/renderer/attributedstring/TextAttributes.cpp
  • packages/react-native/ReactCommon/react/renderer/components/textinput/TextInputEventEmitter.h
  • packages/react-native/ReactCommon/react/renderer/components/view/propsConversions.h
  • packages/react-native/ReactCommon/react/renderer/graphics/platform/ios/react/renderer/graphics/HostPlatformColor.h
  • packages/react-native/ReactCommon/react/renderer/graphics/platform/ios/react/renderer/graphics/HostPlatformColor.mm
  • packages/react-native/ReactCommon/react/renderer/graphics/platform/ios/react/renderer/graphics/RCTPlatformColorUtils.h
  • packages/react-native/ReactCommon/react/renderer/graphics/platform/ios/react/renderer/graphics/RCTPlatformColorUtils.mm
  • packages/react-native/ReactCommon/react/renderer/textlayoutmanager/platform/ios/react/renderer/textlayoutmanager/RCTFontUtils.h
  • packages/react-native/ReactCommon/react/renderer/textlayoutmanager/platform/ios/react/renderer/textlayoutmanager/RCTFontUtils.mm
  • packages/react-native/ReactCommon/react/renderer/textlayoutmanager/platform/ios/react/renderer/textlayoutmanager/RCTTextLayoutManager.mm
Tests and RNTester native fixtures (11)
  • packages/react-native-test-library/ios/RCTSampleNativeComponentComponentView.mm
  • packages/react-native-test-library/ios/RCTSampleNativeComponentViewManager.mm
  • packages/react-native-test-library/package.json
  • packages/rn-tester/NativeComponentExample/ios/RNTMyLegacyNativeViewManager.mm
  • packages/rn-tester/NativeComponentExample/ios/RNTMyNativeViewManager.mm
  • packages/rn-tester/RNTester/AppDelegate.mm
  • packages/rn-tester/RNTesterIntegrationTests/RCTUIManagerScenarioTests.m
  • packages/rn-tester/RNTesterIntegrationTests/RNTesterIntegrationTests.m
  • packages/rn-tester/RNTesterUnitTests/RCTEventDispatcherTests.m
  • packages/rn-tester/RNTesterUnitTests/RCTUIManagerTests.m
  • packages/rn-tester/RNTesterUnitTests/RCTViewTests.m

The inventory sections sum to 155 paths.

Commands used

Roughly, the merge and subsequent Microsoft-main rebase used:

git fetch upstream main
git fetch facebook main 0.84-stable
git merge-base facebook/main facebook/0.84-stable
git merge --no-ff 2166ab782a6bcc18d1bb2540f32f6816fd637277
git ls-files -u
git diff --name-only --diff-filter=U
git rebase --rebase-merges --onto upstream/main 82618f59bac995107d36bf4503804226fc07bdea 0.84-merge

The rebase tried to replay the React Native-side ancestry instead of retaining the required fork-point parent, so the audited resolved merge tree was reconstructed with exact parents ef09dd72 and 2166ab78, then the focused macOS follow-ups were replayed as separate commits. Conflict inventories and old-to-new commit mappings were regenerated after that reconstruction.

Validation and publication were approximately:

yarn install --immutable
yarn constraints
yarn test
yarn flow
yarn lint
yarn format-check
yarn build-types
bundle exec pod install
swift package dump-package --package-path packages/react-native
node scripts/ios-prebuild.js -b -f Debug -p
xcodebuild -workspace packages/rn-tester/RNTesterPods.xcworkspace \
  -scheme RNTester-macOS -destination 'generic/platform=macOS' build
git push --force-with-lease=<previous-0.84-merge-sha> origin 0.84-merge
git push origin 0.84-merge

The force-with-lease was limited to retargeting the existing fork branch from the stale fork main to Microsoft main; later updates were normal fast-forward pushes.

Test Plan

  • Final GitHub PR workflow at code-complete head 4bacb12a: JavaScript, Yarn constraints, website, npm dry-run, RNTester iOS/macOS/visionOS static and dynamic builds, all Hermes slices, all five prebuild destinations, XCFramework composition, and CodeQL
  • Final head 2777fb70 only removes the deferred in-repo merge skill; the exact draft is archived outside the branch until the complete 0.84-0.87 stack is prepared
  • Local full JavaScript validation: 280 suites / 5603 passing, Flow 0, lint, format, and generated API/types
  • RNTester macOS static workspace build: BUILD SUCCEEDED
  • CocoaPods: 87 dependencies / 86 pods, source-built Hermes 1000.0.0 from the React Native merge-base lineage
  • yarn install --immutable
  • yarn constraints
  • bundle exec pod install
  • swift package dump-package --package-path packages/react-native
  • Focused codegen pnpm-symlink regression test
  • Exact topology: merge parents ef09dd72 and 2166ab78; 0.84-stable tip excluded
  • CodeQL: final JavaScript analysis passed with the security fixes preserved as separate commits

The two dynamic-framework Test All canaries previously failed before runner assignment with zero executed steps; they did not contain a code/build failure from this branch.

Final CI follow-up

This branch receives only these independently reviewed follow-up paths:

  • packages/react-native/ReactNativeApi.d.ts
  • packages/react-native/scripts/ios-prebuild/__tests__/hermes-test.js

The complete 16-head batch passed 92 recorded validation commands, including branch-specific API revalidation/generated TypeScript, full formatting checks, and combined targeted suites where applicable. Native changes are limited to the reviewed #3033 destination guards (also present in stable 0.85) and #3104's sidecar-copy correction (already present in its descendants). Exact source equivalence preserves earlier native results elsewhere. The public-registry lockfiles and package manifests remain byte-identical.

Previous heads are backed up at backup/pre-ci-followup-20260922/<original-branch> on their source repository. Fresh current-head CI remains required. The one-first-parent 0.87 sequence is preserved.

Zeya Peng (zeyap) and others added 30 commits November 26, 2025 15:45
…ReactHost teardown (react#54712)

Summary:
Pull Request resolved: react#54712

## Changelog:

[iOS] [Added] - Allow invalidateDisplayLink on RCTAnimatedModuleProvider

Reviewed By: sammy-SC

Differential Revision: D87929762

fbshipit-source-id: 116661a96154cdf108e7c1a6e7f09f49275529b7
Summary:
Pull Request resolved: react#54651

Break up ReactHost and TurboModuleManager, so in the future we can inject this more easily.

Changelog: [Internal]

Reviewed By: lenaic

Differential Revision: D87774276

fbshipit-source-id: 02a896d66e3ab3c7fa01c383779aaa3a73aa39b8
)

Summary:
Pull Request resolved: react#54719

I *think* this is to blame for issues with HMRClient::setup() not being called in release builds.

Changelog:
[General][Removed] Revert react#54314

Reviewed By: vzaidman

Differential Revision: D87982319

fbshipit-source-id: d80d2b33536466b67a8e205267c8037500ad4113
Summary:
Pull Request resolved: react#54704

This class is coming from Legacy Architecture and is no longer used so can be cleaned up.

Changelog:
[Internal] [Changed] -

Reviewed By: mdvacca

Differential Revision: D87925037

fbshipit-source-id: 30faffef0da2b7055a6d381b41dc72bead2dd8de
Summary:
Pull Request resolved: react#54695

Add Flow typing for `fs.glob` APIs introduced in Node v22

Changelog:
[Internal]

Reviewed By: cipolleschi, vzaidman

Differential Revision: D78668287

fbshipit-source-id: 769c22687b4dcd31a64b54d6825279287e558967
Summary:
Chronos Job Instance ID: 1125908150042852
Sandcastle Job Instance ID: 27021600113417662

Processed xml files:
android_res/com/facebook/audience/stories/storyviewer/res/values/strings.xml
android_res/com/facebook/spherical/common/res/values/strings.xml
android_res/com/facebook/ipc/stories/viewersheet/res/values/strings.xml
android_res/com/facebook/audience/stories/settings/res/values/strings.xml
android_res/com/facebook/xapp/messaging/threadview/renderer/decorators/sendstate/res/values/strings.xml
android_res/com/facebook/oxygen/preloads/integration/install/common/res/values/strings.xml
android_res/com/facebook/messengerpromotions/res/values/strings.xml
../xplat/js/react-native-github/packages/react-native/ReactAndroid/src/main/res/views/uimanager/values/strings.xml
../xplat/js/react-native-github/packages/react-native/ReactAndroid/src/main/res/systeminfo/values/strings.xml
android_res/com/facebook/notifications/res/values/strings.xml
android_res/com/facebook/events/create/loading/res/values/strings.xml
android_res/com/facebook/messaginginblue/aibot/nux/launcher/res/values/strings.xml
android_res/com/facebook/messenger/res/values/strings.xml
android_res/com/facebook/messaging/threadsettings/res/values/strings.xml
android_res/com/facebook/xapp/messaging/threadview/renderer/decorators/usertiles/menuitem/block/res/values/strings.xml
android_res/com/facebook/messaging/blocking/res/values/strings.xml
android_res/com/facebook/messaging/montage/viewer/avatarquickreplies/res/values/strings.xml
android_res/com/facebook/messaging/montage/viewer/res/values/strings.xml
android_res/com/facebook/messaginginblue/sharesheet/components/externalsharingitem/res/values/strings.xml
android_res/com/facebook/messaging/montage/viewer/viewcontroller/res/values/strings.xml
android_res/com/facebook/messaging/montage/viewer/contextualreplies/res/values/strings.xml
android_res/com/facebook/messaging/integrity/res/values/strings.xml
android_res/com/facebook/messaging/business/montageads/res/values/strings.xml
android_res/com/facebook/messaging/avatar/avatardetail/res/values/strings.xml
android_res/com/facebook/messaging/pinnedgroups/res/values/strings.xml
android_res/com/facebook/messaging/nux/res/values/strings.xml
android_res/com/facebook/messaging/groups/plugins/core/threadsettingsmenuitem/res/values/strings.xml
android_res/com/facebook/payments/p2p/res/values/strings.xml
android_res/com/facebook/payments/p2p/verification/res/values/strings.xml
android_res/com/facebook/payments/p2p/composer/res/values/strings.xml
android_res/com/facebook/payments/p2p/awareness/res/values/strings.xml
android_res/com/facebook/payments/connectivity/res/values/strings.xml
android_res/com/facebook/orca/notify/res/values/strings.xml
android_res/com/facebook/messaging/ui/name/res/values/strings.xml
android_res/com/facebook/messaging/memories/res/values/strings.xml
android_res/com/facebook/messaging/notify/util/res/values/strings.xml
android_res/com/facebook/messaging/mute/res/values/strings.xml
android_res/com/facebook/messaging/messengerprefs/res/values/strings.xml
android_res/com/facebook/messaging/communitymessaging/notify/survey/res/values/strings.xml
android_res/com/facebook/messaging/wellbeing/unknowncontact/messagerequests/res/values/strings.xml
android_res/com/facebook/messaging/threadlist/ui/threaditem/snippet/res/values/strings.xml
android_res/com/facebook/messaging/messagerendering/res/values/strings.xml
android_res/com/facebook/messaging/business/messengerextensions/res/values/strings.xml
android_res/com/facebook/messaging/business/commerce/res/values/strings.xml
android_res/com/facebook/messaging/location/common/res/values/strings.xml
android_res/com/facebook/messaging/business/common/res/values/strings.xml
android_res/com/facebook/messaging/groups/integration/chatactivetab/ui/res/values/strings.xml
android_res/com/facebook/messaging/contextbanner/res/values/strings.xml
android_res/com/facebook/xapp/messaging/publicchats/threadview/title/res/values/strings.xml
android_res/com/facebook/zero/nativetemplate/res/values/strings.xml
android_res/com/facebook/video/watch/components/discover/res/values/strings.xml
android_res/com/facebook/video/settings/globalsubtitle/res/values/strings.xml
android_res/com/facebook/facecast/display/liveevent/announcement/res/values/strings.xml
android_res/com/facebook/video/commercialbreak/res/values/strings.xml
android_res/com/facebook/youth/camera/components/music/res/values/strings.xml
android_res/com/facebook/video/watchandgo/player/plugin/res/values/strings.xml
android_res/com/facebook/facecast/livingroom/player/res/values/strings.xml
android_res/com/facebook/video/formatting/res/values/strings.xml
android_res/com/facebook/login/res/values/strings.xml
android_res/com/facebook/account/recovery/res/values/strings.xml
android_res/com/facebook/account/common/res/values/strings.xml
android_res/com/meta/metaai/voiceselector/res/values/strings.xml
android_res/com/facebook/mig/input/res/values/strings.xml
android_res/com/facebook/messaging/msys/thread/writewithai/res/values/strings.xml
android_res/com/facebook/xapp/messaging/threadview/processor/xma/res/values/strings.xml
android_res/com/facebook/messaging/threadview/jumppill/res/values/strings.xml
android_res/com/facebook/xapp/messaging/link/res/values/strings.xml
android_res/com/facebook/xapp/messaging/threadview/renderer/decorators/mediablur/res/values/strings.xml
android_res/com/facebook/xapp/messaging/prompts/res/values/strings.xml
android_res/com/facebook/mig/xma/template/res/values/strings.xml
android_res/com/facebook/xapp/messaging/threadview/renderer/xma/sharedstack/res/values/strings.xml
android_res/com/facebook/xapp/messaging/threadview/renderer/photo/res/values/strings.xml
android_res/com/facebook/xapp/messaging/threadview/renderer/mediastack/components/res/values/strings.xml
android_res/com/facebook/xapp/messaging/publicchats/join/jointointeract/res/values/strings.xml
android_res/com/facebook/oxygen/preloads/integration/install/m4a/fb4a/res/values/strings.xml
android_res/com/facebook/messaging/msys/thread/xma/viewonfb/processor/res/values/strings.xml
android_res/com/facebook/messaging/msys/thread/adapter/util/res/values/strings.xml
android_res/com/facebook/messaging/msys/advancedcrypto/extensions/datatranslator/res/values/strings.xml
android_res/com/facebook/messaging/msys/advancedcrypto/plugins/messageexpiration/nux/res/values/strings.xml
android_res/com/facebook/messaging/activation/otms/res/values/strings.xml
android_res/com/facebook/messaging/publicchats/fandomintegration/res/values/strings.xml
libraries/maps/facebook-maps/res/values/strings.xml
android_res/com/facebook/xapp/messaging/message/wearablesattribution/res/values/strings.xml
android_res/com/facebook/notifications/push/permission/res/values/strings.xml
android_res/com/facebook/notifications/turnon/res/values/strings.xml
android_res/com/facebook/messaging/games/res/values/strings.xml
android_res/com/facebook/messaging/sharerendering/res/values/strings.xml
android_res/com/facebook/messaging/montage/composer/art/res/values/strings.xml
android_res/com/facebook/messaging/search/aiprompt/res/values/strings.xml
android_res/com/facebook/messaging/livelocation/res/values/strings.xml
android_res/com/facebook/messaging/location/picker/res/values/strings.xml
android_res/com/facebook/shortcuts/res/values/strings.xml
android_res/com/facebook/messaging/location/nearbyplacespicker/res/values/strings.xml
android_res/com/facebook/messaging/location/sending/res/values/strings.xml
android_res/com/facebook/maps/navigation/res/values/strings.xml
android_res/com/facebook/messaging/avatar/upsell/res/values/strings.xml
android_res/com/facebook/messaging/avatar/hotlike/res/values/strings.xml
android_res/com/facebook/messaging/sounds/res/values/strings.xml
android_res/com/facebook/messaging/mentions/res/values/strings.xml
android_res/com/facebook/messaging/composer/quickreply/data/res/values/strings.xml

allow-large-files
ignore-conflict-markers
opt-out-review
drop-conflicts

Differential Revision: D88020530

fbshipit-source-id: 33bccadb6632cc6fecfa1007807d0ada629c55ed
Summary:
Chronos Job Instance ID: 1125908150404818
Sandcastle Job Instance ID: 31525199747204595

Processed xml files:
android_res/com/facebook/oxygen/preloads/integration/install/common/res/values/strings.xml
android_res/com/facebook/messengerpromotions/res/values/strings.xml
../xplat/js/react-native-github/packages/react-native/ReactAndroid/src/main/res/views/uimanager/values/strings.xml
../xplat/js/react-native-github/packages/react-native/ReactAndroid/src/main/res/systeminfo/values/strings.xml
android_res/com/facebook/notifications/res/values/strings.xml
android_res/com/facebook/events/create/loading/res/values/strings.xml
android_res/com/facebook/messaginginblue/aibot/nux/launcher/res/values/strings.xml
android_res/com/facebook/messenger/res/values/strings.xml
android_res/com/facebook/messaging/threadsettings/res/values/strings.xml
android_res/com/facebook/xapp/messaging/threadview/renderer/decorators/usertiles/menuitem/block/res/values/strings.xml
android_res/com/facebook/messaging/blocking/res/values/strings.xml
android_res/com/facebook/messaging/montage/viewer/avatarquickreplies/res/values/strings.xml
android_res/com/facebook/messaging/montage/viewer/res/values/strings.xml
android_res/com/facebook/messaginginblue/sharesheet/components/externalsharingitem/res/values/strings.xml
android_res/com/facebook/messaging/montage/viewer/viewcontroller/res/values/strings.xml
android_res/com/facebook/messaging/montage/viewer/contextualreplies/res/values/strings.xml
android_res/com/facebook/messaging/integrity/res/values/strings.xml
android_res/com/facebook/messaging/business/montageads/res/values/strings.xml
android_res/com/facebook/messaging/avatar/avatardetail/res/values/strings.xml
android_res/com/facebook/messaging/pinnedgroups/res/values/strings.xml
android_res/com/facebook/messaging/nux/res/values/strings.xml
android_res/com/facebook/messaging/groups/plugins/core/threadsettingsmenuitem/res/values/strings.xml
android_res/com/facebook/payments/p2p/res/values/strings.xml
android_res/com/facebook/payments/p2p/verification/res/values/strings.xml
android_res/com/facebook/payments/p2p/composer/res/values/strings.xml
android_res/com/facebook/payments/p2p/awareness/res/values/strings.xml
android_res/com/facebook/payments/connectivity/res/values/strings.xml
android_res/com/facebook/orca/notify/res/values/strings.xml
android_res/com/facebook/messaging/ui/name/res/values/strings.xml
android_res/com/facebook/messaging/memories/res/values/strings.xml
android_res/com/facebook/messaging/notify/util/res/values/strings.xml
android_res/com/facebook/messaging/mute/res/values/strings.xml
android_res/com/facebook/messaging/messengerprefs/res/values/strings.xml
android_res/com/facebook/messaging/communitymessaging/notify/survey/res/values/strings.xml
android_res/com/facebook/messaging/wellbeing/unknowncontact/messagerequests/res/values/strings.xml
android_res/com/facebook/messaging/threadlist/ui/threaditem/snippet/res/values/strings.xml
android_res/com/facebook/messaging/messagerendering/res/values/strings.xml
android_res/com/facebook/messaging/business/messengerextensions/res/values/strings.xml
android_res/com/facebook/messaging/business/commerce/res/values/strings.xml
android_res/com/facebook/messaging/location/common/res/values/strings.xml
android_res/com/facebook/messaging/business/common/res/values/strings.xml
android_res/com/facebook/messaging/groups/integration/chatactivetab/ui/res/values/strings.xml
android_res/com/facebook/messaging/contextbanner/res/values/strings.xml
android_res/com/facebook/xapp/messaging/publicchats/threadview/title/res/values/strings.xml
android_res/com/facebook/zero/nativetemplate/res/values/strings.xml
android_res/com/facebook/video/watch/components/discover/res/values/strings.xml
android_res/com/facebook/video/settings/globalsubtitle/res/values/strings.xml
android_res/com/facebook/facecast/display/liveevent/announcement/res/values/strings.xml
android_res/com/facebook/video/commercialbreak/res/values/strings.xml
android_res/com/facebook/youth/camera/components/music/res/values/strings.xml
android_res/com/facebook/video/watchandgo/player/plugin/res/values/strings.xml
android_res/com/facebook/facecast/livingroom/player/res/values/strings.xml
android_res/com/facebook/video/formatting/res/values/strings.xml
android_res/com/facebook/login/res/values/strings.xml
android_res/com/facebook/account/recovery/res/values/strings.xml
android_res/com/facebook/account/common/res/values/strings.xml
android_res/com/meta/metaai/voiceselector/res/values/strings.xml
android_res/com/facebook/mig/input/res/values/strings.xml
android_res/com/facebook/messaging/msys/thread/writewithai/res/values/strings.xml
android_res/com/facebook/xapp/messaging/threadview/processor/xma/res/values/strings.xml
android_res/com/facebook/messaging/threadview/jumppill/res/values/strings.xml
android_res/com/facebook/xapp/messaging/link/res/values/strings.xml
android_res/com/facebook/xapp/messaging/threadview/renderer/decorators/mediablur/res/values/strings.xml
android_res/com/facebook/xapp/messaging/prompts/res/values/strings.xml
android_res/com/facebook/mig/xma/template/res/values/strings.xml
android_res/com/facebook/xapp/messaging/threadview/renderer/xma/sharedstack/res/values/strings.xml
android_res/com/facebook/xapp/messaging/threadview/renderer/photo/res/values/strings.xml
android_res/com/facebook/xapp/messaging/threadview/renderer/mediastack/components/res/values/strings.xml
android_res/com/facebook/xapp/messaging/publicchats/join/jointointeract/res/values/strings.xml
android_res/com/facebook/oxygen/preloads/integration/install/m4a/fb4a/res/values/strings.xml
android_res/com/facebook/messaging/msys/thread/xma/viewonfb/processor/res/values/strings.xml
android_res/com/facebook/messaging/msys/thread/adapter/util/res/values/strings.xml
android_res/com/facebook/messaging/msys/advancedcrypto/extensions/datatranslator/res/values/strings.xml
android_res/com/facebook/messaging/msys/advancedcrypto/plugins/messageexpiration/nux/res/values/strings.xml
android_res/com/facebook/messaging/activation/otms/res/values/strings.xml
android_res/com/facebook/messaging/publicchats/fandomintegration/res/values/strings.xml
libraries/maps/facebook-maps/res/values/strings.xml
android_res/com/facebook/xapp/messaging/message/wearablesattribution/res/values/strings.xml
android_res/com/facebook/notifications/push/permission/res/values/strings.xml
android_res/com/facebook/notifications/turnon/res/values/strings.xml
android_res/com/facebook/messaging/games/res/values/strings.xml
android_res/com/facebook/messaging/sharerendering/res/values/strings.xml
android_res/com/facebook/messaging/montage/composer/art/res/values/strings.xml
android_res/com/facebook/messaging/search/aiprompt/res/values/strings.xml
android_res/com/facebook/messaging/livelocation/res/values/strings.xml
android_res/com/facebook/messaging/location/picker/res/values/strings.xml
android_res/com/facebook/shortcuts/res/values/strings.xml
android_res/com/facebook/messaging/location/nearbyplacespicker/res/values/strings.xml
android_res/com/facebook/messaging/location/sending/res/values/strings.xml
android_res/com/facebook/maps/navigation/res/values/strings.xml
android_res/com/facebook/messaging/avatar/upsell/res/values/strings.xml
android_res/com/facebook/messaging/avatar/hotlike/res/values/strings.xml
android_res/com/facebook/messaging/sounds/res/values/strings.xml
android_res/com/facebook/messaging/mentions/res/values/strings.xml
android_res/com/facebook/messaging/composer/quickreply/data/res/values/strings.xml
android_res/com/facebook/messaging/activation/res/values/strings.xml
android_res/com/facebook/negativefeedback/ui/res/values/strings.xml
android_res/com/facebook/guidedaction/res/values/strings.xml
android_res/com/facebook/rapidreporting/res/values/strings.xml
android_res/com/facebook/audience/snacks/instantfeedback/res/values/strings.xml

allow-large-files
ignore-conflict-markers
opt-out-review
drop-conflicts

Differential Revision: D88026538

fbshipit-source-id: e9760e132c7b249e3d1550b8e30cce4d062ee9bb
… API from `RCTDevSettings`" (react#54723)

Summary:
Pull Request resolved: react#54723

Changelog: [iOS][Fixed] - Fixed crashing due to FastRefresh not being initialized for non debug builds with RCT_DEV_MENU=1

Reviewed By: robhogan

Differential Revision: D87982434

fbshipit-source-id: 0832ba02e0b82a1932b8532dc2874b48d33de66d
…tanimation` (react#54730)

Summary:
Pull Request resolved: react#54730

I'm deleting those 2 classes related to layout animation. They were needed only for legacy arch.
They're not needed anymore so they can go now.
Marked as breaking because those 2 classes were public, but I wasn't able to find meaningful usages in OSS

Changelog:
[Android] [Breaking] - Remove unnecessary classes inside `com.facebook.react.uimanager.layoutanimation` used in legacy architecture

Reviewed By: javache

Differential Revision: D88011209

fbshipit-source-id: a45ec8342a2cdd150264ff9de9da7060b93bf55c
Summary:
Pull Request resolved: react#54692

Lazily create error strings and use jsi::JSError for more user-friendly error messages

Changelog: [Internal]

Reviewed By: cipolleschi

Differential Revision: D87868701

fbshipit-source-id: a38be93511520329a3c703b1b27dbb456da30be2
…ode (react#54731)

Summary:
# Fix NullPointerException in PromiseImpl.reject

This PR fixes a `NullPointerException` that occurs when `Promise.reject` is called with a `null` code from Java native modules.

The issue arises because `Promise.kt` and `PromiseImpl.kt` defined the `code` parameter as non-nullable `String` in several overloads. However, `PromiseImpl`'s internal logic (specifically the catch-all `reject` method) is designed to handle `null` codes by defaulting to `EUNSPECIFIED`.

When a Java module (such as `react-native-ble-plx`) calls `promise.reject(null, message)`, Kotlin's generated null-checks throw a `NullPointerException` before the method body is executed.

## Changelog

[Android] [Fixed] - Allow nullable `code` in `Promise.reject` to prevent NPEs from Java modules

Pull Request resolved: react#54731

Test Plan:
1.  Create a native module in Java that calls `promise.reject(null, "Error message")`.
2.  Before this fix, the app crashes with `java.lang.NullPointerException: Parameter specified as non-null is null: method com.facebook.react.bridge.PromiseImpl.reject, parameter code`.
3.  After this fix, the promise is rejected with code `EUNSPECIFIED` and the app does not crash.

## Related Issue

Fixes react#54722

Reviewed By: fabriziocucci, cortinico

Differential Revision: D88066375

Pulled By: javache

fbshipit-source-id: aec56b2d44dc8260e9b0496c2ec5fc49e70ca9cf
Summary:
Pull Request resolved: react#54746

# Changelog: [Internal]

Reviewed By: sbuggay

Differential Revision: D88086588

fbshipit-source-id: 0c8fd94d1c66dba36b702373d8914cdcf2247b84
react#54747)

Summary:
Pull Request resolved: react#54747

Cleans up the `enableVirtualViewClippingWithoutScrollViewClipping` feature flag and enables the new behavior.

Changelog:
[Android][Changed] - `VirtualView` not clips subviews even if its parent `ScrollView` does not have `removeClippedSubviews` enabled.

Reviewed By: lunaleaps

Differential Revision: D88096820

fbshipit-source-id: d61061f3612b048ed22be33f48e24511c7e010d2
Summary:
Pull Request resolved: react#54742

Typo in screenshots event.

Changelog: [Internal]

Reviewed By: hoxyq

Differential Revision: D87936870

fbshipit-source-id: 670cde2ed107bd01b374a7b24917a37336e670c0
Summary:
Pull Request resolved: react#54743

Instead of creating another buffer, optionally include screenshots if they are enabled in `FrameTimingSequence`.

Changelog: [Internal]

Reviewed By: hoxyq

Differential Revision: D87936871

fbshipit-source-id: c35ef7776f6f51281213664f98e13db0a2bbab42
…s on animation backend (react#54698)

Summary:
Adds support for transform, border radius, and background color props to be handled by shared animation backend.

[General][Added] - Added support for transform, border radius, and background color props to Animation Backend.

## Changelog:

<!-- Help reviewers and the release process by writing your own changelog entry.

Pick one each for the category and type tags:

[ANDROID|GENERAL|IOS|INTERNAL] [BREAKING|ADDED|CHANGED|DEPRECATED|REMOVED|FIXED|SECURITY] - Message

For more details, see:
https://reactnative.dev/contributing/changelogs-in-pull-requests
-->

[INTERNAL]

Pull Request resolved: react#54698

Test Plan: Checked on reanimated example app.

Reviewed By: zeyap

Differential Revision: D87922886

Pulled By: coado

fbshipit-source-id: 1fe554cba514b74c3687f09be0def0496e4c374a
Summary:
Those stacktraces are no longer necessary because venice has been rolled out to 100% since a long time. They create noise on logcat as they appear as a crash in red, but they're not.

Created from CodeHub with https://fburl.com/edit-in-codehub

Changelog:
[Internal] [Changed] -

Reviewed By: javache

Differential Revision: D88075839

fbshipit-source-id: 83f2c5fe6b3e500c5a0dc12a81ded394b5fca31a
Summary:
Pull Request resolved: react#54741

Changelog: [Internal] - Update `react-native/debugger-frontend` from 7f25433...4631a6d

Resyncs `react-native/debugger-frontend` from GitHub - see `rn-chrome-devtools-frontend` [changelog](react/react-native-devtools-frontend@7f25433...4631a6d).

### Changelog

| Commit | Author | Date/Time | Subject |
| ------ | ------ | --------- | ------- |
| [4631a6d5d](react/react-native-devtools-frontend@4631a6d5d) | Ruslan Lesiutin (28902667+hoxyq@users.noreply.github.com) | 2025-12-01T18:05:33Z | [feat(timeline): display newly supported options for Timeline (microsoft#224)](react/react-native-devtools-frontend@4631a6d5d) |

Reviewed By: huntie

Differential Revision: D88082538

fbshipit-source-id: 2a7f178415915cfea7739efa99d21e5d2b3d178d
Summary:
Pull Request resolved: react#54754

Enables the standalone app shell for React Native DevTools by default.

We preserve + document this flag as an opt-out (allowing Frameworks to override this behaviour if needed).

Changelog: [Internal]

Reviewed By: motiz88

Differential Revision: D88161573

fbshipit-source-id: 64ee191dcead4e639bb3067bc9e715b1c8cdf80d
Summary:
Pull Request resolved: react#54756

Move blanket `packages/**/dist/` rule added in D77591742 into scoped `.gitignore` for `debugger-shell`.

This was preventing new files added to `packages/debugger-frontend/dist/` from being staged.

Changelog: [Internal]

Reviewed By: cortinico

Differential Revision: D88172611

fbshipit-source-id: 428fffd46f5f76ddf422a41b57e7b47446c40e43
Summary:
Pull Request resolved: react#52624

Add a new optional interface `ISerialization` to JSI. This interface
contains four APIs to clone objects from one runtime to another runtime.

Four methods are introduced in this interface:
* `serialize`: Takes in a JS value (represented by `jsi::Value`) and
serialize the value into an opaque `Serialized` object.

* `deserialize`: Takes in the `Serialized` object created by `serialize`
and deserialize it into the runtime, returning the created JS value.

* `serializeWithTransfer`: Takes in a JS value (represented by
`jsi::Value`) and a `transferList` (a `jsi::Array` of `jsi::Value`s).
This will serialize the `value` into an opaque `Serialize` object and
transfer the ownership of everything in `transferList` into the
`Serialized` object. If any non-transferable values is passed into the
transferList, this will throw. This `Serialized` object must only be
deserialized once.

* `deserializeWithTransfer`: Takes in the `Serialized` object created by
`serializeWithTransfer`. It will deserialize the object into the runtime
and  any value owned by the `Serialized` object will now be owned by the
current runtime. It will return an `jsi::Array` where the first value is
the deserialized value passed into `serializeWithTransfer`, followed by
all transferred values.

The lifetime of the `Serialized` object created from the APIs is
independent of the original object and runtime.

Note that objects can only be copied into another runtime instance of
the same type. For example, a serialized object produced by the Hermes
runtime can only be deserialized by another Hermes runtime.

Changelog: [Internal]

Reviewed By: dannysu, fbmal7

Differential Revision: D76547681

fbshipit-source-id: 0c774f3f469c26d3894cac179f4ce5e32cf5ad7f
Summary:
Pull Request resolved: react#54740

## Changelog:

[Internal] [Changed] - Remove feature flag cxxNativeAnimatedRemoveJsSync

It's always rolled out with cxx animated and we haven't found new issues with it

Reviewed By: lenaic

Differential Revision: D88082232

fbshipit-source-id: 3b9f29c20a7f41cd1d826257a9e2c42c11fcee0f
Summary:
X-link: facebook/hermes#1844

X-link: facebook/hermes#1843

Pull Request resolved: react#54569

Changelog: [Internal]

Two "hermes.h" under different prefixes (jsi/hermes.h and
hermes/hermes.h) are a bit confusing. Let's rename the JSI
header to "hermes-interfaces.h".

Reviewed By: tmikov

Differential Revision: D87200512

fbshipit-source-id: e61251f791788c8d6787ee29762c4aa76d99b68a
Summary:
Pull Request resolved: react#54744

Adds CDP event generation for screenshots.

Changelog: [Internal]

Reviewed By: hoxyq

Differential Revision: D87936872

fbshipit-source-id: 91fee068e3a55c212e7df83990d7836b04efa01b
Summary:
This replaces `glob@^7.0.0` with `tinyglobby@^0.2.15`. `glob@7` has been deprecated for a while and some versions after had security notices released for them. The plan is to backport this PR to `0.81.x` and onwards.

> [!NOTE]
> This is a stopgap solution until `fs.glob` becomes generally available with the EOL of Node v20

Succeeds:
- react#54669
- react#48875

## Changelog:

[GENERAL] [SECURITY] - Replace `glob@^7.0.0` with `tinyglobby@^0.2.15`

Pull Request resolved: react#54737

Test Plan:
- Ran all modified commands manually and `pod install in `rn-tester`
- NOTE: `ios-prebuild`-related scripts haven't been run manually yet

Reviewed By: robhogan

Differential Revision: D88069145

Pulled By: huntie

fbshipit-source-id: 0c455342a4c6d1d6605fd09fe47b418e5d751491
Summary:
When two different React Native libraries export a package class with the same name but in different namespaces, the generated PackageList.java causes a compilation error due to ambiguous class references.

The current autolinking generates:
``` kotlin
import com.pikachu.NativeStorage;
import com.snowfox.NativeStorage;  // ❌ Compile error: NativeStorage is already defined

public ArrayList<ReactPackage> getPackages() {
    return new ArrayList<>(Arrays.<ReactPackage>asList(
        new MainReactPackage(mConfig),
        new NativeStorage(),  // ❌ Ambiguous reference
        new NativeStorage()   // ❌ Ambiguous reference
    ));
}
```
Solution:-
Use fully qualified class names (FQCN) instead of imports:
``` kotlin
// No imports needed
public ArrayList<ReactPackage> getPackages() {
    return new ArrayList<>(Arrays.<ReactPackage>asList(
        new MainReactPackage(mConfig),
        // pikachu-storage
        new com.pikachu.NativeStorage(),
        // snowfox-storage
        new com.snowfox.NativeStorage()
    ));
}
```

## Changelog:

<!-- Help reviewers and the release process by writing your own changelog entry.

Pick one each for the category and type tags:

[ANDROID|GENERAL|IOS|INTERNAL] [BREAKING|ADDED|CHANGED|DEPRECATED|REMOVED|FIXED|SECURITY] - Message

For more details, see:
https://reactnative.dev/contributing/changelogs-in-pull-requests
-->
[ANDROID][FIXED]- Use FQCN to avoid collisions

Pull Request resolved: react#54736

Test Plan:
Updated test.
Also tested on my app and RN tester
<img width="687" height="223" alt="image" src="https://github.com/user-attachments/assets/fe54d0c3-4ab4-4d74-a98f-97243851e8c4" />

CI will tell if build fails

Reviewed By: mdvacca

Differential Revision: D88157961

Pulled By: cortinico

fbshipit-source-id: 5fe072dcaed177af1036ca88d55870081a3f4205
Summary:
Pull Request resolved: react#54745

Generates and emits screenshots if enabled by DevTools

Changelog: [Internal]

Reviewed By: hoxyq

Differential Revision: D88084756

fbshipit-source-id: 54f8a41f46836360952bee098ad6dda6c41ee537
Summary:
Pull Request resolved: react#54765

# Changelog: [Internal]

Looking at the Chrome DevTools Frontend code, the `BeginFrame` trace event represents the actual start of the frame sequence, not the expected one.

Using inteded timestamp doesn't seem right here:
 - [INTENDED_VSYNC_TIMESTAMP](https://developer.android.com/reference/android/view/FrameMetrics#INTENDED_VSYNC_TIMESTAMP)
 - [VSYNC_TIMESTAMP](https://developer.android.com/reference/android/view/FrameMetrics#VSYNC_TIMESTAMP)

INTENDED_VSYNC_TIMESTAMP description says:
> The intended start point for the frame. If this value is different from VSYNC_TIMESTAMP, there was work occurring on the UI thread that prevented it from responding to the vsync signal in a timely fashion.

Reviewed By: sbuggay

Differential Revision: D88088882

fbshipit-source-id: 0980c4952b7b71dd8ea2333334f0ed89f6ecedb1
Summary:
Pull Request resolved: react#54768

# Changelog: [Internal]

In Chrome, frame trace events actually have a dedicated `disabled-by-default-devtools.timeline.frame` category.

Reviewed By: sbuggay

Differential Revision: D88274111

fbshipit-source-id: 1166b757414fd2ffe9931f24885d93f5324a0353
Summary:
Pull Request resolved: react#54769

# Changelog: [Internal]

In Chrome, this event has `disabled-by-default-devtools.timeline` category. This also implies that this event won't be displayed on a timeline by default, which is what we want.

Reviewed By: sbuggay

Differential Revision: D88274243

fbshipit-source-id: c8f3dc1546fdff7219a293a4a559bbb70dc2d4f1
Tighten merged type annotations and preserve macOS compatibility behavior without changing runtime semantics.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Replace the remaining polynomial regex with a linear delimiter parser while preserving frame semantics.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Remove the obsolete moving-nightly Hermes preinstall and refresh the lockfile against the rebased 0.84 package graph.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Keep Metro package extensions on the 0.84 line, restore merge-base-aware Hermes fallback, and preserve shell-safe XCFramework probing.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Keep CocoaPods on merge-base-compatible source-built Hermes and regenerate the RNTester pod lock after rebasing.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Keep UIKit-only presentation helpers off macOS and prevent codegen from traversing pnpm dependency symlinks or generated trees.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Exclude the generic C++ View platform when building the macOS SPM target so host event declarations and implementations remain coherent.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Comment thread .github/scripts/publishing-contract.mjs Fixed
Comment thread .github/scripts/__tests__/publishing-workflow.test.mjs Fixed
Preserve validated per-branch source and corrected stack dependencies.
Preserve validated per-branch source and corrected stack dependencies.
Comment on lines +120 to +123
const run = command => execFileSync('bash', ['--noprofile', '--norc', '-eo', 'pipefail', '-c',
`node_path=$1\nyarn_path=$2\nyarn() { "$node_path" "$yarn_path" "$@"; }\n${command}`,
'publishing-workflow', process.execPath, yarnPath],
{cwd: root, env, encoding: 'utf8', stdio: 'pipe'});
Preserve package versions and the linear stack; change only equivalent executable-path metadata.
Preserve package versions and the linear stack; change only equivalent executable-path metadata.
Apply the independently reviewed branch-specific CI follow-up while preserving public-registry locks and the linear stack.

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.