Skip to content

chore: upgrade to Expo SDK 58 (RN 0.88, React 19.3) - #270

Open
trevor-coleman wants to merge 3 commits into
mainfrom
chore/expo-sdk-58
Open

trevor-coleman wants to merge 3 commits into
mainfrom
chore/expo-sdk-58

Conversation

@trevor-coleman

@trevor-coleman trevor-coleman commented Oct 29, 2026 •

Copy link
Copy Markdown
Collaborator

Summary

Upgrades the repo from Expo SDK 56 to SDK 58 (React Native 0.88.1, React 19.3.0) — the latest stable SDK — and updates the docs to match.

Breaking: all 6 modules get a major bump (changeset included) and now require Expo SDK 58. iOS deployment target (16.4) and Android minSdk (24) are unchanged; Android compileSdk is raised 36 → 37 (required by RN 0.88 / SDK 58 Expo libraries). targetSdk stays 36.

Dependencies

  • expo → ^58; RN-ecosystem deps aligned to SDK 58 bundled versions (RN 0.88.1, reanimated 4.7.1, worklets 0.13.0, gesture-handler 3.3.0 (major), screens 4.30.0, safe-area 5.10.1, expo-* 58.x)
  • All modules on expo-modules-core ~58.0.28; jest-expo ~58.0.13
  • Jest 29 → 30 and TypeScript 5.9 → 6.0 (expected by expo-doctor for SDK 58)
  • No removed expo-modules-core APIs (e.g. hostingRuntimeContext, errorManager, screenScale) are used by the modules' native code

Fixes needed for the bump

  • TS 6: explicit rootDir in module tsconfigs; jest types declared in the shared tsconfig bases (TS 6 no longer auto-includes @types/*); deprecated baseUrl removed from ExampleApp
  • ExampleApp: bundler module resolution (reanimated 4.7 ships ESM-only types); RN 0.88 ScrollViewInstance / TextInputInstance ref types; removed jsEngine from app.json (rejected by the SDK 58 schema)
  • Core tests: pinned @react-native/babel-preset@0.88.1 — expo-module-scripts@3.x hoists babel-preset 0.74, which can't parse RN 0.88's Flow syntax
  • Android compileSdk 36 → 37 in ExampleApp expo-build-properties and module gradle fallbacks (Kotlin fallback 2.1.20 → 2.2.0), matching RN 0.88 defaults
  • Node 20 → 22 in CI workflows and .tool-versions (RN 0.88 requires Node ≥ 22.13)

Docs

  • SDK 58 compatibility row + current platform requirements in README and on the docs site landing page (which previously had no compatibility table)
  • Node/Yarn prerequisites in quickstart and running-the-example-app guides
  • Replaced nonexistent yarn prebuild with npx expo prebuild; fixed step numbering, paths, and the iOS simulator note; EAS workflow docs now point at GitHub Actions instead of CircleCI

Not in this PR

  • expo-module-scripts stays on 3.x — its newest release is 56.0.8 (no SDK 58 version yet), so moving to it is a separate change.

Verification

  • yarn ci:build, yarn test (all suites: core 40/40, ExampleApp 7/7, modules 2/2 each), yarn ci:lint — pass
  • ExampleApp tsc --noEmit — clean
  • expo-doctor — 20/20 checks pass
  • expo export for iOS + Android — Metro/Hermes bundles build
  • Native iOS/Android compile not run locally — relying on the EAS build-on-PR workflow

BREAKING CHANGE: modules now require Expo SDK 58. iOS deployment target
(16.4) and Android compileSdk (36) / minSdk (24) are unchanged.

Dependencies
- Bump expo to ^58 (root, ExampleApp, packages/tsconfig)
- Align RN-ecosystem deps to SDK 58 bundled versions (RN 0.88.1,
  react/react-dom 19.3.0, reanimated 4.7.1, worklets 0.13.0,
  gesture-handler 3.3.0, screens 4.30.0, safe-area 5.10.1, expo-* 58.x)
- Normalize all 6 modules to expo-modules-core ~58.0.28; jest-expo ~58.0.13
- Bump to Jest 30 and TypeScript 6 (expected by expo-doctor for SDK 58)
- Pin @react-native/babel-preset 0.88.1 in core: expo-module-scripts 3.x
  hoists babel-preset 0.74, which can't parse RN 0.88's Flow syntax in tests

Config
- TS 6: set explicit rootDir in module tsconfigs, declare jest types in the
  shared bases (TS 6 no longer auto-includes @types), drop deprecated
  baseUrl from ExampleApp
- ExampleApp tsconfig uses bundler module resolution (reanimated 4.7 ships
  ESM-only types)
- ExampleApp: use RN 0.88 ScrollViewInstance/TextInputInstance ref types;
  remove jsEngine from app.json (rejected by SDK 58 config schema)
- Node 20 -> 22 in CI and .tool-versions (RN 0.88 requires >= 22.13)
- Update committed yarn zero-install cache
- Add major-bump changeset
- Add SDK 58 compatibility row and current requirements (iOS 16.4,
  Android minSdk 24 / compileSdk 36) to README and the docs landing page
- Add Node 22.13+ / Corepack Yarn prerequisites to the quickstart and
  running-the-example-app guides
- Replace nonexistent `yarn prebuild` with `npx expo prebuild`; fix step
  numbering, ExampleApp paths, and the iOS simulator explanation
- EAS workflow docs: lint/build/test now run in GitHub Actions, not CircleCI
@changeset-bot

changeset-bot Bot commented Oct 29, 2026 •

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: e9be5b0

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 6 packages
Name Type
@infinitered/react-native-mlkit-core Major
@infinitered/react-native-mlkit-document-scanner Major
@infinitered/react-native-mlkit-face-detection Major
@infinitered/react-native-mlkit-image-labeling Major
@infinitered/react-native-mlkit-object-detection Major
@infinitered/react-native-mlkit-text-recognition Major

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

- RN 0.88 / SDK 58 Expo libraries require compileSdk 37 (AAR metadata
  check failed the EAS Android build). Bump ExampleApp expo-build-properties
  compileSdkVersion 36 -> 37 and module gradle fallbacks (compileSdk 37,
  Kotlin 2.2.0) to match RN 0.88 defaults. targetSdk stays 36.
- Escape `<=` in the docs compatibility table; MDX parsed it as JSX and
  broke the Docusaurus build.
- Correct compileSdk in README, docs and changeset.

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.

1 participant