Skip to content

Integrate RN 0.85.0-nightly-20260128-36f07a1b2#16245

Open
anuagragith wants to merge 5 commits into
mainfrom
integrate-0.85.0-nightly-20260128-36f07a1b2-v3
Open

Integrate RN 0.85.0-nightly-20260128-36f07a1b2#16245
anuagragith wants to merge 5 commits into
mainfrom
integrate-0.85.0-nightly-20260128-36f07a1b2-v3

Conversation

@anuagragith

@anuagragith anuagragith commented Jun 10, 2026

Copy link
Copy Markdown
Contributor

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:

  • Previous version: 0.85.0-nightly-20260114-f15985f4f
  • New version: 0.85.0-nightly-20260128-36f07a1b2
  • Date range: 2026-01-14 → 2026-01-28

Commit range: react/react-native@f15985f...36f07a1

Type of Change

  • New feature (non-breaking change which adds functionality)

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:
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
⚠️ Flow — Version mismatch (pre-existing): config requires ^0.298.0, installed version is 0.296.1

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

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>
Anukrati Agrawal and others added 3 commits June 10, 2026 15:34
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>
@anuagragith anuagragith requested a review from a team as a code owner June 11, 2026 19:28
@anuagragith

Copy link
Copy Markdown
Contributor Author

/azp run

@azure-pipelines

Copy link
Copy Markdown
Contributor
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);

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

Comment thread vnext/ReactCommon/ReactCommon.vcxproj Outdated
<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)" />

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why are these warnings disabled?
What's the context?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks. Updated the code based on your pointers regarding the TEMP_UntilReactCommonUpdate changes.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please provide context about changes in this file.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please provide context about changes in this file.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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>>,

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

@anuagragith anuagragith Jun 12, 2026

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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>
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.

3 participants