fix(perps): use native stack navigator to fix navigation jitter on navigation v6 cp-7.73.0 cp-7.74.0#28814
Conversation
|
CLA Signature Action: All authors have signed the CLA. You may need to manually re-run the blocking PR check if it doesn't pass in a few minutes. |
|
Review the following changes in direct dependencies. Learn more about Socket for GitHub.
|
🔍 Smart E2E Test Selection
click to see 🤖 AI reasoning detailsE2E Test Selection:
Tag selection rationale:
Performance Test Selection: |
There was a problem hiding this comment.
Cursor Bugbot has reviewed your changes and found 1 potential issue.
❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, have a team admin enable autofix in the Cursor dashboard.
Reviewed by Cursor Bugbot for commit 89b2e6e. Configure here.
|
|
✅ E2E Fixture Validation — Schema is up to date |



Description
React Navigation v6's JS-based
@react-navigation/stackcreates Reanimated shared values during render before the Fabric commit is finalized. Under the New Architecture (newArchEnabled=true, RN 0.76.9), this causes animations to fall back to the JS thread, producing a freeze-then-snap jitter when navigating into the Perps stack.The fix replaces
createStackNavigatorwithcreateNativeStackNavigator(from@react-navigation/native-stack@^6) forPerpsScreenStack. Native stack transitions run as pure UIKit (iOS) / Fragment (Android) animations with zero Reanimated/JS-thread involvement, eliminating the timing issue entirely.Concretely:
@react-navigation/native-stack@^6as a dependency (compatible with the existingreact-native-screens@3.37.0)createStackNavigator→createNativeStackNavigatorfor the inner Perps navigator inroutes/index.tsxcardStyle→contentStyle,animationEnabled: false→animation: 'none', and replaced JS-stack-onlyheader/headerLeftcallbacks withheaderShown/headerBackVisibleMainNavigator.jsto useTransitionPresets.SlideFromRightIOS, replacing the hand-rolledcardStyleInterpolatorthat usedAnimated.Value.interpolatewithlayouts.screen.width(which can be 0 on first render under Fabric's async layout)Changelog
CHANGELOG entry: Fixed jittery navigation transitions when opening Perps on devices running the New Architecture
Related issues
Fixes:
Manual testing steps
Screenshots/Recordings
Before
N/A
After
Screen.Recording.2026-04-17.at.03.06.54.mov
Screen.Recording.2026-04-17.at.03.10.02.mov
Pre-merge author checklist
Pre-merge reviewer checklist
Made with Cursor
Note
Medium Risk
Changes navigation primitives and header behavior for the Perps flow, which can affect transitions, modal presentation, and confirmation screen UX if options are mis-mapped between stack implementations.
Overview
Fixes Perps navigation jitter under React Navigation v6 / RN New Architecture by switching the Perps inner navigator from JS
@react-navigation/stackto@react-navigation/native-stack.Updates Perps screen options to native-stack equivalents (
contentStyle,animation: 'none',presentation: 'transparentModal') and adds a scopedNavigationContextoverride inPerpsConfirmScreento preventConfirmfrom re-enabling a header whenshowPerpsHeaderis false. Also ensures the Perps root entry inMainNavigatorexplicitly disables the header.Bumps mobile build numbers (
versionCode/CURRENT_PROJECT_VERSION) and BitriseVERSION_NUMBERto4532, and adds the@react-navigation/native-stackdependency.Reviewed by Cursor Bugbot for commit c92d05c. Bugbot is set up for automated code reviews on this repo. Configure here.