Skip to content

chore: upgrade to Expo SDK 56 - #161

Open
byCedric wants to merge 1 commit into
mainfrom
chore/upgrade-expo-sdk-56
Open

chore: upgrade to Expo SDK 56#161
byCedric wants to merge 1 commit into
mainfrom
chore/upgrade-expo-sdk-56

Conversation

@byCedric

Copy link
Copy Markdown
Owner

Upgrades the monorepo from Expo SDK 54 → 56 (expo ~56.0.9, React Native 0.85.3, React 19.2.3). All version pins follow expo@56.0.9's bundledNativeModules.json. Changelog: https://expo.dev/changelog/sdk-56

Changes

Version bumps across apps/example, packages/ui, packages/feature-home, and the root — including SDK 56's new SDK-aligned major versions (e.g. expo-router@~56.2.9, expo-haptics@~56.0.3).

Expo Router ↔ React Navigation independence. SDK 56 makes Expo Router independent of React Navigation (it re-exports themes/elements itself). Ran the official sdk-56-expo-router-react-navigation-replace codemod:

  • app/_layout.tsx now imports ThemeProvider/DarkTheme/DefaultTheme from expo-router/react-navigation
  • components/haptic-tab.tsx imports PlatformPressable from expo-router/react-navigation and BottomTabBarButtonProps from expo-router/js-tabs
  • Dropped @react-navigation/native, @react-navigation/bottom-tabs, @react-navigation/elements

New required peer dependencies (flagged by expo-doctor): expo-constants, expo-font, expo-linking, react-native-screens, react-native-safe-area-context, react-native-worklets (the last is hard-required by Reanimated 4).

app.json: removed newArchEnabled and android.edgeToEdgeEnabled — both are now mandatory/default in SDK 56 and rejected by the config schema.

TypeScript 5.9 → 6.0.3, with adaptations to its breaking changes:

  • types now defaults to [] (TS 6.0 no longer auto-loads every @types/*). Declared "types": ["jest"] in all three tsconfig.json files and re-added @types/jest to the example app.
  • RN 0.85 widened ColorSchemeName to include 'unspecified' → normalized useColorScheme() to 'light' | 'dark' at the hook, fixing the theme-indexing call sites.
  • expo-symbols made SymbolViewProps['name'] a union → used Extract<…, string> for the icon mapping's Record key.

pnpm-workspace.yaml: classified the SDK 56-introduced msgpackr-extract build script (allowBuilds: false, pure-JS fallback) so pnpm install exits cleanly under pnpm v11.

Verification

Check Result
expo-doctor ✅ 21/21 passed
tsc --noEmit (all 3 projects, TS 6.0.3) ✅ clean
turbo lint ✅ 4/4
turbo test ✅ 3/3 (5 suites)
expo export ✅ iOS + Android + Web bundled & exported

🤖 Generated with Claude Code

Upgrade the monorepo from Expo SDK 54 to 56 (expo ~56.0.9, React Native
0.85.3, React 19.2.3). Versions follow expo@56.0.9 bundledNativeModules.

- Bump versions across apps/example, packages/ui, packages/feature-home
  and the root (incl. SDK 56's SDK-aligned majors, e.g. expo-router@~56.2.9)
- Migrate React Navigation to Expo Router (now independent in SDK 56) via the
  sdk-56-expo-router-react-navigation-replace codemod; drop @react-navigation/*
- Add now-required peers: expo-constants, expo-font, expo-linking,
  react-native-screens, react-native-safe-area-context, react-native-worklets
- Drop newArchEnabled and edgeToEdgeEnabled from app.json (mandatory in SDK 56)
- Upgrade TypeScript to 6.0.3 and adapt to its breaking changes:
  - types now defaults to []; declare "types": ["jest"] in tsconfigs and
    re-add @types/jest to the example app
  - normalize useColorScheme() to 'light' | 'dark' (RN 0.85 ColorSchemeName
    now includes 'unspecified')
  - Extract<…, string> for the icon Record key (expo-symbols name is a union)
- Classify the new msgpackr-extract build script in pnpm-workspace.yaml so
  pnpm install exits cleanly

Verified: expo-doctor 21/21, tsc clean (TS 6.0.3), turbo lint + test pass,
expo export builds iOS/Android/Web.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@github-actions

Copy link
Copy Markdown

🚀 Expo preview is ready!

  • Project → expo-monorepo
  • Platforms → android, ios
  • Scheme → example
  • Runtime Version → exposdk:56.0.0
  • More info

Learn more about 𝝠 Expo Github Action

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.

2 participants