Integrate RN 0.85.0-nightly-20260128-36f07a1b2#16245
Conversation
Includes: - Full nightly integration with conflict resolution - Fix C++ compile errors from nightly integration - Fix AnimationBackend linker errors from nightly integration - Fix X86 build (suppress C4018 signed/unsigned mismatch in MapBuffer.cpp) - Sync stale copy overrides in @react-native/tester - Update yarn.lock and add change files Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- snapshotPages Text 33: Add new FiraCode font variant examples - TextComponentTest borders: Adjust visual tree sizes (138→139, 20→19) - TouchableComponentTest: Add PositionInSet/SizeofSet accessibility props Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…tly pinning The nightly fixup regex in creaternwlib.cmd and creaternwapp.cmd was replacing all @react-native/*-config and *-preset package versions with the exact nightly version. However, @react-native/jest-preset was not published until Feb 2026 (earliest: 0.85.0-nightly-20260219), while our target nightly is from Jan 2026 (0.85.0-nightly-20260128-36f07a1b2). This caused yarn install to fail with 'No candidates found'. Fix: Add a negative lookahead (?!jest-preset) to skip this package. It will remain at the 'nightly' dist-tag which resolves to a valid version. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
|
/azp run |
|
Azure Pipelines successfully started running 1 pipeline(s). |
| if (m_state) { | ||
| auto &observerCoordinator = m_state->getData().getImageRequest().getObserverCoordinator(); | ||
| observerCoordinator.removeObserver(*m_imageResponseObserver); | ||
| observerCoordinator.removeObserver(m_imageResponseObserver); |
There was a problem hiding this comment.
How is this change related to the RN upgrade?
In general, what changes in the new RN base version that would impact this project's native code?
There was a problem hiding this comment.
The upstream ImageResponseObserverCoordinator API changed between nightlies 20260114 and 20260128 -addObserver/removeObserver now take std::shared_ptr instead of const ImageResponseObserver&. Since m_imageResponseObserver is already a shared_ptr, we just pass it directly now rather than dereferencing it.
| <ClCompile Include="$(ReactNativeDir)\ReactCommon\react\renderer\mounting\internal\CullingContext.cpp" /> | ||
| <ClCompile Include="$(ReactNativeDir)\ReactCommon\react\renderer\mounting\internal\sliceChildShadowNodeViewPairs.cpp" /> | ||
| <ClCompile Include="$(ReactNativeDir)\ReactCommon\react\renderer\mapbuffer\MapBuffer.cpp" /> | ||
| <ClCompile Include="$(ReactNativeDir)\ReactCommon\react\renderer\mapbuffer\MapBuffer.cpp" DisableSpecificWarnings="4267;4018;%(DisableSpecificWarnings)" /> |
There was a problem hiding this comment.
Why are these warnings disabled?
What's the context?
There was a problem hiding this comment.
The new nightly's MapBuffer.cpp has a signed/unsigned comparison (int32_t vs size_t) that triggers C4018 and C4267, which our Warnings.props treats as errors (SDL-mandatory). Since this is upstream code we don't own, suppressing at the file level felt like the right approach -similar to how we already suppress 4715, 4251, 4800, etc. at the project level for other upstream warnings.
There was a problem hiding this comment.
Suppressing some SDL warnings may cause the BinSkim breaks in CI. It is better to see through the code how we suppress the warnings with the same number in other places. We often have to create a local copy of these files and fix the code.
There was a problem hiding this comment.
Thanks. Updated the code based on your pointers regarding the TEMP_UntilReactCommonUpdate changes.
There was a problem hiding this comment.
Please provide context about changes in this file.
There was a problem hiding this comment.
My understanding is that - Upstream removed the ReactNativeFeatureFlags.reduceDefaultPropsInText() feature flag between nightlies 20260114 and 20260128 - they kept only the "reduced default props" path and also moved from React.forwardRef to Flow's component syntax (and renamed TextAncestor → TextAncestorContext). This fork just syncs with those structural changes while keeping our Windows-specific props (aria-multiselectable, aria-required, aria-level, accessibilityPosInSet, accessibilitySetSize, etc.). The big diff is mostly because ~400 lines of duplicated conditional code went away.
There was a problem hiding this comment.
Please provide context about changes in this file.
There was a problem hiding this comment.
Same as Text.windows.js - just syncing with the upstream feature flag removal and new component syntax, while keeping the Win32-specific accessibility props intact, to the best of my understanding
| testID?: string, | ||
| hideFilterPills?: boolean, | ||
| page: 'examples_page' | 'components_page' | 'bookmarks_page', | ||
| sections: $ReadOnlyArray<SectionData<T>>, |
There was a problem hiding this comment.
I am just curious why the '$' was removed in front of the type names. It is supposed to be Flow, not TypeScript. Could you check the corresponding non-Windows .js file to see the right synatx that we must use.
There was a problem hiding this comment.
Good point. I checked the upstream non-Windows file (packages/rn-tester/js/components/RNTesterExampleFilter.js in facebook/react-native main - https://github.com/react/react-native/blob/main/packages/rn-tester/js/components/RNTesterExampleFilter.js) and it now uses ReadonlyArray without the $. It looks like Meta has been migrating from the Flow utility type $ReadOnlyArray to the built-in ReadonlyArray. So this change is just keeping our win32 override in sync with what upstream brought in with this nightly.
Instead of suppressing SDL-mandatory warnings (which could break BinSkim), create a local patched copy in TEMP_UntilReactCommonUpdate with proper static_casts to fix signed/unsigned comparison warnings in upstream code. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Description
Integrate RN Nightly Build 0.85.0-nightly-20260128-36f07a1b2 - This PR integrates React Native Windows with a newer upstream React Native nightly build (Jan 28, 2026), advancing from the previous checkpoint of Jan 14, 2026. RNW is currently several months behind the latest RN nightly, so we are catching up in +14 day increments. This is the first PR in a series of catch-up integrations to bring RNW back to parity with the latest RN nightlies.
Please note:
This is my first attempt at RN → RNW integration. I used the integration script as a starting point and leveraged AI to help resolve merge conflicts, build issues, and linker errors, while reviewing and validating the resulting changes throughout the process.
In addition to ensuring the solution builds successfully, I validated the Playground app, including most controls and scenarios. Paid particular attention to the Text page, which had significant merge conflicts, and everything appears to be functioning correctly based on my testing.
Given the scope of the changes and the amount of conflict resolution involved, I'd appreciate a thorough review - especially for packages/@office-iss/react-native-win32/src-win/Libraries/Text/Text.win32.js to help catch anything that may have been inadvertently missed. Adding multiple reviewers to provide broader coverage across the different areas impacted by this integration. Thank you for taking a look.
Integration Details:
Commit range: react/react-native@f15985f...36f07a1
Type of Change
Why
Staying current with upstream ensures we pick up bug fixes, API changes, and performance improvements from core React Native, and reduces the risk of large, painful integrations later.
What
Integrate RN Nightly Build 0.85.0-nightly-20260128-36f07a1b2
Screenshots
N/A
Testing
Javascript validation:
⚠️ Flow — Version mismatch (pre-existing): config requires ^0.298.0, installed version is 0.296.1
✅ yarn build (lage monorepo) — All packages pass
✅ yarn lint (ESLint) — 0 errors (21 pre-existing warnings)
✅ node --check on all resolved files — No syntax errors
✅ No conflict markers in repo — Confirmed via grep
✅ Metro bundle loads successfully — JS bundle served at localhost:8081
Native Build Validation:
✅ NuGet restore — Passed
✅ ReactCommon.vcxproj compile — Passed
Included MapBuffer C4267 suppression
Included AnimationBackend source files
✅ Microsoft.ReactNative.vcxproj compile — Passed
✅ Microsoft.ReactNative.vcxproj link — Passed
AnimationBackend symbols resolved successfully
✅ Playground-Composition.vcxproj compile — Passed
✅ Full solution build — Build succeeded
Playground App Validation:
✅ App launch (playground-composition) — Successful
✅ Metro bundler — Serving JavaScript correctly
✅ File → Open JavaScript File → RNTester samples — Loads successfully
Changelog
Should this change be included in the release notes: no
Microsoft Reviewers: Open in CodeFlow
Microsoft Reviewers: Open in CodeFlow