Repository navigation
chore(⬆️): upgrade the example to Reanimated 4.6.0 and worklets 0.12.2 - #547
Merged
wcandillon merged 5 commits intoOct 16, 2026
Conversation
Worklets 0.12 stops the UI frame loop while the app is in the background (software-mansion/react-native-reanimated#10196). It needs React Native 0.83, so the example moves to 0.83.10 with React 19.2.3, the @react-native/* 0.83.10 tooling, react-native-test-app 5.4.13 and Gradle 9.0.0. - The Expo template keeps its dependencies in its own node_modules: @react-native/metro-config resolves InitializeCore from its own location, so the root has to hold the example's React Native. - The docs' twoslash samples resolve from the docs app, which declares the packages they import. - TransparencyDemo uses StyleSheet.absoluteFill.
React Native 0.83 ships fmt 12.1.0 itself, and its RCT-Folly podspec is the override's, so the Podfiles no longer copy them over its own.
pod install with React Native 0.83.10, Reanimated 4.6.0, worklets 0.12.2 and react-native-test-app 5.4.13.
wcandillon
self-requested a review
October 16, 2026 12:01
wcandillon
approved these changes
Oct 16, 2026
YevheniiKotyrlo
added a commit
to YevheniiKotyrlo/react-native-webgpu-evidence
that referenced
this pull request
Oct 16, 2026
Contributor
Author
Device measurement — before / after
This PR — 0.0–0.1% after
Release builds of the example opening Reanimated's UI-thread screen on an opaque canvas, installed in the order |
wcandillon
approved these changes
Oct 16, 2026
|
🎉 This PR is included in version 0.16.1 🎉 The release is available on:
Your semantic-release bot 📦🚀 |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.

Problem
The example keeps its UI frame loop running after the app goes to the background: worklets 0.8.3's
WorkletsModulenever registers for host lifecycle events (software-mansion/react-native-reanimated#10196, fixed in worklets 0.12.0). On a Mi MIX 3 (Android 10), the Reanimated screen keeps 20–22% of a core busy in the background. Every worklets release with the fix needs React Native 0.83 or later, and the example is on 0.81.4.Solution
@react-native/*0.83.10 tooling, react-native-test-app 5.4.13 and Gradle 9.0.0, and to Reanimated 4.6.0 and worklets 0.12.2; the docs andpackages/webgpu's dev dependencies follow. The library's peer ranges are unchanged.apps/expo-webgpukeeps its dependencies in its ownnode_modules(installConfig.hoistingLimits: "workspaces").@react-native/metro-configresolvesreact-native/Libraries/Core/InitializeCorefrom its own location, so the root has to hold the example's React Native; with the Expo template's 0.86.3 hoisted there instead, the example's bundle failed ("Unable to determine event arguments for onModeChange"). React Native, React, Reanimated and worklets now have one copy each at the root.vfsRoot), which declares the packages they import, as it already doestypegpu; from the repo root, the vision-camera sample failed with TS2307.TransparencyDemousesStyleSheet.absoluteFill: React Native 0.83's types no longer declareabsoluteFillObject.fmtandRCT-Follypodspecs over React Native's. React Native 0.83 ships fmt 12.1.0 itself (Bump fmt to 12.1.0 to fix xcode 26.4 react/react-native#56099) and the same Folly podspec, andpod installwithout the copy resolves both with the checksumsmain's lock records.react-native-skia's example gets the same upgrade in wcandillon/react-native-skia#4254.
Verification
On a Mi MIX 3 (Android 10), release builds, the Reanimated screen keeps 20.4–21.9% of a core busy after
HOMEonmainand 0.0–0.1% with this branch (measurement).yarn lint0 (rewrites nothing) ·yarn tsc0 · package and web-template builds 0 ·yarn test:plugin0 ·yarn check-dawn0 ·yarn build:docs0CI's Android e2e step on an API 35 emulator, this branch and
mainone after the other: 219 of 221 passed on both, the YUV cases ofExternalTextureColorSpaceandNativeBufferWrapperfailing on both. CI's iOSxcodebuild(Debug, iOS Simulator SDK) afterpod install:BUILD SUCCEEDED, built without debug symbols to fit the disk of the Mac I built on.Known limits
The macOS
Podfile.lockis left as onmain, which still records React Native 0.81.4, Reanimated 4.2.1 and worklets 0.7.1; CI builds no macOS app.