You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
CI for merge branches — Add *-merge to workflow triggers (microsoft-pr.yml, test-all.yml, publish-bumped-packages.yml, codeql-analysis.yml) so CI runs on 0.83-merge
** Verify focus changes ** - Added upstream in core, but we need to make sure macOS didn't regress
Hermes V1 support — From 0.83+, Hermes is published separately (com/facebook/hermes/hermes-ios) with its own versioning. Add version.properties, update hermes-engine.podspec and hermes-utils.rb to support RCT_HERMES_V1_ENABLED env var and new Maven coordinates, with findMatchingHermesVersion() fallback
RCTUIKit Swift module — RCTUIKit.h can't be imported from Swift (needed by RCTSwiftUIContainerView.swift). Already broken out into its own module on main, needs rebase into 0.83-merge
Codegen package name constant — react-native.config.js:192 hardcodes 'react-native-macos' instead of using the REACT_NATIVE constant from constants.js. Follow up on core
Audit upstream breaking changes — Review 0.83 release notes for breaking changes and update macOS-specific APIs as needed
RNTester validation — Verify RNTester builds and runs on macOS, pod install works (both legacy and V1 Hermes)
react-native-test-app integration — Test RNTA compatibility with 0.83 changes
Merge 0.83-merge → main — Final review, all CI green, merge
I spent time validating 0.83-merge end-to-end (RNTester pod install cycle on macOS) and opened a batch of PRs against the unchecked items in this issue. Filing them together so the scope is visible at a glance.
fix(macos): expose React-RCTUIKit module to RCTSwiftUI Swift consumers #2958 — fix(macos): expose React-RCTUIKit module to RCTSwiftUI Swift consumers
Closes "RCTUIKit Swift module". The module-ification from refactor: move RCTUIKit into a separate module #2847 was already in 0.83-merge via the upstream pull; what was missing was the consumer-side wiring on RCTSwiftUI — s.dependency "React-RCTUIKit" in the podspec + import React_RCTUIKit in the Swift, dropping the now-redundant RCTPlatformView / RCTUIColor Swift typealiases.
RCTViewComponentView.mmblur() was calling [[self window] resignFirstResponder] — silent no-op on NSWindow. Fixed to makeFirstResponder:nil, mirroring the working pattern in RCTTextInputComponentView.mm.
RCTMountingManager.mm Fabric sendAccessibilityEvent("focus") had no #else branch on macOS — AccessibilityInfo.setAccessibilityFocus was silently dropped. Added the macOS path mirroring RCTAccessibilityManager.mm's
old-arch implementation.
RCTVirtualViewComponentView.mm had no macOS hook equivalent to iOS's focusItemsInRect: for keyboard nav reaching a hidden virtual view. Partial fix: acceptsFirstResponder + accessibilityHitTest: unhide on entry. Fully
solving Tab-into-fully-hidden requires changing the hide strategy from self.hidden = YES to something that keeps the view in the responder chain — flagged as a follow-up.
fix(rn-tester): restore RNTesterPods.xcodeproj/project.pbxproj on 0.83-merge #2960 — fix(rn-tester): restore RNTesterPods.xcodeproj/project.pbxproj on 0.83-merge
Unblocks "RNTester validation". pod install on 0.83-merge currently fails with [!] The plist file at path .../project.pbxproj doesn't exist before reaching any install step. The file is tracked on main (blob 90e6c295…)
but absent on 0.83-merge — most likely dropped during the upstream merge and then held out by the existing .gitignore rule on /packages/rn-tester/**/*.xcodeproj. PR restores it via force-add; nothing else changes. After this, pod install resolves 86 deps / 85 installed.
Item that may already be done
"Audit upstream breaking changes" — a diff sweep of v0.82.0...v0.83.0 upstream cross-referenced with the current 0.83-merge tree suggests this is already absorbed:
GenerateModuleCpp.js removal + tests + snapshots: no callsites remain in the fork.
ReactFabricHostComponent.js consolidated into ReactFabricPublicInstance.js: standalone file already gone.
AppDelegate header reorg + devMenuConfiguration parameter threading: RCTReactNativeFactory.h:120 has the property; RCTRootViewFactory.{h,mm} carries the new viewWithModuleName:...:devMenuConfiguration: signature; RCT_REMOVE_LEGACY_ARCH guards are in place across RCTAppSetupUtils.mm and RCTReactNativeFactory.mm.
React 19.1 → 19.2 peer: packages/react-native/package.json already at "react": "^19.2.0".
The 8 JS files that carry [macOS] markers AND were also modified upstream (ViewNativeComponent.js, ScrollView.js, TextInput.js, AccessibilityInfo.js, ImageInjection.js, others) still warrant per-file three-way-merge spot
checks — happy to take that as a follow-up if useful.
Validation methodology
For each fix:
syntax/parse of the touched file (ruby -c, node --check) clean
The produced RNTester-macOS.app/Contents/Frameworks/hermesvm.framework is the V1-named binary (not legacy hermes.framework)
Validated with #2957 (Ruby static_h branch fix) + #2952 (your JS-side companion, still draft) + #2961 (fmt FMT_USE_CONSTEVAL=0 — required to get past the fmt compile on Xcode 26.x) + #2962 (RCTViewComponentView macOS guards — required
to get past the React-RCTFabric compile).
The remaining "from-source fallback" path (RCT_BUILD_HERMES_FROM_SOURCE=true with no Maven artifact) wasn't exercised since the Maven release was available. With #2952 + #2957 the branch logic is correct; the from-source build should
follow.
Suggest ticking "Hermes V1 support" on this issue once #2952 and #2957 land. The V1 plumbing in 0.83-merge is otherwise complete.
Audit upstream breaking changes — Thiago Vinhas (@tvinhas)'s audit comment above covers most of it. The 8 [macOS]-marked JS files he flagged for a three-way-merge spot check against upstream 0.83 haven't been checked yet. Picking this up next.
Activity
tvinhas commentedon May 13, 2026
I spent time validating
0.83-mergeend-to-end (RNTesterpod installcycle on macOS) and opened a batch of PRs against the unchecked items in this issue. Filing them together so the scope is visible at a glance.PRs
fix(codegen): use REACT_NATIVE constant for npmPackageName #2956 —
fix(codegen): use REACT_NATIVE constant for npmPackageNameCloses "Codegen package name constant".
fix(hermes): pick static_h vs main branch by RCT_HERMES_V1_ENABLED in hermes-utils.rb #2957 —
fix(hermes): pick static_h vs main branch by RCT_HERMES_V1_ENABLED in hermes-utils.rbCompanion to your draft fix(ci): align Resolve Hermes with HermesV1 / hermesvm.xcframework #2952. Mirrors the JS-side
static_hbranch selection onto the Rubyhermes_commit_at_merge_basepath, so the from-source fallback uses V1 Hermes source whenRCT_HERMES_V1_ENABLED=1. With fix(ci): align Resolve Hermes with HermesV1 / hermesvm.xcframework #2952 + fix(hermes): pick static_h vs main branch by RCT_HERMES_V1_ENABLED in hermes-utils.rb #2957landed, the V1 producer (CI) and consumer (podspec from-source) paths are aligned.
fix(macos): expose React-RCTUIKit module to RCTSwiftUI Swift consumers #2958 —
fix(macos): expose React-RCTUIKit module to RCTSwiftUI Swift consumersCloses "RCTUIKit Swift module". The module-ification from refactor: move RCTUIKit into a separate module #2847 was already in
0.83-mergevia the upstream pull; what was missing was the consumer-side wiring onRCTSwiftUI—s.dependency "React-RCTUIKit"in the podspec +import React_RCTUIKitin the Swift, dropping the now-redundantRCTPlatformView/RCTUIColorSwift typealiases.fix(macos): three Fabric focus regressions (blur, sendAccessibilityEvent, VirtualView) #2959 —
fix(macos): three Fabric focus regressions (blur, sendAccessibilityEvent, VirtualView)Closes "Verify focus changes" for three concrete regressions:
RCTViewComponentView.mmblur()was calling[[self window] resignFirstResponder]— silent no-op on NSWindow. Fixed tomakeFirstResponder:nil, mirroring the working pattern inRCTTextInputComponentView.mm.RCTMountingManager.mmFabricsendAccessibilityEvent("focus")had no#elsebranch on macOS —AccessibilityInfo.setAccessibilityFocuswas silently dropped. Added the macOS path mirroringRCTAccessibilityManager.mm'sold-arch implementation.
RCTVirtualViewComponentView.mmhad no macOS hook equivalent to iOS'sfocusItemsInRect:for keyboard nav reaching a hidden virtual view. Partial fix:acceptsFirstResponder+accessibilityHitTest:unhide on entry. Fullysolving Tab-into-fully-hidden requires changing the hide strategy from
self.hidden = YESto something that keeps the view in the responder chain — flagged as a follow-up.fix(rn-tester): restore RNTesterPods.xcodeproj/project.pbxproj on 0.83-merge #2960 —
fix(rn-tester): restore RNTesterPods.xcodeproj/project.pbxproj on 0.83-mergeUnblocks "RNTester validation".
pod installon0.83-mergecurrently fails with[!] The plist file at path .../project.pbxproj doesn't existbefore reaching any install step. The file is tracked onmain(blob90e6c295…)but absent on
0.83-merge— most likely dropped during the upstream merge and then held out by the existing.gitignorerule on/packages/rn-tester/**/*.xcodeproj. PR restores it via force-add; nothing else changes. After this,pod installresolves 86 deps / 85 installed.Item that may already be done
"Audit upstream breaking changes" — a diff sweep of
v0.82.0...v0.83.0upstream cross-referenced with the current0.83-mergetree suggests this is already absorbed:GenerateModuleCpp.jsremoval + tests + snapshots: no callsites remain in the fork.ReactFabricHostComponent.jsconsolidated intoReactFabricPublicInstance.js: standalone file already gone.devMenuConfigurationparameter threading:RCTReactNativeFactory.h:120has the property;RCTRootViewFactory.{h,mm}carries the newviewWithModuleName:...:devMenuConfiguration:signature;RCT_REMOVE_LEGACY_ARCHguards are in place acrossRCTAppSetupUtils.mmandRCTReactNativeFactory.mm.packages/react-native/package.jsonalready at"react": "^19.2.0".The 8 JS files that carry
[macOS]markers AND were also modified upstream (ViewNativeComponent.js,ScrollView.js,TextInput.js,AccessibilityInfo.js,ImageInjection.js, others) still warrant per-file three-way-merge spotchecks — happy to take that as a follow-up if useful.
Validation methodology
For each fix:
ruby -c,node --check) cleanpod installagainstpackages/rn-testeron0.83-merge(after fix(rn-tester): restore RNTesterPods.xcodeproj/project.pbxproj on 0.83-merge #2960's pbxproj restore lands locally) resolves cleanly with the new dependency edgesxcodebuildof theRNTester-macOSscheme is the natural next validation step once #2960 (or an equivalent) lands.Let me know if any of these want restructuring (split / narrowed scope / different framing) — happy to adapt.
tvinhas commentedon May 13, 2026
Quick follow-up on Hermes V1 support — completed end-to-end validation locally.
Result:
RCT_HERMES_V1_ENABLED=1works on0.83-mergefor macOS through the full build pipeline.pod installresolves:Installing hermes-engine 250829098.0.2 (was 0.14.0)— V1 Maven artifact downloads cleanlyPodfile.lockrecordshermes-engine (250829098.0.2)+hermes-engine/Pre-built (250829098.0.2)xcodebuild -scheme RNTester-macOS -configuration Debugcompletes with** BUILD SUCCEEDED **RNTester-macOS.app/Contents/Frameworks/hermesvm.frameworkis the V1-named binary (not legacyhermes.framework)Validated with #2957 (Ruby
static_hbranch fix) + #2952 (your JS-side companion, still draft) + #2961 (fmt FMT_USE_CONSTEVAL=0 — required to get past the fmt compile on Xcode 26.x) + #2962 (RCTViewComponentView macOS guards — requiredto get past the React-RCTFabric compile).
The remaining "from-source fallback" path (
RCT_BUILD_HERMES_FROM_SOURCE=truewith no Maven artifact) wasn't exercised since the Maven release was available. With #2952 + #2957 the branch logic is correct; the from-source build shouldfollow.
Suggest ticking "Hermes V1 support" on this issue once #2952 and #2957 land. The V1 plumbing in
0.83-mergeis otherwise complete.fix(codegen): use REACT_NATIVE constant for npmPackageName (#2956)
fix(macos): include React-RCTUIKit.podspec in package files array (#2963
fix(rn-tester): restore RNTesterPods.xcodeproj/project.pbxproj on 0.8…
fix(macos): align TouchableBounce focusable + AccessibilityInfo guard…
fix(macos): align TouchableBounce & AccessibilityInfo with upstream (#…
fix(macos): three Fabric focus regressions (blur, sendAccessibilityEv…
fix(codegen): use REACT_NATIVE constant for npmPackageName (#2956)
fix(macos): include React-RCTUIKit.podspec in package files array (#2963
fix(rn-tester): restore RNTesterPods.xcodeproj/project.pbxproj on 0.8…
fix(macos): align TouchableBounce & AccessibilityInfo with upstream (#…
tyrauber commentedon Sep 10, 2026
Status check on this list — most of it has already landed, just never got checked off here. Cross-referencing against the merged PRs:
self.hidden = YES.RCT_HERMES_V1_ENABLED=1to confirm end to end. Picking this up next.[macOS]-marked JS files he flagged for a three-way-merge spot check against upstream 0.83 haven't been checked yet. Picking this up next.pod installresolves. Full build-and-run validation across both Hermes modes is still open. Picking this up next.0.83-merge->main— feat: merge0.83-mergeinto main #2949, merged 2026-07-13. This issue's actual goal is done.