diff --git a/apps/bare-expo/package.json b/apps/bare-expo/package.json
index 2b00375069f9ff..d4363377316cce 100644
--- a/apps/bare-expo/package.json
+++ b/apps/bare-expo/package.json
@@ -41,9 +41,9 @@
},
"dependencies": {
"@babel/runtime": "^7.20.0",
- "@expo/dom-webview": "56.0.1",
+ "@expo/dom-webview": "workspace:*",
"@expo/styleguide-base": "^1.0.1",
- "@expo/ui": "56.0.1",
+ "@expo/ui": "workspace:*",
"@react-native-async-storage/async-storage": "2.2.0",
"@react-native-community/datetimepicker": "8.6.0",
"@react-native-community/netinfo": "11.5.2",
@@ -56,29 +56,29 @@
"@react-navigation/native-stack": "^7.14.5",
"@shopify/flash-list": "2.0.2",
"@shopify/react-native-skia": "2.4.18",
- "expo": "56.0.0-preview.2",
- "expo-app-metrics": "56.0.0",
- "expo-background-fetch": "56.0.0",
- "expo-brownfield": "56.0.0",
- "expo-build-properties": "56.0.0",
- "expo-camera": "56.0.0",
- "expo-dev-client": "56.0.0",
- "expo-dev-menu": "56.0.0",
- "expo-font": "56.0.1",
- "expo-image": "56.0.1",
- "expo-insights": "56.0.0",
- "expo-linking": "56.0.0",
- "expo-location": "56.0.0",
- "expo-navigation-bar": "56.0.0",
- "expo-network-addons": "56.0.0",
- "expo-notifications": "56.0.0",
- "expo-observe": "56.0.0",
- "expo-splash-screen": "56.0.1",
- "expo-status-bar": "56.0.1",
- "expo-tracking-transparency": "56.0.0",
- "expo-updates": "56.0.1",
- "expo-video": "56.0.0",
- "expo-web-browser": "56.0.1",
+ "expo": "workspace:*",
+ "expo-app-metrics": "workspace:*",
+ "expo-background-fetch": "workspace:*",
+ "expo-brownfield": "workspace:*",
+ "expo-build-properties": "workspace:*",
+ "expo-camera": "workspace:*",
+ "expo-dev-client": "workspace:*",
+ "expo-dev-menu": "workspace:*",
+ "expo-font": "workspace:*",
+ "expo-image": "workspace:*",
+ "expo-insights": "workspace:*",
+ "expo-linking": "workspace:*",
+ "expo-location": "workspace:*",
+ "expo-navigation-bar": "workspace:*",
+ "expo-network-addons": "workspace:*",
+ "expo-notifications": "workspace:*",
+ "expo-observe": "workspace:*",
+ "expo-splash-screen": "workspace:*",
+ "expo-status-bar": "workspace:*",
+ "expo-tracking-transparency": "workspace:*",
+ "expo-updates": "workspace:*",
+ "expo-video": "workspace:*",
+ "expo-web-browser": "workspace:*",
"lottie-react-native": "^7.3.4",
"native-component-list": "workspace:*",
"react": "19.2.3",
@@ -98,11 +98,11 @@
},
"devDependencies": {
"@babel/core": "^7.20.0",
- "@expo/cli": "56.0.2",
+ "@expo/cli": "workspace:*",
"@expo/spawn-async": "^1.7.2",
"@types/react": "~19.2.0",
- "babel-preset-expo": "56.0.1",
- "expo-module-scripts": "56.0.0",
+ "babel-preset-expo": "workspace:*",
+ "expo-module-scripts": "workspace:*",
"jest": "^29.3.1"
},
"codegenConfig": {
diff --git a/apps/brownfield-tester/expo-app/package.json b/apps/brownfield-tester/expo-app/package.json
index 7326298be0381c..65294bc7e8f60a 100644
--- a/apps/brownfield-tester/expo-app/package.json
+++ b/apps/brownfield-tester/expo-app/package.json
@@ -13,21 +13,21 @@
"@react-navigation/bottom-tabs": "^7.15.5",
"@react-navigation/elements": "^2.9.10",
"@react-navigation/native": "^7.1.33",
- "expo": "56.0.0-preview.2",
- "expo-brownfield": "56.0.0",
- "expo-constants": "56.0.1",
- "expo-device": "56.0.1",
- "expo-dev-menu": "56.0.0",
- "expo-font": "56.0.1",
- "expo-glass-effect": "56.0.1",
- "expo-image": "56.0.1",
- "expo-linking": "56.0.0",
- "expo-router": "56.0.1",
- "expo-splash-screen": "56.0.1",
- "expo-status-bar": "56.0.1",
- "expo-symbols": "56.0.1",
- "expo-system-ui": "56.0.1",
- "expo-web-browser": "56.0.1",
+ "expo": "workspace:*",
+ "expo-brownfield": "workspace:*",
+ "expo-constants": "workspace:*",
+ "expo-device": "workspace:*",
+ "expo-dev-menu": "workspace:*",
+ "expo-font": "workspace:*",
+ "expo-glass-effect": "workspace:*",
+ "expo-image": "workspace:*",
+ "expo-linking": "workspace:*",
+ "expo-router": "workspace:*",
+ "expo-splash-screen": "workspace:*",
+ "expo-status-bar": "workspace:*",
+ "expo-symbols": "workspace:*",
+ "expo-system-ui": "workspace:*",
+ "expo-web-browser": "workspace:*",
"react": "19.2.3",
"react-dom": "19.2.3",
"react-native": "0.85.2",
diff --git a/apps/brownfield-tester/package.json b/apps/brownfield-tester/package.json
index 9da6f457d4a2ba..53465feff9bd83 100644
--- a/apps/brownfield-tester/package.json
+++ b/apps/brownfield-tester/package.json
@@ -3,7 +3,7 @@
"version": "0.0.1",
"private": true,
"dependencies": {
- "expo": "56.0.0-preview.2",
+ "expo": "workspace:*",
"react-native": "0.85.2",
"react": "19.2.3",
"react-native-reanimated": "4.3.0",
diff --git a/apps/eas-expo-go/package.json b/apps/eas-expo-go/package.json
index a29ae20704ebac..79665aaa5df19a 100644
--- a/apps/eas-expo-go/package.json
+++ b/apps/eas-expo-go/package.json
@@ -4,7 +4,7 @@
"main": "index.js",
"license": "MIT",
"dependencies": {
- "expo": "56.0.0-preview.2"
+ "expo": "workspace:*"
},
"scripts": {
"eas-build-pre-install": "./scripts/eas-build-pre-install.sh",
diff --git a/apps/expo-go/package.json b/apps/expo-go/package.json
index 2ccd67cb36784e..f288c1c883c56a 100644
--- a/apps/expo-go/package.json
+++ b/apps/expo-go/package.json
@@ -7,7 +7,7 @@
"author": "Expo",
"license": "MIT",
"dependencies": {
- "@expo/ui": "56.0.1",
+ "@expo/ui": "workspace:*",
"@expo/vector-icons": "^15.0.2",
"@react-native-async-storage/async-storage": "2.2.0",
"@react-native-community/datetimepicker": "^9.1.0",
@@ -18,62 +18,62 @@
"@react-native-segmented-control/segmented-control": "2.5.7",
"@shopify/react-native-skia": "2.6.2",
"@stripe/stripe-react-native": "0.64.0",
- "expo": "56.0.0-preview.2",
- "expo-application": "56.0.0",
- "expo-asset": "56.0.1",
- "expo-audio": "56.0.0",
- "expo-background-fetch": "56.0.0",
- "expo-background-task": "56.0.0",
- "expo-battery": "56.0.0",
- "expo-blob": "56.0.0",
- "expo-blur": "56.0.0",
- "expo-brightness": "56.0.0",
- "expo-calendar": "56.0.0",
- "expo-camera": "56.0.0",
- "expo-cellular": "56.0.0",
- "expo-clipboard": "56.0.0",
- "expo-constants": "56.0.1",
- "expo-contacts": "56.0.0",
- "expo-crypto": "56.0.0",
- "expo-dev-menu": "56.0.0",
- "expo-device": "56.0.1",
- "expo-document-picker": "56.0.0",
- "expo-font": "56.0.1",
- "expo-gl": "56.0.0",
- "expo-haptics": "56.0.0",
- "expo-image-loader": "56.0.0",
- "expo-image-manipulator": "56.0.0",
- "expo-image-picker": "56.0.0",
- "expo-intent-launcher": "56.0.0",
- "expo-linear-gradient": "56.0.0",
- "expo-linking": "56.0.0",
- "expo-local-authentication": "56.0.0",
- "expo-localization": "56.0.0",
- "expo-location": "56.0.0",
- "expo-mail-composer": "56.0.0",
- "expo-media-library": "56.0.0",
- "expo-navigation-bar": "56.0.0",
- "expo-network": "56.0.0",
- "expo-notifications": "56.0.0",
- "expo-print": "56.0.0",
- "expo-router": "56.0.1",
- "expo-screen-capture": "56.0.0",
- "expo-screen-orientation": "56.0.0",
- "expo-secure-store": "56.0.0",
- "expo-sensors": "56.0.0",
- "expo-sharing": "56.0.0",
- "expo-sms": "56.0.0",
- "expo-speech": "56.0.0",
- "expo-splash-screen": "56.0.1",
- "expo-sqlite": "56.0.0",
- "expo-store-review": "56.0.0",
- "expo-system-ui": "56.0.1",
- "expo-task-manager": "56.0.0",
- "expo-tracking-transparency": "56.0.0",
- "expo-updates": "56.0.1",
- "expo-video": "56.0.0",
- "expo-video-thumbnails": "56.0.0",
- "expo-web-browser": "56.0.1",
+ "expo": "workspace:*",
+ "expo-application": "workspace:*",
+ "expo-asset": "workspace:*",
+ "expo-audio": "workspace:*",
+ "expo-background-fetch": "workspace:*",
+ "expo-background-task": "workspace:*",
+ "expo-battery": "workspace:*",
+ "expo-blob": "workspace:*",
+ "expo-blur": "workspace:*",
+ "expo-brightness": "workspace:*",
+ "expo-calendar": "workspace:*",
+ "expo-camera": "workspace:*",
+ "expo-cellular": "workspace:*",
+ "expo-clipboard": "workspace:*",
+ "expo-constants": "workspace:*",
+ "expo-contacts": "workspace:*",
+ "expo-crypto": "workspace:*",
+ "expo-dev-menu": "workspace:*",
+ "expo-device": "workspace:*",
+ "expo-document-picker": "workspace:*",
+ "expo-font": "workspace:*",
+ "expo-gl": "workspace:*",
+ "expo-haptics": "workspace:*",
+ "expo-image-loader": "workspace:*",
+ "expo-image-manipulator": "workspace:*",
+ "expo-image-picker": "workspace:*",
+ "expo-intent-launcher": "workspace:*",
+ "expo-linear-gradient": "workspace:*",
+ "expo-linking": "workspace:*",
+ "expo-local-authentication": "workspace:*",
+ "expo-localization": "workspace:*",
+ "expo-location": "workspace:*",
+ "expo-mail-composer": "workspace:*",
+ "expo-media-library": "workspace:*",
+ "expo-navigation-bar": "workspace:*",
+ "expo-network": "workspace:*",
+ "expo-notifications": "workspace:*",
+ "expo-print": "workspace:*",
+ "expo-router": "workspace:*",
+ "expo-screen-capture": "workspace:*",
+ "expo-screen-orientation": "workspace:*",
+ "expo-secure-store": "workspace:*",
+ "expo-sensors": "workspace:*",
+ "expo-sharing": "workspace:*",
+ "expo-sms": "workspace:*",
+ "expo-speech": "workspace:*",
+ "expo-splash-screen": "workspace:*",
+ "expo-sqlite": "workspace:*",
+ "expo-store-review": "workspace:*",
+ "expo-system-ui": "workspace:*",
+ "expo-task-manager": "workspace:*",
+ "expo-tracking-transparency": "workspace:*",
+ "expo-updates": "workspace:*",
+ "expo-video": "workspace:*",
+ "expo-video-thumbnails": "workspace:*",
+ "expo-web-browser": "workspace:*",
"lottie-react-native": "^7.3.4",
"react": "19.2.3",
"react-native": "0.85.2",
diff --git a/apps/jest-expo-mock-generator/package.json b/apps/jest-expo-mock-generator/package.json
index cb2ccd7617105b..42360bd32fccbd 100644
--- a/apps/jest-expo-mock-generator/package.json
+++ b/apps/jest-expo-mock-generator/package.json
@@ -6,8 +6,8 @@
"main": "index.js",
"dependencies": {
"@expo/mux": "^1.0.7",
- "expo": "56.0.0-preview.2",
- "expo-clipboard": "56.0.0",
+ "expo": "workspace:*",
+ "expo-clipboard": "workspace:*",
"react": "19.2.3",
"react-native": "0.85.2"
}
diff --git a/apps/minimal-tester/package.json b/apps/minimal-tester/package.json
index 57114268159c56..bd09464a17ac04 100644
--- a/apps/minimal-tester/package.json
+++ b/apps/minimal-tester/package.json
@@ -10,19 +10,19 @@
"eject": "expo eject"
},
"dependencies": {
- "expo": "56.0.0-preview.2",
- "expo-apple-authentication": "56.0.0",
- "expo-blur": "56.0.0",
- "expo-brownfield": "56.0.0",
- "expo-build-properties": "56.0.0",
- "expo-camera": "56.0.0",
- "expo-dev-client": "56.0.0",
- "expo-image": "56.0.1",
- "expo-linear-gradient": "56.0.0",
- "expo-splash-screen": "56.0.1",
- "expo-status-bar": "56.0.1",
- "expo-updates": "56.0.1",
- "expo-video": "56.0.0",
+ "expo": "workspace:*",
+ "expo-apple-authentication": "workspace:*",
+ "expo-blur": "workspace:*",
+ "expo-brownfield": "workspace:*",
+ "expo-build-properties": "workspace:*",
+ "expo-camera": "workspace:*",
+ "expo-dev-client": "workspace:*",
+ "expo-image": "workspace:*",
+ "expo-linear-gradient": "workspace:*",
+ "expo-splash-screen": "workspace:*",
+ "expo-status-bar": "workspace:*",
+ "expo-updates": "workspace:*",
+ "expo-video": "workspace:*",
"react": "19.2.3",
"react-dom": "19.2.3",
"react-native": "0.85.2",
diff --git a/apps/native-component-list/package.json b/apps/native-component-list/package.json
index 4251b928aa6f13..335f030429c8dc 100644
--- a/apps/native-component-list/package.json
+++ b/apps/native-component-list/package.json
@@ -33,12 +33,12 @@
},
"dependencies": {
"@expo-google-fonts/inter": "^0.2.3",
- "@expo/app-integrity": "56.0.0",
- "@expo/html-elements": "56.0.0",
+ "@expo/app-integrity": "workspace:*",
+ "@expo/html-elements": "workspace:*",
"@expo/material-symbols": "~0.1.1",
"@expo/react-native-action-sheet": "^4.1.1",
"@expo/styleguide-base": "^1.0.1",
- "@expo/ui": "56.0.1",
+ "@expo/ui": "workspace:*",
"@expo/vector-icons": "^15.0.2",
"@lottiefiles/dotlottie-react": "^0.10.1",
"@lottiefiles/react-lottie-player": "^3.5.4",
@@ -60,79 +60,79 @@
"canvaskit-wasm": "^0.40.0",
"date-format": "^2.0.0",
"deep-object-diff": "^1.1.9",
- "expo": "56.0.0-preview.2",
+ "expo": "workspace:*",
"expo-2d-context": "^0.0.4",
- "expo-age-range": "56.0.0",
- "expo-apple-authentication": "56.0.0",
- "expo-application": "56.0.0",
- "expo-asset": "56.0.1",
- "expo-audio": "56.0.0",
- "expo-auth-session": "56.0.0",
- "expo-background-fetch": "56.0.0",
- "expo-background-task": "56.0.0",
- "expo-battery": "56.0.0",
- "expo-blob": "56.0.0",
- "expo-blur": "56.0.0",
- "expo-brightness": "56.0.0",
- "expo-calendar": "56.0.0",
- "expo-camera": "56.0.0",
- "expo-cellular": "56.0.0",
- "expo-checkbox": "56.0.0",
- "expo-clipboard": "56.0.0",
- "expo-constants": "56.0.1",
- "expo-contacts": "56.0.0",
- "expo-crypto": "56.0.0",
- "expo-device": "56.0.1",
- "expo-document-picker": "56.0.0",
- "expo-file-system": "56.0.1",
- "expo-font": "56.0.1",
- "expo-gl": "56.0.0",
- "expo-glass-effect": "56.0.1",
- "expo-haptics": "56.0.0",
- "expo-image": "56.0.1",
- "expo-image-loader": "56.0.0",
- "expo-image-manipulator": "56.0.0",
- "expo-image-picker": "56.0.0",
- "expo-intent-launcher": "56.0.0",
- "expo-keep-awake": "56.0.1",
- "expo-linear-gradient": "56.0.0",
- "expo-linking": "56.0.0",
- "expo-live-photo": "56.0.0",
- "expo-local-authentication": "56.0.0",
- "expo-localization": "56.0.0",
- "expo-location": "56.0.0",
- "expo-mail-composer": "56.0.0",
- "expo-maps": "56.0.0",
- "expo-media-library": "56.0.0",
- "expo-mesh-gradient": "56.0.0",
- "expo-modules-test-core": "56.0.0",
- "expo-navigation-bar": "56.0.0",
- "expo-network": "56.0.0",
- "expo-notifications": "56.0.0",
- "expo-print": "56.0.0",
- "expo-processing": "56.0.0",
+ "expo-age-range": "workspace:*",
+ "expo-apple-authentication": "workspace:*",
+ "expo-application": "workspace:*",
+ "expo-asset": "workspace:*",
+ "expo-audio": "workspace:*",
+ "expo-auth-session": "workspace:*",
+ "expo-background-fetch": "workspace:*",
+ "expo-background-task": "workspace:*",
+ "expo-battery": "workspace:*",
+ "expo-blob": "workspace:*",
+ "expo-blur": "workspace:*",
+ "expo-brightness": "workspace:*",
+ "expo-calendar": "workspace:*",
+ "expo-camera": "workspace:*",
+ "expo-cellular": "workspace:*",
+ "expo-checkbox": "workspace:*",
+ "expo-clipboard": "workspace:*",
+ "expo-constants": "workspace:*",
+ "expo-contacts": "workspace:*",
+ "expo-crypto": "workspace:*",
+ "expo-device": "workspace:*",
+ "expo-document-picker": "workspace:*",
+ "expo-file-system": "workspace:*",
+ "expo-font": "workspace:*",
+ "expo-gl": "workspace:*",
+ "expo-glass-effect": "workspace:*",
+ "expo-haptics": "workspace:*",
+ "expo-image": "workspace:*",
+ "expo-image-loader": "workspace:*",
+ "expo-image-manipulator": "workspace:*",
+ "expo-image-picker": "workspace:*",
+ "expo-intent-launcher": "workspace:*",
+ "expo-keep-awake": "workspace:*",
+ "expo-linear-gradient": "workspace:*",
+ "expo-linking": "workspace:*",
+ "expo-live-photo": "workspace:*",
+ "expo-local-authentication": "workspace:*",
+ "expo-localization": "workspace:*",
+ "expo-location": "workspace:*",
+ "expo-mail-composer": "workspace:*",
+ "expo-maps": "workspace:*",
+ "expo-media-library": "workspace:*",
+ "expo-mesh-gradient": "workspace:*",
+ "expo-modules-test-core": "workspace:*",
+ "expo-navigation-bar": "workspace:*",
+ "expo-network": "workspace:*",
+ "expo-notifications": "workspace:*",
+ "expo-print": "workspace:*",
+ "expo-processing": "workspace:*",
"expo-progress": "^0.0.2",
- "expo-screen-capture": "56.0.0",
- "expo-screen-orientation": "56.0.0",
- "expo-secure-store": "56.0.0",
- "expo-sensors": "56.0.0",
- "expo-sharing": "56.0.0",
- "expo-sms": "56.0.0",
- "expo-speech": "56.0.0",
- "expo-splash-screen": "56.0.1",
- "expo-sqlite": "56.0.0",
- "expo-standard-web-crypto": "56.0.0",
- "expo-status-bar": "56.0.1",
- "expo-store-review": "56.0.0",
- "expo-symbols": "56.0.1",
- "expo-system-ui": "56.0.1",
- "expo-task-manager": "56.0.0",
+ "expo-screen-capture": "workspace:*",
+ "expo-screen-orientation": "workspace:*",
+ "expo-secure-store": "workspace:*",
+ "expo-sensors": "workspace:*",
+ "expo-sharing": "workspace:*",
+ "expo-sms": "workspace:*",
+ "expo-speech": "workspace:*",
+ "expo-splash-screen": "workspace:*",
+ "expo-sqlite": "workspace:*",
+ "expo-standard-web-crypto": "workspace:*",
+ "expo-status-bar": "workspace:*",
+ "expo-store-review": "workspace:*",
+ "expo-symbols": "workspace:*",
+ "expo-system-ui": "workspace:*",
+ "expo-task-manager": "workspace:*",
"expo-three": "7.0.1",
- "expo-tracking-transparency": "56.0.0",
- "expo-updates": "56.0.1",
- "expo-video": "56.0.0",
- "expo-video-thumbnails": "56.0.0",
- "expo-web-browser": "56.0.1",
+ "expo-tracking-transparency": "workspace:*",
+ "expo-updates": "workspace:*",
+ "expo-video": "workspace:*",
+ "expo-video-thumbnails": "workspace:*",
+ "expo-web-browser": "workspace:*",
"fbemitter": "^2.1.1",
"fuse.js": "^6.4.6",
"gl-mat4": "^1.1.4",
@@ -175,7 +175,7 @@
"@types/react": "~19.2.0",
"@types/three": "^0.137.0",
"babel-jest": "^29.2.1",
- "expo-module-scripts": "56.0.0",
+ "expo-module-scripts": "workspace:*",
"jest": "^29.2.1",
"react-test-renderer": "19.2.3"
}
diff --git a/apps/native-component-list/src/screens/UI/DropdownMenuScreen.android.tsx b/apps/native-component-list/src/screens/UI/DropdownMenuScreen.android.tsx
index 426eefd68cd999..808756e2f7902b 100644
--- a/apps/native-component-list/src/screens/UI/DropdownMenuScreen.android.tsx
+++ b/apps/native-component-list/src/screens/UI/DropdownMenuScreen.android.tsx
@@ -14,7 +14,7 @@ import {
} from '@expo/ui/jetpack-compose';
import { background } from '@expo/ui/jetpack-compose/modifiers';
import * as React from 'react';
-import { View, Text } from 'react-native';
+import { View, Text, Alert } from 'react-native';
import { Section } from '../../components/Page';
@@ -68,6 +68,11 @@ export default function DropdownMenuScreen() {
{
setThemeMenuExpanded(false);
setSelectedTheme('Light');
@@ -118,6 +123,31 @@ export default function DropdownMenuScreen() {
)}
+ {
+ Alert.alert('This should not happen');
+ }}>
+
+ Disabled
+
+
+
+
+ {selectedTheme === 'Auto' && (
+
+
+
+ )}
+
diff --git a/apps/native-component-list/src/screens/UI/HorizontalFloatingToolbarScreen.android.tsx b/apps/native-component-list/src/screens/UI/HorizontalFloatingToolbarScreen.android.tsx
index 6b0fe67302ce2a..15b368d133a555 100644
--- a/apps/native-component-list/src/screens/UI/HorizontalFloatingToolbarScreen.android.tsx
+++ b/apps/native-component-list/src/screens/UI/HorizontalFloatingToolbarScreen.android.tsx
@@ -41,9 +41,9 @@ export default function HorizontalFloatingToolbarScreen() {
variant="vibrant"
colors={{
toolbarContainerColor: '#1B5E20',
- // toolbarContentColor: '#FFFFFF',
+ toolbarContentColor: '#AAA',
fabContainerColor: '#FFB300',
- // fabContentColor: '#000000',
+ fabContentColor: '#0000FF',
}}
modifiers={[align('bottomCenter'), offset(0, -16)]}>
) — a horizontally scrolling pager that snaps to individual pages.
+
+`HorizontalPager` does not impose its own height — give it one with the [`height`](modifiers/#heightheight) modifier or place it inside a parent with a finite height.
+
+## Installation
+
+
+
+## Usage
+
+### Uncontrolled
+
+The pager owns its scroll position natively. Use `initialPage` to pick the starting page, and listen for changes with `onCurrentPageChange` (fires mid-swipe as the snap target flips) or `onSettledPageChange` (fires only after the swipe settles).
+
+```tsx UncontrolledPagerExample.tsx
+import { Box, Column, Host, HorizontalPager, Text } from '@expo/ui/jetpack-compose';
+import { background, fillMaxSize, fillMaxWidth, height } from '@expo/ui/jetpack-compose/modifiers';
+import { useState } from 'react';
+
+export default function UncontrolledPagerExample() {
+ const [currentPage, setCurrentPage] = useState(1);
+ const [settledPage, setSettledPage] = useState(1);
+
+ return (
+
+
+
+ currentPage: {currentPage} · settledPage: {settledPage}
+
+
+
+
+
+
+
+
+ );
+}
+
+function Page({ label, color }: { label: string; color: string }) {
+ return (
+
+
+ {label}
+
+
+ );
+}
+```
+
+### Programmatic navigation
+
+Attach a `ref` and call `animateScrollToPage` or `scrollToPage` on it. These mirror Compose's `PagerState.animateScrollToPage` and `PagerState.scrollToPage`.
+
+```tsx ProgrammaticPagerExample.tsx
+import {
+ Box,
+ Button,
+ Column,
+ Host,
+ HorizontalPager,
+ type HorizontalPagerHandle,
+ Row,
+ Text,
+} from '@expo/ui/jetpack-compose';
+import { background, fillMaxSize, fillMaxWidth, height } from '@expo/ui/jetpack-compose/modifiers';
+import { useRef, useState } from 'react';
+
+const PAGE_COUNT = 5;
+
+export default function ProgrammaticPagerExample() {
+ const pagerRef = useRef(null);
+ const [page, setPage] = useState(0);
+
+ return (
+
+
+
+ Page {page + 1} / {PAGE_COUNT}
+
+
+ {Array.from({ length: PAGE_COUNT }).map((_, i) => (
+
+ ))}
+
+
+
+
+
+
+
+
+ );
+}
+
+const COLORS = ['#6200EE', '#03DAC5', '#FF5722', '#4CAF50', '#2196F3'];
+
+function Page({ label, color }: { label: string; color: string }) {
+ return (
+
+
+ {label}
+
+
+ );
+}
+```
+
+### Page spacing and content padding
+
+Use `pageSpacing` to add a gap between pages (visible during swipe) and `contentPadding` to inset the pager so neighboring pages peek at rest.
+
+```tsx PagerLayoutExample.tsx
+import { Box, Host, HorizontalPager, Text } from '@expo/ui/jetpack-compose';
+import { background, fillMaxSize, fillMaxWidth, height } from '@expo/ui/jetpack-compose/modifiers';
+
+export default function PagerLayoutExample() {
+ return (
+
+
+
+
+
+
+
+ );
+}
+
+function Page({ label, color }: { label: string; color: string }) {
+ return (
+
+
+ {label}
+
+
+ );
+}
+```
+
+## API
+
+```tsx
+import { HorizontalPager } from '@expo/ui/jetpack-compose';
+```
+
+
diff --git a/docs/public/static/data/unversioned/expo-ui/jetpack-compose/horizontalpager.json b/docs/public/static/data/unversioned/expo-ui/jetpack-compose/horizontalpager.json
new file mode 100644
index 00000000000000..d3fe23da42362f
--- /dev/null
+++ b/docs/public/static/data/unversioned/expo-ui/jetpack-compose/horizontalpager.json
@@ -0,0 +1 @@
+{"schemaVersion":"2.0","name":"expo-ui/jetpack-compose/horizontalpager","variant":"project","kind":1,"children":[{"name":"HorizontalPagerHandle","variant":"declaration","kind":2097152,"children":[{"name":"animateScrollToPage","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"Mirrors Compose's "},{"kind":"code","text":"`PagerState.animateScrollToPage`"},{"kind":"text","text":". Resolves when the\nanimation completes."}]},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"parameters":[{"name":"page","variant":"param","kind":32768,"type":{"type":"intrinsic","name":"number"}}],"type":{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Promise"},"typeArguments":[{"type":"intrinsic","name":"void"}],"name":"Promise","package":"typescript"}}]}}},{"name":"scrollToPage","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"Mirrors Compose's "},{"kind":"code","text":"`PagerState.scrollToPage`"},{"kind":"text","text":". Jumps without animation."}]},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"parameters":[{"name":"page","variant":"param","kind":32768,"type":{"type":"intrinsic","name":"number"}}],"type":{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Promise"},"typeArguments":[{"type":"intrinsic","name":"void"}],"name":"Promise","package":"typescript"}}]}}}]},{"name":"HorizontalPagerProps","variant":"declaration","kind":2097152,"children":[{"name":"beyondViewportPageCount","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Number of pages to compose and keep beyond the visible viewport."}],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"0"}]}]},"type":{"type":"intrinsic","name":"number"}},{"name":"children","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"Children to render as pages."}]},"type":{"type":"reference","target":{"packageName":"@types/react","packagePath":"index.d.ts","qualifiedName":"React.ReactNode"},"name":"React.ReactNode","package":"@types/react"}},{"name":"contentPadding","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Padding for pager content (dp or per-side object)."}],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"0"}]}]},"type":{"type":"union","types":[{"type":"intrinsic","name":"number"},{"type":"reference","name":"PaddingValuesRecord","package":"@expo/ui"}]}},{"name":"initialPage","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Page to mount on. Mirrors "},{"kind":"code","text":"`rememberPagerState(initialPage = …)`"},{"kind":"text","text":". Subsequent\nchanges have no effect — use the ref methods to navigate after mount."}],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"0"}]}]},"type":{"type":"intrinsic","name":"number"}},{"name":"modifiers","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Modifiers for the component."}]},"type":{"type":"array","elementType":{"type":"reference","target":{"packageName":"@expo/ui","packagePath":"src/types.ts","qualifiedName":"ModifierConfig"},"name":"ModifierConfig","package":"@expo/ui"}}},{"name":"onCurrentPageChange","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Fires when Compose's "},{"kind":"code","text":"`PagerState.currentPage`"},{"kind":"text","text":" changes — i.e. when the page\nclosest to the snap position flips, including mid-swipe as the user\ncrosses between pages."}]},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"parameters":[{"name":"page","variant":"param","kind":32768,"type":{"type":"intrinsic","name":"number"}}],"type":{"type":"intrinsic","name":"void"}}]}}},{"name":"onSettledPageChange","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Fires when Compose's "},{"kind":"code","text":"`PagerState.settledPage`"},{"kind":"text","text":" changes — i.e. after a\nswipe or programmatic scroll has fully settled."}]},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"parameters":[{"name":"page","variant":"param","kind":32768,"type":{"type":"intrinsic","name":"number"}}],"type":{"type":"intrinsic","name":"void"}}]}}},{"name":"pageSpacing","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Spacing between pages in dp."}],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"0"}]}]},"type":{"type":"intrinsic","name":"number"}},{"name":"ref","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Imperative handle for programmatic navigation. Mirrors the methods on\nCompose's "},{"kind":"code","text":"`PagerState`"},{"kind":"text","text":"."}]},"type":{"type":"reference","target":{"packageName":"@types/react","packagePath":"index.d.ts","qualifiedName":"React.Ref"},"typeArguments":[{"type":"reference","name":"HorizontalPagerHandle","package":"@expo/ui"}],"name":"Ref","package":"@types/react","qualifiedName":"React.Ref"}},{"name":"reverseLayout","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Whether to reverse the layout direction."}],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"false"}]}]},"type":{"type":"intrinsic","name":"boolean"}},{"name":"userScrollEnabled","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Whether the user can scroll the pager by swiping."}],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"true"}]}]},"type":{"type":"intrinsic","name":"boolean"}}]},{"name":"PaddingValuesRecord","variant":"declaration","kind":2097152,"comment":{"summary":[{"kind":"text","text":"Per-side padding values in dp for the content."}]},"children":[{"name":"bottom","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}},{"name":"end","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}},{"name":"start","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}},{"name":"top","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}}]},{"name":"HorizontalPager","variant":"declaration","kind":64,"signatures":[{"name":"HorizontalPager","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"A horizontally scrolling pager that snaps to individual pages,\nmatching Compose's "},{"kind":"code","text":"`HorizontalPager`"},{"kind":"text","text":"."}]},"parameters":[{"name":"props","variant":"param","kind":32768,"type":{"type":"reference","name":"HorizontalPagerProps","package":"@expo/ui"}}],"type":{"type":"reference","target":{"packageName":"@types/react","packagePath":"jsx-runtime.d.ts","qualifiedName":"JSX.Element"},"name":"Element","package":"@types/react","qualifiedName":"JSX.Element"}}]}],"packageName":"@expo/ui"}
\ No newline at end of file
diff --git a/packages/@expo/cli/package.json b/packages/@expo/cli/package.json
index 4f5712b4b79c92..c453c1bbdc47e0 100644
--- a/packages/@expo/cli/package.json
+++ b/packages/@expo/cli/package.json
@@ -50,24 +50,24 @@
"homepage": "https://github.com/expo/expo/tree/main/packages/@expo/cli",
"dependencies": {
"@expo/code-signing-certificates": "^0.0.6",
- "@expo/config": "56.0.0",
- "@expo/config-plugins": "56.0.0",
+ "@expo/config": "workspace:~56.0.0",
+ "@expo/config-plugins": "workspace:~56.0.0",
"@expo/devcert": "^1.2.1",
- "@expo/env": "2.2.0",
- "@expo/image-utils": "0.9.0",
- "@expo/inline-modules": "0.0.2",
- "@expo/json-file": "10.1.0",
- "@expo/log-box": "56.0.1",
+ "@expo/env": "workspace:~2.2.0",
+ "@expo/image-utils": "workspace:^0.9.0",
+ "@expo/inline-modules": "workspace:0.0.2",
+ "@expo/json-file": "workspace:^10.1.0",
+ "@expo/log-box": "workspace:56.0.1",
"@expo/metro": "~56.0.0",
- "@expo/metro-config": "56.0.1",
- "@expo/metro-file-map": "56.0.0-0",
- "@expo/osascript": "2.5.0",
- "@expo/package-manager": "1.11.0",
- "@expo/plist": "0.6.0",
- "@expo/prebuild-config": "56.0.0",
- "@expo/require-utils": "56.0.0",
- "@expo/router-server": "56.0.1",
- "@expo/schema-utils": "56.0.0",
+ "@expo/metro-config": "workspace:~56.0.1",
+ "@expo/metro-file-map": "workspace:56.0.0-0",
+ "@expo/osascript": "workspace:^2.5.0",
+ "@expo/package-manager": "workspace:^1.11.0",
+ "@expo/plist": "workspace:^0.6.0",
+ "@expo/prebuild-config": "workspace:^56.0.0",
+ "@expo/require-utils": "workspace:^56.0.0",
+ "@expo/router-server": "workspace:^56.0.1",
+ "@expo/schema-utils": "workspace:^56.0.0",
"@expo/spawn-async": "^1.7.2",
"@expo/ws-tunnel": "^1.0.1",
"@expo/xcpretty": "^4.4.0",
@@ -83,7 +83,7 @@
"connect": "^3.7.0",
"debug": "^4.3.4",
"dnssd-advertise": "^1.1.4",
- "expo-server": "56.0.0",
+ "expo-server": "workspace:^56.0.0",
"fetch-nodeshim": "^0.4.10",
"getenv": "^2.0.0",
"glob": "^13.0.0",
@@ -115,8 +115,8 @@
]
},
"peerDependencies": {
- "expo": "56.0.0-preview.2",
- "expo-router": "56.0.1",
+ "expo": "workspace:*",
+ "expo-router": "workspace:*",
"react-native": "*"
},
"peerDependenciesMeta": {
@@ -128,7 +128,7 @@
}
},
"devDependencies": {
- "@expo/fingerprint": "0.17.1",
+ "@expo/fingerprint": "workspace:*",
"@expo/mcp-tunnel": "~0.2.3",
"@expo/ngrok": "^4.1.3",
"@jest/globals": "^29.7.0",
@@ -162,8 +162,8 @@
"devtools-protocol": "^0.0.1113120",
"expect": "^29.7.0",
"expo-atlas": "^0.4.1",
- "expo-module-scripts": "56.0.0",
- "expo-modules-autolinking": "56.0.0",
+ "expo-module-scripts": "workspace:*",
+ "expo-modules-autolinking": "workspace:*",
"find-process": "^1.4.7",
"jest-matcher-utils": "^29.7.0",
"klaw-sync": "^6.0.0",
diff --git a/packages/@expo/config-plugins/package.json b/packages/@expo/config-plugins/package.json
index 2ef6fc0ff14202..b9ca0145bb0848 100644
--- a/packages/@expo/config-plugins/package.json
+++ b/packages/@expo/config-plugins/package.json
@@ -54,9 +54,9 @@
"paths"
],
"dependencies": {
- "@expo/config-types": "56.0.0",
- "@expo/json-file": "10.1.0",
- "@expo/plist": "0.6.0",
+ "@expo/config-types": "workspace:^56.0.0",
+ "@expo/json-file": "workspace:~10.1.0",
+ "@expo/plist": "workspace:^0.6.0",
"@expo/sdk-runtime-versions": "^1.0.0",
"chalk": "^4.1.2",
"debug": "^4.3.5",
@@ -74,7 +74,7 @@
"@types/getenv": "^1.0.0",
"@types/semver": "^7.7.0",
"@types/xml2js": "~0.4.11",
- "expo-module-scripts": "56.0.0"
+ "expo-module-scripts": "workspace:*"
},
"publishConfig": {
"access": "public"
diff --git a/packages/@expo/config-types/package.json b/packages/@expo/config-types/package.json
index 0c4e80a02bcde4..674fb74c655db7 100644
--- a/packages/@expo/config-types/package.json
+++ b/packages/@expo/config-types/package.json
@@ -38,7 +38,7 @@
"devDependencies": {
"chalk": "^4.1.2",
"commander": "^12.1.0",
- "expo-module-scripts": "56.0.0",
+ "expo-module-scripts": "workspace:*",
"json-schema-to-typescript": "^15.0.0",
"semver": "^7.7.4"
},
diff --git a/packages/@expo/config/package.json b/packages/@expo/config/package.json
index f09e9e0e01cdd8..83c1492f7a5df2 100644
--- a/packages/@expo/config/package.json
+++ b/packages/@expo/config/package.json
@@ -32,10 +32,10 @@
"paths"
],
"dependencies": {
- "@expo/config-plugins": "56.0.0",
- "@expo/config-types": "56.0.0",
- "@expo/json-file": "10.1.0",
- "@expo/require-utils": "56.0.0",
+ "@expo/config-plugins": "workspace:~56.0.0",
+ "@expo/config-types": "workspace:^56.0.0",
+ "@expo/json-file": "workspace:^10.1.0",
+ "@expo/require-utils": "workspace:^56.0.0",
"deepmerge": "^4.3.1",
"getenv": "^2.0.0",
"glob": "^13.0.0",
@@ -48,7 +48,7 @@
"@types/babel__code-frame": "^7.27.0",
"@types/getenv": "^1.0.0",
"@types/semver": "^7.5.8",
- "expo-module-scripts": "56.0.0"
+ "expo-module-scripts": "workspace:*"
},
"publishConfig": {
"access": "public"
diff --git a/packages/@expo/devtools/package.json b/packages/@expo/devtools/package.json
index 7fcb1ebed38d29..0c5fcd8ecf54f0 100644
--- a/packages/@expo/devtools/package.json
+++ b/packages/@expo/devtools/package.json
@@ -47,7 +47,7 @@
"devDependencies": {
"@types/node": "^22.14.0",
"@types/react": "~19.2.0",
- "expo-module-scripts": "56.0.0",
+ "expo-module-scripts": "workspace:*",
"ws": "^8.18.0"
},
"peerDependencies": {
diff --git a/packages/@expo/dom-webview/package.json b/packages/@expo/dom-webview/package.json
index f7e0d343406f62..e3ff26cb5d651e 100644
--- a/packages/@expo/dom-webview/package.json
+++ b/packages/@expo/dom-webview/package.json
@@ -37,10 +37,10 @@
"dependencies": {},
"devDependencies": {
"@types/react": "~19.2.0",
- "expo-module-scripts": "56.0.0"
+ "expo-module-scripts": "workspace:*"
},
"peerDependencies": {
- "expo": "56.0.0-preview.2",
+ "expo": "workspace:*",
"react": "*",
"react-native": "*"
}
diff --git a/packages/@expo/env/package.json b/packages/@expo/env/package.json
index 0303beec821afb..ebb4ab556c58c9 100644
--- a/packages/@expo/env/package.json
+++ b/packages/@expo/env/package.json
@@ -37,7 +37,7 @@
"@babel/cli": "^7.23.4",
"@types/debug": "^4.1.7",
"@types/getenv": "^1.0.0",
- "expo-module-scripts": "56.0.0"
+ "expo-module-scripts": "workspace:*"
},
"publishConfig": {
"access": "public"
diff --git a/packages/@expo/fingerprint/package.json b/packages/@expo/fingerprint/package.json
index f390ca24a1ca48..528e2d4a92a08d 100644
--- a/packages/@expo/fingerprint/package.json
+++ b/packages/@expo/fingerprint/package.json
@@ -43,7 +43,7 @@
"license": "MIT",
"homepage": "https://github.com/expo/expo/tree/main/packages/@expo/fingerprint#readme",
"dependencies": {
- "@expo/env": "2.2.0",
+ "@expo/env": "workspace:^2.2.0",
"@expo/spawn-async": "^1.7.2",
"arg": "^5.0.2",
"chalk": "^4.1.2",
@@ -60,9 +60,9 @@
"@types/getenv": "^1.0.0",
"@types/semver": "^7.5.8",
"@types/node": "^22.14.0",
- "expo": "56.0.0-preview.2",
- "expo-module-scripts": "56.0.0",
- "expo-splash-screen": "56.0.1",
+ "expo": "workspace:*",
+ "expo-module-scripts": "workspace:*",
+ "expo-splash-screen": "workspace:*",
"require-from-string": "^2.0.2",
"temp-dir": "^2.0.0"
}
diff --git a/packages/@expo/image-utils/package.json b/packages/@expo/image-utils/package.json
index a41b248fea2564..9e8f787d735444 100644
--- a/packages/@expo/image-utils/package.json
+++ b/packages/@expo/image-utils/package.json
@@ -32,7 +32,7 @@
],
"dependencies": {
"@expo/spawn-async": "^1.7.2",
- "@expo/require-utils": "56.0.0",
+ "@expo/require-utils": "workspace:^56.0.0",
"chalk": "^4.0.0",
"getenv": "^2.0.0",
"jimp-compact": "0.16.1",
@@ -42,7 +42,7 @@
"devDependencies": {
"@types/getenv": "^1.0.0",
"@types/semver": "^7.0.0",
- "expo-module-scripts": "56.0.0",
+ "expo-module-scripts": "workspace:*",
"sharp": "~0.34.2",
"sharp-cli": "^5.2.0"
},
diff --git a/packages/@expo/inline-modules/package.json b/packages/@expo/inline-modules/package.json
index 78cc2133e33218..d93700f53b64a2 100644
--- a/packages/@expo/inline-modules/package.json
+++ b/packages/@expo/inline-modules/package.json
@@ -30,11 +30,11 @@
"url": "https://github.com/expo/expo/issues"
},
"dependencies": {
- "@expo/config-plugins": "56.0.0"
+ "@expo/config-plugins": "workspace:~56.0.0"
},
"devDependencies": {
"@types/jest": "^29.2.1",
"@types/node": "^22.14.0",
- "expo-module-scripts": "56.0.0"
+ "expo-module-scripts": "workspace:*"
}
}
diff --git a/packages/@expo/json-file/package.json b/packages/@expo/json-file/package.json
index f25f230a7d19f0..043ec7a4ded33d 100644
--- a/packages/@expo/json-file/package.json
+++ b/packages/@expo/json-file/package.json
@@ -36,7 +36,7 @@
"@types/babel__code-frame": "^7.27.0",
"@types/json5": "^2.2.0",
"@types/node": "^22.14.0",
- "expo-module-scripts": "56.0.0",
+ "expo-module-scripts": "workspace:*",
"memfs": "^3.2.0"
},
"publishConfig": {
diff --git a/packages/@expo/local-build-cache-provider/package.json b/packages/@expo/local-build-cache-provider/package.json
index 95ea8b36cf65b8..1cea7feac48cdb 100644
--- a/packages/@expo/local-build-cache-provider/package.json
+++ b/packages/@expo/local-build-cache-provider/package.json
@@ -39,12 +39,12 @@
"build"
],
"dependencies": {
- "@expo/config": "56.0.0",
+ "@expo/config": "workspace:~56.0.0",
"chalk": "^4.1.2"
},
"devDependencies": {
"@types/node": "^22.14.0",
- "expo-module-scripts": "56.0.0",
+ "expo-module-scripts": "workspace:*",
"memfs": "^3.2.0"
}
}
diff --git a/packages/@expo/log-box/package.json b/packages/@expo/log-box/package.json
index 8cbe76af371694..a1efe6c949b9d3 100644
--- a/packages/@expo/log-box/package.json
+++ b/packages/@expo/log-box/package.json
@@ -20,7 +20,7 @@
"export:web": "expo export -p web --no-minify"
},
"dependencies": {
- "@expo/dom-webview": "56.0.1",
+ "@expo/dom-webview": "workspace:^56.0.1",
"anser": "^1.4.9",
"stacktrace-parser": "^0.1.10"
},
@@ -28,7 +28,7 @@
"@expo/spawn-async": "^1.7.2",
"@types/react": "~19.2.0",
"@types/react-dom": "^19.1.7",
- "expo-module-scripts": "56.0.0",
+ "expo-module-scripts": "workspace:*",
"glob": "^13.0.0",
"npm-run-all2": "^8.0.4",
"react": "19.2.3",
@@ -39,8 +39,8 @@
"typescript-plugin-css-modules": "^5.2.0"
},
"peerDependencies": {
- "@expo/dom-webview": "56.0.1",
- "expo": "56.0.0-preview.2",
+ "@expo/dom-webview": "workspace:^56.0.1",
+ "expo": "workspace:*",
"react": "*",
"react-native": "*"
},
diff --git a/packages/@expo/metro-config/package.json b/packages/@expo/metro-config/package.json
index 88df6a42eb36d7..277c6d54e9a4ae 100644
--- a/packages/@expo/metro-config/package.json
+++ b/packages/@expo/metro-config/package.json
@@ -65,9 +65,9 @@
"@babel/code-frame": "^7.20.0",
"@babel/core": "^7.20.0",
"@babel/generator": "^7.20.5",
- "@expo/config": "56.0.0",
- "@expo/env": "2.2.0",
- "@expo/json-file": "10.1.0",
+ "@expo/config": "workspace:~56.0.0",
+ "@expo/env": "workspace:~2.2.0",
+ "@expo/json-file": "workspace:~10.1.0",
"@expo/metro": "~56.0.0",
"@expo/spawn-async": "^1.7.2",
"browserslist": "^4.25.0",
@@ -83,7 +83,7 @@
"resolve-from": "^5.0.0"
},
"peerDependencies": {
- "expo": "56.0.0-preview.2"
+ "expo": "workspace:*"
},
"peerDependenciesMeta": {
"expo": {
@@ -98,7 +98,7 @@
"@types/getenv": "^1.0.0",
"@types/picomatch": "^4.0.2",
"dedent": "^1.5.3",
- "expo-module-scripts": "56.0.0",
+ "expo-module-scripts": "workspace:*",
"metro-minify-terser": "^0.84.2",
"sass": "^1.60.0"
},
diff --git a/packages/@expo/metro-file-map/package.json b/packages/@expo/metro-file-map/package.json
index bc629b0e065295..12917ea43cba56 100644
--- a/packages/@expo/metro-file-map/package.json
+++ b/packages/@expo/metro-file-map/package.json
@@ -45,7 +45,7 @@
"@types/invariant": "^2.2.37",
"@types/micromatch": "^4.0.10",
"@types/node": "^22.14.0",
- "expo-module-scripts": "56.0.0",
+ "expo-module-scripts": "workspace:*",
"memfs": "^3.6.0"
},
"publishConfig": {
diff --git a/packages/@expo/metro-runtime/package.json b/packages/@expo/metro-runtime/package.json
index c9bf43c74749ef..833c9e90878055 100644
--- a/packages/@expo/metro-runtime/package.json
+++ b/packages/@expo/metro-runtime/package.json
@@ -38,7 +38,7 @@
"url": "https://github.com/expo/expo.git"
},
"peerDependencies": {
- "expo": "56.0.0-preview.2",
+ "expo": "workspace:*",
"react": "*",
"react-dom": "*",
"react-native": "*"
@@ -49,7 +49,7 @@
}
},
"dependencies": {
- "@expo/log-box": "56.0.1",
+ "@expo/log-box": "workspace:56.0.1",
"anser": "^1.4.9",
"stacktrace-parser": "^0.1.10",
"pretty-format": "^29.7.0",
@@ -57,8 +57,8 @@
},
"devDependencies": {
"@types/react": "~19.2.0",
- "expo-constants": "56.0.1",
- "expo-module-scripts": "56.0.0",
+ "expo-constants": "workspace:*",
+ "expo-module-scripts": "workspace:*",
"react-dom": "19.2.3"
}
}
diff --git a/packages/@expo/osascript/package.json b/packages/@expo/osascript/package.json
index dd7d503647a6e0..de85aea7713c0c 100644
--- a/packages/@expo/osascript/package.json
+++ b/packages/@expo/osascript/package.json
@@ -40,7 +40,7 @@
},
"devDependencies": {
"@types/node": "^22.14.0",
- "expo-module-scripts": "56.0.0"
+ "expo-module-scripts": "workspace:*"
},
"publishConfig": {
"access": "public"
diff --git a/packages/@expo/package-manager/package.json b/packages/@expo/package-manager/package.json
index 8e6ff06a270db1..eab90fafef5183 100644
--- a/packages/@expo/package-manager/package.json
+++ b/packages/@expo/package-manager/package.json
@@ -36,7 +36,7 @@
"build"
],
"dependencies": {
- "@expo/json-file": "10.1.0",
+ "@expo/json-file": "workspace:^10.1.0",
"@expo/spawn-async": "^1.7.2",
"chalk": "^4.0.0",
"npm-package-arg": "^11.0.0",
@@ -46,7 +46,7 @@
"devDependencies": {
"@types/micromatch": "^4.0.2",
"@types/npm-package-arg": "^6.1.0",
- "expo-module-scripts": "56.0.0"
+ "expo-module-scripts": "workspace:*"
},
"publishConfig": {
"access": "public"
diff --git a/packages/@expo/pkcs12/package.json b/packages/@expo/pkcs12/package.json
index 95fbb2ffced6be..2525e439faab68 100644
--- a/packages/@expo/pkcs12/package.json
+++ b/packages/@expo/pkcs12/package.json
@@ -34,7 +34,7 @@
"devDependencies": {
"@types/node": "^22.14.0",
"@types/node-forge": "^1.0.0",
- "expo-module-scripts": "56.0.0"
+ "expo-module-scripts": "workspace:*"
},
"publishConfig": {
"access": "public"
diff --git a/packages/@expo/plist/package.json b/packages/@expo/plist/package.json
index 71261f281912a8..da587affeea477 100644
--- a/packages/@expo/plist/package.json
+++ b/packages/@expo/plist/package.json
@@ -35,7 +35,7 @@
},
"devDependencies": {
"@types/node": "^22.14.0",
- "expo-module-scripts": "56.0.0"
+ "expo-module-scripts": "workspace:*"
},
"publishConfig": {
"access": "public"
diff --git a/packages/@expo/prebuild-config/package.json b/packages/@expo/prebuild-config/package.json
index dede59cb5dfb00..675e0d41317f55 100644
--- a/packages/@expo/prebuild-config/package.json
+++ b/packages/@expo/prebuild-config/package.json
@@ -32,20 +32,20 @@
],
"devDependencies": {
"@babel/cli": "^7.23.4",
- "@expo/plist": "0.6.0",
+ "@expo/plist": "workspace:*",
"@types/debug": "^4.1.5",
"@types/semver": "^7.5.8",
- "expo-module-scripts": "56.0.0",
+ "expo-module-scripts": "workspace:*",
"memfs": "^3.2.0"
},
"dependencies": {
- "@expo/config": "56.0.0",
- "@expo/config-plugins": "56.0.0",
- "@expo/config-types": "56.0.0",
- "@expo/image-utils": "0.9.0",
- "@expo/json-file": "10.1.0",
+ "@expo/config": "workspace:~56.0.0",
+ "@expo/config-plugins": "workspace:~56.0.0",
+ "@expo/config-types": "workspace:^56.0.0",
+ "@expo/image-utils": "workspace:^0.9.0",
+ "@expo/json-file": "workspace:^10.1.0",
"@react-native/normalize-colors": "0.85.2",
- "expo-modules-autolinking": "56.0.0",
+ "expo-modules-autolinking": "workspace:~56.0.0",
"debug": "^4.3.1",
"resolve-from": "^5.0.0",
"semver": "^7.6.0"
diff --git a/packages/@expo/require-utils/package.json b/packages/@expo/require-utils/package.json
index 0dfaeb12314bb8..db2126232ab819 100644
--- a/packages/@expo/require-utils/package.json
+++ b/packages/@expo/require-utils/package.json
@@ -44,7 +44,7 @@
"@types/babel__core": "^7.20.5",
"@types/babel__code-frame": "^7.27.0",
"@types/node": "^22.14.0",
- "expo-module-scripts": "56.0.0",
+ "expo-module-scripts": "workspace:*",
"memfs": "^3.2.0"
},
"publishConfig": {
diff --git a/packages/@expo/router-server/package.json b/packages/@expo/router-server/package.json
index db39a1bfc24119..483ea2b3fdeb51 100644
--- a/packages/@expo/router-server/package.json
+++ b/packages/@expo/router-server/package.json
@@ -34,12 +34,12 @@
"expo"
],
"peerDependencies": {
- "@expo/metro-runtime": "56.0.1",
- "expo": "56.0.0-preview.2",
- "expo-constants": "56.0.1",
- "expo-font": "56.0.1",
- "expo-router": "56.0.1",
- "expo-server": "56.0.0",
+ "@expo/metro-runtime": "workspace:^56.0.1",
+ "expo": "workspace:*",
+ "expo-constants": "workspace:^56.0.1",
+ "expo-font": "workspace:^56.0.1",
+ "expo-router": "workspace:*",
+ "expo-server": "workspace:^56.0.0",
"react": "*",
"react-dom": "*",
"react-server-dom-webpack": "~19.0.1 || ~19.1.2 || ~19.2.1"
diff --git a/packages/@expo/schema-utils/package.json b/packages/@expo/schema-utils/package.json
index a1d2f0b2a79361..dff4833e70fa7e 100644
--- a/packages/@expo/schema-utils/package.json
+++ b/packages/@expo/schema-utils/package.json
@@ -29,7 +29,7 @@
"devDependencies": {
"@babel/cli": "^7.23.4",
"@types/node": "^22.14.0",
- "expo-module-scripts": "56.0.0",
+ "expo-module-scripts": "workspace:*",
"json-schema-to-typescript": "^15.0.0"
},
"publishConfig": {
diff --git a/packages/@expo/schemer/package.json b/packages/@expo/schemer/package.json
index fe60eb45fc439a..22ec96e58e1065 100644
--- a/packages/@expo/schemer/package.json
+++ b/packages/@expo/schemer/package.json
@@ -35,7 +35,7 @@
},
"devDependencies": {
"@types/probe-image-size": "^7.2.4",
- "expo-module-scripts": "56.0.0"
+ "expo-module-scripts": "workspace:*"
},
"publishConfig": {
"access": "public"
diff --git a/packages/babel-preset-expo/package.json b/packages/babel-preset-expo/package.json
index 548742f4e34431..2f7b0e6dd0e090 100644
--- a/packages/babel-preset-expo/package.json
+++ b/packages/babel-preset-expo/package.json
@@ -40,8 +40,8 @@
},
"peerDependencies": {
"@babel/runtime": "^7.20.0",
- "expo": "56.0.0-preview.2",
- "expo-widgets": "56.0.1",
+ "expo": "workspace:*",
+ "expo-widgets": "workspace:^56.0.1",
"react-refresh": ">=0.14.0 <1.0.0"
},
"peerDependenciesMeta": {
@@ -102,13 +102,13 @@
"devDependencies": {
"@babel/core": "^7.26.0",
"@expo/metro": "~56.0.0",
- "@expo/metro-config": "56.0.1",
+ "@expo/metro-config": "workspace:*",
"@types/babel__core": "^7.20.5",
"@types/babel__generator": "^7.27.0",
"@types/node": "^22.14.0",
"babel-plugin-module-resolver": "^5.0.2",
- "expo-module-scripts": "56.0.0",
- "expo-splash-screen": "56.0.1",
+ "expo-module-scripts": "workspace:*",
+ "expo-splash-screen": "workspace:*",
"jest": "^29.2.1",
"react-refresh": "^0.14.2",
"resolve-from": "^5.0.0"
diff --git a/packages/create-expo-module/package.json b/packages/create-expo-module/package.json
index ff89de8db008e2..5b6a8f3da6b548 100644
--- a/packages/create-expo-module/package.json
+++ b/packages/create-expo-module/package.json
@@ -42,7 +42,7 @@
"prepublishOnly": "pnpm run clean && pnpm run build:prod"
},
"devDependencies": {
- "@expo/json-file": "10.1.0",
+ "@expo/json-file": "workspace:*",
"@expo/rudder-sdk-node": "^1.1.1",
"@expo/spawn-async": "^1.7.2",
"@octokit/types": "^15.0.0",
@@ -59,7 +59,7 @@
"cross-spawn": "^7.0.5",
"debug": "^4.3.4",
"ejs": "^3.1.10",
- "expo-module-scripts": "56.0.0",
+ "expo-module-scripts": "workspace:*",
"getenv": "^2.0.0",
"ora": "^5.4.1",
"prompts": "^2.4.2",
diff --git a/packages/create-expo-nightly/package.json b/packages/create-expo-nightly/package.json
index e66c74ac95ca27..19caf112df7f36 100644
--- a/packages/create-expo-nightly/package.json
+++ b/packages/create-expo-nightly/package.json
@@ -40,6 +40,6 @@
},
"devDependencies": {
"@tsconfig/node22": "^22.0.3",
- "expo-module-scripts": "56.0.0"
+ "expo-module-scripts": "workspace:*"
}
}
diff --git a/packages/create-expo/package.json b/packages/create-expo/package.json
index 656ab639302121..a0d5ea2780de5d 100644
--- a/packages/create-expo/package.json
+++ b/packages/create-expo/package.json
@@ -37,9 +37,9 @@
"prepublishOnly": "pnpm run clean && pnpm run build:prod"
},
"devDependencies": {
- "@expo/config": "56.0.0",
- "@expo/json-file": "10.1.0",
- "@expo/package-manager": "1.11.0",
+ "@expo/config": "workspace:*",
+ "@expo/json-file": "workspace:*",
+ "@expo/package-manager": "workspace:*",
"@expo/spawn-async": "^1.7.2",
"@octokit/types": "^13.5.0",
"@types/debug": "^4.1.7",
@@ -51,7 +51,7 @@
"arg": "^5.0.2",
"chalk": "^4.0.0",
"debug": "^4.3.4",
- "expo-module-scripts": "56.0.0",
+ "expo-module-scripts": "workspace:*",
"getenv": "^2.0.0",
"glob": "^13.0.0",
"nock": "^14.0.10",
diff --git a/packages/eslint-config-expo/package.json b/packages/eslint-config-expo/package.json
index e034b341b50d35..558b6e06cc67a1 100644
--- a/packages/eslint-config-expo/package.json
+++ b/packages/eslint-config-expo/package.json
@@ -39,7 +39,7 @@
"@typescript-eslint/eslint-plugin": "^8.59.0",
"@typescript-eslint/parser": "^8.59.0",
"eslint-import-resolver-typescript": "^3.6.3",
- "eslint-plugin-expo": "1.0.1",
+ "eslint-plugin-expo": "workspace:^1.0.1",
"eslint-plugin-import": "^2.30.0",
"eslint-plugin-react": "^7.37.3",
"eslint-plugin-react-hooks": "^5.1.0",
diff --git a/packages/eslint-plugin-expo/package.json b/packages/eslint-plugin-expo/package.json
index 7d993dc1f4e449..5e801e19f2530c 100644
--- a/packages/eslint-plugin-expo/package.json
+++ b/packages/eslint-plugin-expo/package.json
@@ -32,7 +32,7 @@
"@types/eslint": "^8.56.12",
"@types/jest": "^29.5.12",
"@typescript-eslint/rule-tester": "^8.59.0",
- "eslint-config-universe": "15.1.0",
+ "eslint-config-universe": "workspace:*",
"eslint-plugin-eslint-plugin": "^6.2.0",
"jest": "^29.7.0",
"ts-jest": "^29.1.2"
diff --git a/packages/expo-age-range/package.json b/packages/expo-age-range/package.json
index 95e894a8e6b521..2ff7b5b1d05bd5 100644
--- a/packages/expo-age-range/package.json
+++ b/packages/expo-age-range/package.json
@@ -35,10 +35,10 @@
},
"dependencies": {},
"devDependencies": {
- "expo-module-scripts": "56.0.0"
+ "expo-module-scripts": "workspace:*"
},
"peerDependencies": {
- "expo": "56.0.0-preview.2",
+ "expo": "workspace:*",
"react-native": "*"
}
}
diff --git a/packages/expo-app-integrity/package.json b/packages/expo-app-integrity/package.json
index a8dc5f0af83b48..09febcc94f1b77 100644
--- a/packages/expo-app-integrity/package.json
+++ b/packages/expo-app-integrity/package.json
@@ -36,7 +36,7 @@
},
"dependencies": {},
"devDependencies": {
- "expo-module-scripts": "56.0.0"
+ "expo-module-scripts": "workspace:*"
},
"peerDependencies": {
"expo": "workspace:*",
diff --git a/packages/expo-app-metrics/package.json b/packages/expo-app-metrics/package.json
index 6a0ee881be37d8..08a1557fee254c 100644
--- a/packages/expo-app-metrics/package.json
+++ b/packages/expo-app-metrics/package.json
@@ -30,14 +30,14 @@
"author": "650 Industries, Inc.",
"license": "MIT",
"dependencies": {
- "expo-updates-interface": "56.0.1"
+ "expo-updates-interface": "workspace:~56.0.1"
},
"devDependencies": {
"@types/react": "~19.2.0",
- "expo-module-scripts": "56.0.0"
+ "expo-module-scripts": "workspace:*"
},
"peerDependencies": {
- "expo": "56.0.0-preview.2",
+ "expo": "workspace:*",
"react": "*",
"react-native": "*"
}
diff --git a/packages/expo-apple-authentication/package.json b/packages/expo-apple-authentication/package.json
index 2ec0ec2188a28b..c33bf399ee02cc 100644
--- a/packages/expo-apple-authentication/package.json
+++ b/packages/expo-apple-authentication/package.json
@@ -34,10 +34,10 @@
"devDependencies": {
"@types/node": "^22.14.0",
"@types/react": "~19.2.0",
- "expo-module-scripts": "56.0.0"
+ "expo-module-scripts": "workspace:*"
},
"peerDependencies": {
- "expo": "56.0.0-preview.2",
+ "expo": "workspace:*",
"react": "*",
"react-native": "*"
}
diff --git a/packages/expo-application/package.json b/packages/expo-application/package.json
index 6e4f2223ac1516..1507ea631cee14 100644
--- a/packages/expo-application/package.json
+++ b/packages/expo-application/package.json
@@ -30,9 +30,9 @@
"homepage": "https://docs.expo.dev/versions/latest/sdk/application/",
"dependencies": {},
"devDependencies": {
- "expo-module-scripts": "56.0.0"
+ "expo-module-scripts": "workspace:*"
},
"peerDependencies": {
- "expo": "56.0.0-preview.2"
+ "expo": "workspace:*"
}
}
diff --git a/packages/expo-asset/package.json b/packages/expo-asset/package.json
index a019d333d6f2cf..421be87759aff6 100644
--- a/packages/expo-asset/package.json
+++ b/packages/expo-asset/package.json
@@ -48,18 +48,18 @@
"preset": "expo-module-scripts"
},
"dependencies": {
- "@expo/image-utils": "0.9.0",
- "expo-constants": "56.0.1"
+ "@expo/image-utils": "workspace:^0.9.0",
+ "expo-constants": "workspace:~56.0.1"
},
"devDependencies": {
"@testing-library/react-native": "^13.3.0",
"@types/node": "^22.14.0",
"@types/react": "~19.2.0",
"@types/react-native__assets": "^1.0.3",
- "expo-module-scripts": "56.0.0"
+ "expo-module-scripts": "workspace:*"
},
"peerDependencies": {
- "expo": "56.0.0-preview.2",
+ "expo": "workspace:*",
"react": "*",
"react-native": "*"
}
diff --git a/packages/expo-audio/package.json b/packages/expo-audio/package.json
index 22cb2d2742b734..5559d999ddebee 100644
--- a/packages/expo-audio/package.json
+++ b/packages/expo-audio/package.json
@@ -34,12 +34,12 @@
"devDependencies": {
"@types/react": "~19.2.0",
"@types/node": "^22.14.0",
- "expo-module-scripts": "56.0.0"
+ "expo-module-scripts": "workspace:*"
},
"peerDependencies": {
- "expo": "56.0.0-preview.2",
+ "expo": "workspace:*",
"react": "*",
"react-native": "*",
- "expo-asset": "56.0.1"
+ "expo-asset": "workspace:*"
}
}
diff --git a/packages/expo-auth-session/package.json b/packages/expo-auth-session/package.json
index f64f8046013eae..7d531bb6a6d281 100644
--- a/packages/expo-auth-session/package.json
+++ b/packages/expo-auth-session/package.json
@@ -33,17 +33,17 @@
"license": "MIT",
"homepage": "https://docs.expo.dev/versions/latest/sdk/auth-session",
"dependencies": {
- "expo-application": "56.0.0",
- "expo-constants": "56.0.1",
- "expo-crypto": "56.0.0",
- "expo-linking": "56.0.0",
- "expo-web-browser": "56.0.1",
+ "expo-application": "workspace:~56.0.0",
+ "expo-constants": "workspace:~56.0.1",
+ "expo-crypto": "workspace:~56.0.0",
+ "expo-linking": "workspace:~56.0.0",
+ "expo-web-browser": "workspace:~56.0.1",
"invariant": "^2.2.4"
},
"devDependencies": {
"@types/react": "~19.2.0",
"@types/invariant": "^2.2.33",
- "expo-module-scripts": "56.0.0"
+ "expo-module-scripts": "workspace:*"
},
"peerDependencies": {
"react": "*",
diff --git a/packages/expo-background-fetch/package.json b/packages/expo-background-fetch/package.json
index f8782881f56c29..762252abcd1d24 100644
--- a/packages/expo-background-fetch/package.json
+++ b/packages/expo-background-fetch/package.json
@@ -32,13 +32,13 @@
"license": "MIT",
"homepage": "https://docs.expo.dev/versions/latest/sdk/background-fetch/",
"dependencies": {
- "expo-task-manager": "56.0.0"
+ "expo-task-manager": "workspace:~56.0.0"
},
"devDependencies": {
"@types/node": "^22.14.0",
- "expo-module-scripts": "56.0.0"
+ "expo-module-scripts": "workspace:*"
},
"peerDependencies": {
- "expo": "56.0.0-preview.2"
+ "expo": "workspace:*"
}
}
diff --git a/packages/expo-background-task/package.json b/packages/expo-background-task/package.json
index 53bf7291eb72f7..8ebdef51fb7a40 100644
--- a/packages/expo-background-task/package.json
+++ b/packages/expo-background-task/package.json
@@ -31,13 +31,13 @@
"license": "MIT",
"homepage": "https://docs.expo.dev/versions/latest/sdk/background-task/",
"dependencies": {
- "expo-task-manager": "56.0.0"
+ "expo-task-manager": "workspace:~56.0.0"
},
"devDependencies": {
"@types/node": "^22.14.0",
- "expo-module-scripts": "56.0.0"
+ "expo-module-scripts": "workspace:*"
},
"peerDependencies": {
- "expo": "56.0.0-preview.2"
+ "expo": "workspace:*"
}
}
diff --git a/packages/expo-battery/package.json b/packages/expo-battery/package.json
index 893d25ec8ca7ed..1fcc861056fa7a 100644
--- a/packages/expo-battery/package.json
+++ b/packages/expo-battery/package.json
@@ -31,10 +31,10 @@
"dependencies": {},
"devDependencies": {
"@types/react": "~19.2.0",
- "expo-module-scripts": "56.0.0"
+ "expo-module-scripts": "workspace:*"
},
"peerDependencies": {
- "expo": "56.0.0-preview.2",
+ "expo": "workspace:*",
"react": "*"
}
}
diff --git a/packages/expo-blob/package.json b/packages/expo-blob/package.json
index 77ac74e510bd45..bd2261145aea8a 100644
--- a/packages/expo-blob/package.json
+++ b/packages/expo-blob/package.json
@@ -31,9 +31,9 @@
"dependencies": {},
"devDependencies": {
"@types/react": "~19.2.0",
- "expo-module-scripts": "56.0.0"
+ "expo-module-scripts": "workspace:*"
},
"peerDependencies": {
- "expo": "56.0.0-preview.2"
+ "expo": "workspace:*"
}
}
diff --git a/packages/expo-blur/package.json b/packages/expo-blur/package.json
index afdb842d151b7e..e09bfcf1ee1a46 100644
--- a/packages/expo-blur/package.json
+++ b/packages/expo-blur/package.json
@@ -39,10 +39,10 @@
"@testing-library/react": "^16.3.0",
"@testing-library/react-native": "^13.3.0",
"@types/react": "~19.2.0",
- "expo-module-scripts": "56.0.0"
+ "expo-module-scripts": "workspace:*"
},
"peerDependencies": {
- "expo": "56.0.0-preview.2",
+ "expo": "workspace:*",
"react": "*",
"react-native": "*"
}
diff --git a/packages/expo-brightness/package.json b/packages/expo-brightness/package.json
index 9907e4e63e6614..88603df624807c 100644
--- a/packages/expo-brightness/package.json
+++ b/packages/expo-brightness/package.json
@@ -35,10 +35,10 @@
},
"devDependencies": {
"@types/node": "^22.14.0",
- "expo-module-scripts": "56.0.0"
+ "expo-module-scripts": "workspace:*"
},
"peerDependencies": {
- "expo": "56.0.0-preview.2",
+ "expo": "workspace:*",
"react-native": "*"
}
}
diff --git a/packages/expo-brownfield/package.json b/packages/expo-brownfield/package.json
index bdbc3b3d59dc3b..9bd9de03c0ae1b 100644
--- a/packages/expo-brownfield/package.json
+++ b/packages/expo-brownfield/package.json
@@ -49,12 +49,12 @@
"preset": "expo-module-scripts"
},
"dependencies": {
- "@expo/env": "2.2.0",
+ "@expo/env": "workspace:~2.2.0",
"chalk": "^4.1.2",
"commander": "^14.0.3",
"diff": "^5.2.0",
- "expo-build-properties": "56.0.0",
- "expo-manifests": "56.0.1",
+ "expo-build-properties": "workspace:~56.0.0",
+ "expo-manifests": "workspace:~56.0.1",
"ora": "^5.4.1",
"prompts": "^2.4.2"
},
@@ -65,12 +65,12 @@
"@types/prompts": "^2.0.6",
"@types/react": "~19.2.0",
"@types/node": "^22.14.0",
- "create-expo": "3.7.0",
- "expo-module-scripts": "56.0.0",
+ "create-expo": "workspace:*",
+ "expo-module-scripts": "workspace:*",
"glob": "^13.0.6"
},
"peerDependencies": {
- "expo": "56.0.0-preview.2",
+ "expo": "workspace:*",
"react": "*"
}
}
diff --git a/packages/expo-build-properties/package.json b/packages/expo-build-properties/package.json
index 4f5e3b99755f66..696c1ce4026e64 100644
--- a/packages/expo-build-properties/package.json
+++ b/packages/expo-build-properties/package.json
@@ -36,16 +36,16 @@
"license": "MIT",
"homepage": "https://docs.expo.dev/versions/latest/sdk/build-properties",
"dependencies": {
- "@expo/schema-utils": "56.0.0",
+ "@expo/schema-utils": "workspace:^56.0.0",
"resolve-from": "^5.0.0",
"semver": "^7.6.0"
},
"devDependencies": {
"@types/semver": "^7.0.0",
"@types/node": "^22.14.0",
- "expo-module-scripts": "56.0.0"
+ "expo-module-scripts": "workspace:*"
},
"peerDependencies": {
- "expo": "56.0.0-preview.2"
+ "expo": "workspace:*"
}
}
diff --git a/packages/expo-calendar/package.json b/packages/expo-calendar/package.json
index 29afab44d6120d..95fa6f1b1df49e 100644
--- a/packages/expo-calendar/package.json
+++ b/packages/expo-calendar/package.json
@@ -35,10 +35,10 @@
},
"devDependencies": {
"@types/node": "^22.14.0",
- "expo-module-scripts": "56.0.0"
+ "expo-module-scripts": "workspace:*"
},
"peerDependencies": {
- "expo": "56.0.0-preview.2",
+ "expo": "workspace:*",
"react-native": "*"
}
}
diff --git a/packages/expo-camera/package.json b/packages/expo-camera/package.json
index 77504abc8cee15..2ec17f46c19e75 100644
--- a/packages/expo-camera/package.json
+++ b/packages/expo-camera/package.json
@@ -38,10 +38,10 @@
"devDependencies": {
"@types/react": "~19.2.0",
"@types/node": "^22.14.0",
- "expo-module-scripts": "56.0.0"
+ "expo-module-scripts": "workspace:*"
},
"peerDependencies": {
- "expo": "56.0.0-preview.2",
+ "expo": "workspace:*",
"react": "*",
"react-native": "*",
"react-native-web": "*"
diff --git a/packages/expo-cellular/package.json b/packages/expo-cellular/package.json
index 9f5c11ed4c1d45..e661fadfdc4034 100644
--- a/packages/expo-cellular/package.json
+++ b/packages/expo-cellular/package.json
@@ -31,9 +31,9 @@
"dependencies": {},
"devDependencies": {
"@types/node": "^22.14.0",
- "expo-module-scripts": "56.0.0"
+ "expo-module-scripts": "workspace:*"
},
"peerDependencies": {
- "expo": "56.0.0-preview.2"
+ "expo": "workspace:*"
}
}
diff --git a/packages/expo-checkbox/package.json b/packages/expo-checkbox/package.json
index 0ec07a355d668f..d80f6497a089df 100644
--- a/packages/expo-checkbox/package.json
+++ b/packages/expo-checkbox/package.json
@@ -34,7 +34,7 @@
"@testing-library/react": "^16.3.0",
"@testing-library/react-native": "^13.3.0",
"@types/react": "~19.2.0",
- "expo-module-scripts": "56.0.0"
+ "expo-module-scripts": "workspace:*"
},
"peerDependencies": {
"react": "*",
diff --git a/packages/expo-clipboard/package.json b/packages/expo-clipboard/package.json
index 45e8c0e48f65c2..c27e9c9281113f 100644
--- a/packages/expo-clipboard/package.json
+++ b/packages/expo-clipboard/package.json
@@ -31,10 +31,10 @@
"dependencies": {},
"devDependencies": {
"@types/react": "~19.2.0",
- "expo-module-scripts": "56.0.0"
+ "expo-module-scripts": "workspace:*"
},
"peerDependencies": {
- "expo": "56.0.0-preview.2",
+ "expo": "workspace:*",
"react": "*",
"react-native": "*"
},
diff --git a/packages/expo-codemod/package.json b/packages/expo-codemod/package.json
index ed3771394094dc..e0bb9acd65edf5 100644
--- a/packages/expo-codemod/package.json
+++ b/packages/expo-codemod/package.json
@@ -46,6 +46,6 @@
"devDependencies": {
"@types/jscodeshift": "^17.0.0",
"@types/node": "^22.14.0",
- "expo-module-scripts": "56.0.0"
+ "expo-module-scripts": "workspace:*"
}
}
diff --git a/packages/expo-constants/package.json b/packages/expo-constants/package.json
index 12fec84d314d51..47e0dd0841e2ad 100644
--- a/packages/expo-constants/package.json
+++ b/packages/expo-constants/package.json
@@ -42,16 +42,16 @@
"preset": "expo-module-scripts"
},
"dependencies": {
- "@expo/env": "2.2.0"
+ "@expo/env": "workspace:~2.2.0"
},
"devDependencies": {
"@types/node": "^22.14.0",
- "expo-manifests": "56.0.1",
- "expo-updates": "56.0.1",
- "expo-module-scripts": "56.0.0"
+ "expo-manifests": "workspace:*",
+ "expo-updates": "workspace:*",
+ "expo-module-scripts": "workspace:*"
},
"peerDependencies": {
- "expo": "56.0.0-preview.2",
+ "expo": "workspace:*",
"react-native": "*"
}
}
diff --git a/packages/expo-contacts/package.json b/packages/expo-contacts/package.json
index d4c6609b186493..3a02fb4a14163d 100644
--- a/packages/expo-contacts/package.json
+++ b/packages/expo-contacts/package.json
@@ -35,10 +35,10 @@
"devDependencies": {
"@types/react": "~19.2.0",
"@types/node": "^22.14.0",
- "expo-module-scripts": "56.0.0"
+ "expo-module-scripts": "workspace:*"
},
"peerDependencies": {
- "expo": "56.0.0-preview.2",
+ "expo": "workspace:*",
"react": "*",
"react-native": "*"
}
diff --git a/packages/expo-crypto/package.json b/packages/expo-crypto/package.json
index 182236e4ddb372..6ea272cd24845f 100644
--- a/packages/expo-crypto/package.json
+++ b/packages/expo-crypto/package.json
@@ -39,9 +39,9 @@
},
"dependencies": {},
"devDependencies": {
- "expo-module-scripts": "56.0.0"
+ "expo-module-scripts": "workspace:*"
},
"peerDependencies": {
- "expo": "56.0.0-preview.2"
+ "expo": "workspace:*"
}
}
diff --git a/packages/expo-dev-client/package.json b/packages/expo-dev-client/package.json
index c843146ecbe0e1..bb1bf0c87799ec 100644
--- a/packages/expo-dev-client/package.json
+++ b/packages/expo-dev-client/package.json
@@ -31,19 +31,19 @@
"license": "MIT",
"homepage": "https://docs.expo.dev/versions/latest/sdk/dev-client/",
"dependencies": {
- "expo-dev-launcher": "56.0.0",
- "expo-dev-menu": "56.0.0",
- "expo-dev-menu-interface": "56.0.0",
- "expo-manifests": "56.0.1",
- "expo-updates-interface": "56.0.1"
+ "expo-dev-launcher": "workspace:56.0.0",
+ "expo-dev-menu": "workspace:56.0.0",
+ "expo-dev-menu-interface": "workspace:56.0.0",
+ "expo-manifests": "workspace:~56.0.1",
+ "expo-updates-interface": "workspace:~56.0.1"
},
"devDependencies": {
"@types/node": "^22.14.0",
- "expo-module-scripts": "56.0.0",
- "expo-test-runner": "0.3.13"
+ "expo-module-scripts": "workspace:*",
+ "expo-test-runner": "workspace:*"
},
"peerDependencies": {
- "expo": "56.0.0-preview.2"
+ "expo": "workspace:*"
},
"jest": {
"preset": "expo-module-scripts"
diff --git a/packages/expo-dev-launcher/package.json b/packages/expo-dev-launcher/package.json
index 663bfbe149ab8f..9fec213dacf569 100644
--- a/packages/expo-dev-launcher/package.json
+++ b/packages/expo-dev-launcher/package.json
@@ -19,12 +19,12 @@
"license": "MIT",
"homepage": "https://docs.expo.dev",
"dependencies": {
- "@expo/schema-utils": "56.0.0",
- "expo-dev-menu": "56.0.0",
- "expo-manifests": "56.0.1"
+ "@expo/schema-utils": "workspace:^56.0.0",
+ "expo-dev-menu": "workspace:56.0.0",
+ "expo-manifests": "workspace:~56.0.1"
},
"peerDependencies": {
- "expo": "56.0.0-preview.2",
+ "expo": "workspace:*",
"react-native": "*"
},
"devDependencies": {
diff --git a/packages/expo-dev-menu-interface/package.json b/packages/expo-dev-menu-interface/package.json
index e938a52cfe5bbf..25e4c46ee5beeb 100644
--- a/packages/expo-dev-menu-interface/package.json
+++ b/packages/expo-dev-menu-interface/package.json
@@ -23,6 +23,6 @@
"license": "MIT",
"homepage": "https://docs.expo.dev",
"peerDependencies": {
- "expo": "56.0.0-preview.2"
+ "expo": "workspace:*"
}
}
diff --git a/packages/expo-dev-menu/package.json b/packages/expo-dev-menu/package.json
index 171b5eb47f42c2..99c40b053c9143 100644
--- a/packages/expo-dev-menu/package.json
+++ b/packages/expo-dev-menu/package.json
@@ -32,19 +32,19 @@
"license": "MIT",
"homepage": "https://docs.expo.dev",
"dependencies": {
- "expo-dev-menu-interface": "56.0.0"
+ "expo-dev-menu-interface": "workspace:56.0.0"
},
"devDependencies": {
"@babel/preset-typescript": "^7.7.4",
"@testing-library/react-native": "^13.3.0",
"@types/node": "^22.14.0",
- "babel-preset-expo": "56.0.1",
- "expo-module-scripts": "56.0.0",
+ "babel-preset-expo": "workspace:*",
+ "expo-module-scripts": "workspace:*",
"react": "19.2.3",
"react-native": "0.85.2"
},
"peerDependencies": {
- "expo": "56.0.0-preview.2",
+ "expo": "workspace:*",
"react-native": "*"
}
}
diff --git a/packages/expo-device/package.json b/packages/expo-device/package.json
index 0877e208fcbbe5..0bca66f33d6a8e 100644
--- a/packages/expo-device/package.json
+++ b/packages/expo-device/package.json
@@ -36,9 +36,9 @@
},
"devDependencies": {
"@types/ua-parser-js": "^0.7.39",
- "expo-module-scripts": "56.0.0"
+ "expo-module-scripts": "workspace:*"
},
"peerDependencies": {
- "expo": "56.0.0-preview.2"
+ "expo": "workspace:*"
}
}
diff --git a/packages/expo-doctor/package.json b/packages/expo-doctor/package.json
index 0805f55c23e052..62610a88aeb977 100644
--- a/packages/expo-doctor/package.json
+++ b/packages/expo-doctor/package.json
@@ -36,11 +36,11 @@
"node": "^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0"
},
"devDependencies": {
- "@expo/config": "56.0.0",
- "@expo/env": "2.2.0",
- "@expo/json-file": "10.1.0",
+ "@expo/config": "workspace:*",
+ "@expo/env": "workspace:*",
+ "@expo/json-file": "workspace:*",
"@expo/metro": "~56.0.0",
- "@expo/schemer": "2.2.0",
+ "@expo/schemer": "workspace:*",
"@expo/spawn-async": "^1.7.2",
"@types/debug": "^4.1.8",
"@types/getenv": "^1.0.0",
@@ -48,9 +48,9 @@
"@vercel/ncc": "0.38.3",
"chalk": "^4.0.0",
"debug": "^4.3.4",
- "expo-modules-autolinking": "56.0.0",
- "expo-module-scripts": "56.0.0",
- "expo": "56.0.0-preview.2",
+ "expo-modules-autolinking": "workspace:*",
+ "expo-module-scripts": "workspace:*",
+ "expo": "workspace:*",
"getenv": "^2.0.0",
"glob": "^13.0.0",
"ignore": "^5.3.2",
diff --git a/packages/expo-document-picker/package.json b/packages/expo-document-picker/package.json
index c32cfbb54f2762..02c8939eb377c6 100644
--- a/packages/expo-document-picker/package.json
+++ b/packages/expo-document-picker/package.json
@@ -35,9 +35,9 @@
},
"devDependencies": {
"@types/node": "^22.14.0",
- "expo-module-scripts": "56.0.0"
+ "expo-module-scripts": "workspace:*"
},
"peerDependencies": {
- "expo": "56.0.0-preview.2"
+ "expo": "workspace:*"
}
}
diff --git a/packages/expo-eas-client/package.json b/packages/expo-eas-client/package.json
index 8bb98968619dfe..7c1946b876d7bc 100644
--- a/packages/expo-eas-client/package.json
+++ b/packages/expo-eas-client/package.json
@@ -34,6 +34,6 @@
"preset": "expo-module-scripts"
},
"devDependencies": {
- "expo-module-scripts": "56.0.0"
+ "expo-module-scripts": "workspace:*"
}
}
diff --git a/packages/expo-env-info/package.json b/packages/expo-env-info/package.json
index 6cb3724afefdb1..f5dae1197e7fc9 100644
--- a/packages/expo-env-info/package.json
+++ b/packages/expo-env-info/package.json
@@ -38,7 +38,7 @@
"devDependencies": {
"@types/envinfo": "^7.8.1",
"@types/node": "^22.14.0",
- "expo-module-scripts": "56.0.0"
+ "expo-module-scripts": "workspace:*"
},
"engines": {
"node": "^12.20.0 || ^14.13.1 || >=16.0.0"
diff --git a/packages/expo-file-system/android/src/main/java/expo/modules/filesystem/FileSystemDirectory.kt b/packages/expo-file-system/android/src/main/java/expo/modules/filesystem/FileSystemDirectory.kt
index f53487ba5726ec..a2c85b79ff210d 100644
--- a/packages/expo-file-system/android/src/main/java/expo/modules/filesystem/FileSystemDirectory.kt
+++ b/packages/expo-file-system/android/src/main/java/expo/modules/filesystem/FileSystemDirectory.kt
@@ -51,14 +51,14 @@ class FileSystemDirectory(uri: Uri) : FileSystemPath(uri) {
}
fun create(options: CreateOptions = CreateOptions()) {
+ if (uri.isContentUri) {
+ throw UnableToCreateException("Directory.create function does not work with SAF content:// uris, use `Directory.createDirectory` instead")
+ }
validateType()
validatePermission(FilePermissionService.Permission.WRITE)
if (!needsCreation(options)) {
return
}
- if (uri.isContentUri) {
- throw UnableToCreateException("create function does not work with SAF Uris, use `createDirectory` and `createFile` instead")
- }
validateCanCreate(options)
if (options.overwrite && file.exists()) {
file.delete()
diff --git a/packages/expo-file-system/android/src/main/java/expo/modules/filesystem/FileSystemFile.kt b/packages/expo-file-system/android/src/main/java/expo/modules/filesystem/FileSystemFile.kt
index 35daee2fda7de7..3429bdb7c3cdd7 100644
--- a/packages/expo-file-system/android/src/main/java/expo/modules/filesystem/FileSystemFile.kt
+++ b/packages/expo-file-system/android/src/main/java/expo/modules/filesystem/FileSystemFile.kt
@@ -36,12 +36,12 @@ class FileSystemFile(uri: Uri) : FileSystemPath(uri) {
}
fun create(options: CreateOptions = CreateOptions()) {
+ if (uri.isContentUri) {
+ throw UnableToCreateException("File.create function does not work with SAF content:// uris, use `Directory.createFile` instead")
+ }
validateType()
validatePermission(FilePermissionService.Permission.WRITE)
validateCanCreate(options)
- if (uri.isContentUri) {
- throw UnableToCreateException("create function does not work with SAF Uris, use `createDirectory` and `createFile` instead")
- }
if (options.overwrite && exists) {
javaFile.delete()
}
diff --git a/packages/expo-file-system/android/src/test/java/expo/modules/filesystem/FileSystemFileTest.kt b/packages/expo-file-system/android/src/test/java/expo/modules/filesystem/FileSystemFileTest.kt
new file mode 100644
index 00000000000000..be37298af70a72
--- /dev/null
+++ b/packages/expo-file-system/android/src/test/java/expo/modules/filesystem/FileSystemFileTest.kt
@@ -0,0 +1,28 @@
+package expo.modules.filesystem
+
+import android.net.Uri
+import android.os.Build
+import org.junit.Assert.assertThrows
+import org.junit.Assert.assertTrue
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.robolectric.RobolectricTestRunner
+import org.robolectric.annotation.Config
+
+@RunWith(RobolectricTestRunner::class)
+@Config(sdk = [Build.VERSION_CODES.R])
+class FileSystemFileTest {
+ @Test
+ fun createRejectsContentUriBeforeResolvingFileType() {
+ val file = FileSystemFile(Uri.parse("content://com.android.externalstorage.documents/tree/primary%3ADownload"))
+
+ val exception = assertThrows(UnableToCreateException::class.java) {
+ file.create()
+ }
+
+ assertTrue(
+ exception.message?.contains("File.create") == true &&
+ exception.message?.contains("Directory.createFile") == true
+ )
+ }
+}
diff --git a/packages/expo-file-system/package.json b/packages/expo-file-system/package.json
index 88e1f034dbbdc0..1340d9cfdedf09 100644
--- a/packages/expo-file-system/package.json
+++ b/packages/expo-file-system/package.json
@@ -49,11 +49,11 @@
},
"devDependencies": {
"@types/node": "^22.14.0",
- "expo-module-scripts": "56.0.0",
- "jest-expo": "56.0.0"
+ "expo-module-scripts": "workspace:*",
+ "jest-expo": "workspace:*"
},
"peerDependencies": {
- "expo": "56.0.0-preview.2",
+ "expo": "workspace:*",
"react-native": "*"
}
}
diff --git a/packages/expo-font/package.json b/packages/expo-font/package.json
index 04e16f01c1375f..9ee32de4c30b58 100644
--- a/packages/expo-font/package.json
+++ b/packages/expo-font/package.json
@@ -54,10 +54,10 @@
"@types/fontfaceobserver": "^2.1.3",
"@types/react": "~19.2.0",
"@types/node": "^22.14.0",
- "expo-module-scripts": "56.0.0"
+ "expo-module-scripts": "workspace:*"
},
"peerDependencies": {
- "expo": "56.0.0-preview.2",
+ "expo": "workspace:*",
"react": "*",
"react-native": "*"
}
diff --git a/packages/expo-gl/package.json b/packages/expo-gl/package.json
index 1a5acb9e76e101..c6eaf66eea5835 100644
--- a/packages/expo-gl/package.json
+++ b/packages/expo-gl/package.json
@@ -44,11 +44,11 @@
"@types/react-test-renderer": "^19.1.0",
"@types/react": "~19.2.0",
"@types/webgl2": "^0.0.6",
- "expo-module-scripts": "56.0.0",
+ "expo-module-scripts": "workspace:*",
"react-test-renderer": "19.2.0"
},
"peerDependencies": {
- "expo": "56.0.0-preview.2",
+ "expo": "workspace:*",
"react": "*",
"react-dom": "*",
"react-native": "*",
diff --git a/packages/expo-glass-effect/package.json b/packages/expo-glass-effect/package.json
index 5595a9f7c579e3..d06da2204eddad 100644
--- a/packages/expo-glass-effect/package.json
+++ b/packages/expo-glass-effect/package.json
@@ -41,10 +41,10 @@
"@testing-library/react": "^16.3.0",
"@testing-library/react-native": "^13.3.0",
"@types/react": "~19.2.0",
- "expo-module-scripts": "56.0.0"
+ "expo-module-scripts": "workspace:*"
},
"peerDependencies": {
- "expo": "56.0.0-preview.2",
+ "expo": "workspace:*",
"react": "*",
"react-native": "*"
}
diff --git a/packages/expo-haptics/package.json b/packages/expo-haptics/package.json
index 0ce9eba32cbc37..3b6c48f833994a 100644
--- a/packages/expo-haptics/package.json
+++ b/packages/expo-haptics/package.json
@@ -32,9 +32,9 @@
"homepage": "https://docs.expo.dev/versions/latest/sdk/haptics/",
"dependencies": {},
"devDependencies": {
- "expo-module-scripts": "56.0.0"
+ "expo-module-scripts": "workspace:*"
},
"peerDependencies": {
- "expo": "56.0.0-preview.2"
+ "expo": "workspace:*"
}
}
diff --git a/packages/expo-image-loader/package.json b/packages/expo-image-loader/package.json
index 017ee84a0f0449..682cc397ad88cc 100644
--- a/packages/expo-image-loader/package.json
+++ b/packages/expo-image-loader/package.json
@@ -22,6 +22,6 @@
"dependencies": {},
"devDependencies": {},
"peerDependencies": {
- "expo": "56.0.0-preview.2"
+ "expo": "workspace:*"
}
}
diff --git a/packages/expo-image-manipulator/package.json b/packages/expo-image-manipulator/package.json
index ce4ce777aaff78..6189c2d304fed5 100644
--- a/packages/expo-image-manipulator/package.json
+++ b/packages/expo-image-manipulator/package.json
@@ -30,12 +30,12 @@
"license": "MIT",
"homepage": "https://docs.expo.dev/versions/latest/sdk/imagemanipulator/",
"dependencies": {
- "expo-image-loader": "56.0.0"
+ "expo-image-loader": "workspace:~56.0.0"
},
"devDependencies": {
- "expo-module-scripts": "56.0.0"
+ "expo-module-scripts": "workspace:*"
},
"peerDependencies": {
- "expo": "56.0.0-preview.2"
+ "expo": "workspace:*"
}
}
diff --git a/packages/expo-image-picker/package.json b/packages/expo-image-picker/package.json
index 00421e0d1910d3..1d6eefb5858ba8 100644
--- a/packages/expo-image-picker/package.json
+++ b/packages/expo-image-picker/package.json
@@ -35,15 +35,15 @@
"preset": "expo-module-scripts"
},
"dependencies": {
- "expo-image-loader": "56.0.0"
+ "expo-image-loader": "workspace:~56.0.0"
},
"devDependencies": {
"@testing-library/react": "^16.3.0",
"@testing-library/user-event": "^14.6.1",
"@types/node": "^22.14.0",
- "expo-module-scripts": "56.0.0"
+ "expo-module-scripts": "workspace:*"
},
"peerDependencies": {
- "expo": "56.0.0-preview.2"
+ "expo": "workspace:*"
}
}
diff --git a/packages/expo-image/package.json b/packages/expo-image/package.json
index 12edd0e89a77e8..08f4cbda108724 100644
--- a/packages/expo-image/package.json
+++ b/packages/expo-image/package.json
@@ -33,10 +33,10 @@
"devDependencies": {
"@types/react": "~19.2.0",
"@types/node": "^22.14.0",
- "expo-module-scripts": "56.0.0"
+ "expo-module-scripts": "workspace:*"
},
"peerDependencies": {
- "expo": "56.0.0-preview.2",
+ "expo": "workspace:*",
"react": "*",
"react-native": "*",
"react-native-web": "*"
diff --git a/packages/expo-insights/package.json b/packages/expo-insights/package.json
index 8252142d15ed12..05f5ce7d4279d2 100644
--- a/packages/expo-insights/package.json
+++ b/packages/expo-insights/package.json
@@ -31,12 +31,12 @@
"author": "650 Industries, Inc.",
"license": "MIT",
"dependencies": {
- "expo-eas-client": "56.0.0"
+ "expo-eas-client": "workspace:~56.0.0"
},
"devDependencies": {
- "expo-module-scripts": "56.0.0"
+ "expo-module-scripts": "workspace:*"
},
"peerDependencies": {
- "expo": "56.0.0-preview.2"
+ "expo": "workspace:*"
}
}
diff --git a/packages/expo-intent-launcher/package.json b/packages/expo-intent-launcher/package.json
index 4e79fcc8fb489a..04b2902108b8eb 100644
--- a/packages/expo-intent-launcher/package.json
+++ b/packages/expo-intent-launcher/package.json
@@ -33,9 +33,9 @@
"homepage": "https://docs.expo.dev/versions/latest/sdk/intent-launcher/",
"dependencies": {},
"devDependencies": {
- "expo-module-scripts": "56.0.0"
+ "expo-module-scripts": "workspace:*"
},
"peerDependencies": {
- "expo": "56.0.0-preview.2"
+ "expo": "workspace:*"
}
}
diff --git a/packages/expo-keep-awake/package.json b/packages/expo-keep-awake/package.json
index 07db83fc73eec1..3ea4a566a96ecf 100644
--- a/packages/expo-keep-awake/package.json
+++ b/packages/expo-keep-awake/package.json
@@ -41,10 +41,10 @@
"devDependencies": {
"@testing-library/react-native": "^13.3.0",
"@types/react": "~19.2.0",
- "expo-module-scripts": "56.0.0"
+ "expo-module-scripts": "workspace:*"
},
"peerDependencies": {
- "expo": "56.0.0-preview.2",
+ "expo": "workspace:*",
"react": "*"
},
"jest": {
diff --git a/packages/expo-linear-gradient/package.json b/packages/expo-linear-gradient/package.json
index a7c010cbbd3836..e3b070d856d119 100644
--- a/packages/expo-linear-gradient/package.json
+++ b/packages/expo-linear-gradient/package.json
@@ -39,10 +39,10 @@
"@testing-library/react": "^16.3.0",
"@testing-library/react-native": "^13.3.0",
"@types/react": "~19.2.0",
- "expo-module-scripts": "56.0.0"
+ "expo-module-scripts": "workspace:*"
},
"peerDependencies": {
- "expo": "56.0.0-preview.2",
+ "expo": "workspace:*",
"react": "*",
"react-native": "*"
}
diff --git a/packages/expo-linking/package.json b/packages/expo-linking/package.json
index ff9aa8ea1b3640..bdebfd60fa981b 100644
--- a/packages/expo-linking/package.json
+++ b/packages/expo-linking/package.json
@@ -37,13 +37,13 @@
"license": "MIT",
"homepage": "https://docs.expo.dev/versions/latest/sdk/linking",
"dependencies": {
- "expo-constants": "56.0.1",
+ "expo-constants": "workspace:~56.0.1",
"invariant": "^2.2.4"
},
"devDependencies": {
"@types/react": "~19.2.0",
"@types/invariant": "^2.2.33",
- "expo-module-scripts": "56.0.0"
+ "expo-module-scripts": "workspace:*"
},
"peerDependencies": {
"react": "*",
diff --git a/packages/expo-live-photo/package.json b/packages/expo-live-photo/package.json
index 907ddeea330a28..36348c094c4857 100644
--- a/packages/expo-live-photo/package.json
+++ b/packages/expo-live-photo/package.json
@@ -39,10 +39,10 @@
"dependencies": {},
"devDependencies": {
"@types/react": "~19.2.0",
- "expo-module-scripts": "56.0.0"
+ "expo-module-scripts": "workspace:*"
},
"peerDependencies": {
- "expo": "56.0.0-preview.2",
+ "expo": "workspace:*",
"react": "*",
"react-native": "*"
}
diff --git a/packages/expo-local-authentication/package.json b/packages/expo-local-authentication/package.json
index 80f986e588f6dd..7beeec51ba155e 100644
--- a/packages/expo-local-authentication/package.json
+++ b/packages/expo-local-authentication/package.json
@@ -42,9 +42,9 @@
"devDependencies": {
"@types/invariant": "^2.2.33",
"@types/node": "^22.14.0",
- "expo-module-scripts": "56.0.0"
+ "expo-module-scripts": "workspace:*"
},
"peerDependencies": {
- "expo": "56.0.0-preview.2"
+ "expo": "workspace:*"
}
}
diff --git a/packages/expo-localization/package.json b/packages/expo-localization/package.json
index 4233a9046d31b6..f17075c6fe5338 100644
--- a/packages/expo-localization/package.json
+++ b/packages/expo-localization/package.json
@@ -45,11 +45,11 @@
"@types/i18n-js": "^3.8.2",
"@types/react": "~19.2.0",
"@types/rtl-detect": "^1.0.3",
- "expo-module-scripts": "56.0.0",
+ "expo-module-scripts": "workspace:*",
"i18n-js": "^3.9.2"
},
"peerDependencies": {
- "expo": "56.0.0-preview.2",
+ "expo": "workspace:*",
"react": "*"
}
}
diff --git a/packages/expo-location/package.json b/packages/expo-location/package.json
index f452a317bb3ba7..0972083ef745c6 100644
--- a/packages/expo-location/package.json
+++ b/packages/expo-location/package.json
@@ -38,13 +38,13 @@
"preset": "expo-module-scripts"
},
"dependencies": {
- "@expo/image-utils": "0.9.0"
+ "@expo/image-utils": "workspace:^0.9.0"
},
"devDependencies": {
"@types/node": "^22.14.0",
- "expo-module-scripts": "56.0.0"
+ "expo-module-scripts": "workspace:*"
},
"peerDependencies": {
- "expo": "56.0.0-preview.2"
+ "expo": "workspace:*"
}
}
diff --git a/packages/expo-mail-composer/package.json b/packages/expo-mail-composer/package.json
index ff720cbff2b213..b3f45c10bffd3b 100644
--- a/packages/expo-mail-composer/package.json
+++ b/packages/expo-mail-composer/package.json
@@ -35,9 +35,9 @@
},
"devDependencies": {
"@types/node": "^22.14.0",
- "expo-module-scripts": "56.0.0"
+ "expo-module-scripts": "workspace:*"
},
"peerDependencies": {
- "expo": "56.0.0-preview.2"
+ "expo": "workspace:*"
}
}
diff --git a/packages/expo-manifests/package.json b/packages/expo-manifests/package.json
index 81a6f95f89b32c..49fdbd2e4ebd00 100644
--- a/packages/expo-manifests/package.json
+++ b/packages/expo-manifests/package.json
@@ -33,12 +33,12 @@
"preset": "expo-module-scripts"
},
"dependencies": {
- "expo-json-utils": "56.0.0"
+ "expo-json-utils": "workspace:~56.0.0"
},
"devDependencies": {
- "expo-module-scripts": "56.0.0"
+ "expo-module-scripts": "workspace:*"
},
"peerDependencies": {
- "expo": "56.0.0-preview.2"
+ "expo": "workspace:*"
}
}
diff --git a/packages/expo-maps/package.json b/packages/expo-maps/package.json
index dab51b6ba43942..8eec58fbb220be 100644
--- a/packages/expo-maps/package.json
+++ b/packages/expo-maps/package.json
@@ -29,10 +29,10 @@
"devDependencies": {
"@types/node": "^22.14.0",
"@types/react": "~19.2.0",
- "expo-module-scripts": "56.0.0"
+ "expo-module-scripts": "workspace:*"
},
"peerDependencies": {
- "expo": "56.0.0-preview.2",
+ "expo": "workspace:*",
"react": "*",
"react-native": "*"
}
diff --git a/packages/expo-media-library/package.json b/packages/expo-media-library/package.json
index f8a0a6eb65c318..f73387d57d50bc 100644
--- a/packages/expo-media-library/package.json
+++ b/packages/expo-media-library/package.json
@@ -38,10 +38,10 @@
},
"devDependencies": {
"@types/node": "^22.14.0",
- "expo-module-scripts": "56.0.0"
+ "expo-module-scripts": "workspace:*"
},
"peerDependencies": {
- "expo": "56.0.0-preview.2",
+ "expo": "workspace:*",
"react-native": "*"
},
"codegenConfig": {
diff --git a/packages/expo-mesh-gradient/package.json b/packages/expo-mesh-gradient/package.json
index 6e9e43e2b2c4a6..0bb9f7b9c6e0e8 100644
--- a/packages/expo-mesh-gradient/package.json
+++ b/packages/expo-mesh-gradient/package.json
@@ -30,10 +30,10 @@
"dependencies": {},
"devDependencies": {
"@types/react": "~19.2.0",
- "expo-module-scripts": "56.0.0"
+ "expo-module-scripts": "workspace:*"
},
"peerDependencies": {
- "expo": "56.0.0-preview.2",
+ "expo": "workspace:*",
"react": "*",
"react-native": "*"
}
diff --git a/packages/expo-module-scripts/package.json b/packages/expo-module-scripts/package.json
index 6451405e50f9d7..109a0436caee77 100644
--- a/packages/expo-module-scripts/package.json
+++ b/packages/expo-module-scripts/package.json
@@ -79,9 +79,9 @@
"@types/jest": "^29.2.1",
"babel-plugin-dynamic-import-node": "^2.3.3",
"commander": "^12.1.0",
- "eslint-config-universe": "15.1.0",
+ "eslint-config-universe": "workspace:^15.1.0",
"glob": "^13.0.0",
- "jest-expo": "56.0.0",
+ "jest-expo": "workspace:~56.0.0",
"jest-snapshot-prettier": "npm:prettier@^2",
"jest-watch-typeahead": "2.2.1",
"resolve-workspace-root": "^2.0.0",
diff --git a/packages/expo-modules-autolinking/package.json b/packages/expo-modules-autolinking/package.json
index ead1f46a970aed..04f789db215fde 100644
--- a/packages/expo-modules-autolinking/package.json
+++ b/packages/expo-modules-autolinking/package.json
@@ -48,11 +48,11 @@
"license": "MIT",
"homepage": "https://github.com/expo/expo/tree/main/packages/expo-modules-autolinking#readme",
"devDependencies": {
- "expo-module-scripts": "56.0.0",
+ "expo-module-scripts": "workspace:*",
"memfs": "^3.2.0"
},
"dependencies": {
- "@expo/require-utils": "56.0.0",
+ "@expo/require-utils": "workspace:^56.0.0",
"@expo/spawn-async": "^1.7.2",
"chalk": "^4.1.0",
"commander": "^7.2.0"
diff --git a/packages/expo-modules-core/package.json b/packages/expo-modules-core/package.json
index 762f4f8e3b8d99..f2c30c3d22dc74 100644
--- a/packages/expo-modules-core/package.json
+++ b/packages/expo-modules-core/package.json
@@ -56,7 +56,7 @@
},
"dependencies": {
"@expo/expo-modules-macros-plugin": "~0.0.8",
- "expo-modules-jsi": "56.0.0",
+ "expo-modules-jsi": "workspace:~56.0.0",
"invariant": "^2.2.4"
},
"peerDependencies": {
@@ -73,6 +73,6 @@
"@testing-library/react-native": "^13.3.0",
"@types/react": "~19.2.0",
"@types/invariant": "^2.2.33",
- "expo-module-scripts": "56.0.0"
+ "expo-module-scripts": "workspace:*"
}
}
diff --git a/packages/expo-navigation-bar/package.json b/packages/expo-navigation-bar/package.json
index 602045b8c1957d..daedbb7a6590ed 100644
--- a/packages/expo-navigation-bar/package.json
+++ b/packages/expo-navigation-bar/package.json
@@ -48,10 +48,10 @@
"@types/debug": "^4.1.7",
"@types/react": "~19.2.0",
"@types/node": "^22.14.0",
- "expo-module-scripts": "56.0.0"
+ "expo-module-scripts": "workspace:*"
},
"peerDependencies": {
- "expo": "56.0.0-preview.2",
+ "expo": "workspace:*",
"react": "*",
"react-native": "*"
}
diff --git a/packages/expo-network-addons/package.json b/packages/expo-network-addons/package.json
index 986d4ce1217645..e042418c9c6ff5 100644
--- a/packages/expo-network-addons/package.json
+++ b/packages/expo-network-addons/package.json
@@ -33,9 +33,9 @@
"license": "MIT",
"dependencies": {},
"devDependencies": {
- "expo-module-scripts": "56.0.0"
+ "expo-module-scripts": "workspace:*"
},
"peerDependencies": {
- "expo": "56.0.0-preview.2"
+ "expo": "workspace:*"
}
}
diff --git a/packages/expo-network/package.json b/packages/expo-network/package.json
index 71fcb9513e2cdc..ad26663af99d7e 100644
--- a/packages/expo-network/package.json
+++ b/packages/expo-network/package.json
@@ -31,10 +31,10 @@
"dependencies": {},
"devDependencies": {
"@types/react": "~19.2.0",
- "expo-module-scripts": "56.0.0"
+ "expo-module-scripts": "workspace:*"
},
"peerDependencies": {
- "expo": "56.0.0-preview.2",
+ "expo": "workspace:*",
"react": "*"
}
}
diff --git a/packages/expo-notifications/package.json b/packages/expo-notifications/package.json
index 0149926106a515..c3dcb819a7a4ed 100644
--- a/packages/expo-notifications/package.json
+++ b/packages/expo-notifications/package.json
@@ -42,20 +42,20 @@
]
},
"dependencies": {
- "@expo/image-utils": "0.9.0",
+ "@expo/image-utils": "workspace:^0.9.0",
"abort-controller": "^3.0.0",
"badgin": "^1.1.5",
- "expo-application": "56.0.0",
- "expo-constants": "56.0.1"
+ "expo-application": "workspace:~56.0.0",
+ "expo-constants": "workspace:~56.0.1"
},
"devDependencies": {
"@types/react": "~19.2.0",
"@types/node": "^22.14.0",
- "expo-module-scripts": "56.0.0",
+ "expo-module-scripts": "workspace:*",
"memfs": "^3.2.0"
},
"peerDependencies": {
- "expo": "56.0.0-preview.2",
+ "expo": "workspace:*",
"react": "*",
"react-native": "*"
}
diff --git a/packages/expo-observe/package.json b/packages/expo-observe/package.json
index 743b73597b2b49..a1df13cca677c3 100644
--- a/packages/expo-observe/package.json
+++ b/packages/expo-observe/package.json
@@ -32,14 +32,14 @@
"author": "650 Industries, Inc.",
"license": "MIT",
"dependencies": {
- "expo-app-metrics": "56.0.0",
- "expo-eas-client": "56.0.0"
+ "expo-app-metrics": "workspace:~56.0.0",
+ "expo-eas-client": "workspace:~56.0.0"
},
"devDependencies": {
- "expo-module-scripts": "56.0.0"
+ "expo-module-scripts": "workspace:*"
},
"peerDependencies": {
- "expo": "56.0.0-preview.2",
+ "expo": "workspace:*",
"react-native": "*"
}
}
diff --git a/packages/expo-print/package.json b/packages/expo-print/package.json
index de19b013887168..be81fc53674185 100644
--- a/packages/expo-print/package.json
+++ b/packages/expo-print/package.json
@@ -37,10 +37,10 @@
},
"dependencies": {},
"devDependencies": {
- "expo-module-scripts": "56.0.0"
+ "expo-module-scripts": "workspace:*"
},
"peerDependencies": {
- "expo": "56.0.0-preview.2",
+ "expo": "workspace:*",
"react-native": "*"
}
}
diff --git a/packages/expo-processing/package.json b/packages/expo-processing/package.json
index 741ee2d9e87bb8..c7469390aad399 100644
--- a/packages/expo-processing/package.json
+++ b/packages/expo-processing/package.json
@@ -22,10 +22,10 @@
"license": "MIT",
"homepage": "https://github.com/expo/expo/tree/main/packages/expo-processing",
"dependencies": {
- "expo-gl": "56.0.0"
+ "expo-gl": "workspace:56.0.0"
},
"peerDependencies": {
- "expo": "56.0.0-preview.2",
+ "expo": "workspace:*",
"processing-js": "^1.6.6"
}
}
diff --git a/packages/expo-router/package.json b/packages/expo-router/package.json
index 67c18c2f3946ed..e8f0a4e2e3cfb6 100644
--- a/packages/expo-router/package.json
+++ b/packages/expo-router/package.json
@@ -88,12 +88,12 @@
"expo"
],
"peerDependencies": {
- "@expo/log-box": "56.0.1",
- "@expo/metro-runtime": "56.0.1",
+ "@expo/log-box": "workspace:56.0.1",
+ "@expo/metro-runtime": "workspace:^56.0.1",
"@testing-library/react-native": ">= 13.2.0",
- "expo": "56.0.0-preview.2",
- "expo-constants": "56.0.1",
- "expo-linking": "56.0.0",
+ "expo": "workspace:*",
+ "expo-constants": "workspace:^56.0.1",
+ "expo-linking": "workspace:^56.0.0",
"react": "*",
"react-dom": "*",
"react-native": "*",
@@ -147,9 +147,9 @@
"tsd": "^0.33.0"
},
"dependencies": {
- "@expo/metro-runtime": "56.0.1",
- "@expo/schema-utils": "56.0.0",
- "@expo/ui": "56.0.1",
+ "@expo/metro-runtime": "workspace:^56.0.1",
+ "@expo/schema-utils": "workspace:^56.0.0",
+ "@expo/ui": "workspace:^56.0.1",
"@jest/globals": "^29.7.0",
"@radix-ui/react-slot": "^1.2.0",
"@radix-ui/react-tabs": "^1.1.12",
@@ -160,10 +160,10 @@
"color": "^4.2.3",
"debug": "^4.3.4",
"escape-string-regexp": "^4.0.0",
- "expo-glass-effect": "56.0.1",
- "expo-image": "56.0.1",
- "expo-server": "56.0.0",
- "expo-symbols": "56.0.1",
+ "expo-glass-effect": "workspace:^56.0.1",
+ "expo-image": "workspace:^56.0.1",
+ "expo-server": "workspace:^56.0.0",
+ "expo-symbols": "workspace:^56.0.1",
"fast-deep-equal": "^3.1.3",
"invariant": "^2.2.4",
"nanoid": "^3.3.8",
diff --git a/packages/expo-screen-capture/package.json b/packages/expo-screen-capture/package.json
index 86d8bf29b2efe4..9c67c0fb194890 100644
--- a/packages/expo-screen-capture/package.json
+++ b/packages/expo-screen-capture/package.json
@@ -35,10 +35,10 @@
"devDependencies": {
"@types/react": "~19.2.0",
"@testing-library/react-native": "^13.3.0",
- "expo-module-scripts": "56.0.0"
+ "expo-module-scripts": "workspace:*"
},
"peerDependencies": {
- "expo": "56.0.0-preview.2",
+ "expo": "workspace:*",
"react": "*"
}
}
diff --git a/packages/expo-screen-orientation/package.json b/packages/expo-screen-orientation/package.json
index f6780e626ed848..4dde22fd0df3ea 100644
--- a/packages/expo-screen-orientation/package.json
+++ b/packages/expo-screen-orientation/package.json
@@ -36,10 +36,10 @@
},
"devDependencies": {
"@types/node": "^22.14.0",
- "expo-module-scripts": "56.0.0"
+ "expo-module-scripts": "workspace:*"
},
"peerDependencies": {
- "expo": "56.0.0-preview.2",
+ "expo": "workspace:*",
"react-native": "*"
}
}
diff --git a/packages/expo-secure-store/package.json b/packages/expo-secure-store/package.json
index dba089a109ddd2..ef38afc2a16f65 100644
--- a/packages/expo-secure-store/package.json
+++ b/packages/expo-secure-store/package.json
@@ -37,9 +37,9 @@
"dependencies": {},
"devDependencies": {
"@types/node": "^22.14.0",
- "expo-module-scripts": "56.0.0"
+ "expo-module-scripts": "workspace:*"
},
"peerDependencies": {
- "expo": "56.0.0-preview.2"
+ "expo": "workspace:*"
}
}
diff --git a/packages/expo-sensors/package.json b/packages/expo-sensors/package.json
index 2ef623138d23a6..8827a998185fad 100644
--- a/packages/expo-sensors/package.json
+++ b/packages/expo-sensors/package.json
@@ -45,10 +45,10 @@
"devDependencies": {
"@types/invariant": "^2.2.33",
"@types/node": "^22.14.0",
- "expo-module-scripts": "56.0.0"
+ "expo-module-scripts": "workspace:*"
},
"peerDependencies": {
- "expo": "56.0.0-preview.2",
+ "expo": "workspace:*",
"react-native": "*"
}
}
diff --git a/packages/expo-server/package.json b/packages/expo-server/package.json
index 5a4ebbe5499bb0..42353972734b75 100644
--- a/packages/expo-server/package.json
+++ b/packages/expo-server/package.json
@@ -61,7 +61,7 @@
"devDependencies": {
"@types/express": "^5.0.3",
"@types/react": "~19.2.0",
- "expo-module-scripts": "56.0.0",
+ "expo-module-scripts": "workspace:*",
"npm-run-all2": "^8.0.4",
"rimraf": "^6.1.2"
},
diff --git a/packages/expo-sharing/package.json b/packages/expo-sharing/package.json
index 52e53aaa2af6ff..063d12502aac74 100644
--- a/packages/expo-sharing/package.json
+++ b/packages/expo-sharing/package.json
@@ -34,17 +34,17 @@
"license": "MIT",
"homepage": "https://docs.expo.dev/versions/latest/sdk/sharing/",
"dependencies": {
- "@expo/plist": "0.6.0",
- "@expo/config-plugins": "56.0.0",
- "@expo/config-types": "56.0.0"
+ "@expo/plist": "workspace:^0.6.0",
+ "@expo/config-plugins": "workspace:^56.0.0",
+ "@expo/config-types": "workspace:^56.0.0"
},
"devDependencies": {
"@types/node": "^22.14.0",
"@types/react": "~19.2.0",
- "expo-module-scripts": "56.0.0"
+ "expo-module-scripts": "workspace:*"
},
"peerDependencies": {
- "expo": "56.0.0-preview.2",
+ "expo": "workspace:*",
"react": "*",
"react-native": "*"
}
diff --git a/packages/expo-sms/package.json b/packages/expo-sms/package.json
index 1f6798dcd95141..23e2fddea87ecd 100644
--- a/packages/expo-sms/package.json
+++ b/packages/expo-sms/package.json
@@ -34,9 +34,9 @@
},
"dependencies": {},
"devDependencies": {
- "expo-module-scripts": "56.0.0"
+ "expo-module-scripts": "workspace:*"
},
"peerDependencies": {
- "expo": "56.0.0-preview.2"
+ "expo": "workspace:*"
}
}
diff --git a/packages/expo-speech/package.json b/packages/expo-speech/package.json
index 0885a8c84472df..7e8d922d7b49ed 100644
--- a/packages/expo-speech/package.json
+++ b/packages/expo-speech/package.json
@@ -36,9 +36,9 @@
},
"dependencies": {},
"devDependencies": {
- "expo-module-scripts": "56.0.0"
+ "expo-module-scripts": "workspace:*"
},
"peerDependencies": {
- "expo": "56.0.0-preview.2"
+ "expo": "workspace:*"
}
}
diff --git a/packages/expo-splash-screen/package.json b/packages/expo-splash-screen/package.json
index f1fd2f38e01637..7dce63b3c4a9e0 100644
--- a/packages/expo-splash-screen/package.json
+++ b/packages/expo-splash-screen/package.json
@@ -39,18 +39,18 @@
"license": "MIT",
"homepage": "https://docs.expo.dev/versions/latest/sdk/splash-screen/",
"dependencies": {
- "@expo/config-plugins": "56.0.0",
- "@expo/image-utils": "0.9.0",
+ "@expo/config-plugins": "workspace:~56.0.0",
+ "@expo/image-utils": "workspace:^0.9.0",
"xml2js": "0.6.0"
},
"devDependencies": {
- "@expo/plist": "0.6.0",
+ "@expo/plist": "workspace:*",
"@types/node": "^22.14.0",
"@types/xml2js": "~0.4.11",
- "expo-module-scripts": "56.0.0",
+ "expo-module-scripts": "workspace:*",
"memfs": "^3.2.0"
},
"peerDependencies": {
- "expo": "56.0.0-preview.2"
+ "expo": "workspace:*"
}
}
diff --git a/packages/expo-sqlite/package.json b/packages/expo-sqlite/package.json
index c3a9e361255544..54313a6aa31cb7 100644
--- a/packages/expo-sqlite/package.json
+++ b/packages/expo-sqlite/package.json
@@ -63,11 +63,11 @@
"@types/node": "^22.14.0",
"@types/react": "~19.2.0",
"better-sqlite3": "^11.6.0",
- "expo-module-scripts": "56.0.0",
+ "expo-module-scripts": "workspace:*",
"react-error-boundary": "^4.0.11"
},
"peerDependencies": {
- "expo": "56.0.0-preview.2",
+ "expo": "workspace:*",
"react": "*",
"react-native": "*"
}
diff --git a/packages/expo-standard-web-crypto/package.json b/packages/expo-standard-web-crypto/package.json
index 4eac96e66888a8..14cf0d1a373148 100644
--- a/packages/expo-standard-web-crypto/package.json
+++ b/packages/expo-standard-web-crypto/package.json
@@ -29,11 +29,11 @@
"author": "650 Industries, Inc.",
"license": "MIT",
"devDependencies": {
- "expo-crypto": "56.0.0",
- "expo-module-scripts": "56.0.0"
+ "expo-crypto": "workspace:*",
+ "expo-module-scripts": "workspace:*"
},
"peerDependencies": {
- "expo-crypto": "56.0.0"
+ "expo-crypto": "workspace:^56.0.0"
},
"dependencies": {}
}
diff --git a/packages/expo-status-bar/package.json b/packages/expo-status-bar/package.json
index 369ed1e9d35716..574d48caaf60e1 100644
--- a/packages/expo-status-bar/package.json
+++ b/packages/expo-status-bar/package.json
@@ -44,10 +44,10 @@
"@testing-library/react-native": "^13.3.0",
"@types/node": "^22.14.0",
"@types/react": "~19.2.0",
- "expo-module-scripts": "56.0.0"
+ "expo-module-scripts": "workspace:*"
},
"peerDependencies": {
- "expo": "56.0.0-preview.2",
+ "expo": "workspace:*",
"react": "*",
"react-native": "*"
},
diff --git a/packages/expo-store-review/package.json b/packages/expo-store-review/package.json
index 6cd88e6b586653..4eda717f3ca59a 100644
--- a/packages/expo-store-review/package.json
+++ b/packages/expo-store-review/package.json
@@ -33,11 +33,11 @@
"homepage": "https://docs.expo.dev/versions/latest/sdk/storereview/",
"dependencies": {},
"devDependencies": {
- "expo-constants": "56.0.1",
- "expo-module-scripts": "56.0.0"
+ "expo-constants": "workspace:*",
+ "expo-module-scripts": "workspace:*"
},
"peerDependencies": {
- "expo": "56.0.0-preview.2",
+ "expo": "workspace:*",
"react-native": "*"
}
}
diff --git a/packages/expo-symbols/package.json b/packages/expo-symbols/package.json
index 18cd9b8b1f0347..3d1f9a01b2daa5 100644
--- a/packages/expo-symbols/package.json
+++ b/packages/expo-symbols/package.json
@@ -41,13 +41,13 @@
},
"devDependencies": {
"@types/react": "~19.2.0",
- "expo-module-scripts": "56.0.0",
- "expo-font": "56.0.1"
+ "expo-module-scripts": "workspace:*",
+ "expo-font": "workspace:*"
},
"peerDependencies": {
- "expo": "56.0.0-preview.2",
+ "expo": "workspace:*",
"react": "*",
"react-native": "*",
- "expo-font": "56.0.1"
+ "expo-font": "workspace:*"
}
}
diff --git a/packages/expo-system-ui/package.json b/packages/expo-system-ui/package.json
index fa855ab1029e45..16a846e1b3a152 100644
--- a/packages/expo-system-ui/package.json
+++ b/packages/expo-system-ui/package.json
@@ -39,10 +39,10 @@
},
"devDependencies": {
"@types/node": "^22.14.0",
- "expo-module-scripts": "56.0.0"
+ "expo-module-scripts": "workspace:*"
},
"peerDependencies": {
- "expo": "56.0.0-preview.2",
+ "expo": "workspace:*",
"react-native": "*",
"react-native-web": "*"
},
diff --git a/packages/expo-task-manager/package.json b/packages/expo-task-manager/package.json
index 2b605be7010a92..9cd05face22cb8 100644
--- a/packages/expo-task-manager/package.json
+++ b/packages/expo-task-manager/package.json
@@ -32,14 +32,14 @@
"license": "MIT",
"homepage": "https://docs.expo.dev/versions/latest/sdk/task-manager/",
"dependencies": {
- "unimodules-app-loader": "56.0.0"
+ "unimodules-app-loader": "workspace:~56.0.0"
},
"devDependencies": {
"@types/node": "^22.14.0",
- "expo-module-scripts": "56.0.0"
+ "expo-module-scripts": "workspace:*"
},
"peerDependencies": {
- "expo": "56.0.0-preview.2",
+ "expo": "workspace:*",
"react-native": "*"
}
}
diff --git a/packages/expo-test-runner/package.json b/packages/expo-test-runner/package.json
index 786e3d44abb6ff..4e1a7500507edb 100644
--- a/packages/expo-test-runner/package.json
+++ b/packages/expo-test-runner/package.json
@@ -29,8 +29,8 @@
"@babel/core": "^7.23.7",
"@types/node": "^22.14.0",
"@types/node-fetch": "^2.5.12",
- "eslint-config-universe": "15.1.0",
- "expo-module-scripts": "56.0.0"
+ "eslint-config-universe": "workspace:*",
+ "expo-module-scripts": "workspace:*"
},
"dependencies": {
"@babel/runtime": "^7.23.8",
diff --git a/packages/expo-tracking-transparency/package.json b/packages/expo-tracking-transparency/package.json
index 980c24e99c7a5b..71449ae0b3b8f4 100644
--- a/packages/expo-tracking-transparency/package.json
+++ b/packages/expo-tracking-transparency/package.json
@@ -30,10 +30,10 @@
"homepage": "https://docs.expo.dev/versions/latest/sdk/tracking-transparency",
"devDependencies": {
"@types/node": "^22.14.0",
- "expo-module-scripts": "56.0.0"
+ "expo-module-scripts": "workspace:*"
},
"peerDependencies": {
- "expo": "56.0.0-preview.2",
+ "expo": "workspace:*",
"react-native": "*"
},
"jest": {
diff --git a/packages/expo-ui/CHANGELOG.md b/packages/expo-ui/CHANGELOG.md
index e1768c6ff62b66..dd25c8c1e14a6f 100644
--- a/packages/expo-ui/CHANGELOG.md
+++ b/packages/expo-ui/CHANGELOG.md
@@ -26,6 +26,7 @@ _This version does not introduce any user-facing changes._
### 🎉 New features
+- [android] Use `LocalContentColor` when `tint` is omitted ([#45329](https://github.com/expo/expo/pull/45329) by [@Ubax](https://github.com/Ubax))
- [universal] Added `TextInput` component that mirrors RN's `TextInput` API but routes to SwiftUI on iOS, Compose on Android, and RN's `TextInput` on web. ([#45205](https://github.com/expo/expo/pull/45205) by [@nishan](https://github.com/intergalacticspacehighway))
- [compose] Exposed extension utilities for third-party modules: `ModifierRegistry.unregister`, and re-exported `createModifier` / `createModifierWithEventListener` / `createViewModifierEventListener` from `@expo/ui/jetpack-compose/modifiers`. Exported `PrimitiveBaseProps` from `@expo/ui/jetpack-compose`. ([#45122](https://github.com/expo/expo/pull/45122) by [@nishan](https://github.com/intergalacticspacehighway))
- [android] Add `colors` prop to `HorizontalFloatingToolbar` to override the variant's default toolbar and FAB container/content colors. ([#45244](https://github.com/expo/expo/pull/45244) by [@Ubax](https://github.com/Ubax))
diff --git a/packages/expo-ui/android/src/main/java/expo/modules/ui/icon/IconView.kt b/packages/expo-ui/android/src/main/java/expo/modules/ui/icon/IconView.kt
index 95fac20e59e0dd..f5bb4e5b808d20 100644
--- a/packages/expo-ui/android/src/main/java/expo/modules/ui/icon/IconView.kt
+++ b/packages/expo-ui/android/src/main/java/expo/modules/ui/icon/IconView.kt
@@ -7,6 +7,7 @@ import android.graphics.drawable.Drawable
import android.net.Uri
import androidx.compose.foundation.layout.size
import androidx.compose.material3.Icon
+import androidx.compose.material3.LocalContentColor
import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.MutableState
@@ -50,6 +51,7 @@ data class Source(
data class IconProps(
val source: MutableState = mutableStateOf(null),
val tint: MutableState = mutableStateOf(null),
+ val inheritTint: MutableState = mutableStateOf(true),
val size: MutableState = mutableStateOf(null),
val contentDescription: MutableState = mutableStateOf(null),
val modifiers: MutableState = mutableStateOf(emptyList())
@@ -73,6 +75,7 @@ class IconView(context: Context, appContext: AppContext) :
override fun ComposableScope.Content() {
val (source) = props.source
val (tint) = props.tint
+ val (inheritTint) = props.inheritTint
val (iconSize) = props.size
val (contentDescription) = props.contentDescription
val (modifiers) = props.modifiers
@@ -100,10 +103,12 @@ class IconView(context: Context, appContext: AppContext) :
// Render icon if painter available
if (painter != null) {
+ val resolvedTint = tint?.compose
+ ?: if (inheritTint) LocalContentColor.current else androidx.compose.ui.graphics.Color.Unspecified
Icon(
painter = painter,
contentDescription = contentDescription,
- tint = tint?.compose ?: androidx.compose.ui.graphics.Color.Unspecified,
+ tint = resolvedTint,
modifier = Modifier
.then(iconSize?.let { Modifier.size(it.dp) } ?: Modifier)
.then(ModifierRegistry.applyModifiers(modifiers, appContext, this@Content, globalEventDispatcher))
diff --git a/packages/expo-ui/build/jetpack-compose/DropdownMenu/DropdownMenuItem.d.ts b/packages/expo-ui/build/jetpack-compose/DropdownMenu/DropdownMenuItem.d.ts
index 6c7f39b3ca407f..5b9f3809d159ae 100644
--- a/packages/expo-ui/build/jetpack-compose/DropdownMenu/DropdownMenuItem.d.ts
+++ b/packages/expo-ui/build/jetpack-compose/DropdownMenu/DropdownMenuItem.d.ts
@@ -8,6 +8,10 @@ export type DropdownMenuItemElementColors = {
textColor?: ColorValue;
/** Color of the text when the menu item is disabled. */
disabledTextColor?: ColorValue;
+ leadingIconColor?: ColorValue;
+ trailingIconColor?: ColorValue;
+ disabledLeadingIconColor?: ColorValue;
+ disabledTrailingIconColor?: ColorValue;
};
/**
* Props of the `DropdownMenuItem` component.
diff --git a/packages/expo-ui/build/jetpack-compose/DropdownMenu/DropdownMenuItem.d.ts.map b/packages/expo-ui/build/jetpack-compose/DropdownMenu/DropdownMenuItem.d.ts.map
index 8b2c86cfa51001..d5475e98eb6fa9 100644
--- a/packages/expo-ui/build/jetpack-compose/DropdownMenu/DropdownMenuItem.d.ts.map
+++ b/packages/expo-ui/build/jetpack-compose/DropdownMenu/DropdownMenuItem.d.ts.map
@@ -1 +1 @@
-{"version":3,"file":"DropdownMenuItem.d.ts","sourceRoot":"","sources":["../../../src/jetpack-compose/DropdownMenu/DropdownMenuItem.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE/C,OAAO,KAAK,EAAE,cAAc,EAAa,MAAM,aAAa,CAAC;AAa7D;;GAEG;AACH,MAAM,MAAM,6BAA6B,GAAG;IAC1C,mCAAmC;IACnC,SAAS,CAAC,EAAE,UAAU,CAAC;IACvB,wDAAwD;IACxD,iBAAiB,CAAC,EAAE,UAAU,CAAC;CAOhC,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,qBAAqB,GAAG;IAClC;;;OAGG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;OAEG;IACH,aAAa,CAAC,EAAE,6BAA6B,CAAC;IAC9C;;OAEG;IACH,SAAS,CAAC,EAAE,cAAc,EAAE,CAAC;IAC7B;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB;;OAEG;IACH,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC5B,CAAC;AA4BF;;;;;GAKG;AACH,iBAAS,QAAQ,CAAC,KAAK,EAAE;IAAE,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;CAAE,2CAErD;AAED;;;;;GAKG;AACH,iBAAS,yBAAyB,CAAC,KAAK,EAAE,qBAAqB,2CAY9D;kBAZQ,yBAAyB;;6BA9BN;QAAE,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;KAAE;8BAU5B;QAAE,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;KAAE;;AAsC1D,OAAO,EAAE,yBAAyB,IAAI,gBAAgB,EAAE,CAAC"}
\ No newline at end of file
+{"version":3,"file":"DropdownMenuItem.d.ts","sourceRoot":"","sources":["../../../src/jetpack-compose/DropdownMenu/DropdownMenuItem.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE/C,OAAO,KAAK,EAAE,cAAc,EAAa,MAAM,aAAa,CAAC;AAa7D;;GAEG;AACH,MAAM,MAAM,6BAA6B,GAAG;IAC1C,mCAAmC;IACnC,SAAS,CAAC,EAAE,UAAU,CAAC;IACvB,wDAAwD;IACxD,iBAAiB,CAAC,EAAE,UAAU,CAAC;IAC/B,gBAAgB,CAAC,EAAE,UAAU,CAAC;IAC9B,iBAAiB,CAAC,EAAE,UAAU,CAAC;IAC/B,wBAAwB,CAAC,EAAE,UAAU,CAAC;IACtC,yBAAyB,CAAC,EAAE,UAAU,CAAC;CACxC,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,qBAAqB,GAAG;IAClC;;;OAGG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;OAEG;IACH,aAAa,CAAC,EAAE,6BAA6B,CAAC;IAC9C;;OAEG;IACH,SAAS,CAAC,EAAE,cAAc,EAAE,CAAC;IAC7B;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB;;OAEG;IACH,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC5B,CAAC;AA4BF;;;;;GAKG;AACH,iBAAS,QAAQ,CAAC,KAAK,EAAE;IAAE,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;CAAE,2CAErD;AAED;;;;;GAKG;AACH,iBAAS,yBAAyB,CAAC,KAAK,EAAE,qBAAqB,2CAY9D;kBAZQ,yBAAyB;;6BA9BN;QAAE,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;KAAE;8BAU5B;QAAE,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;KAAE;;AAsC1D,OAAO,EAAE,yBAAyB,IAAI,gBAAgB,EAAE,CAAC"}
\ No newline at end of file
diff --git a/packages/expo-ui/build/jetpack-compose/HorizontalFloatingToolbar/index.d.ts b/packages/expo-ui/build/jetpack-compose/HorizontalFloatingToolbar/index.d.ts
index a738bd88783bd2..eaa3244e28d1e0 100644
--- a/packages/expo-ui/build/jetpack-compose/HorizontalFloatingToolbar/index.d.ts
+++ b/packages/expo-ui/build/jetpack-compose/HorizontalFloatingToolbar/index.d.ts
@@ -5,10 +5,18 @@ export type HorizontalFloatingToolbarColors = {
* Color of the toolbar container (background).
*/
toolbarContainerColor?: ColorValue;
+ /**
+ * Color of the toolbar content (icons/text).
+ */
+ toolbarContentColor?: ColorValue;
/**
* Color of the floating action button container (background).
*/
fabContainerColor?: ColorValue;
+ /**
+ * Color of the floating action button content (icon).
+ */
+ fabContentColor?: ColorValue;
};
export type HorizontalFloatingToolbarProps = {
/**
diff --git a/packages/expo-ui/build/jetpack-compose/HorizontalFloatingToolbar/index.d.ts.map b/packages/expo-ui/build/jetpack-compose/HorizontalFloatingToolbar/index.d.ts.map
index 36256da7aae9a7..690d48b8820900 100644
--- a/packages/expo-ui/build/jetpack-compose/HorizontalFloatingToolbar/index.d.ts.map
+++ b/packages/expo-ui/build/jetpack-compose/HorizontalFloatingToolbar/index.d.ts.map
@@ -1 +1 @@
-{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/jetpack-compose/HorizontalFloatingToolbar/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE/C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAGhD,MAAM,MAAM,+BAA+B,GAAG;IAC5C;;OAEG;IACH,qBAAqB,CAAC,EAAE,UAAU,CAAC;IAOnC;;OAEG;IACH,iBAAiB,CAAC,EAAE,UAAU,CAAC;CAMhC,CAAC;AAEF,MAAM,MAAM,8BAA8B,GAAG;IAC3C;;;OAGG;IACH,OAAO,CAAC,EAAE,UAAU,GAAG,SAAS,CAAC;IAEjC;;;OAGG;IACH,MAAM,CAAC,EAAE,+BAA+B,CAAC;IAEzC;;OAEG;IACH,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAE1B;;OAEG;IACH,SAAS,CAAC,EAAE,YAAY,EAAE,CAAC;CAC5B,CAAC;AAEF,MAAM,MAAM,kDAAkD,GAAG;IAC/D;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IAErB;;OAEG;IACH,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B,CAAC;AAmBF;;;GAGG;AACH,wBAAgB,6CAA6C,CAC3D,KAAK,EAAE,kDAAkD,2CAO1D;AAaD;;;GAGG;AACH,iBAAS,yBAAyB,CAAC,KAAK,EAAE,8BAA8B,2CAMvE;kBANQ,yBAAyB;;;AAUlC,OAAO,EAAE,yBAAyB,EAAE,CAAC"}
\ No newline at end of file
+{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/jetpack-compose/HorizontalFloatingToolbar/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE/C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAGhD,MAAM,MAAM,+BAA+B,GAAG;IAC5C;;OAEG;IACH,qBAAqB,CAAC,EAAE,UAAU,CAAC;IAEnC;;OAEG;IACH,mBAAmB,CAAC,EAAE,UAAU,CAAC;IAEjC;;OAEG;IACH,iBAAiB,CAAC,EAAE,UAAU,CAAC;IAE/B;;OAEG;IACH,eAAe,CAAC,EAAE,UAAU,CAAC;CAC9B,CAAC;AAEF,MAAM,MAAM,8BAA8B,GAAG;IAC3C;;;OAGG;IACH,OAAO,CAAC,EAAE,UAAU,GAAG,SAAS,CAAC;IAEjC;;;OAGG;IACH,MAAM,CAAC,EAAE,+BAA+B,CAAC;IAEzC;;OAEG;IACH,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAE1B;;OAEG;IACH,SAAS,CAAC,EAAE,YAAY,EAAE,CAAC;CAC5B,CAAC;AAEF,MAAM,MAAM,kDAAkD,GAAG;IAC/D;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IAErB;;OAEG;IACH,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B,CAAC;AAmBF;;;GAGG;AACH,wBAAgB,6CAA6C,CAC3D,KAAK,EAAE,kDAAkD,2CAO1D;AAaD;;;GAGG;AACH,iBAAS,yBAAyB,CAAC,KAAK,EAAE,8BAA8B,2CAMvE;kBANQ,yBAAyB;;;AAUlC,OAAO,EAAE,yBAAyB,EAAE,CAAC"}
\ No newline at end of file
diff --git a/packages/expo-ui/build/jetpack-compose/HorizontalPager/index.d.ts b/packages/expo-ui/build/jetpack-compose/HorizontalPager/index.d.ts
index 52280d5db13a54..93b234f43e5667 100644
--- a/packages/expo-ui/build/jetpack-compose/HorizontalPager/index.d.ts
+++ b/packages/expo-ui/build/jetpack-compose/HorizontalPager/index.d.ts
@@ -1,6 +1,7 @@
import type { Ref } from 'react';
import { type ModifierConfig } from '../../types';
-import type { PaddingValuesRecord } from '../Carousel';
+import { type PaddingValuesRecord } from '../Carousel';
+export type { PaddingValuesRecord };
export type HorizontalPagerHandle = {
/**
* Mirrors Compose's `PagerState.animateScrollToPage`. Resolves when the
diff --git a/packages/expo-ui/build/jetpack-compose/HorizontalPager/index.d.ts.map b/packages/expo-ui/build/jetpack-compose/HorizontalPager/index.d.ts.map
index 11503052aab0df..6f69c7a0e2c854 100644
--- a/packages/expo-ui/build/jetpack-compose/HorizontalPager/index.d.ts.map
+++ b/packages/expo-ui/build/jetpack-compose/HorizontalPager/index.d.ts.map
@@ -1 +1 @@
-{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/jetpack-compose/HorizontalPager/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAEjC,OAAO,EAAE,KAAK,cAAc,EAAkB,MAAM,aAAa,CAAC;AAClE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAGvD,MAAM,MAAM,qBAAqB,GAAG;IAClC;;;OAGG;IACH,mBAAmB,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACrD;;OAEG;IACH,YAAY,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAC/C,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC;;;OAGG;IACH,GAAG,CAAC,EAAE,GAAG,CAAC,qBAAqB,CAAC,CAAC;IACjC;;;;OAIG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;;OAIG;IACH,mBAAmB,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7C;;;OAGG;IACH,mBAAmB,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7C;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;OAGG;IACH,cAAc,CAAC,EAAE,MAAM,GAAG,mBAAmB,CAAC;IAC9C;;;OAGG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B;;;OAGG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB;;;OAGG;IACH,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC;;OAEG;IACH,SAAS,CAAC,EAAE,cAAc,EAAE,CAAC;IAC7B;;OAEG;IACH,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B,CAAC;AA6BF;;;GAGG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,oBAAoB,2CAE1D"}
\ No newline at end of file
+{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/jetpack-compose/HorizontalPager/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAEjC,OAAO,EAAE,KAAK,cAAc,EAAkB,MAAM,aAAa,CAAC;AAClE,OAAO,EAAE,KAAK,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAGvD,YAAY,EAAE,mBAAmB,EAAE,CAAC;AAEpC,MAAM,MAAM,qBAAqB,GAAG;IAClC;;;OAGG;IACH,mBAAmB,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACrD;;OAEG;IACH,YAAY,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAC/C,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC;;;OAGG;IACH,GAAG,CAAC,EAAE,GAAG,CAAC,qBAAqB,CAAC,CAAC;IACjC;;;;OAIG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;;OAIG;IACH,mBAAmB,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7C;;;OAGG;IACH,mBAAmB,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7C;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;OAGG;IACH,cAAc,CAAC,EAAE,MAAM,GAAG,mBAAmB,CAAC;IAC9C;;;OAGG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B;;;OAGG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB;;;OAGG;IACH,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC;;OAEG;IACH,SAAS,CAAC,EAAE,cAAc,EAAE,CAAC;IAC7B;;OAEG;IACH,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B,CAAC;AA6BF;;;GAGG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,oBAAoB,2CAE1D"}
\ No newline at end of file
diff --git a/packages/expo-ui/build/jetpack-compose/Icon/index.d.ts b/packages/expo-ui/build/jetpack-compose/Icon/index.d.ts
index d9324371761aa5..6d9163e5bc26a6 100644
--- a/packages/expo-ui/build/jetpack-compose/Icon/index.d.ts
+++ b/packages/expo-ui/build/jetpack-compose/Icon/index.d.ts
@@ -13,16 +13,22 @@ export type IconProps = {
*/
source: ImageSourcePropType;
/**
- * The tint color to apply to the icon.
- * Accepts hex strings, named colors, or RGB arrays.
+ * The tint color to apply to the icon. Accepts hex strings, named colors,
+ * or RGB arrays.
+ *
+ * - When omitted, the icon inherits the color from the surrounding
+ * `LocalContentColor` (e.g. the toolbar/FAB content color).
+ * - When set to `null`, no tint is applied — the icon is drawn with its
+ * original colors (`Color.Unspecified`). Use this for multicolored icons.
*
* @example
* ```tsx
*
*
+ *
* ```
*/
- tint?: ColorValue;
+ tint?: ColorValue | null;
/**
* The size of the icon in density-independent pixels (dp).
* If not specified, the icon will use its intrinsic size.
@@ -66,8 +72,10 @@ export type IconProps = {
/**
* @hidden
*/
-export type NativeIconProps = Omit & {
+export type NativeIconProps = Omit & {
source: ImageResolvedAssetSource;
+ tint?: ColorValue;
+ inheritTint: boolean;
};
/**
* Displays an icon from an XML vector drawable or other image source.
diff --git a/packages/expo-ui/build/jetpack-compose/Icon/index.d.ts.map b/packages/expo-ui/build/jetpack-compose/Icon/index.d.ts.map
index 35f3ce3fb4b38e..72f4014af2168b 100644
--- a/packages/expo-ui/build/jetpack-compose/Icon/index.d.ts.map
+++ b/packages/expo-ui/build/jetpack-compose/Icon/index.d.ts.map
@@ -1 +1 @@
-{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/jetpack-compose/Icon/index.tsx"],"names":[],"mappings":"AACA,OAAO,EACL,KAAK,UAAU,EACf,KAAK,mBAAmB,EACxB,KAAK,wBAAwB,EAE9B,MAAM,cAAc,CAAC;AAEtB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAGlD,MAAM,MAAM,SAAS,GAAG;IACtB;;;;;;;;;OASG;IACH,MAAM,EAAE,mBAAmB,CAAC;IAE5B;;;;;;;;;OASG;IACH,IAAI,CAAC,EAAE,UAAU,CAAC;IAElB;;;;;;;;OAQG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd;;;;;;;;;;;OAWG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAE5B;;;;;;;;;;;;;;OAcG;IACH,SAAS,CAAC,EAAE,cAAc,EAAE,CAAC;CAC9B,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,eAAe,GAAG,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,GAAG;IACxD,MAAM,EAAE,wBAAwB,CAAC;CAClC,CAAC;AAkBF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AACH,wBAAgB,IAAI,CAAC,KAAK,EAAE,SAAS,2CAEpC"}
\ No newline at end of file
+{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/jetpack-compose/Icon/index.tsx"],"names":[],"mappings":"AACA,OAAO,EACL,KAAK,UAAU,EACf,KAAK,mBAAmB,EACxB,KAAK,wBAAwB,EAE9B,MAAM,cAAc,CAAC;AAEtB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAGlD,MAAM,MAAM,SAAS,GAAG;IACtB;;;;;;;;;OASG;IACH,MAAM,EAAE,mBAAmB,CAAC;IAE5B;;;;;;;;;;;;;;;OAeG;IACH,IAAI,CAAC,EAAE,UAAU,GAAG,IAAI,CAAC;IAEzB;;;;;;;;OAQG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd;;;;;;;;;;;OAWG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAE5B;;;;;;;;;;;;;;OAcG;IACH,SAAS,CAAC,EAAE,cAAc,EAAE,CAAC;CAC9B,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,eAAe,GAAG,IAAI,CAAC,SAAS,EAAE,QAAQ,GAAG,MAAM,CAAC,GAAG;IACjE,MAAM,EAAE,wBAAwB,CAAC;IACjC,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,WAAW,EAAE,OAAO,CAAC;CACtB,CAAC;AAuBF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AACH,wBAAgB,IAAI,CAAC,KAAK,EAAE,SAAS,2CAEpC"}
\ No newline at end of file
diff --git a/packages/expo-ui/build/jetpack-compose/index.d.ts b/packages/expo-ui/build/jetpack-compose/index.d.ts
index 6809acf25b4cf7..895a000fbed4f5 100644
--- a/packages/expo-ui/build/jetpack-compose/index.d.ts
+++ b/packages/expo-ui/build/jetpack-compose/index.d.ts
@@ -31,7 +31,7 @@ export * from './ToggleButton';
export * from './Shape';
export * from './ModalBottomSheet';
export * from './Carousel';
-export * from './HorizontalPager';
+export { HorizontalPager, type HorizontalPagerHandle, type HorizontalPagerProps, } from './HorizontalPager';
export * from './SearchBar';
export * from './DockedSearchBar';
export * from './HorizontalFloatingToolbar';
diff --git a/packages/expo-ui/build/jetpack-compose/index.d.ts.map b/packages/expo-ui/build/jetpack-compose/index.d.ts.map
index 73089bfa30c5b8..8979ce5252c874 100644
--- a/packages/expo-ui/build/jetpack-compose/index.d.ts.map
+++ b/packages/expo-ui/build/jetpack-compose/index.d.ts.map
@@ -1 +1 @@
-{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/jetpack-compose/index.ts"],"names":[],"mappings":"AAAA,OAAO,mBAAmB,CAAC;AAC3B,OAAO,uCAAuC,CAAC;AAE/C,cAAc,eAAe,CAAC;AAC9B,cAAc,SAAS,CAAC;AACxB,cAAc,aAAa,CAAC;AAC5B,OAAO,EAAE,gBAAgB,EAAE,KAAK,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAClF,cAAc,QAAQ,CAAC;AACvB,cAAc,YAAY,CAAC;AAC3B,cAAc,QAAQ,CAAC;AACvB,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,cAAc,QAAQ,CAAC;AACvB,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,0BAA0B,CAAC;AACzC,cAAc,WAAW,CAAC;AAC1B,cAAc,QAAQ,CAAC;AACvB,cAAc,cAAc,CAAC;AAC7B,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,mBAAmB,CAAC;AAClC,cAAc,YAAY,CAAC;AAC3B,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,SAAS,CAAC;AACxB,cAAc,oBAAoB,CAAC;AACnC,cAAc,YAAY,CAAC;AAC3B,cAAc,mBAAmB,CAAC;AAClC,cAAc,aAAa,CAAC;AAC5B,cAAc,mBAAmB,CAAC;AAClC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,wBAAwB,CAAC;AACvC,cAAc,oBAAoB,CAAC;AACnC,cAAc,eAAe,CAAC;AAC9B,cAAc,WAAW,CAAC;AAC1B,OAAO,EAAE,KAAK,SAAS,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAC9C,cAAc,WAAW,CAAC;AAE1B,cAAc,sBAAsB,CAAC;AACrC,cAAc,OAAO,CAAC;AACtB,cAAc,OAAO,CAAC;AACtB,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC;AAC1B,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACzD,YAAY,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAC1C,YAAY,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC"}
\ No newline at end of file
+{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/jetpack-compose/index.ts"],"names":[],"mappings":"AAAA,OAAO,mBAAmB,CAAC;AAC3B,OAAO,uCAAuC,CAAC;AAE/C,cAAc,eAAe,CAAC;AAC9B,cAAc,SAAS,CAAC;AACxB,cAAc,aAAa,CAAC;AAC5B,OAAO,EAAE,gBAAgB,EAAE,KAAK,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAClF,cAAc,QAAQ,CAAC;AACvB,cAAc,YAAY,CAAC;AAC3B,cAAc,QAAQ,CAAC;AACvB,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,cAAc,QAAQ,CAAC;AACvB,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,0BAA0B,CAAC;AACzC,cAAc,WAAW,CAAC;AAC1B,cAAc,QAAQ,CAAC;AACvB,cAAc,cAAc,CAAC;AAC7B,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,mBAAmB,CAAC;AAClC,cAAc,YAAY,CAAC;AAC3B,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,SAAS,CAAC;AACxB,cAAc,oBAAoB,CAAC;AACnC,cAAc,YAAY,CAAC;AAC3B,OAAO,EACL,eAAe,EACf,KAAK,qBAAqB,EAC1B,KAAK,oBAAoB,GAC1B,MAAM,mBAAmB,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,mBAAmB,CAAC;AAClC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,wBAAwB,CAAC;AACvC,cAAc,oBAAoB,CAAC;AACnC,cAAc,eAAe,CAAC;AAC9B,cAAc,WAAW,CAAC;AAC1B,OAAO,EAAE,KAAK,SAAS,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAC9C,cAAc,WAAW,CAAC;AAE1B,cAAc,sBAAsB,CAAC;AACrC,cAAc,OAAO,CAAC;AACtB,cAAc,OAAO,CAAC;AACtB,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC;AAC1B,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACzD,YAAY,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAC1C,YAAY,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC"}
\ No newline at end of file
diff --git a/packages/expo-ui/package.json b/packages/expo-ui/package.json
index 6a565f34a6f294..5ff1277a3a37a7 100644
--- a/packages/expo-ui/package.json
+++ b/packages/expo-ui/package.json
@@ -85,7 +85,7 @@
"@types/babel__core": "^7.20.5",
"@types/node": "^22.14.0",
"@types/react": "~19.2.0",
- "expo-module-scripts": "56.0.0",
+ "expo-module-scripts": "workspace:*",
"react-native-reanimated": "4.3.0",
"react-native-worklets": "0.8.3"
},
@@ -94,7 +94,7 @@
},
"peerDependencies": {
"@babel/core": "*",
- "expo": "56.0.0-preview.1",
+ "expo": "workspace:*",
"react": "*",
"react-dom": "*",
"react-native": "*",
diff --git a/packages/expo-ui/src/jetpack-compose/DropdownMenu/DropdownMenuItem.tsx b/packages/expo-ui/src/jetpack-compose/DropdownMenu/DropdownMenuItem.tsx
index c3e731f75e8eb2..d7b68fe55794e5 100644
--- a/packages/expo-ui/src/jetpack-compose/DropdownMenu/DropdownMenuItem.tsx
+++ b/packages/expo-ui/src/jetpack-compose/DropdownMenu/DropdownMenuItem.tsx
@@ -22,12 +22,10 @@ export type DropdownMenuItemElementColors = {
textColor?: ColorValue;
/** Color of the text when the menu item is disabled. */
disabledTextColor?: ColorValue;
- // TODO: At the moment IconView's tint color defaults to Color.Unspecified instead of LocalContentColor.current.
- // Thus the color override will not work for icons. At the moment icon color can only be set directly in IconView.
- // leadingIconColor?: ColorValue;
- // trailingIconColor?: ColorValue;
- // disabledLeadingIconColor?: ColorValue;
- // disabledTrailingIconColor?: ColorValue;
+ leadingIconColor?: ColorValue;
+ trailingIconColor?: ColorValue;
+ disabledLeadingIconColor?: ColorValue;
+ disabledTrailingIconColor?: ColorValue;
};
/**
diff --git a/packages/expo-ui/src/jetpack-compose/HorizontalFloatingToolbar/index.tsx b/packages/expo-ui/src/jetpack-compose/HorizontalFloatingToolbar/index.tsx
index 3e09cf0d7ab654..2e12fd0a7c9418 100644
--- a/packages/expo-ui/src/jetpack-compose/HorizontalFloatingToolbar/index.tsx
+++ b/packages/expo-ui/src/jetpack-compose/HorizontalFloatingToolbar/index.tsx
@@ -10,20 +10,20 @@ export type HorizontalFloatingToolbarColors = {
*/
toolbarContainerColor?: ColorValue;
- // Color of the toolbar content (icons/text).
- // TODO: At the moment IconView's tint color defaults to Color.Unspecified instead of LocalContentColor.current.
- // Thus the color override will not work.
- // toolbarContentColor?: ColorValue;
+ /**
+ * Color of the toolbar content (icons/text).
+ */
+ toolbarContentColor?: ColorValue;
/**
* Color of the floating action button container (background).
*/
fabContainerColor?: ColorValue;
- // Color of the floating action button content (icon).
- // TODO: At the moment IconView's tint color defaults to Color.Unspecified instead of LocalContentColor.current.
- // Thus the color override will not work.
- // fabContentColor?: ColorValue;
+ /**
+ * Color of the floating action button content (icon).
+ */
+ fabContentColor?: ColorValue;
};
export type HorizontalFloatingToolbarProps = {
diff --git a/packages/expo-ui/src/jetpack-compose/HorizontalPager/index.tsx b/packages/expo-ui/src/jetpack-compose/HorizontalPager/index.tsx
index cc379baa5651cd..36e13aa9075215 100644
--- a/packages/expo-ui/src/jetpack-compose/HorizontalPager/index.tsx
+++ b/packages/expo-ui/src/jetpack-compose/HorizontalPager/index.tsx
@@ -2,9 +2,11 @@ import { requireNativeView } from 'expo';
import type { Ref } from 'react';
import { type ModifierConfig, type ViewEvent } from '../../types';
-import type { PaddingValuesRecord } from '../Carousel';
+import { type PaddingValuesRecord } from '../Carousel';
import { createViewModifierEventListener } from '../modifiers/utils';
+export type { PaddingValuesRecord };
+
export type HorizontalPagerHandle = {
/**
* Mirrors Compose's `PagerState.animateScrollToPage`. Resolves when the
diff --git a/packages/expo-ui/src/jetpack-compose/Icon/index.tsx b/packages/expo-ui/src/jetpack-compose/Icon/index.tsx
index 684983e5613208..29887f84675315 100644
--- a/packages/expo-ui/src/jetpack-compose/Icon/index.tsx
+++ b/packages/expo-ui/src/jetpack-compose/Icon/index.tsx
@@ -23,16 +23,22 @@ export type IconProps = {
source: ImageSourcePropType;
/**
- * The tint color to apply to the icon.
- * Accepts hex strings, named colors, or RGB arrays.
+ * The tint color to apply to the icon. Accepts hex strings, named colors,
+ * or RGB arrays.
+ *
+ * - When omitted, the icon inherits the color from the surrounding
+ * `LocalContentColor` (e.g. the toolbar/FAB content color).
+ * - When set to `null`, no tint is applied — the icon is drawn with its
+ * original colors (`Color.Unspecified`). Use this for multicolored icons.
*
* @example
* ```tsx
*
*
+ *
* ```
*/
- tint?: ColorValue;
+ tint?: ColorValue | null;
/**
* The size of the icon in density-independent pixels (dp).
@@ -80,8 +86,10 @@ export type IconProps = {
/**
* @hidden
*/
-export type NativeIconProps = Omit & {
+export type NativeIconProps = Omit & {
source: ImageResolvedAssetSource;
+ tint?: ColorValue;
+ inheritTint: boolean;
};
const IconNativeView: React.ComponentType = requireNativeView(
@@ -90,12 +98,17 @@ const IconNativeView: React.ComponentType = requireNativeView(
);
function transformIconProps(props: IconProps): NativeIconProps {
- const { source, modifiers, ...restProps } = props;
+ const { source, modifiers, tint, ...restProps } = props;
+ // Differentiate "tint not provided" (inherit `LocalContentColor`) from
+ // "tint explicitly null" (no tint, draw original colors).
+ const tintIsExplicitlyNull = 'tint' in props && tint === null;
return {
modifiers,
...(modifiers ? createViewModifierEventListener(modifiers) : undefined),
...restProps,
+ tint: tint ?? undefined,
+ inheritTint: !tintIsExplicitlyNull,
source: Image.resolveAssetSource(source),
};
}
diff --git a/packages/expo-ui/src/jetpack-compose/index.ts b/packages/expo-ui/src/jetpack-compose/index.ts
index b9f5da9ea62683..7cf0055ac2b5e6 100644
--- a/packages/expo-ui/src/jetpack-compose/index.ts
+++ b/packages/expo-ui/src/jetpack-compose/index.ts
@@ -32,7 +32,11 @@ export * from './ToggleButton';
export * from './Shape';
export * from './ModalBottomSheet';
export * from './Carousel';
-export * from './HorizontalPager';
+export {
+ HorizontalPager,
+ type HorizontalPagerHandle,
+ type HorizontalPagerProps,
+} from './HorizontalPager';
export * from './SearchBar';
export * from './DockedSearchBar';
export * from './HorizontalFloatingToolbar';
diff --git a/packages/expo-updates-interface/package.json b/packages/expo-updates-interface/package.json
index 612ddb89832fed..fcb33aff675dcc 100644
--- a/packages/expo-updates-interface/package.json
+++ b/packages/expo-updates-interface/package.json
@@ -21,6 +21,6 @@
"homepage": "https://docs.expo.dev",
"dependencies": {},
"peerDependencies": {
- "expo": "56.0.0-preview.2"
+ "expo": "workspace:*"
}
}
diff --git a/packages/expo-updates/package.json b/packages/expo-updates/package.json
index ad968de2008d8e..8308584b75c8c6 100644
--- a/packages/expo-updates/package.json
+++ b/packages/expo-updates/package.json
@@ -39,15 +39,15 @@
},
"dependencies": {
"@expo/code-signing-certificates": "^0.0.6",
- "@expo/plist": "0.6.0",
+ "@expo/plist": "workspace:^0.6.0",
"@expo/spawn-async": "^1.7.2",
"arg": "^4.1.0",
"chalk": "^4.1.2",
"debug": "^4.3.4",
- "expo-eas-client": "56.0.0",
- "expo-manifests": "56.0.1",
- "expo-structured-headers": "56.0.0",
- "expo-updates-interface": "56.0.1",
+ "expo-eas-client": "workspace:~56.0.0",
+ "expo-manifests": "workspace:~56.0.1",
+ "expo-structured-headers": "workspace:~56.0.0",
+ "expo-updates-interface": "workspace:~56.0.1",
"getenv": "^2.0.0",
"glob": "^13.0.0",
"ignore": "^5.3.1",
@@ -55,7 +55,7 @@
"resolve-from": "^5.0.0"
},
"devDependencies": {
- "@expo/metro-config": "56.0.1",
+ "@expo/metro-config": "workspace:*",
"@testing-library/react-native": "^13.3.0",
"@types/debug": "^4.1.7",
"@types/getenv": "^1.0.0",
@@ -65,7 +65,7 @@
"@types/picomatch": "^4.0.0",
"@types/react": "~19.2.0",
"@vercel/ncc": "^0.38.3",
- "expo-module-scripts": "56.0.0",
+ "expo-module-scripts": "workspace:*",
"express": "^5.1.0",
"form-data": "^4.0.4",
"memfs": "^3.2.0",
@@ -74,8 +74,8 @@
"xstate": "^4.37.2"
},
"peerDependencies": {
- "expo": "56.0.0-preview.2",
- "expo-dev-client": "56.0.0",
+ "expo": "workspace:*",
+ "expo-dev-client": "workspace:*",
"react": "*",
"react-native": "*"
},
diff --git a/packages/expo-video-thumbnails/package.json b/packages/expo-video-thumbnails/package.json
index 809fd61cb84f19..37524118f4e06c 100644
--- a/packages/expo-video-thumbnails/package.json
+++ b/packages/expo-video-thumbnails/package.json
@@ -33,9 +33,9 @@
"homepage": "https://docs.expo.dev/versions/latest/sdk/video-thumbnails/",
"dependencies": {},
"devDependencies": {
- "expo-module-scripts": "56.0.0"
+ "expo-module-scripts": "workspace:*"
},
"peerDependencies": {
- "expo": "56.0.0-preview.2"
+ "expo": "workspace:*"
}
}
diff --git a/packages/expo-video/package.json b/packages/expo-video/package.json
index 77d5fe84f0db4c..75a016d70dcbab 100644
--- a/packages/expo-video/package.json
+++ b/packages/expo-video/package.json
@@ -32,10 +32,10 @@
"devDependencies": {
"@types/node": "^22.14.0",
"@types/react": "~19.2.0",
- "expo-module-scripts": "56.0.0"
+ "expo-module-scripts": "workspace:*"
},
"peerDependencies": {
- "expo": "56.0.0-preview.2",
+ "expo": "workspace:*",
"react": "*",
"react-native": "*"
}
diff --git a/packages/expo-web-browser/package.json b/packages/expo-web-browser/package.json
index 10d57d6f829155..7ebb1391898752 100644
--- a/packages/expo-web-browser/package.json
+++ b/packages/expo-web-browser/package.json
@@ -37,10 +37,10 @@
},
"devDependencies": {
"@types/node": "^22.14.0",
- "expo-module-scripts": "56.0.0"
+ "expo-module-scripts": "workspace:*"
},
"peerDependencies": {
- "expo": "56.0.0-preview.2",
+ "expo": "workspace:*",
"react-native": "*"
}
}
diff --git a/packages/expo-widgets/package.json b/packages/expo-widgets/package.json
index 72d1ab1a6a4b34..00e0b667bd5e65 100644
--- a/packages/expo-widgets/package.json
+++ b/packages/expo-widgets/package.json
@@ -31,19 +31,19 @@
"license": "MIT",
"homepage": "https://docs.expo.dev/versions/latest/sdk/widgets/",
"dependencies": {
- "@expo/plist": "0.6.0",
- "@expo/ui": "56.0.1"
+ "@expo/plist": "workspace:^0.6.0",
+ "@expo/ui": "workspace:~56.0.1"
},
"devDependencies": {
"@expo/spawn-async": "^1.7.2",
"@types/node": "^22.14.0",
"@types/react": "~19.2.0",
- "expo-module-scripts": "56.0.0",
+ "expo-module-scripts": "workspace:*",
"react-native": "0.85.2",
"resolve-workspace-root": "^2.0.0"
},
"peerDependencies": {
- "expo": "56.0.0-preview.2",
+ "expo": "workspace:*",
"react": "*",
"react-native": "*"
}
diff --git a/packages/expo/package.json b/packages/expo/package.json
index 282d09d3b9daf6..97d7cd8cce2ef7 100644
--- a/packages/expo/package.json
+++ b/packages/expo/package.json
@@ -75,36 +75,36 @@
"homepage": "https://github.com/expo/expo/tree/main/packages/expo",
"dependencies": {
"@babel/runtime": "^7.20.0",
- "@expo/cli": "56.0.2",
- "@expo/config": "56.0.0",
- "@expo/config-plugins": "56.0.0",
- "@expo/devtools": "56.0.0",
- "@expo/dom-webview": "56.0.1",
- "@expo/fingerprint": "0.17.1",
- "@expo/local-build-cache-provider": "56.0.0",
- "@expo/log-box": "56.0.1",
+ "@expo/cli": "workspace:56.0.2",
+ "@expo/config": "workspace:~56.0.0",
+ "@expo/config-plugins": "workspace:~56.0.0",
+ "@expo/devtools": "workspace:56.0.0",
+ "@expo/dom-webview": "workspace:~56.0.1",
+ "@expo/fingerprint": "workspace:0.17.1",
+ "@expo/local-build-cache-provider": "workspace:56.0.0",
+ "@expo/log-box": "workspace:56.0.1",
"@expo/metro": "~56.0.0",
- "@expo/metro-config": "56.0.1",
+ "@expo/metro-config": "workspace:56.0.1",
"@expo/vector-icons": "^15.0.2",
"@ungap/structured-clone": "^1.3.0",
- "babel-preset-expo": "56.0.1",
- "expo-asset": "56.0.1",
- "expo-constants": "56.0.1",
- "expo-file-system": "56.0.1",
- "expo-font": "56.0.1",
- "expo-keep-awake": "56.0.1",
- "expo-modules-autolinking": "56.0.0",
- "expo-modules-core": "56.0.0",
+ "babel-preset-expo": "workspace:~56.0.1",
+ "expo-asset": "workspace:~56.0.1",
+ "expo-constants": "workspace:~56.0.1",
+ "expo-file-system": "workspace:~56.0.1",
+ "expo-font": "workspace:~56.0.1",
+ "expo-keep-awake": "workspace:~56.0.1",
+ "expo-modules-autolinking": "workspace:56.0.0",
+ "expo-modules-core": "workspace:56.0.0",
"pretty-format": "^29.7.0",
"react-refresh": "^0.14.2",
"whatwg-url-minimum": "^0.1.1"
},
"devDependencies": {
- "@expo/dom-webview": "56.0.1",
- "@expo/metro-runtime": "56.0.1",
+ "@expo/dom-webview": "workspace:*",
+ "@expo/metro-runtime": "workspace:*",
"@types/node": "^22.14.0",
"@types/react": "~19.2.0",
- "expo-updates": "56.0.1",
+ "expo-updates": "workspace:*",
"npm-run-all2": "^8.0.4",
"react": "19.2.3",
"react-dom": "19.2.3",
@@ -113,8 +113,8 @@
"web-streams-polyfill": "^3.3.2"
},
"peerDependencies": {
- "@expo/dom-webview": "56.0.1",
- "@expo/metro-runtime": "56.0.1",
+ "@expo/dom-webview": "workspace:*",
+ "@expo/metro-runtime": "workspace:*",
"react": "*",
"react-native": "*",
"react-dom": "*",
diff --git a/packages/html-elements/package.json b/packages/html-elements/package.json
index 992d2906997d87..a389249ee96da7 100644
--- a/packages/html-elements/package.json
+++ b/packages/html-elements/package.json
@@ -74,6 +74,6 @@
"@testing-library/react": "^16.3.0",
"@testing-library/react-native": "^13.3.0",
"@types/react": "~19.2.2",
- "expo-module-scripts": "56.0.0"
+ "expo-module-scripts": "workspace:*"
}
}
diff --git a/packages/install-expo-modules/package.json b/packages/install-expo-modules/package.json
index 53575d6e85b2cf..bffd1db7fca9b9 100644
--- a/packages/install-expo-modules/package.json
+++ b/packages/install-expo-modules/package.json
@@ -36,15 +36,15 @@
"directory": "packages/install-expo-modules"
},
"devDependencies": {
- "@expo/config": "56.0.0",
- "@expo/config-plugins": "56.0.0",
- "@expo/package-manager": "1.11.0",
+ "@expo/config": "workspace:*",
+ "@expo/config-plugins": "workspace:*",
+ "@expo/package-manager": "workspace:*",
"@expo/spawn-async": "^1.7.2",
"@types/prompts": "^2.0.6",
"@types/semver": "^7.0.0",
"chalk": "^4.1.2",
"commander": "^12.1.0",
- "expo-module-scripts": "56.0.0",
+ "expo-module-scripts": "workspace:*",
"glob": "^13.0.0",
"prompts": "^2.3.2",
"resolve-from": "^5.0.0",
diff --git a/packages/patch-project/package.json b/packages/patch-project/package.json
index 2a5f9ff6159c35..48f028de5e5962 100644
--- a/packages/patch-project/package.json
+++ b/packages/patch-project/package.json
@@ -41,17 +41,17 @@
},
"homepage": "https://github.com/expo/expo/tree/main/packages/patch-project#readme",
"devDependencies": {
- "@expo/cli": "56.0.2",
+ "@expo/cli": "workspace:*",
"@types/debug": "^4.1.5",
"@types/getenv": "^1.0.0",
- "expo-module-scripts": "56.0.0",
+ "expo-module-scripts": "workspace:*",
"memfs": "^3.2.0"
},
"dependencies": {
"@bacons/xcode": "1.0.0-alpha.24",
- "@expo/config": "56.0.0",
- "@expo/config-plugins": "56.0.0",
- "@expo/env": "2.2.0",
+ "@expo/config": "workspace:~56.0.0",
+ "@expo/config-plugins": "workspace:~56.0.0",
+ "@expo/env": "workspace:~2.2.0",
"@expo/spawn-async": "^1.7.2",
"arg": "5.0.2",
"chalk": "^4.0.0",
@@ -61,6 +61,6 @@
"resolve-from": "^5.0.0"
},
"peerDependencies": {
- "expo": "56.0.0-preview.2"
+ "expo": "workspace:*"
}
}
diff --git a/packages/pod-install/package.json b/packages/pod-install/package.json
index d7bd59e5a75bfd..2c5cc49e04c204 100644
--- a/packages/pod-install/package.json
+++ b/packages/pod-install/package.json
@@ -34,10 +34,10 @@
"url": "https://github.com/expo/expo/issues"
},
"devDependencies": {
- "@expo/package-manager": "1.11.0",
+ "@expo/package-manager": "workspace:*",
"chalk": "^4.0.0",
"commander": "^12.1.0",
- "expo-module-scripts": "56.0.0",
+ "expo-module-scripts": "workspace:*",
"terminal-link": "^2.1.1",
"update-check": "^1.5.4"
}
diff --git a/packages/unimodules-app-loader/package.json b/packages/unimodules-app-loader/package.json
index 66fce4e638d109..09549d8826d8f7 100644
--- a/packages/unimodules-app-loader/package.json
+++ b/packages/unimodules-app-loader/package.json
@@ -19,6 +19,6 @@
"license": "MIT",
"homepage": "https://github.com/expo/expo/tree/main/packages/unimodules-app-loader",
"devDependencies": {
- "expo-module-scripts": "56.0.0"
+ "expo-module-scripts": "workspace:*"
}
}
diff --git a/packages/uri-scheme/package.json b/packages/uri-scheme/package.json
index 088b1bf7724aa3..285e08c7409b90 100644
--- a/packages/uri-scheme/package.json
+++ b/packages/uri-scheme/package.json
@@ -36,13 +36,13 @@
"prepublishOnly": "pnpm run clean && pnpm run build:prod"
},
"devDependencies": {
- "@expo/config-plugins": "56.0.0",
- "@expo/plist": "0.6.0",
+ "@expo/config-plugins": "workspace:*",
+ "@expo/plist": "workspace:*",
"@expo/spawn-async": "^1.7.2",
"@types/prompts": "^2.0.6",
"chalk": "^4.0.0",
"commander": "^12.1.0",
- "expo-module-scripts": "56.0.0",
+ "expo-module-scripts": "workspace:*",
"glob": "^13.0.0",
"prompts": "^2.3.2",
"update-check": "^1.5.4"
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 28a8ef1c17916a..a3974e2303ea18 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -1320,8 +1320,8 @@ importers:
apps/observe-tester:
dependencies:
'@expo/html-elements':
- specifier: ^0.13.7
- version: 0.13.8(react-native-web@0.21.2(encoding@0.1.13)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react-native@0.85.2(@babel/core@7.29.0)(@react-native/jest-preset@0.85.2(@babel/core@7.29.0)(react@19.2.3))(@react-native/metro-config@0.85.2(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.3))(react@19.2.3)
+ specifier: ^56.0.0
+ version: link:../../packages/html-elements
'@expo/styleguide-base':
specifier: ^1.0.1
version: 1.0.1(react@19.2.3)
@@ -1780,58 +1780,58 @@ importers:
specifier: ^0.0.6
version: 0.0.6
'@expo/config':
- specifier: workspace:~55.0.8
+ specifier: workspace:~56.0.0
version: link:../config
'@expo/config-plugins':
- specifier: workspace:~55.0.6
+ specifier: workspace:~56.0.0
version: link:../config-plugins
'@expo/devcert':
specifier: ^1.2.1
version: 1.2.1
'@expo/env':
- specifier: workspace:~2.1.1
+ specifier: workspace:~2.2.0
version: link:../env
'@expo/image-utils':
- specifier: workspace:^0.8.12
+ specifier: workspace:^0.9.0
version: link:../image-utils
'@expo/inline-modules':
- specifier: workspace:0.0.1
+ specifier: workspace:0.0.2
version: link:../inline-modules
'@expo/json-file':
- specifier: workspace:^10.0.12
+ specifier: workspace:^10.1.0
version: link:../json-file
'@expo/log-box':
- specifier: workspace:55.0.7
+ specifier: workspace:56.0.1
version: link:../log-box
'@expo/metro':
specifier: ~56.0.0
version: 56.0.0
'@expo/metro-config':
- specifier: workspace:~55.0.9
+ specifier: workspace:~56.0.1
version: link:../metro-config
'@expo/metro-file-map':
- specifier: workspace:55.0.0-0
+ specifier: workspace:56.0.0-0
version: link:../metro-file-map
'@expo/osascript':
- specifier: workspace:^2.4.2
+ specifier: workspace:^2.5.0
version: link:../osascript
'@expo/package-manager':
- specifier: workspace:^1.10.3
+ specifier: workspace:^1.11.0
version: link:../package-manager
'@expo/plist':
- specifier: workspace:^0.5.2
+ specifier: workspace:^0.6.0
version: link:../plist
'@expo/prebuild-config':
- specifier: workspace:^55.0.7
+ specifier: workspace:^56.0.0
version: link:../prebuild-config
'@expo/require-utils':
- specifier: workspace:^55.0.2
+ specifier: workspace:^56.0.0
version: link:../require-utils
'@expo/router-server':
- specifier: workspace:^55.0.8
+ specifier: workspace:^56.0.1
version: link:../router-server
'@expo/schema-utils':
- specifier: workspace:^55.0.2
+ specifier: workspace:^56.0.0
version: link:../schema-utils
'@expo/spawn-async':
specifier: ^1.7.2
@@ -1885,7 +1885,7 @@ importers:
specifier: workspace:*
version: link:../../expo-router
expo-server:
- specifier: workspace:^55.0.5
+ specifier: workspace:^56.0.0
version: link:../../expo-server
fetch-nodeshim:
specifier: ^0.4.10
@@ -2102,16 +2102,16 @@ importers:
packages/@expo/config:
dependencies:
'@expo/config-plugins':
- specifier: workspace:~55.0.6
+ specifier: workspace:~56.0.0
version: link:../config-plugins
'@expo/config-types':
- specifier: workspace:^55.0.5
+ specifier: workspace:^56.0.0
version: link:../config-types
'@expo/json-file':
- specifier: workspace:^10.0.12
+ specifier: workspace:^10.1.0
version: link:../json-file
'@expo/require-utils':
- specifier: workspace:^55.0.2
+ specifier: workspace:^56.0.0
version: link:../require-utils
deepmerge:
specifier: ^4.3.1
@@ -2151,13 +2151,13 @@ importers:
packages/@expo/config-plugins:
dependencies:
'@expo/config-types':
- specifier: workspace:^55.0.5
+ specifier: workspace:^56.0.0
version: link:../config-types
'@expo/json-file':
- specifier: workspace:~10.0.12
+ specifier: workspace:~10.1.0
version: link:../json-file
'@expo/plist':
- specifier: workspace:^0.5.2
+ specifier: workspace:^0.6.0
version: link:../plist
'@expo/sdk-runtime-versions':
specifier: ^1.0.0
@@ -2299,7 +2299,7 @@ importers:
packages/@expo/fingerprint:
dependencies:
'@expo/env':
- specifier: workspace:^2.0.11
+ specifier: workspace:^2.2.0
version: link:../env
'@expo/spawn-async':
specifier: ^1.7.2
@@ -2363,7 +2363,7 @@ importers:
packages/@expo/image-utils:
dependencies:
'@expo/require-utils':
- specifier: workspace:^55.0.2
+ specifier: workspace:^56.0.0
version: link:../require-utils
'@expo/spawn-async':
specifier: ^1.7.2
@@ -2403,7 +2403,7 @@ importers:
packages/@expo/inline-modules:
dependencies:
'@expo/config-plugins':
- specifier: workspace:~55.0.6
+ specifier: workspace:~56.0.0
version: link:../config-plugins
devDependencies:
'@types/jest':
@@ -2444,7 +2444,7 @@ importers:
packages/@expo/local-build-cache-provider:
dependencies:
'@expo/config':
- specifier: workspace:~55.0.8
+ specifier: workspace:~56.0.0
version: link:../config
chalk:
specifier: ^4.1.2
@@ -2463,7 +2463,7 @@ importers:
packages/@expo/log-box:
dependencies:
'@expo/dom-webview':
- specifier: workspace:^55.0.3
+ specifier: workspace:^56.0.1
version: link:../dom-webview
anser:
specifier: ^1.4.9
@@ -2524,13 +2524,13 @@ importers:
specifier: ^7.20.5
version: 7.29.1
'@expo/config':
- specifier: workspace:~55.0.8
+ specifier: workspace:~56.0.0
version: link:../config
'@expo/env':
- specifier: workspace:~2.1.1
+ specifier: workspace:~2.2.0
version: link:../env
'@expo/json-file':
- specifier: workspace:~10.0.12
+ specifier: workspace:~10.1.0
version: link:../json-file
'@expo/metro':
specifier: ~56.0.0
@@ -2655,7 +2655,7 @@ importers:
packages/@expo/metro-runtime:
dependencies:
'@expo/log-box':
- specifier: workspace:55.0.7
+ specifier: workspace:56.0.1
version: link:../log-box
anser:
specifier: ^1.4.9
@@ -2708,7 +2708,7 @@ importers:
packages/@expo/package-manager:
dependencies:
'@expo/json-file':
- specifier: workspace:^10.0.12
+ specifier: workspace:^10.1.0
version: link:../json-file
'@expo/spawn-async':
specifier: ^1.7.2
@@ -2774,19 +2774,19 @@ importers:
packages/@expo/prebuild-config:
dependencies:
'@expo/config':
- specifier: workspace:~55.0.8
+ specifier: workspace:~56.0.0
version: link:../config
'@expo/config-plugins':
- specifier: workspace:~55.0.6
+ specifier: workspace:~56.0.0
version: link:../config-plugins
'@expo/config-types':
- specifier: workspace:^55.0.5
+ specifier: workspace:^56.0.0
version: link:../config-types
'@expo/image-utils':
- specifier: workspace:^0.8.12
+ specifier: workspace:^0.9.0
version: link:../image-utils
'@expo/json-file':
- specifier: workspace:^10.0.12
+ specifier: workspace:^10.1.0
version: link:../json-file
'@react-native/normalize-colors':
specifier: 0.85.2
@@ -2795,7 +2795,7 @@ importers:
specifier: ^4.3.1
version: 4.4.3
expo-modules-autolinking:
- specifier: workspace:~55.0.8
+ specifier: workspace:~56.0.0
version: link:../../expo-modules-autolinking
resolve-from:
specifier: ^5.0.0
@@ -2860,7 +2860,7 @@ importers:
packages/@expo/router-server:
dependencies:
'@expo/metro-runtime':
- specifier: workspace:^55.0.6
+ specifier: workspace:^56.0.1
version: link:../metro-runtime
debug:
specifier: ^4.3.4
@@ -2869,16 +2869,16 @@ importers:
specifier: workspace:*
version: link:../../expo
expo-constants:
- specifier: workspace:^55.0.7
+ specifier: workspace:^56.0.1
version: link:../../expo-constants
expo-font:
- specifier: workspace:^55.0.4
+ specifier: workspace:^56.0.1
version: link:../../expo-font
expo-router:
specifier: workspace:*
version: link:../../expo-router
expo-server:
- specifier: workspace:^55.0.5
+ specifier: workspace:^56.0.0
version: link:../../expo-server
react:
specifier: 19.2.3
@@ -3090,7 +3090,7 @@ importers:
specifier: workspace:*
version: link:../expo
expo-widgets:
- specifier: workspace:^55.0.1
+ specifier: workspace:^56.0.1
version: link:../expo-widgets
devDependencies:
'@babel/core':
@@ -3302,7 +3302,7 @@ importers:
specifier: ^3.6.3
version: 3.10.1(eslint-plugin-import@2.32.0)(eslint@9.39.4(jiti@1.21.7))
eslint-plugin-expo:
- specifier: workspace:^1.0.0
+ specifier: workspace:^1.0.1
version: link:../eslint-plugin-expo
eslint-plugin-import:
specifier: ^2.30.0
@@ -3428,34 +3428,34 @@ importers:
specifier: ^7.20.0
version: 7.29.2
'@expo/cli':
- specifier: workspace:55.0.12
+ specifier: workspace:56.0.2
version: link:../@expo/cli
'@expo/config':
- specifier: workspace:~55.0.8
+ specifier: workspace:~56.0.0
version: link:../@expo/config
'@expo/config-plugins':
- specifier: workspace:~55.0.6
+ specifier: workspace:~56.0.0
version: link:../@expo/config-plugins
'@expo/devtools':
- specifier: workspace:55.0.2
+ specifier: workspace:56.0.0
version: link:../@expo/devtools
'@expo/dom-webview':
- specifier: workspace:~55.0.3
+ specifier: workspace:~56.0.1
version: link:../@expo/dom-webview
'@expo/fingerprint':
- specifier: workspace:0.16.5
+ specifier: workspace:0.17.1
version: link:../@expo/fingerprint
'@expo/local-build-cache-provider':
- specifier: workspace:55.0.6
+ specifier: workspace:56.0.0
version: link:../@expo/local-build-cache-provider
'@expo/log-box':
- specifier: workspace:55.0.7
+ specifier: workspace:56.0.1
version: link:../@expo/log-box
'@expo/metro':
specifier: ~56.0.0
version: 56.0.0
'@expo/metro-config':
- specifier: workspace:55.0.9
+ specifier: workspace:56.0.1
version: link:../@expo/metro-config
'@expo/vector-icons':
specifier: ^15.0.2
@@ -3464,28 +3464,28 @@ importers:
specifier: ^1.3.0
version: 1.3.0
babel-preset-expo:
- specifier: workspace:~55.0.8
+ specifier: workspace:~56.0.1
version: link:../babel-preset-expo
expo-asset:
- specifier: workspace:~55.0.7
+ specifier: workspace:~56.0.1
version: link:../expo-asset
expo-constants:
- specifier: workspace:~55.0.7
+ specifier: workspace:~56.0.1
version: link:../expo-constants
expo-file-system:
- specifier: workspace:~55.0.9
+ specifier: workspace:~56.0.1
version: link:../expo-file-system
expo-font:
- specifier: workspace:~55.0.4
+ specifier: workspace:~56.0.1
version: link:../expo-font
expo-keep-awake:
- specifier: workspace:~55.0.4
+ specifier: workspace:~56.0.1
version: link:../expo-keep-awake
expo-modules-autolinking:
- specifier: workspace:55.0.8
+ specifier: workspace:56.0.0
version: link:../expo-modules-autolinking
expo-modules-core:
- specifier: workspace:55.0.12
+ specifier: workspace:56.0.0
version: link:../expo-modules-core
pretty-format:
specifier: ^29.7.0
@@ -3566,7 +3566,7 @@ importers:
specifier: workspace:*
version: link:../expo
expo-updates-interface:
- specifier: workspace:~55.1.3
+ specifier: workspace:~56.0.1
version: link:../expo-updates-interface
react:
specifier: 19.2.3
@@ -3617,13 +3617,13 @@ importers:
packages/expo-asset:
dependencies:
'@expo/image-utils':
- specifier: workspace:^0.8.12
+ specifier: workspace:^0.9.0
version: link:../@expo/image-utils
expo:
specifier: workspace:*
version: link:../expo
expo-constants:
- specifier: workspace:~55.0.7
+ specifier: workspace:~56.0.1
version: link:../expo-constants
react:
specifier: 19.2.3
@@ -3676,19 +3676,19 @@ importers:
packages/expo-auth-session:
dependencies:
expo-application:
- specifier: workspace:~55.0.8
+ specifier: workspace:~56.0.0
version: link:../expo-application
expo-constants:
- specifier: workspace:~55.0.7
+ specifier: workspace:~56.0.1
version: link:../expo-constants
expo-crypto:
- specifier: workspace:~55.0.8
+ specifier: workspace:~56.0.0
version: link:../expo-crypto
expo-linking:
- specifier: workspace:~55.0.7
+ specifier: workspace:~56.0.0
version: link:../expo-linking
expo-web-browser:
- specifier: workspace:~55.0.9
+ specifier: workspace:~56.0.1
version: link:../expo-web-browser
invariant:
specifier: ^2.2.4
@@ -3716,7 +3716,7 @@ importers:
specifier: workspace:*
version: link:../expo
expo-task-manager:
- specifier: workspace:~55.0.9
+ specifier: workspace:~56.0.0
version: link:../expo-task-manager
devDependencies:
'@types/node':
@@ -3732,7 +3732,7 @@ importers:
specifier: workspace:*
version: link:../expo
expo-task-manager:
- specifier: workspace:~55.0.9
+ specifier: workspace:~56.0.0
version: link:../expo-task-manager
devDependencies:
'@types/node':
@@ -3821,7 +3821,7 @@ importers:
packages/expo-brownfield:
dependencies:
'@expo/env':
- specifier: workspace:~2.1.0
+ specifier: workspace:~2.2.0
version: link:../@expo/env
chalk:
specifier: ^4.1.2
@@ -3836,10 +3836,10 @@ importers:
specifier: workspace:*
version: link:../expo
expo-build-properties:
- specifier: workspace:~55.0.9
+ specifier: workspace:~56.0.0
version: link:../expo-build-properties
expo-manifests:
- specifier: workspace:~55.0.9
+ specifier: workspace:~56.0.1
version: link:../expo-manifests
ora:
specifier: ^5.4.1
@@ -3882,7 +3882,7 @@ importers:
packages/expo-build-properties:
dependencies:
'@expo/schema-utils':
- specifier: workspace:^55.0.2
+ specifier: workspace:^56.0.0
version: link:../@expo/schema-utils
expo:
specifier: workspace:*
@@ -4036,7 +4036,7 @@ importers:
packages/expo-constants:
dependencies:
'@expo/env':
- specifier: workspace:~2.1.1
+ specifier: workspace:~2.2.0
version: link:../@expo/env
expo:
specifier: workspace:*
@@ -4096,19 +4096,19 @@ importers:
specifier: workspace:*
version: link:../expo
expo-dev-launcher:
- specifier: workspace:55.0.10
+ specifier: workspace:56.0.0
version: link:../expo-dev-launcher
expo-dev-menu:
- specifier: workspace:55.0.9
+ specifier: workspace:56.0.0
version: link:../expo-dev-menu
expo-dev-menu-interface:
- specifier: workspace:55.0.1
+ specifier: workspace:56.0.0
version: link:../expo-dev-menu-interface
expo-manifests:
- specifier: workspace:~55.0.9
+ specifier: workspace:~56.0.1
version: link:../expo-manifests
expo-updates-interface:
- specifier: workspace:~55.1.3
+ specifier: workspace:~56.0.1
version: link:../expo-updates-interface
devDependencies:
'@types/node':
@@ -4124,16 +4124,16 @@ importers:
packages/expo-dev-launcher:
dependencies:
'@expo/schema-utils':
- specifier: workspace:^55.0.2
+ specifier: workspace:^56.0.0
version: link:../@expo/schema-utils
expo:
specifier: workspace:*
version: link:../expo
expo-dev-menu:
- specifier: workspace:55.0.9
+ specifier: workspace:56.0.0
version: link:../expo-dev-menu
expo-manifests:
- specifier: workspace:~55.0.9
+ specifier: workspace:~56.0.1
version: link:../expo-manifests
react-native:
specifier: 0.85.2
@@ -4149,7 +4149,7 @@ importers:
specifier: workspace:*
version: link:../expo
expo-dev-menu-interface:
- specifier: workspace:55.0.1
+ specifier: workspace:56.0.0
version: link:../expo-dev-menu-interface
devDependencies:
'@babel/preset-typescript':
@@ -4480,7 +4480,7 @@ importers:
specifier: workspace:*
version: link:../expo
expo-image-loader:
- specifier: workspace:~55.0.0
+ specifier: workspace:~56.0.0
version: link:../expo-image-loader
devDependencies:
expo-module-scripts:
@@ -4493,7 +4493,7 @@ importers:
specifier: workspace:*
version: link:../expo
expo-image-loader:
- specifier: workspace:~55.0.0
+ specifier: workspace:~56.0.0
version: link:../expo-image-loader
devDependencies:
'@testing-library/react':
@@ -4515,7 +4515,7 @@ importers:
specifier: workspace:*
version: link:../expo
expo-eas-client:
- specifier: workspace:~55.0.2
+ specifier: workspace:~56.0.0
version: link:../expo-eas-client
devDependencies:
expo-module-scripts:
@@ -4587,7 +4587,7 @@ importers:
packages/expo-linking:
dependencies:
expo-constants:
- specifier: workspace:~55.0.7
+ specifier: workspace:~56.0.1
version: link:../expo-constants
invariant:
specifier: ^2.2.4
@@ -4681,7 +4681,7 @@ importers:
packages/expo-location:
dependencies:
'@expo/image-utils':
- specifier: workspace:^0.8.12
+ specifier: workspace:^0.9.0
version: link:../@expo/image-utils
expo:
specifier: workspace:*
@@ -4713,7 +4713,7 @@ importers:
specifier: workspace:*
version: link:../expo
expo-json-utils:
- specifier: workspace:~55.0.0
+ specifier: workspace:~56.0.0
version: link:../expo-json-utils
devDependencies:
expo-module-scripts:
@@ -4810,13 +4810,13 @@ importers:
specifier: ^12.1.0
version: 12.1.0
eslint-config-universe:
- specifier: workspace:^15.0.3
+ specifier: workspace:^15.1.0
version: link:../eslint-config-universe
glob:
specifier: ^13.0.0
version: 13.0.6
jest-expo:
- specifier: workspace:~55.0.9
+ specifier: workspace:~56.0.0
version: link:../jest-expo
jest-snapshot-prettier:
specifier: npm:prettier@^2
@@ -4847,7 +4847,7 @@ importers:
packages/expo-modules-autolinking:
dependencies:
'@expo/require-utils':
- specifier: workspace:^55.0.2
+ specifier: workspace:^56.0.0
version: link:../@expo/require-utils
'@expo/spawn-async':
specifier: ^1.7.2
@@ -4872,7 +4872,7 @@ importers:
specifier: ~0.0.8
version: 0.0.8
expo-modules-jsi:
- specifier: workspace:~55.0.0
+ specifier: workspace:~56.0.0
version: link:../expo-modules-jsi
invariant:
specifier: ^2.2.4
@@ -4981,7 +4981,7 @@ importers:
packages/expo-notifications:
dependencies:
'@expo/image-utils':
- specifier: workspace:^0.8.12
+ specifier: workspace:^0.9.0
version: link:../@expo/image-utils
abort-controller:
specifier: ^3.0.0
@@ -4993,10 +4993,10 @@ importers:
specifier: workspace:*
version: link:../expo
expo-application:
- specifier: workspace:~55.0.8
+ specifier: workspace:~56.0.0
version: link:../expo-application
expo-constants:
- specifier: workspace:~55.0.7
+ specifier: workspace:~56.0.1
version: link:../expo-constants
react:
specifier: 19.2.3
@@ -5024,10 +5024,10 @@ importers:
specifier: workspace:*
version: link:../expo
expo-app-metrics:
- specifier: workspace:~0.1.7
+ specifier: workspace:~56.0.0
version: link:../expo-app-metrics
expo-eas-client:
- specifier: workspace:~55.0.2
+ specifier: workspace:~56.0.0
version: link:../expo-eas-client
react-native:
specifier: 0.85.2
@@ -5056,7 +5056,7 @@ importers:
specifier: workspace:*
version: link:../expo
expo-gl:
- specifier: workspace:55.0.9
+ specifier: workspace:56.0.0
version: link:../expo-gl
processing-js:
specifier: ^1.6.6
@@ -5065,16 +5065,16 @@ importers:
packages/expo-router:
dependencies:
'@expo/log-box':
- specifier: workspace:55.0.7
+ specifier: workspace:56.0.1
version: link:../@expo/log-box
'@expo/metro-runtime':
- specifier: workspace:^55.0.6
+ specifier: workspace:^56.0.1
version: link:../@expo/metro-runtime
'@expo/schema-utils':
- specifier: workspace:^55.0.2
+ specifier: workspace:^56.0.0
version: link:../@expo/schema-utils
'@expo/ui':
- specifier: workspace:^55.0.0
+ specifier: workspace:^56.0.1
version: link:../expo-ui
'@jest/globals':
specifier: ^29.7.0
@@ -5110,22 +5110,22 @@ importers:
specifier: workspace:*
version: link:../expo
expo-constants:
- specifier: workspace:^55.0.7
+ specifier: workspace:^56.0.1
version: link:../expo-constants
expo-glass-effect:
- specifier: workspace:^55.0.7
+ specifier: workspace:^56.0.1
version: link:../expo-glass-effect
expo-image:
- specifier: workspace:^55.0.5
+ specifier: workspace:^56.0.1
version: link:../expo-image
expo-linking:
- specifier: workspace:^55.0.7
+ specifier: workspace:^56.0.0
version: link:../expo-linking
expo-server:
- specifier: workspace:^55.0.5
+ specifier: workspace:^56.0.0
version: link:../expo-server
expo-symbols:
- specifier: workspace:^55.0.4
+ specifier: workspace:^56.0.1
version: link:../expo-symbols
fast-deep-equal:
specifier: ^3.1.3
@@ -5322,13 +5322,13 @@ importers:
packages/expo-sharing:
dependencies:
'@expo/config-plugins':
- specifier: workspace:^55.0.6
+ specifier: workspace:^56.0.0
version: link:../@expo/config-plugins
'@expo/config-types':
- specifier: workspace:^55.0.5
+ specifier: workspace:^56.0.0
version: link:../@expo/config-types
'@expo/plist':
- specifier: workspace:^0.5.2
+ specifier: workspace:^0.6.0
version: link:../@expo/plist
expo:
specifier: workspace:*
@@ -5373,10 +5373,10 @@ importers:
packages/expo-splash-screen:
dependencies:
'@expo/config-plugins':
- specifier: workspace:~55.0.6
+ specifier: workspace:~56.0.0
version: link:../@expo/config-plugins
'@expo/image-utils':
- specifier: workspace:^0.8.12
+ specifier: workspace:^0.9.0
version: link:../@expo/image-utils
expo:
specifier: workspace:*
@@ -5561,7 +5561,7 @@ importers:
specifier: 0.85.2
version: 0.85.2(@babel/core@7.29.0)(@react-native/jest-preset@0.85.2(@babel/core@7.29.0)(react@19.2.3))(@react-native/metro-config@0.85.2(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.3)
unimodules-app-loader:
- specifier: workspace:~55.0.2
+ specifier: workspace:~56.0.0
version: link:../unimodules-app-loader
devDependencies:
'@types/node':
@@ -5682,7 +5682,7 @@ importers:
specifier: ^0.0.6
version: 0.0.6
'@expo/plist':
- specifier: workspace:^0.5.2
+ specifier: workspace:^0.6.0
version: link:../@expo/plist
'@expo/spawn-async':
specifier: ^1.7.2
@@ -5703,16 +5703,16 @@ importers:
specifier: workspace:*
version: link:../expo-dev-client
expo-eas-client:
- specifier: workspace:~55.0.2
+ specifier: workspace:~56.0.0
version: link:../expo-eas-client
expo-manifests:
- specifier: workspace:~55.0.9
+ specifier: workspace:~56.0.1
version: link:../expo-manifests
expo-structured-headers:
- specifier: workspace:~55.0.0
+ specifier: workspace:~56.0.0
version: link:../expo-structured-headers
expo-updates-interface:
- specifier: workspace:~55.1.3
+ specifier: workspace:~56.0.1
version: link:../expo-updates-interface
getenv:
specifier: ^2.0.0
@@ -5845,10 +5845,10 @@ importers:
packages/expo-widgets:
dependencies:
'@expo/plist':
- specifier: workspace:^0.5.2
+ specifier: workspace:^0.6.0
version: link:../@expo/plist
'@expo/ui':
- specifier: workspace:~55.0.1
+ specifier: workspace:~56.0.1
version: link:../expo-ui
expo:
specifier: workspace:*
@@ -6010,13 +6010,13 @@ importers:
specifier: 1.0.0-alpha.24
version: 1.0.0-alpha.24
'@expo/config':
- specifier: workspace:~55.0.8
+ specifier: workspace:~56.0.0
version: link:../@expo/config
'@expo/config-plugins':
- specifier: workspace:~55.0.6
+ specifier: workspace:~56.0.0
version: link:../@expo/config-plugins
'@expo/env':
- specifier: workspace:~2.1.1
+ specifier: workspace:~2.2.0
version: link:../@expo/env
'@expo/spawn-async':
specifier: ^1.7.2
@@ -6288,7 +6288,7 @@ importers:
specifier: ^9.39.4
version: 9.39.4(jiti@1.21.7)
eslint-config-universe:
- specifier: workspace:^15.0.3
+ specifier: workspace:^15.1.0
version: link:../packages/eslint-config-universe
eslint-plugin-lodash:
specifier: ^7.4.0
@@ -7472,16 +7472,6 @@ packages:
'@expo/expo-modules-macros-plugin@0.0.8':
resolution: {integrity: sha512-ZHH+Hgle/ZyVfTSd9L+ON/0a7BouMEQ3wJKGmOilPLYMTjx5NOcbNZVaJ3iAHKCplvDIHHjPdmqVPorWMHm19A==}
- '@expo/html-elements@0.13.8':
- resolution: {integrity: sha512-dY8cbf9dkigI7YqIcz5k1Y2GpVG++WKPLp51q5xAGHYNyW7RyuGUPKjgiwK4Th0GBcQFBVCZuu/XZerPqMFA7g==}
- peerDependencies:
- react: 19.2.3
- react-native: 0.85.2
- react-native-web: '*'
- peerDependenciesMeta:
- react-native-web:
- optional: true
-
'@expo/json-file@8.3.3':
resolution: {integrity: sha512-eZ5dld9AD0PrVRiIWpRkm5aIoWBw3kAyd8VkuWEy92sEthBKDDDHAnK2a0dw0Eil6j7rK7lS/Qaq/Zzngv2h5A==}
@@ -17350,13 +17340,6 @@ snapshots:
'@expo/expo-modules-macros-plugin@0.0.8': {}
- '@expo/html-elements@0.13.8(react-native-web@0.21.2(encoding@0.1.13)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react-native@0.85.2(@babel/core@7.29.0)(@react-native/jest-preset@0.85.2(@babel/core@7.29.0)(react@19.2.3))(@react-native/metro-config@0.85.2(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.3))(react@19.2.3)':
- dependencies:
- react: 19.2.3
- react-native: 0.85.2(@babel/core@7.29.0)(@react-native/jest-preset@0.85.2(@babel/core@7.29.0)(react@19.2.3))(@react-native/metro-config@0.85.2(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.3)
- optionalDependencies:
- react-native-web: 0.21.2(encoding@0.1.13)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
-
'@expo/json-file@8.3.3':
dependencies:
'@babel/code-frame': 7.10.4
diff --git a/tools/package.json b/tools/package.json
index c2e57c19bf650a..cec31ddde91e02 100644
--- a/tools/package.json
+++ b/tools/package.json
@@ -87,7 +87,7 @@
"@types/semver": "^7.5.8",
"@types/uuid": "^9.0.2",
"eslint": "^9.39.4",
- "eslint-config-universe": "workspace:^15.0.3",
+ "eslint-config-universe": "workspace:^15.1.0",
"eslint-plugin-lodash": "^7.4.0",
"prettier": "^3.3.3",
"taskr": "1.1.0",
diff --git a/tools/src/Packages.test.ts b/tools/src/Packages.test.ts
new file mode 100644
index 00000000000000..b3c3e2a476f602
--- /dev/null
+++ b/tools/src/Packages.test.ts
@@ -0,0 +1,34 @@
+import assert from 'node:assert/strict';
+import { before, describe, it } from 'node:test';
+
+import { getListOfPackagesAsync, getPackageByName } from './Packages';
+
+describe('getPackageByName', () => {
+ before(async () => {
+ await getListOfPackagesAsync();
+ });
+
+ it('resolves packages whose directory matches their name', () => {
+ const pkg = getPackageByName('expo-router');
+ assert.ok(pkg);
+ assert.equal(pkg.packageName, 'expo-router');
+ });
+
+ it('resolves scoped packages whose directory matches their name', () => {
+ const pkg = getPackageByName('@expo/cli');
+ assert.ok(pkg);
+ assert.equal(pkg.packageName, '@expo/cli');
+ });
+
+ it('resolves scoped packages whose directory differs from their name', () => {
+ for (const name of ['@expo/ui', '@expo/app-integrity']) {
+ const pkg = getPackageByName(name);
+ assert.ok(pkg, `${name} should resolve`);
+ assert.equal(pkg.packageName, name);
+ }
+ });
+
+ it('returns null for an unknown package name', () => {
+ assert.equal(getPackageByName('definitely-not-a-real-package'), null);
+ });
+});
diff --git a/tools/src/Packages.ts b/tools/src/Packages.ts
index abfdedf1ad520e..618396a1040eb4 100644
--- a/tools/src/Packages.ts
+++ b/tools/src/Packages.ts
@@ -421,6 +421,7 @@ export class Package {
/**
* Resolves to a Package instance if the package with given name exists in the repository.
+ * Falls back to scanning the cached package list when the directory name doesn't match.
*/
export function getPackageByName(packageName: string): Package | null {
const packageJsonPath = pathToLocalPackageJson(packageName);
@@ -428,7 +429,7 @@ export function getPackageByName(packageName: string): Package | null {
const packageJson = require(packageJsonPath);
return new Package(path.dirname(packageJsonPath), packageJson);
} catch {
- return null;
+ return cachedPackages?.find((pkg) => pkg.packageName === packageName) ?? null;
}
}
diff --git a/tools/src/commands/GenerateDocsAPIData.ts b/tools/src/commands/GenerateDocsAPIData.ts
index 4ed0592c7280f4..701384da7b1b34 100644
--- a/tools/src/commands/GenerateDocsAPIData.ts
+++ b/tools/src/commands/GenerateDocsAPIData.ts
@@ -105,6 +105,10 @@ const uiPackagesMapping: Record = {
'jetpack-compose/HorizontalFloatingToolbar/index.tsx',
'expo-ui',
],
+ 'expo-ui/jetpack-compose/horizontalpager': [
+ 'jetpack-compose/HorizontalPager/index.tsx',
+ 'expo-ui',
+ ],
'expo-ui/jetpack-compose/host': ['jetpack-compose/Host/index.tsx', 'expo-ui'],
'expo-ui/jetpack-compose/icon': ['jetpack-compose/Icon/index.tsx', 'expo-ui'],
'expo-ui/jetpack-compose/iconbutton': ['jetpack-compose/IconButton/index.tsx', 'expo-ui'],
diff --git a/tools/src/publish-packages/tasks/publishCanary.ts b/tools/src/publish-packages/tasks/publishCanary.ts
index 19b61b8e2228e0..178d04b7238dd9 100644
--- a/tools/src/publish-packages/tasks/publishCanary.ts
+++ b/tools/src/publish-packages/tasks/publishCanary.ts
@@ -7,12 +7,10 @@ import { loadRequestedParcels } from './loadRequestedParcels';
import { packPackageToTarball } from './packPackageToTarball';
import { publishAndroidArtifacts } from './publishAndroidPackages';
import { publishPackages } from './publishPackages';
-import { resolveWorkspaceSpecs } from './resolveWorkspaceSpecs';
import { updateBundledNativeModulesFile } from './updateBundledNativeModulesFile';
import { updateModuleTemplate } from './updateModuleTemplate';
import { updatePackageVersions } from './updatePackageVersions';
import { updateWorkspaceProjects } from './updateWorkspaceProjects';
-import { verifyNoWorkspaceSpecs } from './verifyNoWorkspaceSpecs';
import Git from '../../Git';
import logger from '../../Logger';
import { sdkVersionAsync } from '../../ProjectVersions';
@@ -137,12 +135,10 @@ export const publishCanaryPipeline = new Task(
updateBundledNativeModulesFile,
updateModuleTemplate,
updateWorkspaceProjects,
- resolveWorkspaceSpecs,
updateAndroidProjects,
publishAndroidArtifacts,
addTemplateTarball,
bundleIOSPrebuilds,
- verifyNoWorkspaceSpecs,
packPackageToTarball,
publishPackages,
cleanWorkingTree,
diff --git a/tools/src/publish-packages/tasks/publishPackagesPipeline.ts b/tools/src/publish-packages/tasks/publishPackagesPipeline.ts
index 55b84232665b8a..3184d2f82b9c0a 100644
--- a/tools/src/publish-packages/tasks/publishPackagesPipeline.ts
+++ b/tools/src/publish-packages/tasks/publishPackagesPipeline.ts
@@ -14,7 +14,6 @@ import { loadRequestedParcels } from './loadRequestedParcels';
import { publishAndroidArtifacts } from './publishAndroidPackages';
import { publishPackages } from './publishPackages';
import { pushCommittedChanges } from './pushCommittedChanges';
-import { resolveWorkspaceSpecs } from './resolveWorkspaceSpecs';
import { selectPackagesToPublish } from './selectPackagesToPublish';
import { updateAndroidProjects } from './updateAndroidProjects';
import { updateBundledNativeModulesFile } from './updateBundledNativeModulesFile';
@@ -24,7 +23,6 @@ import { updatePackageVersions } from './updatePackageVersions';
import { updateProjectTemplates } from './updateProjectTemplates';
import { updateVersionsEndpoint } from './updateVersionsEndpoint';
import { updateWorkspaceProjects } from './updateWorkspaceProjects';
-import { verifyNoWorkspaceSpecs } from './verifyNoWorkspaceSpecs';
import Git from '../../Git';
import logger from '../../Logger';
import { Task } from '../../TasksRunner';
@@ -89,7 +87,6 @@ export const publishPackagesPipeline = new Task(
updateProjectTemplates,
updateModuleTemplate,
updateWorkspaceProjects,
- resolveWorkspaceSpecs,
updateAndroidProjects,
updateIosProjects,
addTemplateTarball,
@@ -98,7 +95,6 @@ export const publishPackagesPipeline = new Task(
pushCommittedChanges,
publishAndroidArtifacts,
bundleIOSPrebuilds,
- verifyNoWorkspaceSpecs,
publishPackages,
updateVersionsEndpoint,
grantTeamAccessToPackages,
diff --git a/tools/src/publish-packages/tasks/resolveWorkspaceSpecs.test.ts b/tools/src/publish-packages/tasks/resolveWorkspaceSpecs.test.ts
deleted file mode 100644
index eedbb955f4726b..00000000000000
--- a/tools/src/publish-packages/tasks/resolveWorkspaceSpecs.test.ts
+++ /dev/null
@@ -1,110 +0,0 @@
-import assert from 'node:assert/strict';
-import { describe, it } from 'node:test';
-
-import { resolveWorkspaceSpec } from './resolveWorkspaceSpecs';
-
-const ctx = { packageName: 'consumer', depKey: 'dependencies', depName: 'target' };
-
-describe('resolveWorkspaceSpec', () => {
- it('returns target version for workspace:*', () => {
- assert.equal(resolveWorkspaceSpec('workspace:*', '1.2.3', ctx), '1.2.3');
- });
-
- it('returns target version for bare workspace: with no suffix', () => {
- assert.equal(resolveWorkspaceSpec('workspace:', '1.2.3', ctx), '1.2.3');
- });
-
- it('prepends ^ to target version for workspace:^', () => {
- assert.equal(resolveWorkspaceSpec('workspace:^', '1.2.3', ctx), '^1.2.3');
- });
-
- it('prepends ~ to target version for workspace:~', () => {
- assert.equal(resolveWorkspaceSpec('workspace:~', '1.2.3', ctx), '~1.2.3');
- });
-
- it('strips workspace: prefix for explicit version', () => {
- assert.equal(resolveWorkspaceSpec('workspace:1.2.3', undefined, ctx), '1.2.3');
- });
-
- it('strips workspace: prefix for explicit caret range', () => {
- assert.equal(resolveWorkspaceSpec('workspace:^1.2.3', undefined, ctx), '^1.2.3');
- });
-
- it('strips workspace: prefix for explicit tilde range', () => {
- assert.equal(resolveWorkspaceSpec('workspace:~1.2.3', undefined, ctx), '~1.2.3');
- });
-
- it('returns non-workspace specs unchanged', () => {
- assert.equal(resolveWorkspaceSpec('^1.2.3', '9.9.9', ctx), '^1.2.3');
- assert.equal(resolveWorkspaceSpec('1.2.3', undefined, ctx), '1.2.3');
- assert.equal(resolveWorkspaceSpec('*', undefined, ctx), '*');
- });
-
- it('passes through prerelease versions when target is prerelease', () => {
- assert.equal(
- resolveWorkspaceSpec('workspace:*', '56.0.0-preview.1', ctx),
- '56.0.0-preview.1'
- );
- assert.equal(
- resolveWorkspaceSpec('workspace:^', '56.0.0-preview.1', ctx),
- '^56.0.0-preview.1'
- );
- });
-
- describe('error handling', () => {
- it('throws when target version is missing for workspace:*', () => {
- assert.throws(
- () => resolveWorkspaceSpec('workspace:*', undefined, ctx),
- /not a workspace package/
- );
- });
-
- it('throws when target version is missing for workspace:^', () => {
- assert.throws(
- () => resolveWorkspaceSpec('workspace:^', undefined, ctx),
- /not a workspace package/
- );
- });
-
- it('throws when target version is missing for workspace:~', () => {
- assert.throws(
- () => resolveWorkspaceSpec('workspace:~', undefined, ctx),
- /not a workspace package/
- );
- });
-
- it('throws when target version is missing for bare workspace:', () => {
- assert.throws(
- () => resolveWorkspaceSpec('workspace:', undefined, ctx),
- /not a workspace package/
- );
- });
-
- it('does not require target version for explicit-version specs', () => {
- // Explicit forms ship the embedded version regardless of workspace state.
- assert.doesNotThrow(() =>
- resolveWorkspaceSpec('workspace:1.2.3', undefined, ctx)
- );
- assert.doesNotThrow(() =>
- resolveWorkspaceSpec('workspace:^1.2.3', undefined, ctx)
- );
- });
-
- it('error message names the offending package and dep', () => {
- assert.throws(
- () =>
- resolveWorkspaceSpec('workspace:*', undefined, {
- packageName: '@expo/cli',
- depKey: 'dependencies',
- depName: '@expo/inline-modules',
- }),
- (err: Error) => {
- assert.match(err.message, /@expo\/cli/);
- assert.match(err.message, /dependencies\.@expo\/inline-modules/);
- assert.match(err.message, /workspace:\*/);
- return true;
- }
- );
- });
- });
-});
diff --git a/tools/src/publish-packages/tasks/resolveWorkspaceSpecs.ts b/tools/src/publish-packages/tasks/resolveWorkspaceSpecs.ts
deleted file mode 100644
index 094e9573c52f79..00000000000000
--- a/tools/src/publish-packages/tasks/resolveWorkspaceSpecs.ts
+++ /dev/null
@@ -1,153 +0,0 @@
-import JsonFile from '@expo/json-file';
-import chalk from 'chalk';
-import path from 'path';
-
-import { updateWorkspaceProjects } from './updateWorkspaceProjects';
-import logger from '../../Logger';
-import { getListOfPackagesAsync } from '../../Packages';
-import { Task } from '../../TasksRunner';
-import { Parcel, TaskArgs } from '../types';
-
-const { green, yellow, cyan, magenta } = chalk;
-
-const DEPENDENCY_KEYS = [
- 'dependencies',
- 'devDependencies',
- 'peerDependencies',
- 'optionalDependencies',
-] as const;
-
-const WORKSPACE_PREFIX = 'workspace:';
-
-/**
- * Rewrites every `workspace:` specifier in each parcel's `package.json` to the
- * concrete npm range that should ship to the registry. `npm pack` (which the
- * publish flow ultimately calls) does not understand `workspace:` and would
- * otherwise embed the literal string in the published tarball — installs
- * outside the monorepo would then fail to resolve it.
- *
- * This task runs after `updateWorkspaceProjects`, which only rewrites entries
- * that pnpm classifies as workspace deps for packages in the current parcel
- * set. That filter has known blind spots (peer deps with `workspace:*`, deps on
- * workspace packages not being published in the current run), so this task is
- * a comprehensive safety net.
- *
- * Resolution rules (matching pnpm's publish-time behaviour):
- *
- * workspace:* →
- * workspace: →
- * workspace:^ → ^
- * workspace:~ → ~
- * workspace:1.2.3 → 1.2.3
- * workspace:^1.2.3 → ^1.2.3
- * workspace:~1.2.3 → ~1.2.3
- */
-export const resolveWorkspaceSpecs = new Task(
- {
- name: 'resolveWorkspaceSpecs',
- dependsOn: [updateWorkspaceProjects],
- filesToStage: ['packages/**/package.json', 'templates/**/package.json'],
- },
- async (parcels: Parcel[]) => {
- logger.info(`\n🔧 Resolving ${magenta.bold('workspace:')} specifiers...`);
-
- // Build a name -> version map keyed by package.json `name`. We can't use
- // `getPackageByName` because it assumes directory name matches package
- // name, which fails for packages like @expo/ui (dir: packages/expo-ui).
- const allPackages = await getListOfPackagesAsync();
- const versionByName = new Map();
- for (const pkg of allPackages) {
- versionByName.set(pkg.packageName, String(pkg.packageJson.version));
- }
-
- let totalRewrites = 0;
-
- for (const { pkg } of parcels) {
- const packageJsonPath = path.join(pkg.path, 'package.json');
- const packageJson = await JsonFile.readAsync(packageJsonPath);
- let modified = false;
-
- for (const depKey of DEPENDENCY_KEYS) {
- const deps = packageJson[depKey];
- if (!deps || typeof deps !== 'object') {
- continue;
- }
-
- const depsRecord = deps as Record;
- for (const [depName, currentSpec] of Object.entries(depsRecord)) {
- if (typeof currentSpec !== 'string' || !currentSpec.startsWith(WORKSPACE_PREFIX)) {
- continue;
- }
-
- const targetVersion = versionByName.get(depName);
- const resolved = resolveWorkspaceSpec(currentSpec, targetVersion, {
- packageName: pkg.packageName,
- depKey,
- depName,
- });
-
- depsRecord[depName] = resolved;
- modified = true;
- totalRewrites += 1;
-
- logger.log(
- ' ',
- green(pkg.packageName),
- yellow(`${depKey}.${depName}`),
- cyan(currentSpec),
- '→',
- cyan(resolved)
- );
- }
- }
-
- if (modified) {
- await JsonFile.writeAsync(packageJsonPath, packageJson);
- }
- }
-
- if (totalRewrites === 0) {
- logger.log(' No workspace: specifiers to resolve.');
- }
- }
-);
-
-/**
- * Pure resolver — exported so it can be unit tested without touching disk.
- *
- * @param spec The current dependency value (must start with `workspace:`).
- * @param targetVersion The on-disk version of the target package, or undefined
- * if the target isn't a known workspace package.
- * @param context Identifying info for error messages.
- */
-export function resolveWorkspaceSpec(
- spec: string,
- targetVersion: string | undefined,
- context: { packageName: string; depKey: string; depName: string }
-): string {
- if (!spec.startsWith(WORKSPACE_PREFIX)) {
- return spec;
- }
-
- const rest = spec.slice(WORKSPACE_PREFIX.length);
-
- // Forms that need targetVersion: `workspace:`, `workspace:*`, `workspace:^`, `workspace:~`.
- const needsTargetVersion = rest === '' || rest === '*' || rest === '^' || rest === '~';
-
- if (needsTargetVersion && !targetVersion) {
- throw new Error(
- `${context.packageName} declares ${context.depKey}.${context.depName} as "${spec}" ` +
- `but ${context.depName} is not a workspace package in this monorepo. ` +
- `Either correct the dependency name or replace the workspace: prefix with an explicit version.`
- );
- }
-
- if (rest === '' || rest === '*') {
- return targetVersion!;
- }
- if (rest === '^' || rest === '~') {
- return `${rest}${targetVersion!}`;
- }
- // Explicit version range with optional ^/~ prefix already baked in.
- return rest;
-}
diff --git a/tools/src/publish-packages/tasks/verifyNoWorkspaceSpecs.test.ts b/tools/src/publish-packages/tasks/verifyNoWorkspaceSpecs.test.ts
deleted file mode 100644
index 8a28f8529591f2..00000000000000
--- a/tools/src/publish-packages/tasks/verifyNoWorkspaceSpecs.test.ts
+++ /dev/null
@@ -1,101 +0,0 @@
-import assert from 'node:assert/strict';
-import { describe, it } from 'node:test';
-
-import { findWorkspaceSpecs } from './verifyNoWorkspaceSpecs';
-
-describe('findWorkspaceSpecs', () => {
- it('returns empty when no deps have workspace: specs', () => {
- const offenders = findWorkspaceSpecs(
- {
- dependencies: { foo: '^1.0.0' },
- peerDependencies: { bar: '*' },
- },
- 'consumer'
- );
- assert.deepEqual(offenders, []);
- });
-
- it('detects workspace: in dependencies', () => {
- const offenders = findWorkspaceSpecs(
- { dependencies: { foo: 'workspace:*' } },
- 'consumer'
- );
- assert.deepEqual(offenders, [
- { packageName: 'consumer', depKey: 'dependencies', depName: 'foo', spec: 'workspace:*' },
- ]);
- });
-
- it('detects workspace: in devDependencies', () => {
- const offenders = findWorkspaceSpecs(
- { devDependencies: { foo: 'workspace:^1.0.0' } },
- 'consumer'
- );
- assert.equal(offenders.length, 1);
- assert.equal(offenders[0].depKey, 'devDependencies');
- });
-
- it('detects workspace: in peerDependencies', () => {
- const offenders = findWorkspaceSpecs(
- { peerDependencies: { foo: 'workspace:*' } },
- 'consumer'
- );
- assert.equal(offenders.length, 1);
- assert.equal(offenders[0].depKey, 'peerDependencies');
- });
-
- it('detects workspace: in optionalDependencies', () => {
- const offenders = findWorkspaceSpecs(
- { optionalDependencies: { foo: 'workspace:~1.0.0' } },
- 'consumer'
- );
- assert.equal(offenders.length, 1);
- assert.equal(offenders[0].depKey, 'optionalDependencies');
- });
-
- it('detects multiple offenders across different dep types', () => {
- const offenders = findWorkspaceSpecs(
- {
- dependencies: { a: 'workspace:*', b: '^1.0.0' },
- peerDependencies: { c: 'workspace:^' },
- optionalDependencies: { d: 'workspace:1.2.3' },
- },
- 'consumer'
- );
- assert.equal(offenders.length, 3);
- assert.deepEqual(
- offenders.map((o) => o.depName).sort(),
- ['a', 'c', 'd']
- );
- });
-
- it('ignores non-string values', () => {
- const offenders = findWorkspaceSpecs(
- // Synthesizing malformed-but-real package.json: e.g. hand-edited file
- // accidentally putting an object/null where a string belongs.
- { dependencies: { foo: null as unknown as string, bar: { nested: 'oops' } as any } },
- 'consumer'
- );
- assert.deepEqual(offenders, []);
- });
-
- it('ignores non-object dep collections', () => {
- const offenders = findWorkspaceSpecs(
- { dependencies: 'oops' as unknown as Record },
- 'consumer'
- );
- assert.deepEqual(offenders, []);
- });
-
- it('ignores undefined dep collections', () => {
- const offenders = findWorkspaceSpecs({}, 'consumer');
- assert.deepEqual(offenders, []);
- });
-
- it('reports the package name on each offender', () => {
- const offenders = findWorkspaceSpecs(
- { dependencies: { foo: 'workspace:*' } },
- '@expo/ui'
- );
- assert.equal(offenders[0].packageName, '@expo/ui');
- });
-});
diff --git a/tools/src/publish-packages/tasks/verifyNoWorkspaceSpecs.ts b/tools/src/publish-packages/tasks/verifyNoWorkspaceSpecs.ts
deleted file mode 100644
index ff6d9bd2654c19..00000000000000
--- a/tools/src/publish-packages/tasks/verifyNoWorkspaceSpecs.ts
+++ /dev/null
@@ -1,86 +0,0 @@
-import JsonFile from '@expo/json-file';
-import chalk from 'chalk';
-import path from 'path';
-
-import { resolveWorkspaceSpecs } from './resolveWorkspaceSpecs';
-import { Task } from '../../TasksRunner';
-import { Parcel, TaskArgs } from '../types';
-
-const { red, yellow } = chalk;
-
-const DEPENDENCY_KEYS = [
- 'dependencies',
- 'devDependencies',
- 'peerDependencies',
- 'optionalDependencies',
-] as const;
-
-const WORKSPACE_PREFIX = 'workspace:';
-
-export type WorkspaceSpecOffender = {
- packageName: string;
- depKey: string;
- depName: string;
- spec: string;
-};
-
-/**
- * Pure scanner — exported for unit tests. Returns every entry in any
- * dependency-shaped object whose value still begins with `workspace:`.
- */
-export function findWorkspaceSpecs(
- packageJson: Record,
- packageName: string
-): WorkspaceSpecOffender[] {
- const offenders: WorkspaceSpecOffender[] = [];
- for (const depKey of DEPENDENCY_KEYS) {
- const deps = packageJson[depKey];
- if (!deps || typeof deps !== 'object') {
- continue;
- }
- for (const [depName, spec] of Object.entries(deps as Record)) {
- if (typeof spec === 'string' && spec.startsWith(WORKSPACE_PREFIX)) {
- offenders.push({ packageName, depKey, depName, spec });
- }
- }
- }
- return offenders;
-}
-
-/**
- * Final guard: scans every parcel's on-disk `package.json` immediately before
- * publishing and aborts if any value still starts with `workspace:`. Catches
- * regressions in `resolveWorkspaceSpecs` and any other code path that might
- * mutate package.json after it ran.
- */
-export const verifyNoWorkspaceSpecs = new Task(
- {
- name: 'verifyNoWorkspaceSpecs',
- dependsOn: [resolveWorkspaceSpecs],
- },
- async (parcels: Parcel[]) => {
- const offenders: WorkspaceSpecOffender[] = [];
-
- for (const { pkg } of parcels) {
- const packageJsonPath = path.join(pkg.path, 'package.json');
- const packageJson = await JsonFile.readAsync(packageJsonPath);
- offenders.push(...findWorkspaceSpecs(packageJson, pkg.packageName));
- }
-
- if (offenders.length === 0) {
- return;
- }
-
- const list = offenders
- .map((o) => ` - ${red(o.packageName)} ${o.depKey}.${o.depName}: ${yellow(o.spec)}`)
- .join('\n');
- throw new Error(
- `Found ${offenders.length} unresolved \`workspace:\` specifier${
- offenders.length === 1 ? '' : 's'
- } in package.json files about to be published:\n${list}\n\n` +
- `npm pack ships these strings verbatim, breaking installs in non-workspace projects. ` +
- `The resolveWorkspaceSpecs task should have rewritten them — please report this as a bug ` +
- `in the publish pipeline.`
- );
- }
-);