Skip to content

Feature/support expo 57 - #594

Draft
marius-ck wants to merge 19 commits into
callstack:mainfrom
marius-ck:feature/support-expo-57
Draft

marius-ck wants to merge 19 commits into
callstack:mainfrom
marius-ck:feature/support-expo-57

Conversation

@marius-ck

@marius-ck marius-ck commented Sep 28, 2026 •

Copy link
Copy Markdown

PR Description

Upgrades @bottom-tabs/expo-template to Expo SDK 57 (React Native 0.86.3, React 19.2.3, TypeScript 6.0.3).

Since SDK 56, Expo Router uses its own copy of React Navigation and rejects @react-navigation/* imports in app code. The template therefore switches from @bottom-tabs/react-navigation + withLayoutContext to @bottom-tabs/standard-navigation:

const Tabs = unstable_createStandardRouterNavigator(NativeBottomTabsContent, TabRouter);

Other changes:

  • Dependencies aligned with SDK 57 (npx expo install --check and expo-doctor are clean). Dropped @react-navigation/native and added @react-native/jest-preset, which jest-expo 57 requires.
  • DarkTheme, DefaultTheme and ThemeProvider are now imported from expo-router.
  • useColorScheme maps React Native 0.86's 'unspecified' to 'light', so the Colors[scheme] lookups keep working.
  • Removed newArchEnabled from app.json (dropped in SDK 55).
  • Added "types": ["jest"] to tsconfig.json (TypeScript 6 no longer includes @types packages automatically).
  • Fixed the IconSymbol mapping type for expo-symbols 57.
  • yarn.lock: besides the upgrade, ran yarn dedupe '@typescript-eslint/*'. The bump left two 8.x versions, which stopped eslint-plugin-jest from being hoisted to the root, and lint crashed for the library packages (Environment key "jest/globals" is unknown). The example apps resolve the same packages as before.

No changes to react-native-bottom-tabs itself.

How to test?

Monorepo checks:

yarn install --immutable
yarn constraints
yarn turbo run lint typecheck test --force
yarn workspace @bottom-tabs/expo-template typecheck
yarn workspace @bottom-tabs/expo-template lint

Fresh app from the template. @bottom-tabs/standard-navigation isn't on npm until #581 is released, so pack the local packages:

yarn build
for p in expo-template standard-navigation react-native-bottom-tabs; do
  (cd packages/$p && npm pack --pack-destination /tmp/sdk57)
done
cd /tmp/sdk57
npx create-expo-app@latest app --template ./bottom-tabs-expo-template-*.tgz --no-install
cd app
# in package.json, point @bottom-tabs/standard-navigation and react-native-bottom-tabs at the file:../*.tgz tarballs
npm install
npx expo install --check && npx expo-doctor
npx expo start   # generates .expo/types, then stop it
npm run lint && npm run typecheck && npm test
npm run ios      # and npm run android

Screenshots

android-home-dark android-home-light ios-home-dark ios-home-light

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants