Skip to content

[MOO-2499]: Upgrade React 19.3 and React Native 0.88 - #236

Open
MxKevinBeqo wants to merge 14 commits into
mendix:masterfrom
MxKevinBeqo:moo/MOO-2499-rn-088
Open

MxKevinBeqo wants to merge 14 commits into
mendix:masterfrom
MxKevinBeqo:moo/MOO-2499-rn-088

Conversation

@MxKevinBeqo

@MxKevinBeqo MxKevinBeqo commented Oct 5, 2026 •

Copy link
Copy Markdown

This PR upgrades to React 19.3 and React Native 0.88.

Upgrade the Pluggable Widgets Tools and the widget generator templates to
React Native 0.88 (RC) and React 19.3. (MOO-2499)

- bump react-native, @react-native/babel-preset, react, react-dom,
  react-test-renderer and the React types
- use @react-native/jest-preset for native tests, since React Native no
  longer ships its own Jest preset
- resolve modules with "bundler" in the base tsconfig, since React Native
  only exposes its types through package exports
- add react-native-worklets and @react-native-vector-icons/common to the
  native externals and stop terser from removing directives
- update the migration script, generator templates and command tests

BREAKING CHANGE: widgets are upgraded to React Native 0.88 and React 19.3.
The deprecated react-native-vector-icons package is no longer an external
of native widgets; use the scoped @react-native-vector-icons/* packages.
@MxKevinBeqo
MxKevinBeqo requested a review from a team as a code owner October 5, 2026 11:24
@MxKevinBeqo MxKevinBeqo changed the title docs: add changelog entries for React Native 0.88 upgrade [MOO-2499]: Upgrade React 19.3 and React Native 0.88 Oct 5, 2026
@weirdwater weirdwater self-assigned this Oct 5, 2026
On Windows runners the temp directory can be an 8.3 short path (RUNNER~1).
Node resolved modules through that short path while Jest resolved them
through the long path, so React was loaded twice and the generated native
widget tests failed with "Cannot read properties of null (reading
'useReducer')".
Comment thread packages/pluggable-widgets-tools/tsconfig.json

module.exports = {
preset: "react-native",
preset: dirname(require.resolve("@react-native/jest-preset")),

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Shouldn't jest be able to resolve the preset on its own with just the name?

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

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

You are right, I retested with name and it is building ok. Will have to retest on the Windows pipeline again after changing this, since I had some resolution issues there. Thank you!

@rollup/plugin-typescript requires tslib at build time but only lists it as
an optional peer dependency. It used to be installed by chance through
another package, which is no longer the case, so building a TypeScript
widget could fail with "Could not find module 'tslib'".
- drop the unused react-hot-loader path mapping from the tools tsconfig
- resolve the native Jest preset by name instead of by absolute path
This reverts commit f263b1b. Resolving the native Jest preset by name lets
Jest load it from the real path, which should also avoid loading React twice
when the temp directory is an 8.3 short path on Windows runners.
Restore the react-native-vector-icons external and drop its breaking change
note from the changelog. Removing the old package name is unrelated to the
React Native 0.88 upgrade and can be done separately.
@MxKevinBeqo

Copy link
Copy Markdown
Author

Thanks for reviewing this @weirdwater , I appreciate it! I addressed the notes.

As the PR description mentions, we will wait for the 12th of October until RN v0.88 releases and then update the dependencies -> rerunning the CI. Until then, I am moving this to Draft at the moment.

@MxKevinBeqo
MxKevinBeqo marked this pull request as draft October 6, 2026 11:25
Replace the 0.88.0-rc.3 pins for react-native, @react-native/babel-preset and @react-native/jest-preset with 0.88.0, including the generator templates and expected outputs, the command-tests and the migration constants.
@MxKevinBeqo
MxKevinBeqo marked this pull request as ready for review October 16, 2026 09:49
Comment thread packages/pluggable-widgets-tools/test-config/jest.native.config.js Outdated
Comment thread packages/pluggable-widgets-tools/configs/rollup.config.native.mjs
MxKevinBeqo and others added 2 commits October 19, 2026 10:20
…native.mjs

Co-authored-by: Yogendra Shelke <yogendrashelke1992@gmail.com>
…e.config.js

Co-authored-by: Yogendra Shelke <yogendrashelke1992@gmail.com>
Comment thread packages/pluggable-widgets-tools/test-config/jest.native.config.js Outdated
…e.config.js

Co-authored-by: Yogendra Shelke <yogendrashelke1992@gmail.com>
@MxKevinBeqo

Copy link
Copy Markdown
Author

Hey @weirdwater , all the changes are in now, together with the official Rn v0.88, so please whenever you get the chance to re-review the new commits 🙇 .

Comment thread packages/pluggable-widgets-tools/tsconfig.json
Comment thread packages/pluggable-widgets-tools/CHANGELOG.md Outdated
dereference: true,
filter: source => {
const relativePath = relative(sourcePath, source);
return (

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Is the license glob/pattern no longer relevant?

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

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

From what I checked, the old copy filter was taking in account all files with an extensions (first filter), and then the LICENSE_GLOB to match with license files which have no extension.

One side note which I had to verify with Claude was that now it is a exclude-only filter which means some files like Makefile or bin scripts can also be copied. Should be harmless in theory but if you think differently please let me know.

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

I guess that is up to your team to decide, considering this is code path is only used for native widgets. If it is desirable to continue only copying files with extensions and licenses I would modify the predicate to check for these properties as well.

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

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants