diff --git a/.changeset/expo-sdk-57-upgrade.md b/.changeset/expo-sdk-57-upgrade.md new file mode 100644 index 00000000..852166af --- /dev/null +++ b/.changeset/expo-sdk-57-upgrade.md @@ -0,0 +1,11 @@ +--- +'create-expo-stack': minor +'rn-new': minor +--- + +Upgrade generated templates to Expo SDK 57 and align the CLI with the new Expo release. + +- Upgrade generated app dependencies to Expo SDK 57, React Native 0.86, Expo Router 57, and the SDK 57-compatible Expo and Software Mansion packages. +- Remove the generated `newArchEnabled` config from `app.json` now that New Architecture is the default. +- Update the printed prebuild guidance to match SDK 57 behavior, where `expo prebuild` cleans by default. +- Bump the repo and CLI Expo dependencies to SDK 57-compatible versions. diff --git a/bun.lockb b/bun.lockb index 0c968183..9f87e059 100755 Binary files a/bun.lockb and b/bun.lockb differ diff --git a/cli/package.json b/cli/package.json index d7fb610b..561e7be3 100644 --- a/cli/package.json +++ b/cli/package.json @@ -51,7 +51,7 @@ "dependencies": { "@clack/prompts": "^0.11.0", "ejs-lint": "^2.0.0", - "expo": "^54.0.6", + "expo": "^57.0.4", "figlet": "^1.6.0", "gluegun": "latest", "google-auth-library": "^9.11.0", diff --git a/cli/src/templates/base/app.json.ejs b/cli/src/templates/base/app.json.ejs index d937854a..1df2ad09 100644 --- a/cli/src/templates/base/app.json.ejs +++ b/cli/src/templates/base/app.json.ejs @@ -3,9 +3,6 @@ "name": "<%= props.projectName %>", "slug": "<%= props.projectSlug %>", "version": "1.0.0", - <% if (props.stylingPackage?.name === "unistyles") { %> - "newArchEnabled": true, - <% } %> <% if (props.navigationPackage?.name === 'expo-router') { %> "scheme": "<%= props.projectScheme %>", "platforms": ["ios", "android"], diff --git a/cli/src/templates/base/package.json.ejs b/cli/src/templates/base/package.json.ejs index a82dfaad..0f0a9a28 100644 --- a/cli/src/templates/base/package.json.ejs +++ b/cli/src/templates/base/package.json.ejs @@ -44,8 +44,8 @@ "tailwind-merge": "^2.2.1", "react-native-uitextview": "^1.1.4", "rn-icon-mapper": "^0.0.1", - "expo-haptics": "~56.0.3", - "expo-symbols": "~56.0.5", + "expo-haptics": "~57.0.0", + "expo-symbols": "~57.0.0", <% if (props.stylingPackage?.options.selectedComponents.includes('date-picker')) { %> "@react-native-community/datetimepicker": "9.1.0", <% } %> @@ -56,7 +56,7 @@ "@expo/react-native-action-sheet": "^4.0.1", <% } %> <% if (props.stylingPackage?.options.selectedComponents.includes('ratings-indicator')) { %> - "expo-store-review": "~56.0.3", + "expo-store-review": "~57.0.0", <% } %> <% if (props.stylingPackage?.options.selectedComponents.includes('slider')) { %> "@react-native-community/slider": "5.2.0", @@ -78,7 +78,7 @@ <% } %> <% if (props.navigationPackage?.type === "navigation" || props.packages?.some((p) => p.name === "react-native-gesture-handler")) { %> - "react-native-gesture-handler": "~2.31.1", + "react-native-gesture-handler": "~2.32.0", <% } %> <% if (props.navigationPackage?.type === "navigation" || props.packages?.some((p) => p.name === "react-native-screens")) { %> @@ -90,13 +90,13 @@ <% } %> <% if (props.packages?.some((p) => p.name === "react-native-keyboard-controller")) { %> - "react-native-keyboard-controller": "1.21.6", + "react-native-keyboard-controller": "1.21.9", <% } %> <% if (props.navigationPackage?.name === "react-navigation") { %> "@react-navigation/stack": "^7.4.8", "@expo/vector-icons": "^15.0.2", - "expo-font": "~56.0.5", + "expo-font": "~57.0.0", <% } %> <% if (props.analyticsPackage?.name === "vexo-analytics") { %> @@ -116,14 +116,14 @@ <% } %> <% if (props.navigationPackage?.name === "expo-router") { %> - "@expo/log-box": "^56.0.12", + "@expo/log-box": "^57.0.0", "@expo/vector-icons": "^15.0.2", - "expo-font": "~56.0.5", - "expo-linking": "~56.0.11", - "expo-router": "~56.2.6", - "expo-constants": "~56.0.15", - "expo-system-ui": "~56.0.5", - "expo-web-browser": "~56.0.5", + "expo-font": "~57.0.0", + "expo-linking": "~57.0.2", + "expo-router": "~57.0.4", + "expo-constants": "~57.0.3", + "expo-system-ui": "~57.0.0", + "expo-web-browser": "~57.0.0", "react-dom": "19.2.3", "react-native-web": "~0.21.0", <% } %> @@ -140,28 +140,28 @@ <% if (props.internalizationPackage?.name === "i18next") { %> "i18next": "^23.7.20", "react-i18next": "^14.0.1", - "expo-localization": "~56.0.6", + "expo-localization": "~57.0.0", <% } %> <% if (props.flags?.eas || props.stylingPackage?.name === "nativewindui") { %> - "expo-dev-client": "~56.0.15", - "expo-device": "~56.0.4", + "expo-dev-client": "~57.0.5", + "expo-device": "~57.0.0", <% } %> - "react-native-reanimated": "4.3.1", - "react-native-worklets": "0.8.3", + "react-native-reanimated": "4.5.0", + "react-native-worklets": "0.10.0", "react-native-safe-area-context": "~5.7.0", - "expo": "~56.0.4", - "expo-splash-screen": "~56.0.10", - "expo-status-bar": "~56.0.4", + "expo": "~57.0.4", + "expo-splash-screen": "~57.0.2", + "expo-status-bar": "~57.0.0", "react": "19.2.3", - "react-native": "0.85.3" + "react-native": "0.86.0" }, "devDependencies": { "@babel/core": "^7.20.0", "@types/react": "~19.2.2", "eslint": "^9.25.1", - "eslint-config-expo": "~56.0.4", + "eslint-config-expo": "~57.0.0", "eslint-config-prettier": "^10.1.2", "prettier": "^3.2.5", <% if (props.stylingPackage?.name === "nativewind" || props.stylingPackage?.name === "nativewindui") { %> diff --git a/cli/src/utilities/printOutput.ts b/cli/src/utilities/printOutput.ts index d5fd5888..c06cfae2 100644 --- a/cli/src/utilities/printOutput.ts +++ b/cli/src/utilities/printOutput.ts @@ -286,7 +286,7 @@ export async function printOutput( highlight(`${step}. cd ${projectDir}`); if (flags.noInstall) highlight(`${++step}. ${packageManager} install`); if (stylingPackage.name === 'unistyles' || stylingPackage.name === 'nativewindui') { - highlight(`${++step}. ${expoCommand} prebuild --clean`); + highlight(`${++step}. ${expoCommand} prebuild`); } highlight(`${++step}. ${runCommand} ios`); } diff --git a/package.json b/package.json index 16025982..016d5a3b 100644 --- a/package.json +++ b/package.json @@ -57,7 +57,7 @@ "packageManager": "bun@1.2.11", "dependencies": { "@clack/prompts": "^0.7.0", - "expo": "~56.0.4", + "expo": "~57.0.4", "lucide-astro": "^0.395.0", "picocolors": "^1.0.0", "google-auth-library": "^9.11.0", diff --git a/www/demo/steps/printOutput.js b/www/demo/steps/printOutput.js index fc8fe640..cced64ad 100644 --- a/www/demo/steps/printOutput.js +++ b/www/demo/steps/printOutput.js @@ -16,7 +16,7 @@ function generateStepsToRunProject(cliResults) { stylingPackage.name === "unistyles" || stylingPackage.name === "nativewindui" ) { - output += color.blue(`${++step}. npx expo prebuild --clean\n`); + output += color.blue(`${++step}. npx expo prebuild\n`); } output += color.blue(`${++step}. npm run ios`); } else if (cliResults.flags.packageManager === "pnpm") { @@ -25,7 +25,7 @@ function generateStepsToRunProject(cliResults) { stylingPackage.name === "unistyles" || stylingPackage.name === "nativewindui" ) { - output += color.blue(`${++step}. pnpm expo prebuild --clean\n`); + output += color.blue(`${++step}. pnpm expo prebuild\n`); } output += color.blue(`${++step}. pnpm run ios`); } else if (cliResults.flags.packageManager === "bun") { @@ -34,7 +34,7 @@ function generateStepsToRunProject(cliResults) { stylingPackage.name === "unistyles" || stylingPackage.name === "nativewindui" ) { - output += color.blue(`${++step}. bun expo prebuild --clean\n`); + output += color.blue(`${++step}. bun expo prebuild\n`); } output += color.blue(`${++step}. bun run ios`); } else { @@ -43,7 +43,7 @@ function generateStepsToRunProject(cliResults) { stylingPackage.name === "unistyles" || stylingPackage.name === "nativewindui" ) { - output += color.blue(`${++step}. yarn expo prebuild --clean\n`); + output += color.blue(`${++step}. yarn expo prebuild\n`); } output += color.blue(`${++step}. yarn ios`); }