diff --git a/apps/bare-expo/ios/Podfile.lock b/apps/bare-expo/ios/Podfile.lock
index fd62835926d845..98391df63594dd 100644
--- a/apps/bare-expo/ios/Podfile.lock
+++ b/apps/bare-expo/ios/Podfile.lock
@@ -29,7 +29,7 @@ PODS:
- ExpoModulesTestCore
- EXApplication (56.0.3):
- ExpoModulesCore
- - EXConstants (56.0.6):
+ - EXConstants (56.0.7):
- ExpoModulesCore
- EXJSONUtils (56.0.0)
- EXJSONUtils/Tests (56.0.0)
@@ -38,7 +38,7 @@ PODS:
- EXManifests/Tests (56.0.2):
- ExpoModulesCore
- ExpoModulesTestCore
- - Expo (56.0.0-preview.7):
+ - Expo (56.0.0-preview.9):
- ExpoModulesCore
- ExpoModulesJSI
- hermes-engine
@@ -64,15 +64,15 @@ PODS:
- ReactCommon/turbomodule/core
- ReactNativeDependencies
- Yoga
- - expo-dev-client (56.0.5):
+ - expo-dev-client (56.0.6):
- EXManifests
- expo-dev-launcher
- expo-dev-menu
- expo-dev-menu-interface
- EXUpdatesInterface
- - expo-dev-launcher (56.0.5):
+ - expo-dev-launcher (56.0.6):
- EXManifests
- - expo-dev-launcher/Main (= 56.0.5)
+ - expo-dev-launcher/Main (= 56.0.6)
- expo-dev-menu
- expo-dev-menu-interface
- ExpoModulesCore
@@ -101,7 +101,7 @@ PODS:
- ReactCommon/turbomodule/core
- ReactNativeDependencies
- Yoga
- - expo-dev-launcher/Main (56.0.5):
+ - expo-dev-launcher/Main (56.0.6):
- EXManifests
- expo-dev-launcher/Unsafe
- expo-dev-menu
@@ -132,7 +132,7 @@ PODS:
- ReactCommon/turbomodule/core
- ReactNativeDependencies
- Yoga
- - expo-dev-launcher/Tests (56.0.5):
+ - expo-dev-launcher/Tests (56.0.6):
- EXManifests
- expo-dev-menu
- expo-dev-menu-interface
@@ -167,7 +167,7 @@ PODS:
- ReactCommon/turbomodule/core
- ReactNativeDependencies
- Yoga
- - expo-dev-launcher/Unsafe (56.0.5):
+ - expo-dev-launcher/Unsafe (56.0.6):
- EXManifests
- expo-dev-menu
- expo-dev-menu-interface
@@ -197,8 +197,8 @@ PODS:
- ReactCommon/turbomodule/core
- ReactNativeDependencies
- Yoga
- - expo-dev-menu (56.0.5):
- - expo-dev-menu/Main (= 56.0.5)
+ - expo-dev-menu (56.0.6):
+ - expo-dev-menu/Main (= 56.0.6)
- hermes-engine
- RCTRequired
- RCTTypeSafety
@@ -221,7 +221,7 @@ PODS:
- ReactNativeDependencies
- Yoga
- expo-dev-menu-interface (56.0.1)
- - expo-dev-menu/Main (56.0.5):
+ - expo-dev-menu/Main (56.0.6):
- EXManifests
- expo-dev-menu-interface
- ExpoModulesCore
@@ -247,7 +247,7 @@ PODS:
- ReactCommon/turbomodule/core
- ReactNativeDependencies
- Yoga
- - expo-dev-menu/Tests (56.0.5):
+ - expo-dev-menu/Tests (56.0.6):
- ExpoModulesTestCore
- hermes-engine
- Nimble
@@ -273,7 +273,7 @@ PODS:
- ReactCommon/turbomodule/core
- ReactNativeDependencies
- Yoga
- - expo-dev-menu/UITests (56.0.5):
+ - expo-dev-menu/UITests (56.0.6):
- ExpoModulesTestCore
- hermes-engine
- RCTRequired
@@ -299,7 +299,7 @@ PODS:
- ReactCommon/turbomodule/core
- ReactNativeDependencies
- Yoga
- - Expo/Tests (56.0.0-preview.7):
+ - Expo/Tests (56.0.0-preview.9):
- ExpoModulesCore
- ExpoModulesJSI
- ExpoModulesTestCore
@@ -332,7 +332,7 @@ PODS:
- ExpoModulesCore
- ExpoAppleAuthentication (56.0.3):
- ExpoModulesCore
- - ExpoAppMetrics (56.0.5):
+ - ExpoAppMetrics (56.0.6):
- ExpoModulesCore
- EXUpdatesInterface
- hermes-engine
@@ -356,7 +356,7 @@ PODS:
- ReactCommon/turbomodule/core
- ReactNativeDependencies
- Yoga
- - ExpoAppMetrics/Tests (56.0.5):
+ - ExpoAppMetrics/Tests (56.0.6):
- ExpoModulesCore
- EXUpdatesInterface
- hermes-engine
@@ -380,16 +380,16 @@ PODS:
- ReactCommon/turbomodule/core
- ReactNativeDependencies
- Yoga
- - ExpoAsset (56.0.6):
+ - ExpoAsset (56.0.7):
- ExpoModulesCore
- - ExpoAudio (56.0.3):
+ - ExpoAudio (56.0.4):
- ExpoModulesCore
- - ExpoBackgroundFetch (56.0.5):
+ - ExpoBackgroundFetch (56.0.6):
- ExpoModulesCore
- - ExpoBackgroundTask (56.0.5):
+ - ExpoBackgroundTask (56.0.6):
- ExpoModulesCore
- ExpoTaskManager
- - ExpoBackgroundTask/Tests (56.0.5):
+ - ExpoBackgroundTask/Tests (56.0.6):
- ExpoModulesCore
- ExpoModulesTestCore
- ExpoTaskManager
@@ -401,7 +401,7 @@ PODS:
- ExpoModulesCore
- ExpoBrightness (56.0.3):
- ExpoModulesCore
- - ExpoBrownfield (56.0.5):
+ - ExpoBrownfield (56.0.6):
- ExpoModulesCore
- ExpoCalendar (56.0.4):
- ExpoModulesCore
@@ -455,12 +455,12 @@ PODS:
- SDWebImageAVIFCoder (~> 0.11.0)
- SDWebImageSVGCoder (~> 1.7.0)
- SDWebImageWebPCoder (~> 0.14.6)
- - ExpoImageManipulator (56.0.5):
+ - ExpoImageManipulator (56.0.6):
- ExpoModulesCore
- SDWebImageWebPCoder
- - ExpoImagePicker (56.0.5):
+ - ExpoImagePicker (56.0.6):
- ExpoModulesCore
- - ExpoInsights (56.0.5):
+ - ExpoInsights (56.0.6):
- EASClient
- ExpoModulesCore
- hermes-engine
@@ -488,7 +488,7 @@ PODS:
- ExpoModulesCore
- ExpoLinearGradient (56.0.4):
- ExpoModulesCore
- - ExpoLinking (56.0.4):
+ - ExpoLinking (56.0.5):
- ExpoModulesCore
- ExpoLivePhoto (56.0.3):
- ExpoModulesCore
@@ -496,13 +496,13 @@ PODS:
- ExpoModulesCore
- ExpoLocalization (56.0.3):
- ExpoModulesCore
- - ExpoLocation (56.0.5):
+ - ExpoLocation (56.0.6):
- ExpoModulesCore
- - ExpoLogBox (56.0.6):
+ - ExpoLogBox (56.0.7):
- React-Core
- ExpoMailComposer (56.0.3):
- ExpoModulesCore
- - ExpoMaps (56.0.3):
+ - ExpoMaps (56.0.4):
- ExpoModulesCore
- ExpoMediaLibrary (56.0.3):
- ExpoModulesCore
@@ -513,7 +513,7 @@ PODS:
- React-Core
- ExpoMeshGradient (56.0.3):
- ExpoModulesCore
- - ExpoModulesCore (56.0.5):
+ - ExpoModulesCore (56.0.6):
- ExpoModulesJSI
- hermes-engine
- RCTRequired
@@ -537,7 +537,7 @@ PODS:
- ReactCommon/turbomodule/core
- ReactNativeDependencies
- Yoga
- - ExpoModulesCore/Tests (56.0.5):
+ - ExpoModulesCore/Tests (56.0.6):
- ExpoModulesJSI
- ExpoModulesTestCore
- hermes-engine
@@ -562,10 +562,10 @@ PODS:
- ReactCommon/turbomodule/core
- ReactNativeDependencies
- Yoga
- - ExpoModulesJSI (56.0.2):
+ - ExpoModulesJSI (56.0.3):
- React-Core
- ReactCommon
- - ExpoModulesJSI/Tests (56.0.2):
+ - ExpoModulesJSI/Tests (56.0.3):
- React-Core
- ReactCommon
- ExpoModulesTestCore (56.0.0):
@@ -573,22 +573,22 @@ PODS:
- Nimble (~> 13.0.0)
- Quick (~> 7.3.0)
- React-hermes
- - ExpoModulesWorklets (56.0.5):
+ - ExpoModulesWorklets (56.0.6):
- ExpoModulesCore
- ExpoModulesJSI
- - ExpoModulesWorkletsAdapter (56.0.5):
+ - ExpoModulesWorkletsAdapter (56.0.6):
- ExpoModulesCore
- ExpoModulesJSI
- ExpoModulesWorklets
- RNWorklets
- ExpoNetwork (56.0.3):
- ExpoModulesCore
- - ExpoNotifications (56.0.5):
+ - ExpoNotifications (56.0.6):
- ExpoModulesCore
- - ExpoNotifications/Tests (56.0.5):
+ - ExpoNotifications/Tests (56.0.6):
- ExpoModulesCore
- ExpoModulesTestCore
- - ExpoObserve (56.0.5):
+ - ExpoObserve (56.0.6):
- EASClient
- ExpoAppMetrics
- ExpoModulesCore
@@ -613,7 +613,7 @@ PODS:
- ReactCommon/turbomodule/core
- ReactNativeDependencies
- Yoga
- - ExpoObserve/Tests (56.0.5):
+ - ExpoObserve/Tests (56.0.6):
- EASClient
- ExpoAppMetrics
- ExpoModulesCore
@@ -669,7 +669,7 @@ PODS:
- ExpoModulesCore
- ExpoSensors (56.0.3):
- ExpoModulesCore
- - ExpoSharing (56.0.5):
+ - ExpoSharing (56.0.6):
- ExpoModulesCore
- ExpoSMS (56.0.3):
- ExpoModulesCore
@@ -685,16 +685,16 @@ PODS:
- ExpoModulesCore
- ExpoSystemUI (56.0.4):
- ExpoModulesCore
- - ExpoTaskManager (56.0.5):
+ - ExpoTaskManager (56.0.6):
- ExpoModulesCore
- UMAppLoader
- - ExpoTaskManager/Tests (56.0.5):
+ - ExpoTaskManager/Tests (56.0.6):
- ExpoModulesCore
- ExpoModulesTestCore
- UMAppLoader
- ExpoTrackingTransparency (56.0.3):
- ExpoModulesCore
- - ExpoUI (56.0.4):
+ - ExpoUI (56.0.5):
- ExpoModulesCore
- ExpoModulesWorklets
- React-RCTFabric
@@ -709,7 +709,7 @@ PODS:
- ExpoModulesCore
- EXStructuredHeaders (56.0.0)
- EXStructuredHeaders/Tests (56.0.0)
- - EXUpdates (56.0.6):
+ - EXUpdates (56.0.7):
- EASClient
- EXManifests
- ExpoModulesCore
@@ -737,7 +737,7 @@ PODS:
- ReactCommon/turbomodule/core
- ReactNativeDependencies
- Yoga
- - EXUpdates/Tests (56.0.6):
+ - EXUpdates/Tests (56.0.7):
- EASClient
- EXManifests
- ExpoModulesCore
@@ -3073,7 +3073,7 @@ PODS:
- ReactNativeDependencies
- RNWorklets
- Yoga
- - RNScreens (4.25.0-beta.3):
+ - RNScreens (4.25.0):
- hermes-engine
- RCTRequired
- RCTTypeSafety
@@ -3095,9 +3095,9 @@ PODS:
- ReactCommon/turbomodule/bridging
- ReactCommon/turbomodule/core
- ReactNativeDependencies
- - RNScreens/common (= 4.25.0-beta.3)
+ - RNScreens/common (= 4.25.0)
- Yoga
- - RNScreens/common (4.25.0-beta.3):
+ - RNScreens/common (4.25.0):
- hermes-engine
- RCTRequired
- RCTTypeSafety
@@ -3483,7 +3483,7 @@ DEPENDENCIES:
- "RNDateTimePicker (from `../../../node_modules/.pnpm/@react-native-community+datetimepicker@8.6.0_expo@packages+expo_react-native@0.85.3_@ba_fe22ba3f6bc184022828182340650ec6/node_modules/@react-native-community/datetimepicker`)"
- "RNGestureHandler (from `../../../node_modules/.pnpm/react-native-gesture-handler@2.30.0_react-native@0.85.3_@babel+core@7.29.0_@react-nativ_9a6358180c81a5519b6da847dcb246ed/node_modules/react-native-gesture-handler`)"
- "RNReanimated (from `../../../node_modules/.pnpm/react-native-reanimated@4.3.1_patch_hash=1e34e4238541638db96b94d5a2e974e73f3b801788a3d8_1a5e3d09dfc1ab41347a1ceaceaf61bc/node_modules/react-native-reanimated`)"
- - "RNScreens (from `../../../node_modules/.pnpm/react-native-screens@4.25.0-beta.3_react-native@0.85.3_@babel+core@7.29.0_@react-native_d946f5d10f696c25c0f95066694ac89d/node_modules/react-native-screens`)"
+ - "RNScreens (from `../../../node_modules/.pnpm/react-native-screens@4.25.0_react-native@0.85.3_@babel+core@7.29.0_@react-native+jest-p_27bafc37770a4b472b96129a8e818eae/node_modules/react-native-screens`)"
- "RNSVG (from `../../../node_modules/.pnpm/react-native-svg@15.15.4_react-native@0.85.3_@babel+core@7.29.0_@react-native+jest-pres_492c03827e778ae24445fe49da301b55/node_modules/react-native-svg`)"
- "RNWorklets (from `../../../node_modules/.pnpm/react-native-worklets@0.8.3_patch_hash=3f49a21b44ba558989a3366eeff9c92ee331e18b736dbe89_42b4111e02dad0db2c0db5ed881424fc/node_modules/react-native-worklets`)"
- TestExpoUi (from `../modules/test-expo-ui/ios`)
@@ -3943,7 +3943,7 @@ EXTERNAL SOURCES:
RNReanimated:
:path: "../../../node_modules/.pnpm/react-native-reanimated@4.3.1_patch_hash=1e34e4238541638db96b94d5a2e974e73f3b801788a3d8_1a5e3d09dfc1ab41347a1ceaceaf61bc/node_modules/react-native-reanimated"
RNScreens:
- :path: "../../../node_modules/.pnpm/react-native-screens@4.25.0-beta.3_react-native@0.85.3_@babel+core@7.29.0_@react-native_d946f5d10f696c25c0f95066694ac89d/node_modules/react-native-screens"
+ :path: "../../../node_modules/.pnpm/react-native-screens@4.25.0_react-native@0.85.3_@babel+core@7.29.0_@react-native+jest-p_27bafc37770a4b472b96129a8e818eae/node_modules/react-native-screens"
RNSVG:
:path: "../../../node_modules/.pnpm/react-native-svg@15.15.4_react-native@0.85.3_@babel+core@7.29.0_@react-native+jest-pres_492c03827e778ae24445fe49da301b55/node_modules/react-native-svg"
RNWorklets:
@@ -3964,27 +3964,27 @@ SPEC CHECKSUMS:
BenchmarkingModule: 75a52c0f605790d86e8cd73979f42693e26a5c14
EASClient: 2321f8d99fa86c710a6f68e017f3b54366baed9f
EXApplication: e6040c92edc5522accd62852342e6b14742d42c0
- EXConstants: cc547c6827ad7c335125b77ef0d34500600072dc
+ EXConstants: 6d77c642e750498fa02e16c9e3ce34a7e6629c9a
EXJSONUtils: dba2755f4e24009eaf87a876b2d615ea06c16e42
EXManifests: e20226d12c44cb2d27fca73c274287ff0012b40b
- Expo: 5fe2949b83b93d1cd1158c12ddfa6f6d7fee65c0
- expo-dev-client: 7d7a3ea257dc6ec92ed7b3f33ff865593c7fdae6
- expo-dev-launcher: 9ba7cee272da2cef4a5b3ec6593dbc8ca4d6c65f
- expo-dev-menu: bda0d19c25ee92b9b7aef4833101615c4037f835
+ Expo: 361c317245ae0dae9d76b20d7ddf0cb38ff5b8f9
+ expo-dev-client: 2451b6bbee39431d4eea694b4d71feec91b647d9
+ expo-dev-launcher: 0e756468b080474ce70bdab3fe9be6e31276642d
+ expo-dev-menu: 8532b699f6448e80972fc8b5f9bfe61e8a46a208
expo-dev-menu-interface: 65402d4affb8b418aa6cec29b3abb0e313c8f443
ExpoAgeRange: c3e104dedb469958077d56961cbc1d4aaf7a858a
ExpoAppIntegrity: 43cc62f24c533b960de07b5038568acedc3a567a
ExpoAppleAuthentication: 47f6f6c6722a7facef29d15397635b785086bc5e
- ExpoAppMetrics: ca2049cc1f198e69286ad33a9d23636d595b08b8
- ExpoAsset: cd00f5c0f9004d9e502fa7d6c54a437ffe20cd94
- ExpoAudio: fc809158cb86bdad608e8a224331cfb5481d8ea3
- ExpoBackgroundFetch: fbe31df2735bd3d624175b31d6b849bec3a2a736
- ExpoBackgroundTask: fadd6970920cb7ca89a78693a7cd266687fb0d57
+ ExpoAppMetrics: debc33b91a4d26dbc67bd7aafc7ac1784b53e194
+ ExpoAsset: 966be429f5344096dc6e76c8c7d14d553b195e95
+ ExpoAudio: c4a6f9fd2e1d0b39c3bc0ff43c0f36c14a9741c3
+ ExpoBackgroundFetch: 2b1d9d1dd6a62dda793c74bd763dcb49b6a55524
+ ExpoBackgroundTask: 21a1701a082ff1501bdeba938d848786b9560d36
ExpoBattery: 4fbebca8ce0ee2bb4038efbcfa24d763012af07d
ExpoBlob: 3e896c97726abf49bdecf63151e09fb4f7e21195
ExpoBlur: caddd80171e5f8f3581ff3d865e99c6465047240
ExpoBrightness: e394ebb59feb3191a0b0db7453861b3d3431381f
- ExpoBrownfield: 859816bf2ddc2cf4f5491fc9f2bec412a1eadf1a
+ ExpoBrownfield: 5978b14e3c48f40ae8f60cf7f46ccd8d18207ef5
ExpoCalendar: fcf3a20e5228541c7b060fd563d337a83860a19b
ExpoCamera: 90595ff52b7cfccf9590a80e23e938e846c112ae
ExpoCameraBarcodeScanning: e43e457bb457ce1dfb88b2d812e9457c825bd05c
@@ -4001,35 +4001,35 @@ SPEC CHECKSUMS:
ExpoGlassEffect: 7d4233dc0727ee2b28dd757eda70e1b6abf662fd
ExpoHaptics: 89364cf3c3ca2cfd54cafed42f3be3169bab6d42
ExpoImage: 59f71ed6d030241ffadead114064cfd01bd0dc12
- ExpoImageManipulator: 6c489193ef8b16ef5c527206e052498d689817ac
- ExpoImagePicker: 08328e8c841e1e9d3a894bafe1ea51b97a9efcf0
- ExpoInsights: e1fe2d95835f61b35f06c0bb78a08127c19a9d52
+ ExpoImageManipulator: 4700b24856c5f7c20e31e1a191edb0c2d84b0110
+ ExpoImagePicker: e95eff5433e28baa37d7e8d105bfdcff91bfe49e
+ ExpoInsights: 38b25f3679c3fcd35da80eb623510112225b3ab1
ExpoKeepAwake: 359c47a1d9ccc3a3c519bca6e39562cce230c5bb
ExpoLinearGradient: 16c2b9c6105444883d34958d573725de1293b8d0
- ExpoLinking: eafd5d612d940b353781d85b16a7326e96bfda97
+ ExpoLinking: 5fe73159a975396b5753a90dcd644f91d4997083
ExpoLivePhoto: 3c2bd665a63afa8a465b16b564e4c9ab83ea60eb
ExpoLocalAuthentication: 64e8c5756df07c8a89f078293ec17899c1325a43
ExpoLocalization: 74b7a2319781fd14f5db01e932c7c3a075ea1b4b
- ExpoLocation: bb6fe4f65be6eb26acb8661062ec6d2632395795
- ExpoLogBox: 349eb7ae84d0705e717736ab22c0fd8eaf060297
+ ExpoLocation: 42c1691e9485ca9cbcaf881063da470c4f956dfe
+ ExpoLogBox: 810821edcd35fa4c9347a891b9a4f70b24986d53
ExpoMailComposer: e202b670f62063851ed74c964034037312d523a8
- ExpoMaps: 7fd43313b3be943c93df66df7dd09e6337703a37
+ ExpoMaps: d9442d9a3ff4f36cf865ceeddb61dc0c2f04f21b
ExpoMediaLibrary: ee2d74d5e52154305b8229dcb5c4319c84f30311
ExpoMeshGradient: baf62012104fd9c1719de67f88c69958abcd2ed1
- ExpoModulesCore: 5bca19db7db63ab6b60af8b6853f05e7d41fda4c
- ExpoModulesJSI: 0740aeb1d9d2d3a7e4cd3368b09835d59cba0eb6
+ ExpoModulesCore: 7340aa49394f2285dc8effc32c33efa1a61c3834
+ ExpoModulesJSI: f672bac18356446b024588f7a77b364d80909e71
ExpoModulesTestCore: 5660ab6b5928747366d4946580622a578865696a
- ExpoModulesWorklets: f6674212fdcd312c11642b1e51b9433ab1940a2f
- ExpoModulesWorkletsAdapter: 23fa6f8b59e1096e35849bf4f13210640b896822
+ ExpoModulesWorklets: 8861dc33348d68f45da07f6b1ce36bbf7932ce34
+ ExpoModulesWorkletsAdapter: 89b494dacfec3d6f48f587fe6925a52d983f8d32
ExpoNetwork: 6c8e0cc425a2c7f6591fabcab16417506441242c
- ExpoNotifications: 64eaf693447432639bb5db20968cb8619af93bcf
- ExpoObserve: ba64aeff255577af6f1a047ade738de63cf73504
+ ExpoNotifications: 95f3404429f5af67d9bc63f32c7dfd21ce973a15
+ ExpoObserve: 251757b724d23044321252aa352b0f8d64e8ff3a
ExpoPrint: 6b5bcac4492908b7e28144c2e7265c1c5ee4ade0
ExpoScreenCapture: f23a26d9fda8c42c77e7a818a1e20e3e8b94134b
ExpoScreenOrientation: d009b38c96c03f4ef2bd658cdcf52e130176a7af
ExpoSecureStore: 4d1c0303f8ead59766d7466c3c14d0ce4336fc0f
ExpoSensors: 4ed48ba1a8d48e236fd22a966b77498188f8f48c
- ExpoSharing: 6f6802ef169ebc3240bd97f3ad53be62caf63cd6
+ ExpoSharing: 69c9b71fde18b933f449d3ff04b3a94f54374848
ExpoSMS: 2cebfd889706da39a397d20c8a68abb0ce7f185d
ExpoSpeech: fe3706df8653ab8c16ff88251e33fab79b07a420
ExpoSplashScreen: 9832cc07432f8c16d2be3b01c0a481ded2ebac4b
@@ -4037,18 +4037,18 @@ SPEC CHECKSUMS:
ExpoStoreReview: f785057aececd9c63a113c69a82b491e5f90694e
ExpoSymbols: f83c91f2897d37102b98b9224c603095630be9d0
ExpoSystemUI: 6f9eddf66c31d074c402ba4a9e5cd2320edda37f
- ExpoTaskManager: 89039e1608d021a9eb382dc310c2bda012440b54
+ ExpoTaskManager: ab40f53c388e66b79927d8e12a575c5570dc5b2c
ExpoTrackingTransparency: dbdb87acf9ae2d85cb6c70f70a9d87d706949efd
- ExpoUI: c09f44682fed7c2be300e8efdb39349e03a71c62
+ ExpoUI: 4fba40237ef6d9f07b3c336920e962d5201aa017
ExpoVideo: fa20020308f9f8e3458c05c7216d139d47fc1b32
ExpoVideoDashSupportModule: a8197584e7b7e533a67e75d3349c5fa827358ad6
ExpoVideoThumbnails: 116c2563d2bd3a1e98326a267020e25fea8af79e
ExpoWebBrowser: fb9b5a94ebaa3483987f4acf4af6fd85c401df3e
EXStructuredHeaders: 9e89bcdd636ae2ecb59995cfba3230f5d7547c08
- EXUpdates: fc6bc50db66d455cb3caf8141b74b2dc546b43a7
+ EXUpdates: d4ddb00f917ff20c29d67c6148797c08ee3cfdc8
EXUpdatesInterface: 25408a97d682355eb9fb37e5aa6e22caece1881f
FBLazyVector: 24e62c765683b8d89006a88a2c8f5cf019f0074d
- hermes-engine: 725fd85144e1348879039099a6be950c471a4f2c
+ hermes-engine: a1bc0e0ef43518b5cd7e6af56c491fe33c8e3906
libavif: 5f8e715bea24debec477006f21ef9e95432e254d
libdav1d: 23581a4d8ec811ff171ed5e2e05cd27bad64c39f
libwebp: 02b23773aedb6ff1fd38cec7a77b81414c6842a8
@@ -4066,7 +4066,7 @@ SPEC CHECKSUMS:
React: e2dc35338068bbd299c66f043ae0d7f25de8499e
React-callinvoker: 28b25d21b124c26cebaea713ba7d801b9351dc48
React-Core: 02ed7d2ffb70437bdf2aba074a13078a7b0b9ff0
- React-Core-prebuilt: fde6815789f6abf356769ef91706ab8edd09483e
+ React-Core-prebuilt: 73eec4b30ca228b7491f00b9ed0738b5e7987136
React-CoreModules: b3a5a42dadcde3b5d47b325bd912eb2ced89e146
React-cxxreact: fe8f88dda044e5905e99a00f41b7a874c3908716
React-debug: 92944dc4d89f56d640e75498266cbde557a48189
@@ -4137,14 +4137,14 @@ SPEC CHECKSUMS:
ReactAppDependencyProvider: 25c9c516839be2c5e3d3344f95dc7da5f7e63fc2
ReactCodegen: 4a6399e11baf2544e971652efe65e3d3f29d5080
ReactCommon: 7dfc3250793bf36cf221096ff59e1179e13eef7f
- ReactNativeDependencies: 3d528364388addff90003964f5c3a003b40939d2
+ ReactNativeDependencies: 64169934a7369c23d6619a9d1583fa18c6a48fa7
RNCAsyncStorage: 2ad919e88b8bc2cd80e8697ce66d04d006743283
RNCMaskedView: eb2b2e538afa907f05a5848a1a1ac26092e6fec9
RNCPicker: d74667bdfc08ed389a2a277d95b8faf2349290a9
RNDateTimePicker: b9e20c2a3af26f4ab10646359777205bbad1fdac
RNGestureHandler: c84901d120acdae2f6f27b5889a7cf144e64e6ec
RNReanimated: a1b89be9f4b3f85c708900d0a167cd22d869a198
- RNScreens: 9d8bbdc7185cc51e594567e50d87c674ccee3e9c
+ RNScreens: a6a509f05ea74d50abab8c21b319b33cfca1ea1c
RNSVG: 04044c3abcf177fd674a1a3d13097efa1adebcbe
RNWorklets: edcd0af162eba9fb81af89a4761f1af35086d1cc
SDWebImage: e9fc87c1aab89a8ab1bbd74eba378c6f53be8abf
diff --git a/apps/eas-expo-go/eas.json b/apps/eas-expo-go/eas.json
index affe084d0d1657..c367c3ab8c69d1 100644
--- a/apps/eas-expo-go/eas.json
+++ b/apps/eas-expo-go/eas.json
@@ -18,7 +18,8 @@
"EXPO_ROOT_DIR": "/home/expo/workingdir/build",
"SHARP_IGNORE_GLOBAL_LIBVIPS": "1",
"EAS_BUILD_DISABLE_BUNDLE_JAVASCRIPT_STEP": "1",
- "GRADLE_OPTS": "-Xmx16g -XX:MaxMetaspaceSize=1g -Dorg.gradle.vfs.watch=false"
+ "GRADLE_OPTS": "-Xmx16g -XX:MaxMetaspaceSize=1g -Dorg.gradle.vfs.watch=false",
+ "EAS_RESTORE_CACHE": "0"
}
},
"ios": {
@@ -29,7 +30,9 @@
"EAS_BUILD_PLATFORM": "ios",
"EXPO_ROOT_DIR": "/Users/expo/workingdir/build",
"SHARP_IGNORE_GLOBAL_LIBVIPS": "1",
- "EAS_BUILD_DISABLE_BUNDLE_JAVASCRIPT_STEP": "1"
+ "EAS_BUILD_DISABLE_BUNDLE_JAVASCRIPT_STEP": "1",
+ "EAS_RESTORE_CACHE": "0",
+ "USE_CCACHE": "0"
}
}
},
diff --git a/apps/eas-expo-go/scripts/eas-build-pre-install.sh b/apps/eas-expo-go/scripts/eas-build-pre-install.sh
index a7f42bda7b7141..a62a408c39bc83 100755
--- a/apps/eas-expo-go/scripts/eas-build-pre-install.sh
+++ b/apps/eas-expo-go/scripts/eas-build-pre-install.sh
@@ -44,6 +44,10 @@ fi
pushd $ROOT_DIR/tools
+# Install just the `tools` workspace and its deps so `et` can run here. The
+# root `pnpm install` runs in a later EAS phase.
+pnpm install --filter expotools... --ignore-scripts --dir "$ROOT_DIR"
+
if [ "$EAS_BUILD_PROFILE" = "release-client" ] && [ "$EAS_BUILD_PLATFORM" = "ios" ]; then
et eas remove-background-permissions-from-info-plist
fi
diff --git a/apps/expo-go/android/expoview/src/main/java/host/exp/exponent/ExpoUpdatesAppLoader.kt b/apps/expo-go/android/expoview/src/main/java/host/exp/exponent/ExpoUpdatesAppLoader.kt
index 398c6663e3906e..630003fbfe0a41 100644
--- a/apps/expo-go/android/expoview/src/main/java/host/exp/exponent/ExpoUpdatesAppLoader.kt
+++ b/apps/expo-go/android/expoview/src/main/java/host/exp/exponent/ExpoUpdatesAppLoader.kt
@@ -30,6 +30,7 @@ import host.exp.exponent.kernel.ExpoViewKernel
import host.exp.exponent.kernel.Kernel
import host.exp.exponent.kernel.KernelConfig
import host.exp.exponent.storage.ExponentSharedPreferences
+import host.exp.exponent.utils.HermesBundleUtils
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
@@ -37,6 +38,7 @@ import org.json.JSONArray
import org.json.JSONException
import org.json.JSONObject
import java.io.File
+import java.net.URI
import javax.inject.Inject
import kotlin.time.DurationUnit
import kotlin.time.toDuration
@@ -263,7 +265,16 @@ class ExpoUpdatesAppLoader @JvmOverloads constructor(
// ReactAndroid will load the bundle on its own in development mode
if (!manifest.isDevelopmentMode()) {
- callback.onBundleCompleted(launcher.launchAssetFile!!)
+ val launchAssetFile = launcher.launchAssetFile!!
+ val isEasUpdate = runCatching { URI(manifestUrl).host }.getOrNull() == "u.expo.dev"
+ if (!isEasUpdate && HermesBundleUtils.isHermesBundle(File(launchAssetFile))) {
+ val errorJson = JSONObject().apply {
+ put("errorCode", "EXPERIENCE_HERMES_BUNDLE_NOT_SUPPORTED")
+ put("message", "Hermes bytecode bundle is not supported by Expo Go")
+ }
+ throw ManifestException(null, manifestUrl, errorJson)
+ }
+ callback.onBundleCompleted(launchAssetFile)
}
} catch (e: Exception) {
callback.onError(e)
diff --git a/apps/expo-go/android/expoview/src/main/java/host/exp/exponent/exceptions/ManifestException.kt b/apps/expo-go/android/expoview/src/main/java/host/exp/exponent/exceptions/ManifestException.kt
index 67761c8b2e7dc5..679665e5d44235 100644
--- a/apps/expo-go/android/expoview/src/main/java/host/exp/exponent/exceptions/ManifestException.kt
+++ b/apps/expo-go/android/expoview/src/main/java/host/exp/exponent/exceptions/ManifestException.kt
@@ -37,6 +37,7 @@ class ManifestException : ExponentException {
}
"EXPERIENCE_SDK_VERSION_TOO_NEW" -> "Project is incompatible with this version of Expo Go"
"SNACK_NOT_FOUND_FOR_SDK_VERSION" -> "This Snack is incompatible with this version of Expo Go"
+ "EXPERIENCE_HERMES_BUNDLE_NOT_SUPPORTED" -> "Project is incompatible with Expo Go"
else -> null
}
} catch (e: JSONException) {
@@ -116,6 +117,13 @@ class ManifestException : ExponentException {
"You need to log in. If the snack is still unavailable after logging in, ask the owner to grant you access."
}
+ "EXPERIENCE_HERMES_BUNDLE_NOT_SUPPORTED" -> {
+ formattedMessage = "This project was published with a precompiled Hermes bytecode bundle. Expo Go runs plain JavaScript bundles, so it can't load this update."
+ fixInstructions =
+ "Open this project in a development build instead, or use eas update --no-bytecode."
+ canRetry = false
+ }
+
"USER_SNACK_NOT_FOUND", "SNACK_NOT_FOUND" ->
formattedMessage = "No snack found at $manifestUrl."
diff --git a/apps/expo-go/android/expoview/src/main/java/host/exp/exponent/experience/ReactNativeActivity.kt b/apps/expo-go/android/expoview/src/main/java/host/exp/exponent/experience/ReactNativeActivity.kt
index e9e9dfb970f4f6..281fc3245847fc 100644
--- a/apps/expo-go/android/expoview/src/main/java/host/exp/exponent/experience/ReactNativeActivity.kt
+++ b/apps/expo-go/android/expoview/src/main/java/host/exp/exponent/experience/ReactNativeActivity.kt
@@ -21,6 +21,7 @@ import com.facebook.react.ReactHost
import com.facebook.react.bridge.ReactContext.RCTDeviceEventEmitter
import com.facebook.react.devsupport.DefaultDevLoadingViewImplementation
import com.facebook.react.devsupport.DevInternalSettings
+import com.facebook.react.devsupport.DevSupportManagerBase
import com.facebook.react.devsupport.DoubleTapReloadRecognizer
import com.facebook.react.devsupport.interfaces.DevSupportManager
import com.facebook.react.interfaces.fabric.ReactSurface
@@ -34,6 +35,7 @@ import expo.modules.manifests.core.Manifest
import host.exp.exponent.ExponentManifest
import host.exp.exponent.analytics.EXL
import host.exp.exponent.di.NativeModuleDepsProvider
+import host.exp.exponent.exceptions.ManifestException
import host.exp.exponent.experience.BaseExperienceActivity.ExperienceContentLoaded
import host.exp.exponent.experience.splashscreen.LoadingView
import host.exp.exponent.factories.ReactHostFactory
@@ -58,6 +60,7 @@ import org.json.JSONObject
import versioned.host.exp.exponent.ExpoNetworkInterceptor
import versioned.host.exp.exponent.ExponentDevBundleDownloadListener
import versioned.host.exp.exponent.ExponentPackage
+import java.io.File
import java.util.LinkedList
import java.util.Queue
import javax.inject.Inject
@@ -359,7 +362,23 @@ abstract class ReactNativeActivity :
instanceManagerBuilderProperties
)
- val devBundleDownloadListener = ExponentDevBundleDownloadListener(progressListener)
+ var devSupportManager: DevSupportManager? = null
+ val capturedManifestUrl = manifestUrl
+ val devBundleDownloadListener = ExponentDevBundleDownloadListener(
+ progressListener,
+ downloadedBundleFileProvider = {
+ (devSupportManager as? DevSupportManagerBase)?.downloadedJSBundleFile?.let(::File)
+ },
+ onHermesDetected = {
+ if (capturedManifestUrl != null) {
+ val errorJson = JSONObject().apply {
+ put("errorCode", "EXPERIENCE_HERMES_BUNDLE_NOT_SUPPORTED")
+ put("message", "Hermes bytecode bundle is not supported by Expo Go")
+ }
+ KernelProvider.instance.handleError(ManifestException(null, capturedManifestUrl, errorJson))
+ }
+ }
+ )
if (delegate.isDebugModeEnabled) {
val debuggerHost = manifest!!.getDebuggerHost()
@@ -377,6 +396,7 @@ abstract class ReactNativeActivity :
useDevSupport = nativeHost.useDeveloperSupport,
devBundleDownloadListener = devBundleDownloadListener
)
+ devSupportManager = reactHost.devSupportManager
val bundle = Bundle()
val exponentProps = JSONObject()
diff --git a/apps/expo-go/android/expoview/src/main/java/host/exp/exponent/utils/HermesBundleUtils.kt b/apps/expo-go/android/expoview/src/main/java/host/exp/exponent/utils/HermesBundleUtils.kt
new file mode 100644
index 00000000000000..6a3378a954b744
--- /dev/null
+++ b/apps/expo-go/android/expoview/src/main/java/host/exp/exponent/utils/HermesBundleUtils.kt
@@ -0,0 +1,32 @@
+// Copyright 2015-present 650 Industries. All rights reserved.
+package host.exp.exponent.utils
+
+import java.io.File
+import java.io.IOException
+
+object HermesBundleUtils {
+ // https://github.com/facebook/hermes/blob/ae8554141cd3d3f64eb98d70c97112fcc6143d34/include/hermes/BCGen/HBC/BytecodeFileFormat.h#L26-L27
+ private val HERMES_MAGIC_HEADER = byteArrayOf(
+ 0xc6.toByte(),
+ 0x1f.toByte(),
+ 0xbc.toByte(),
+ 0x03.toByte(),
+ 0xc1.toByte(),
+ 0x03.toByte(),
+ 0x19.toByte(),
+ 0x1f.toByte()
+ )
+
+ fun isHermesBundle(file: File): Boolean {
+ if (!file.exists() || file.length() < HERMES_MAGIC_HEADER.size) return false
+ return try {
+ file.inputStream().use { input ->
+ val bytes = ByteArray(HERMES_MAGIC_HEADER.size)
+ val read = input.read(bytes, 0, bytes.size)
+ read == HERMES_MAGIC_HEADER.size && bytes.contentEquals(HERMES_MAGIC_HEADER)
+ }
+ } catch (e: IOException) {
+ false
+ }
+ }
+}
diff --git a/apps/expo-go/android/expoview/src/main/java/versioned/host/exp/exponent/ExponentDevBundleDownloadListener.kt b/apps/expo-go/android/expoview/src/main/java/versioned/host/exp/exponent/ExponentDevBundleDownloadListener.kt
index c5b627d71bdbe7..2fb51805299d68 100644
--- a/apps/expo-go/android/expoview/src/main/java/versioned/host/exp/exponent/ExponentDevBundleDownloadListener.kt
+++ b/apps/expo-go/android/expoview/src/main/java/versioned/host/exp/exponent/ExponentDevBundleDownloadListener.kt
@@ -2,15 +2,28 @@ package versioned.host.exp.exponent
import com.facebook.react.devsupport.interfaces.DevBundleDownloadListener
import host.exp.exponent.experience.DevBundleDownloadProgressListener
+import host.exp.exponent.utils.HermesBundleUtils
+import java.io.File
import kotlin.Exception
/**
* Acts as a bridge between the versioned DevBundleDownloadListener and unversioned
- * DevBundleDownloadProgressListener
+ * DevBundleDownloadProgressListener. Optionally sniffs the downloaded bundle for the
+ * Hermes magic header and fails instead of succeeding when matched.
*/
-class ExponentDevBundleDownloadListener(private val listener: DevBundleDownloadProgressListener) :
- DevBundleDownloadListener {
+class ExponentDevBundleDownloadListener(
+ private val listener: DevBundleDownloadProgressListener,
+ private val downloadedBundleFileProvider: (() -> File?)? = null,
+ private val onHermesDetected: ((Exception) -> Unit)? = null
+) : DevBundleDownloadListener {
override fun onSuccess() {
+ val bundleFile = downloadedBundleFileProvider?.invoke()
+ if (bundleFile != null && HermesBundleUtils.isHermesBundle(bundleFile)) {
+ val error = Exception("hermes bytecode bundle is not supported by expo-go")
+ onHermesDetected?.invoke(error)
+ listener.onFailure(error)
+ return
+ }
listener.onSuccess()
}
diff --git a/apps/expo-go/ios/Exponent/Kernel/AppLoader/CachedResource/EXManifestResource.h b/apps/expo-go/ios/Exponent/Kernel/AppLoader/CachedResource/EXManifestResource.h
index 98e09d73f5dfe6..22ab3d9cccf046 100644
--- a/apps/expo-go/ios/Exponent/Kernel/AppLoader/CachedResource/EXManifestResource.h
+++ b/apps/expo-go/ios/Exponent/Kernel/AppLoader/CachedResource/EXManifestResource.h
@@ -7,6 +7,7 @@
NS_ASSUME_NONNULL_BEGIN
+extern NSString * const EXRuntimeErrorDomain;
extern NSString * const EXFixInstructionsKey;
extern NSString * const EXShowTryAgainButtonKey;
diff --git a/apps/expo-go/ios/Exponent/Kernel/AppLoader/CachedResource/EXManifestResource.m b/apps/expo-go/ios/Exponent/Kernel/AppLoader/CachedResource/EXManifestResource.m
index 93d1770e60c8c7..f06c61f301fc92 100644
--- a/apps/expo-go/ios/Exponent/Kernel/AppLoader/CachedResource/EXManifestResource.m
+++ b/apps/expo-go/ios/Exponent/Kernel/AppLoader/CachedResource/EXManifestResource.m
@@ -343,6 +343,10 @@ - (NSError *)formatError:(NSError *)error
formattedMessage = @"The project you requested requires a newer version of Expo Go.";
fixInstructions = @"Download the latest version of Expo Go from the App Store.";
showTryAgainButton = false;
+ } else if ([errorCode isEqualToString:@"EXPERIENCE_HERMES_BUNDLE_NOT_SUPPORTED"]) {
+ formattedMessage = @"This project was published with a precompiled Hermes bytecode bundle. Expo Go runs plain JavaScript bundles, so it can't load this update.";
+ fixInstructions = @"Open this project in a [development build](https://docs.expo.dev/develop/development-builds/introduction/) instead, or use **eas update --no-bytecode**.";
+ showTryAgainButton = false;
} else if ([errorCode isEqualToString:@"NO_COMPATIBLE_EXPERIENCE_FOUND"]){
formattedMessage = rawMessage; // No compatible experience found at ${originalUrl}. Only ${currentSdkVersions} are supported.
} else if ([errorCode isEqualToString:@"EXPERIENCE_NOT_VIEWABLE"]) {
@@ -392,6 +396,8 @@ + (NSString * _Nonnull)formatHeader:(NSError * _Nonnull)error {
return @"Project is incompatible with this version of Expo Go";
} else if ([errorCode isEqualToString:@"SNACK_NOT_FOUND_FOR_SDK_VERSION"]) {
return @"This Snack is incompatible with this version of Expo Go";
+ } else if ([errorCode isEqualToString:@"EXPERIENCE_HERMES_BUNDLE_NOT_SUPPORTED"]) {
+ return @"Project is incompatible with Expo Go";
}
return nil;
}
diff --git a/apps/expo-go/ios/Exponent/Kernel/AppLoader/EXAppLoaderExpoUpdates.m b/apps/expo-go/ios/Exponent/Kernel/AppLoader/EXAppLoaderExpoUpdates.m
index 4cb9a3439fe7a8..3ebf8a24baf446 100644
--- a/apps/expo-go/ios/Exponent/Kernel/AppLoader/EXAppLoaderExpoUpdates.m
+++ b/apps/expo-go/ios/Exponent/Kernel/AppLoader/EXAppLoaderExpoUpdates.m
@@ -256,6 +256,17 @@ - (void)appLoaderTask:(EXUpdatesAppLoaderTask *)appLoaderTask didFinishWithLaunc
return;
}
_bundle = [NSData dataWithContentsOfURL:launcher.launchAssetUrl];
+ BOOL isEasUpdate = [_httpManifestUrl.host isEqualToString:@"u.expo.dev"];
+ if (!isEasUpdate && [EXAppLoaderExpoUpdates isHermesBundle:_bundle]) {
+ EXManifestResource *manifestResource = [[EXManifestResource alloc] initWithManifestUrl:_httpManifestUrl originalUrl:_manifestUrl];
+ _error = [manifestResource formatError:[NSError errorWithDomain:EXRuntimeErrorDomain code:0 userInfo:@{
+ @"errorCode": @"EXPERIENCE_HERMES_BUNDLE_NOT_SUPPORTED",
+ }]];
+ if (self.delegate) {
+ [self.delegate appLoader:self didFailWithError:_error];
+ }
+ return;
+ }
if (self.delegate) {
[self.delegate appLoader:self didFinishLoadingManifest:_confirmedManifest bundle:_bundle];
}
@@ -292,6 +303,16 @@ - (void)appLoaderTaskDidFinishAllLoading:(EXUpdatesAppLoaderTask *)appLoaderTask
#pragma mark - internal
++ (BOOL)isHermesBundle:(NSData *)bundle
+{
+ // https://github.com/facebook/hermes/blob/ae8554141cd3d3f64eb98d70c97112fcc6143d34/include/hermes/BCGen/HBC/BytecodeFileFormat.h#L26-L27
+ static const uint8_t kHermesMagic[] = { 0xc6, 0x1f, 0xbc, 0x03, 0xc1, 0x03, 0x19, 0x1f };
+ if (bundle.length < sizeof(kHermesMagic)) {
+ return NO;
+ }
+ return memcmp(bundle.bytes, kHermesMagic, sizeof(kHermesMagic)) == 0;
+}
+
+ (NSURL *)_httpUrlFromManifestUrl:(NSURL *)url
{
NSURLComponents *components = [NSURLComponents componentsWithURL:url resolvingAgainstBaseURL:YES];
@@ -471,6 +492,18 @@ - (void)_loadDevelopmentJavaScriptResource
[self.delegate appLoader:self didLoadBundleWithProgress:progress];
}
} success:^(NSData *bundle) {
+ if ([EXAppLoaderExpoUpdates isHermesBundle:bundle]) {
+ EXManifestResource *manifestResource = [[EXManifestResource alloc] initWithManifestUrl:self.httpManifestUrl originalUrl:self.manifestUrl];
+ NSError *hermesError = [manifestResource formatError:[NSError errorWithDomain:EXRuntimeErrorDomain code:0 userInfo:@{
+ @"errorCode": @"EXPERIENCE_HERMES_BUNDLE_NOT_SUPPORTED",
+ }]];
+ self.error = hermesError;
+ self.isLoadingDevelopmentJavaScriptResource = NO;
+ if (self.delegate) {
+ [self.delegate appLoader:self didFailWithError:hermesError];
+ }
+ return;
+ }
self.isUpToDate = YES;
self.bundle = bundle;
self.isLoadingDevelopmentJavaScriptResource = NO;
diff --git a/apps/expo-go/ios/Podfile.lock b/apps/expo-go/ios/Podfile.lock
index 1f7ec576a55afa..927eadafd48a55 100644
--- a/apps/expo-go/ios/Podfile.lock
+++ b/apps/expo-go/ios/Podfile.lock
@@ -11,7 +11,7 @@ PODS:
- ExpoModulesTestCore
- EXApplication (56.0.3):
- ExpoModulesCore
- - EXConstants (56.0.6):
+ - EXConstants (56.0.7):
- ExpoModulesCore
- EXJSONUtils (56.0.0)
- EXJSONUtils/Tests (56.0.0)
@@ -20,7 +20,7 @@ PODS:
- EXManifests/Tests (56.0.2):
- ExpoModulesCore
- ExpoModulesTestCore
- - Expo (56.0.0-preview.7):
+ - Expo (56.0.0-preview.9):
- boost
- DoubleConversion
- ExpoModulesCore
@@ -52,7 +52,7 @@ PODS:
- ReactCommon/turbomodule/core
- SocketRocket
- Yoga
- - Expo/Tests (56.0.0-preview.7):
+ - Expo/Tests (56.0.0-preview.9):
- boost
- DoubleConversion
- ExpoModulesCore
@@ -85,16 +85,16 @@ PODS:
- ReactCommon/turbomodule/core
- SocketRocket
- Yoga
- - ExpoAsset (56.0.6):
+ - ExpoAsset (56.0.7):
- ExpoModulesCore
- - ExpoAudio (56.0.3):
+ - ExpoAudio (56.0.4):
- ExpoModulesCore
- - ExpoBackgroundFetch (56.0.5):
+ - ExpoBackgroundFetch (56.0.6):
- ExpoModulesCore
- - ExpoBackgroundTask (56.0.5):
+ - ExpoBackgroundTask (56.0.6):
- ExpoModulesCore
- ExpoTaskManager
- - ExpoBackgroundTask/Tests (56.0.5):
+ - ExpoBackgroundTask/Tests (56.0.6):
- ExpoModulesCore
- ExpoModulesTestCore
- ExpoTaskManager
@@ -158,24 +158,24 @@ PODS:
- SDWebImageAVIFCoder (~> 0.11.0)
- SDWebImageSVGCoder (~> 1.7.0)
- SDWebImageWebPCoder (~> 0.14.6)
- - ExpoImageManipulator (56.0.5):
+ - ExpoImageManipulator (56.0.6):
- ExpoModulesCore
- SDWebImageWebPCoder
- - ExpoImagePicker (56.0.5):
+ - ExpoImagePicker (56.0.6):
- ExpoModulesCore
- ExpoKeepAwake (56.0.3):
- ExpoModulesCore
- ExpoLinearGradient (56.0.4):
- ExpoModulesCore
- - ExpoLinking (56.0.4):
+ - ExpoLinking (56.0.5):
- ExpoModulesCore
- ExpoLocalAuthentication (56.0.3):
- ExpoModulesCore
- ExpoLocalization (56.0.3):
- ExpoModulesCore
- - ExpoLocation (56.0.5):
+ - ExpoLocation (56.0.6):
- ExpoModulesCore
- - ExpoLogBox (56.0.6):
+ - ExpoLogBox (56.0.7):
- React-Core
- ExpoMailComposer (56.0.3):
- ExpoModulesCore
@@ -186,7 +186,7 @@ PODS:
- ExpoModulesCore
- ExpoModulesTestCore
- React-Core
- - ExpoModulesCore (56.0.5):
+ - ExpoModulesCore (56.0.6):
- boost
- DoubleConversion
- ExpoModulesJSI
@@ -216,7 +216,7 @@ PODS:
- ReactCommon/turbomodule/core
- SocketRocket
- Yoga
- - ExpoModulesCore/Tests (56.0.5):
+ - ExpoModulesCore/Tests (56.0.6):
- boost
- DoubleConversion
- ExpoModulesJSI
@@ -247,10 +247,10 @@ PODS:
- ReactCommon/turbomodule/core
- SocketRocket
- Yoga
- - ExpoModulesJSI (56.0.2):
+ - ExpoModulesJSI (56.0.3):
- React-Core
- ReactCommon
- - ExpoModulesJSI/Tests (56.0.2):
+ - ExpoModulesJSI/Tests (56.0.3):
- React-Core
- ReactCommon
- ExpoModulesTestCore (56.0.0):
@@ -258,27 +258,27 @@ PODS:
- Nimble (~> 13.0.0)
- Quick (~> 7.3.0)
- React-hermes
- - ExpoModulesWorklets (56.0.5):
+ - ExpoModulesWorklets (56.0.6):
- ExpoModulesCore
- ExpoModulesJSI
- - ExpoModulesWorkletsAdapter (56.0.5):
+ - ExpoModulesWorkletsAdapter (56.0.6):
- ExpoModulesCore
- ExpoModulesJSI
- ExpoModulesWorklets
- RNWorklets
- ExpoNetwork (56.0.3):
- ExpoModulesCore
- - ExpoNotifications (56.0.5):
+ - ExpoNotifications (56.0.6):
- ExpoModulesCore
- - ExpoNotifications/Tests (56.0.5):
+ - ExpoNotifications/Tests (56.0.6):
- ExpoModulesCore
- ExpoModulesTestCore
- ExpoPrint (56.0.3):
- ExpoModulesCore
- - ExpoRouter (56.1.1):
+ - ExpoRouter (56.1.3):
- ExpoModulesCore
- RNScreens
- - ExpoRouter/Tests (56.1.1):
+ - ExpoRouter/Tests (56.1.3):
- ExpoModulesCore
- ExpoModulesTestCore
- RNScreens
@@ -317,7 +317,7 @@ PODS:
- ExpoModulesCore
- ExpoSensors (56.0.3):
- ExpoModulesCore
- - ExpoSharing (56.0.5):
+ - ExpoSharing (56.0.6):
- ExpoModulesCore
- ExpoSMS (56.0.3):
- ExpoModulesCore
@@ -331,16 +331,16 @@ PODS:
- ExpoModulesCore
- ExpoSystemUI (56.0.4):
- ExpoModulesCore
- - ExpoTaskManager (56.0.5):
+ - ExpoTaskManager (56.0.6):
- ExpoModulesCore
- UMAppLoader
- - ExpoTaskManager/Tests (56.0.5):
+ - ExpoTaskManager/Tests (56.0.6):
- ExpoModulesCore
- ExpoModulesTestCore
- UMAppLoader
- ExpoTrackingTransparency (56.0.3):
- ExpoModulesCore
- - ExpoUI (56.0.4):
+ - ExpoUI (56.0.5):
- ExpoModulesCore
- ExpoModulesWorklets
- React-RCTFabric
@@ -352,7 +352,7 @@ PODS:
- ExpoModulesCore
- EXStructuredHeaders (56.0.0)
- EXStructuredHeaders/Tests (56.0.0)
- - EXUpdates (56.0.6):
+ - EXUpdates (56.0.7):
- boost
- DoubleConversion
- EASClient
@@ -386,7 +386,7 @@ PODS:
- ReactCommon/turbomodule/core
- SocketRocket
- Yoga
- - EXUpdates/Tests (56.0.6):
+ - EXUpdates/Tests (56.0.7):
- boost
- DoubleConversion
- EASClient
@@ -4640,14 +4640,14 @@ SPEC CHECKSUMS:
DoubleConversion: cb417026b2400c8f53ae97020b2be961b59470cb
EASClient: 2321f8d99fa86c710a6f68e017f3b54366baed9f
EXApplication: e6040c92edc5522accd62852342e6b14742d42c0
- EXConstants: cc547c6827ad7c335125b77ef0d34500600072dc
+ EXConstants: 6d77c642e750498fa02e16c9e3ce34a7e6629c9a
EXJSONUtils: dba2755f4e24009eaf87a876b2d615ea06c16e42
EXManifests: e20226d12c44cb2d27fca73c274287ff0012b40b
- Expo: d67adb443e0ad358fc5f26fd82cac2f53c94a182
- ExpoAsset: cd00f5c0f9004d9e502fa7d6c54a437ffe20cd94
- ExpoAudio: fc809158cb86bdad608e8a224331cfb5481d8ea3
- ExpoBackgroundFetch: fbe31df2735bd3d624175b31d6b849bec3a2a736
- ExpoBackgroundTask: fadd6970920cb7ca89a78693a7cd266687fb0d57
+ Expo: 829f9df462a7ecc2db322a715db99cfae7b9e19a
+ ExpoAsset: 966be429f5344096dc6e76c8c7d14d553b195e95
+ ExpoAudio: c4a6f9fd2e1d0b39c3bc0ff43c0f36c14a9741c3
+ ExpoBackgroundFetch: 2b1d9d1dd6a62dda793c74bd763dcb49b6a55524
+ ExpoBackgroundTask: 21a1701a082ff1501bdeba938d848786b9560d36
ExpoBattery: 4fbebca8ce0ee2bb4038efbcfa24d763012af07d
ExpoBlob: 3e896c97726abf49bdecf63151e09fb4f7e21195
ExpoBlur: caddd80171e5f8f3581ff3d865e99c6465047240
@@ -4668,45 +4668,45 @@ SPEC CHECKSUMS:
ExpoGlassEffect: 7d4233dc0727ee2b28dd757eda70e1b6abf662fd
ExpoHaptics: 89364cf3c3ca2cfd54cafed42f3be3169bab6d42
ExpoImage: 59f71ed6d030241ffadead114064cfd01bd0dc12
- ExpoImageManipulator: 6c489193ef8b16ef5c527206e052498d689817ac
- ExpoImagePicker: 08328e8c841e1e9d3a894bafe1ea51b97a9efcf0
+ ExpoImageManipulator: 4700b24856c5f7c20e31e1a191edb0c2d84b0110
+ ExpoImagePicker: e95eff5433e28baa37d7e8d105bfdcff91bfe49e
ExpoKeepAwake: 359c47a1d9ccc3a3c519bca6e39562cce230c5bb
ExpoLinearGradient: 16c2b9c6105444883d34958d573725de1293b8d0
- ExpoLinking: eafd5d612d940b353781d85b16a7326e96bfda97
+ ExpoLinking: 5fe73159a975396b5753a90dcd644f91d4997083
ExpoLocalAuthentication: 64e8c5756df07c8a89f078293ec17899c1325a43
ExpoLocalization: 74b7a2319781fd14f5db01e932c7c3a075ea1b4b
- ExpoLocation: bb6fe4f65be6eb26acb8661062ec6d2632395795
- ExpoLogBox: 349eb7ae84d0705e717736ab22c0fd8eaf060297
+ ExpoLocation: 42c1691e9485ca9cbcaf881063da470c4f956dfe
+ ExpoLogBox: 810821edcd35fa4c9347a891b9a4f70b24986d53
ExpoMailComposer: e202b670f62063851ed74c964034037312d523a8
ExpoMediaLibrary: ee2d74d5e52154305b8229dcb5c4319c84f30311
- ExpoModulesCore: 2a0440b73015179c83c0bd92e2ffdf8decb41c00
- ExpoModulesJSI: 0740aeb1d9d2d3a7e4cd3368b09835d59cba0eb6
+ ExpoModulesCore: 60cf0568f718671efd76a1ae18d9d11ee0fbdd85
+ ExpoModulesJSI: f672bac18356446b024588f7a77b364d80909e71
ExpoModulesTestCore: 5660ab6b5928747366d4946580622a578865696a
- ExpoModulesWorklets: f6674212fdcd312c11642b1e51b9433ab1940a2f
- ExpoModulesWorkletsAdapter: 23fa6f8b59e1096e35849bf4f13210640b896822
+ ExpoModulesWorklets: 8861dc33348d68f45da07f6b1ce36bbf7932ce34
+ ExpoModulesWorkletsAdapter: 89b494dacfec3d6f48f587fe6925a52d983f8d32
ExpoNetwork: 6c8e0cc425a2c7f6591fabcab16417506441242c
- ExpoNotifications: 64eaf693447432639bb5db20968cb8619af93bcf
+ ExpoNotifications: 95f3404429f5af67d9bc63f32c7dfd21ce973a15
ExpoPrint: 6b5bcac4492908b7e28144c2e7265c1c5ee4ade0
- ExpoRouter: 5687a490ecc753f030766efd86ea4647313218a9
+ ExpoRouter: c123a7005eba063f55190f233df555d78dcaf044
ExpoScreenCapture: f23a26d9fda8c42c77e7a818a1e20e3e8b94134b
ExpoScreenOrientation: 1e3a088b300c7f0d1520679a6c3660fc4738081a
ExpoSecureStore: 4d1c0303f8ead59766d7466c3c14d0ce4336fc0f
ExpoSensors: 4ed48ba1a8d48e236fd22a966b77498188f8f48c
- ExpoSharing: 6f6802ef169ebc3240bd97f3ad53be62caf63cd6
+ ExpoSharing: 69c9b71fde18b933f449d3ff04b3a94f54374848
ExpoSMS: 2cebfd889706da39a397d20c8a68abb0ce7f185d
ExpoSpeech: fe3706df8653ab8c16ff88251e33fab79b07a420
ExpoSQLite: 35cd83a1d83122736bf3f39e99020588a8b00848
ExpoStoreReview: f785057aececd9c63a113c69a82b491e5f90694e
ExpoSymbols: f83c91f2897d37102b98b9224c603095630be9d0
ExpoSystemUI: 6f9eddf66c31d074c402ba4a9e5cd2320edda37f
- ExpoTaskManager: 89039e1608d021a9eb382dc310c2bda012440b54
+ ExpoTaskManager: ab40f53c388e66b79927d8e12a575c5570dc5b2c
ExpoTrackingTransparency: dbdb87acf9ae2d85cb6c70f70a9d87d706949efd
- ExpoUI: c09f44682fed7c2be300e8efdb39349e03a71c62
+ ExpoUI: 4fba40237ef6d9f07b3c336920e962d5201aa017
ExpoVideo: fa20020308f9f8e3458c05c7216d139d47fc1b32
ExpoVideoThumbnails: 116c2563d2bd3a1e98326a267020e25fea8af79e
ExpoWebBrowser: fb9b5a94ebaa3483987f4acf4af6fd85c401df3e
EXStructuredHeaders: 9e89bcdd636ae2ecb59995cfba3230f5d7547c08
- EXUpdates: 1f6036532aa24c1f2cb9e758796c95622f8f9552
+ EXUpdates: 4e08f4e55a066911054d6bd42a93b6e829cc6940
EXUpdatesInterface: 25408a97d682355eb9fb37e5aa6e22caece1881f
fast_float: b32c788ed9c6a8c584d114d0047beda9664e7cc6
FBLazyVector: 473b935415b82ae4f7f9aa9d5b3378491143ccbf
@@ -4723,7 +4723,7 @@ SPEC CHECKSUMS:
GoogleAppMeasurement: 8a82b93a6400c8e6551c0bcd66a9177f2e067aed
GoogleDataTransport: aae35b7ea0c09004c3797d53c8c41f66f219d6a7
GoogleUtilities: 00c88b9a86066ef77f0da2fab05f65d7768ed8e1
- hermes-engine: 020d7dbf64ea2ac7f2dc43408d80cc6035c4b3e8
+ hermes-engine: b35a5dc1ffceda2d490f9e9db0decef19984d7dc
libavif: 5f8e715bea24debec477006f21ef9e95432e254d
libdav1d: 23581a4d8ec811ff171ed5e2e05cd27bad64c39f
libwebp: 02b23773aedb6ff1fd38cec7a77b81414c6842a8
diff --git a/apps/native-component-list/src/screens/UI/CommunitySliderScreen.tsx b/apps/native-component-list/src/screens/UI/CommunitySliderScreen.tsx
new file mode 100644
index 00000000000000..fb76b1ba01749f
--- /dev/null
+++ b/apps/native-component-list/src/screens/UI/CommunitySliderScreen.tsx
@@ -0,0 +1,210 @@
+import { Slider } from '@expo/ui/community/slider';
+import { useState } from 'react';
+import { Pressable, StyleSheet, Switch, Text, View } from 'react-native';
+
+import { Page } from '../../components/Page';
+
+const RANGES = [
+ { label: '0 – 1', min: 0, max: 1 },
+ { label: '0 – 100', min: 0, max: 100 },
+ { label: '-1 – 1', min: -1, max: 1 },
+] as const;
+
+const WIDTHS = [
+ { label: 'Auto', value: undefined },
+ { label: '240', value: 240 },
+] as const;
+
+// Step is range-relative so it stays meaningful when range changes.
+const STEPS = [
+ { label: 'Continuous', factor: 0 },
+ { label: '1/10', factor: 0.1 },
+ { label: '1/4', factor: 0.25 },
+] as const;
+
+const TINTS = [
+ { label: 'Default', min: undefined, max: undefined, thumb: undefined },
+ { label: 'Red', min: '#ef4444', max: '#fecaca', thumb: '#dc2626' },
+ { label: 'Blue', min: '#3b82f6', max: '#bfdbfe', thumb: '#1d4ed8' },
+] as const;
+
+export default function CommunitySliderScreen() {
+ const [rangeIndex, setRangeIndex] = useState(0);
+ const [widthIndex, setWidthIndex] = useState(0);
+ const [stepIndex, setStepIndex] = useState(0);
+ const [tintIndex, setTintIndex] = useState(0);
+ const [disabled, setDisabled] = useState(false);
+ const [inverted, setInverted] = useState(false);
+ const [limited, setLimited] = useState(false);
+ const [value, setValue] = useState(0.5);
+
+ const range = RANGES[rangeIndex];
+ const width = WIDTHS[widthIndex].value;
+ const step = STEPS[stepIndex].factor * (range.max - range.min);
+ const tint = TINTS[tintIndex];
+ // Limits clamp to the inner 60% of the range when enabled.
+ const span = range.max - range.min;
+ const lowerLimit = limited ? range.min + span * 0.2 : undefined;
+ const upperLimit = limited ? range.min + span * 0.8 : undefined;
+
+ const onSelectRange = (i: number) => {
+ setRangeIndex(i);
+ const next = RANGES[i];
+ setValue((next.min + next.max) / 2);
+ };
+
+ return (
+
+
+
+ {value.toFixed(3)}
+
+
+
+ r.label)}
+ index={rangeIndex}
+ onSelect={onSelectRange}
+ />
+ s.label)}
+ index={stepIndex}
+ onSelect={setStepIndex}
+ />
+ t.label)}
+ index={tintIndex}
+ onSelect={setTintIndex}
+ />
+ w.label)}
+ index={widthIndex}
+ onSelect={setWidthIndex}
+ />
+
+ Disabled
+
+
+
+ Inverted
+
+
+
+ Limits (inner 60%)
+
+
+
+
+ );
+}
+
+CommunitySliderScreen.navigationOptions = {
+ title: 'Community Slider',
+};
+
+function PillRow({
+ label,
+ options,
+ index,
+ onSelect,
+}: {
+ label: string;
+ options: readonly string[];
+ index: number;
+ onSelect: (i: number) => void;
+}) {
+ return (
+
+ {label}
+
+ {options.map((opt, i) => {
+ const selected = i === index;
+ return (
+ onSelect(i)}
+ style={[styles.pill, selected && styles.pillSelected]}>
+ {opt}
+
+ );
+ })}
+
+
+ );
+}
+
+const styles = StyleSheet.create({
+ preview: {
+ backgroundColor: '#f3f4f6',
+ borderRadius: 16,
+ padding: 20,
+ marginTop: 16,
+ gap: 12,
+ },
+ valueLabel: {
+ fontFamily: 'Menlo',
+ fontSize: 18,
+ color: '#111827',
+ textAlign: 'center',
+ },
+ controls: {
+ marginTop: 20,
+ gap: 12,
+ },
+ row: {
+ flexDirection: 'row',
+ alignItems: 'center',
+ justifyContent: 'space-between',
+ paddingVertical: 6,
+ },
+ rowLabel: {
+ fontSize: 15,
+ color: '#374151',
+ fontWeight: '500',
+ },
+ pillGroup: {
+ flexDirection: 'row',
+ backgroundColor: '#e5e7eb',
+ borderRadius: 999,
+ padding: 2,
+ },
+ pill: {
+ paddingHorizontal: 12,
+ paddingVertical: 6,
+ borderRadius: 999,
+ },
+ pillSelected: {
+ backgroundColor: '#ffffff',
+ shadowColor: '#000',
+ shadowOpacity: 0.08,
+ shadowRadius: 2,
+ shadowOffset: { width: 0, height: 1 },
+ elevation: 1,
+ },
+ pillText: {
+ fontSize: 13,
+ color: '#6b7280',
+ fontWeight: '500',
+ },
+ pillTextSelected: {
+ color: '#111827',
+ },
+});
diff --git a/apps/native-component-list/src/screens/UI/UIScreen.android.tsx b/apps/native-component-list/src/screens/UI/UIScreen.android.tsx
index 11432617c8fd68..efc07a47df3961 100644
--- a/apps/native-component-list/src/screens/UI/UIScreen.android.tsx
+++ b/apps/native-component-list/src/screens/UI/UIScreen.android.tsx
@@ -130,6 +130,14 @@ export const UIScreens = [
return optionalRequire(() => require('./CommunitySegmentedControlScreen'));
},
},
+ {
+ name: 'Community Slider replacement',
+ route: 'ui/community-slider',
+ options: {},
+ getComponent() {
+ return optionalRequire(() => require('./CommunitySliderScreen'));
+ },
+ },
{
name: 'Community MaskedView replacement',
route: 'ui/community-masked-view',
diff --git a/apps/native-component-list/src/screens/UI/UIScreen.ios.tsx b/apps/native-component-list/src/screens/UI/UIScreen.ios.tsx
index d0ef411e95ce9c..6f9c2d80194f9c 100644
--- a/apps/native-component-list/src/screens/UI/UIScreen.ios.tsx
+++ b/apps/native-component-list/src/screens/UI/UIScreen.ios.tsx
@@ -58,6 +58,14 @@ export const UIScreens = [
return optionalRequire(() => require('./CommunitySegmentedControlScreen'));
},
},
+ {
+ name: 'Community Slider replacement',
+ route: 'ui/community-slider',
+ options: {},
+ getComponent() {
+ return optionalRequire(() => require('./CommunitySliderScreen'));
+ },
+ },
{
name: 'Community MaskedView replacement',
route: 'ui/community-masked-view',
diff --git a/apps/native-component-list/src/screens/UI/UIScreen.tsx b/apps/native-component-list/src/screens/UI/UIScreen.tsx
index c4c62676d34e8b..6a0acbdc29685d 100644
--- a/apps/native-component-list/src/screens/UI/UIScreen.tsx
+++ b/apps/native-component-list/src/screens/UI/UIScreen.tsx
@@ -26,6 +26,14 @@ export const UIScreens = [
return optionalRequire(() => require('./CommunitySegmentedControlScreen'));
},
},
+ {
+ name: 'Community Slider replacement',
+ route: 'ui/community-slider',
+ options: {},
+ getComponent() {
+ return optionalRequire(() => require('./CommunitySliderScreen'));
+ },
+ },
];
export default function UIScreen() {
diff --git a/docs/pages/versions/unversioned/sdk/ui/drop-in-replacements/index.mdx b/docs/pages/versions/unversioned/sdk/ui/drop-in-replacements/index.mdx
index 76efc5d8b32ff3..fe16eee186bfd8 100644
--- a/docs/pages/versions/unversioned/sdk/ui/drop-in-replacements/index.mdx
+++ b/docs/pages/versions/unversioned/sdk/ui/drop-in-replacements/index.mdx
@@ -13,4 +13,5 @@ The following components provide API-compatible replacements for popular React N
- **[BottomSheet](bottomsheet)**: Compatible with `@gorhom/bottom-sheet`
- **[Picker](picker)**: Compatible with `@react-native-picker/picker`
- **[SegmentedControl](segmentedcontrol)**: Compatible with `@react-native-segmented-control/segmented-control`
+- **[Slider](slider)**: Compatible with `@react-native-community/slider`
- **[MaskedView](maskedview)**: Compatible with `@react-native-masked-view/masked-view`
diff --git a/docs/pages/versions/unversioned/sdk/ui/drop-in-replacements/slider.mdx b/docs/pages/versions/unversioned/sdk/ui/drop-in-replacements/slider.mdx
new file mode 100644
index 00000000000000..87e9a0a207ee1d
--- /dev/null
+++ b/docs/pages/versions/unversioned/sdk/ui/drop-in-replacements/slider.mdx
@@ -0,0 +1,56 @@
+---
+title: Slider
+description: A slider compatible with @react-native-community/slider.
+sourceCodeUrl: 'https://github.com/expo/expo/tree/main/packages/expo-ui'
+packageName: '@expo/ui'
+platforms: ['android', 'ios', 'web', 'expo-go']
+---
+
+import APISection from '~/components/plugins/APISection';
+import { APIInstallSection } from '~/components/plugins/InstallSection';
+
+A `Slider` component with an API compatible with [`@react-native-community/slider`](https://www.npmjs.com/package/@react-native-community/slider). It uses a Material 3 `Slider` on Android, a SwiftUI `Slider` on iOS, and a native `` element on web.
+
+Under the hood this component wraps the platform-specific `@expo/ui` primitives:
+
+- **Android**: [Jetpack Compose Slider](../jetpack-compose/slider)
+- **iOS**: [SwiftUI Slider](../swift-ui/slider)
+
+If you need lower-level control, use those primitives directly.
+
+## Installation
+
+
+
+## Migrating from `@react-native-community/slider`
+
+- Update the import from `import Slider from '@react-native-community/slider'` to `import Slider from '@expo/ui/community/slider'`.
+- `onSlidingStart`, `onSlidingComplete`, `tapToSeek`, `StepMarker`, `renderStepNumber`, `thumbImage`, `minimumTrackImage`, `maximumTrackImage`, `trackImage`, `accessibilityUnits`, `accessibilityIncrements`, `testID`, and `ref.updateValue` are not yet supported.
+- On iOS, `maximumTrackTintColor` and `thumbTintColor` have no visual effect — SwiftUI's `Slider` only exposes the minimum (active) track tint. `minimumTrackTintColor` works on both platforms.
+
+## Basic usage
+
+```tsx SliderExample.tsx
+import { useState } from 'react';
+import { Text, View } from 'react-native';
+import Slider from '@expo/ui/community/slider';
+
+export default function SliderExample() {
+ const [value, setValue] = useState(0.5);
+
+ return (
+
+
+ Value: {value.toFixed(3)}
+
+ );
+}
+```
+
+## API
+
+```tsx
+import Slider from '@expo/ui/community/slider';
+```
+
+
diff --git a/docs/pages/versions/v56.0.0/sdk/ui/drop-in-replacements/index.mdx b/docs/pages/versions/v56.0.0/sdk/ui/drop-in-replacements/index.mdx
index 56d4c0cd81827f..075b8d48004858 100644
--- a/docs/pages/versions/v56.0.0/sdk/ui/drop-in-replacements/index.mdx
+++ b/docs/pages/versions/v56.0.0/sdk/ui/drop-in-replacements/index.mdx
@@ -13,4 +13,5 @@ The following components provide API-compatible replacements for popular React N
- **[BottomSheet](bottomsheet)**: Compatible with `@gorhom/bottom-sheet`
- **[Picker](picker)**: Compatible with `@react-native-picker/picker`
- **[SegmentedControl](segmentedcontrol)**: Compatible with `@react-native-segmented-control/segmented-control`
+- **[Slider](slider)**: Compatible with `@react-native-community/slider`
- **[MaskedView](maskedview)**: Compatible with `@react-native-masked-view/masked-view`
diff --git a/docs/pages/versions/v56.0.0/sdk/ui/drop-in-replacements/slider.mdx b/docs/pages/versions/v56.0.0/sdk/ui/drop-in-replacements/slider.mdx
new file mode 100644
index 00000000000000..87e9a0a207ee1d
--- /dev/null
+++ b/docs/pages/versions/v56.0.0/sdk/ui/drop-in-replacements/slider.mdx
@@ -0,0 +1,56 @@
+---
+title: Slider
+description: A slider compatible with @react-native-community/slider.
+sourceCodeUrl: 'https://github.com/expo/expo/tree/main/packages/expo-ui'
+packageName: '@expo/ui'
+platforms: ['android', 'ios', 'web', 'expo-go']
+---
+
+import APISection from '~/components/plugins/APISection';
+import { APIInstallSection } from '~/components/plugins/InstallSection';
+
+A `Slider` component with an API compatible with [`@react-native-community/slider`](https://www.npmjs.com/package/@react-native-community/slider). It uses a Material 3 `Slider` on Android, a SwiftUI `Slider` on iOS, and a native `` element on web.
+
+Under the hood this component wraps the platform-specific `@expo/ui` primitives:
+
+- **Android**: [Jetpack Compose Slider](../jetpack-compose/slider)
+- **iOS**: [SwiftUI Slider](../swift-ui/slider)
+
+If you need lower-level control, use those primitives directly.
+
+## Installation
+
+
+
+## Migrating from `@react-native-community/slider`
+
+- Update the import from `import Slider from '@react-native-community/slider'` to `import Slider from '@expo/ui/community/slider'`.
+- `onSlidingStart`, `onSlidingComplete`, `tapToSeek`, `StepMarker`, `renderStepNumber`, `thumbImage`, `minimumTrackImage`, `maximumTrackImage`, `trackImage`, `accessibilityUnits`, `accessibilityIncrements`, `testID`, and `ref.updateValue` are not yet supported.
+- On iOS, `maximumTrackTintColor` and `thumbTintColor` have no visual effect — SwiftUI's `Slider` only exposes the minimum (active) track tint. `minimumTrackTintColor` works on both platforms.
+
+## Basic usage
+
+```tsx SliderExample.tsx
+import { useState } from 'react';
+import { Text, View } from 'react-native';
+import Slider from '@expo/ui/community/slider';
+
+export default function SliderExample() {
+ const [value, setValue] = useState(0.5);
+
+ return (
+
+
+ Value: {value.toFixed(3)}
+
+ );
+}
+```
+
+## API
+
+```tsx
+import Slider from '@expo/ui/community/slider';
+```
+
+
diff --git a/docs/pnpm-workspace.yaml b/docs/pnpm-workspace.yaml
index 820ca2a837417c..660cf63fa8f507 100644
--- a/docs/pnpm-workspace.yaml
+++ b/docs/pnpm-workspace.yaml
@@ -17,3 +17,11 @@ ignoredBuiltDependencies:
- '@fingerprintjs/fingerprintjs-pro-react'
- esbuild
- unrs-resolver
+
+# Reject package versions younger than 24 hours to reduce exposure to
+# supply-chain attacks via freshly published malicious versions. Matches the
+# root expo monorepo's gate.
+minimumReleaseAge: 1440
+
+minimumReleaseAgeExclude:
+ - '@expo/*'
diff --git a/docs/public/static/data/unversioned/expo-ui/community/slider.json b/docs/public/static/data/unversioned/expo-ui/community/slider.json
new file mode 100644
index 00000000000000..d215d1d5ace48a
--- /dev/null
+++ b/docs/public/static/data/unversioned/expo-ui/community/slider.json
@@ -0,0 +1 @@
+{"schemaVersion":"2.0","id":161,"name":"@expo/ui","variant":"project","kind":1,"flags":{},"children":[{"id":162,"name":"SliderProps","variant":"declaration","kind":2097152,"flags":{},"comment":{"summary":[{"kind":"text","text":"Props for the "},{"kind":"code","text":"`Slider`"},{"kind":"text","text":" community drop-in component.\nCompatible with "},{"kind":"code","text":"`@react-native-community/slider`"},{"kind":"text","text":"."}]},"children":[{"id":169,"name":"disabled","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"If true the user won't be able to move the slider."}],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"false"}]}]},"type":{"type":"intrinsic","name":"boolean"}},{"id":171,"name":"inverted","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Reverses the direction of the slider so the maximum value is on the\nleft and the minimum value is on the right."}],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"false"}]}]},"type":{"type":"intrinsic","name":"boolean"}},{"id":167,"name":"lowerLimit","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The lower limit value of the slider. The user won't be able to slide\nbelow this limit."}]},"type":{"type":"intrinsic","name":"number"}},{"id":173,"name":"maximumTrackTintColor","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Color of the track to the right of the thumb."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"android"}]}]},"type":{"type":"reference","target":{"packageName":"react-native","packagePath":"Libraries/StyleSheet/StyleSheet.d.ts","qualifiedName":"ColorValue"},"name":"ColorValue","package":"react-native"}},{"id":166,"name":"maximumValue","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Initial maximum value of the slider."}],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"1"}]}]},"type":{"type":"intrinsic","name":"number"}},{"id":172,"name":"minimumTrackTintColor","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Color of the track to the left of the thumb."}]},"type":{"type":"reference","target":{"packageName":"react-native","packagePath":"Libraries/StyleSheet/StyleSheet.d.ts","qualifiedName":"ColorValue"},"name":"ColorValue","package":"react-native"}},{"id":165,"name":"minimumValue","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Initial minimum value of the slider."}],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"0"}]}]},"type":{"type":"intrinsic","name":"number"}},{"id":175,"name":"onValueChange","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Callback continuously called while the user is dragging the slider."}]},"type":{"type":"reflection","declaration":{"id":176,"name":"__type","variant":"declaration","kind":65536,"flags":{},"signatures":[{"id":177,"name":"__type","variant":"signature","kind":4096,"flags":{},"parameters":[{"id":178,"name":"value","variant":"param","kind":32768,"flags":{},"type":{"type":"intrinsic","name":"number"}}],"type":{"type":"intrinsic","name":"void"}}]}}},{"id":170,"name":"step","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Step value of the slider. The value should be between 0 and\n(maximumValue - minimumValue). A value of 0 means continuous (no\nsnapping)."}],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"0"}]}]},"type":{"type":"intrinsic","name":"number"}},{"id":179,"name":"style","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Used to style and layout the Slider."}]},"type":{"type":"reference","target":{"packageName":"react-native","packagePath":"Libraries/StyleSheet/StyleSheet.d.ts","qualifiedName":"StyleProp"},"typeArguments":[{"type":"reference","target":{"packageName":"react-native","packagePath":"Libraries/StyleSheet/StyleSheetTypes.d.ts","qualifiedName":"ViewStyle"},"name":"ViewStyle","package":"react-native"}],"name":"StyleProp","package":"react-native"}},{"id":174,"name":"thumbTintColor","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Color of the thumb."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"android"}]}]},"type":{"type":"reference","target":{"packageName":"react-native","packagePath":"Libraries/StyleSheet/StyleSheet.d.ts","qualifiedName":"ColorValue"},"name":"ColorValue","package":"react-native"}},{"id":168,"name":"upperLimit","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The upper limit value of the slider. The user won't be able to slide\nabove this limit."}]},"type":{"type":"intrinsic","name":"number"}},{"id":164,"name":"value","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Initial / current value of the slider.\nBehaves like the community lib: passing a new value updates the thumb,\nbut live drag emits via "},{"kind":"code","text":"`onValueChange`"},{"kind":"text","text":" without needing external state."}],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"0"}]}]},"type":{"type":"intrinsic","name":"number"}}],"groups":[{"title":"Properties","children":[169,171,167,173,166,172,165,175,170,179,174,168,164]}]},{"id":180,"name":"Slider","variant":"declaration","kind":64,"flags":{},"children":[{"id":183,"name":"displayName","variant":"declaration","kind":1024,"flags":{},"type":{"type":"intrinsic","name":"string"}}],"groups":[{"title":"Properties","children":[183]}],"signatures":[{"id":181,"name":"Slider","variant":"signature","kind":4096,"flags":{},"comment":{"summary":[{"kind":"text","text":"A drop-in replacement for "},{"kind":"code","text":"`@react-native-community/slider`"},{"kind":"text","text":" on web.\nRenders a native HTML "},{"kind":"code","text":"``"},{"kind":"text","text":" element."}]},"parameters":[{"id":182,"name":"props","variant":"param","kind":32768,"flags":{},"type":{"type":"reference","target":162,"name":"SliderProps","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"}}]},{"id":184,"name":"default","variant":"reference","kind":4194304,"flags":{},"target":180}],"groups":[{"title":"Type Aliases","children":[162]},{"title":"Functions","children":[180]},{"title":"References","children":[184]}],"packageName":"@expo/ui","readme":[{"kind":"text","text":"# @expo/ui\n\nA collection of UI components by Expo."}],"symbolIdMap":{"161":{"packageName":"@expo/ui","packagePath":"src/community/slider/index.tsx","qualifiedName":""},"162":{"packageName":"@expo/ui","packagePath":"src/community/slider/types.tsx","qualifiedName":"SliderProps"},"164":{"packageName":"@expo/ui","packagePath":"src/community/slider/types.tsx","qualifiedName":"__type.value"},"165":{"packageName":"@expo/ui","packagePath":"src/community/slider/types.tsx","qualifiedName":"__type.minimumValue"},"166":{"packageName":"@expo/ui","packagePath":"src/community/slider/types.tsx","qualifiedName":"__type.maximumValue"},"167":{"packageName":"@expo/ui","packagePath":"src/community/slider/types.tsx","qualifiedName":"__type.lowerLimit"},"168":{"packageName":"@expo/ui","packagePath":"src/community/slider/types.tsx","qualifiedName":"__type.upperLimit"},"169":{"packageName":"@expo/ui","packagePath":"src/community/slider/types.tsx","qualifiedName":"__type.disabled"},"170":{"packageName":"@expo/ui","packagePath":"src/community/slider/types.tsx","qualifiedName":"__type.step"},"171":{"packageName":"@expo/ui","packagePath":"src/community/slider/types.tsx","qualifiedName":"__type.inverted"},"172":{"packageName":"@expo/ui","packagePath":"src/community/slider/types.tsx","qualifiedName":"__type.minimumTrackTintColor"},"173":{"packageName":"@expo/ui","packagePath":"src/community/slider/types.tsx","qualifiedName":"__type.maximumTrackTintColor"},"174":{"packageName":"@expo/ui","packagePath":"src/community/slider/types.tsx","qualifiedName":"__type.thumbTintColor"},"175":{"packageName":"@expo/ui","packagePath":"src/community/slider/types.tsx","qualifiedName":"__type.onValueChange"},"176":{"packageName":"@expo/ui","packagePath":"src/community/slider/types.tsx","qualifiedName":"__type"},"177":{"packageName":"@expo/ui","packagePath":"src/community/slider/types.tsx","qualifiedName":"__type"},"178":{"packageName":"@expo/ui","packagePath":"src/community/slider/types.tsx","qualifiedName":"value"},"179":{"packageName":"@expo/ui","packagePath":"src/community/slider/types.tsx","qualifiedName":"__type.style"},"180":{"packageName":"@expo/ui","packagePath":"src/community/slider/Slider.tsx","qualifiedName":"Slider"},"181":{"packageName":"@expo/ui","packagePath":"src/community/slider/Slider.tsx","qualifiedName":"Slider"},"182":{"packageName":"@expo/ui","packagePath":"src/community/slider/Slider.tsx","qualifiedName":"props"},"183":{"packageName":"@expo/ui","packagePath":"src/community/slider/Slider.tsx","qualifiedName":"Slider.displayName"},"184":{"packageName":"@expo/ui","packagePath":"src/community/slider/index.tsx","qualifiedName":"default"}},"files":{"entries":{"1":"packages/expo-ui/src/community/slider/index.tsx","2":"packages/expo-ui/README.md","3":"packages/expo-ui"},"reflections":{"1":161,"2":161,"3":161}}}
diff --git a/docs/public/static/data/unversioned/expo-ui/jetpack-compose/slider.json b/docs/public/static/data/unversioned/expo-ui/jetpack-compose/slider.json
index 043b0fd02fd4dc..284bfffc1cf57e 100644
--- a/docs/public/static/data/unversioned/expo-ui/jetpack-compose/slider.json
+++ b/docs/public/static/data/unversioned/expo-ui/jetpack-compose/slider.json
@@ -1 +1 @@
-{"schemaVersion":"2.0","name":"expo-ui/jetpack-compose/slider","variant":"project","kind":1,"children":[{"name":"SliderColors","variant":"declaration","kind":2097152,"comment":{"summary":[{"kind":"text","text":"Colors for slider elements. Maps directly to Material3's "},{"kind":"code","text":"`SliderDefaults.colors()`"},{"kind":"text","text":"."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"android"}]}]},"children":[{"name":"activeTickColor","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"reference","target":{"packageName":"react-native","packagePath":"Libraries/StyleSheet/StyleSheet.d.ts","qualifiedName":"ColorValue"},"name":"ColorValue","package":"react-native"}},{"name":"activeTrackColor","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"reference","target":{"packageName":"react-native","packagePath":"Libraries/StyleSheet/StyleSheet.d.ts","qualifiedName":"ColorValue"},"name":"ColorValue","package":"react-native"}},{"name":"inactiveTickColor","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"reference","target":{"packageName":"react-native","packagePath":"Libraries/StyleSheet/StyleSheet.d.ts","qualifiedName":"ColorValue"},"name":"ColorValue","package":"react-native"}},{"name":"inactiveTrackColor","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"reference","target":{"packageName":"react-native","packagePath":"Libraries/StyleSheet/StyleSheet.d.ts","qualifiedName":"ColorValue"},"name":"ColorValue","package":"react-native"}},{"name":"thumbColor","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"reference","target":{"packageName":"react-native","packagePath":"Libraries/StyleSheet/StyleSheet.d.ts","qualifiedName":"ColorValue"},"name":"ColorValue","package":"react-native"}}]},{"name":"SliderProps","variant":"declaration","kind":2097152,"children":[{"name":"children","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Slot children for custom thumb and track."}]},"type":{"type":"reference","target":{"packageName":"@types/react","packagePath":"index.d.ts","qualifiedName":"React.ReactNode"},"name":"React.ReactNode","package":"@types/react"}},{"name":"colors","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Colors for slider elements. Maps to Material3's "},{"kind":"code","text":"`SliderDefaults.colors()`"},{"kind":"text","text":"."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"android"}]}]},"type":{"type":"reference","name":"SliderColors","package":"@expo/ui"}},{"name":"enabled","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Whether the slider is enabled for user interaction."}],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"true"}]}]},"type":{"type":"intrinsic","name":"boolean"}},{"name":"max","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The maximum value of the slider. Updating this value does not trigger callbacks if the current value is above "},{"kind":"code","text":"`max`"},{"kind":"text","text":"."}],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"1"}]}]},"type":{"type":"intrinsic","name":"number"}},{"name":"min","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The minimum value of the slider. Updating this value does not trigger callbacks if the current value is below "},{"kind":"code","text":"`min`"},{"kind":"text","text":"."}],"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":"onValueChange","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Callback triggered on dragging along the slider."}]},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"parameters":[{"name":"value","variant":"param","kind":32768,"type":{"type":"intrinsic","name":"number"}}],"type":{"type":"intrinsic","name":"void"}}]}}},{"name":"onValueChangeFinished","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Callback triggered when the user finishes changing the value (for example, lifts a finger).\nMaps to Material3's "},{"kind":"code","text":"`onValueChangeFinished`"},{"kind":"text","text":"."}]},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"type":{"type":"intrinsic","name":"void"}}]}}},{"name":"steps","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The number of steps between the minimum and maximum values, "},{"kind":"code","text":"`0`"},{"kind":"text","text":" signifies infinite steps."}],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"0"}]}]},"type":{"type":"intrinsic","name":"number"}},{"name":"value","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The current value of the slider."}],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"0"}]}]},"type":{"type":"intrinsic","name":"number"}}]},{"name":"Slider","variant":"declaration","kind":64,"children":[{"name":"Thumb","variant":"declaration","kind":1024,"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"A custom thumb slot for "},{"kind":"code","text":"`Slider`"},{"kind":"text","text":".\nWrap any content to use as the slider's thumb indicator."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"android"}]}]},"parameters":[{"name":"props","variant":"param","kind":32768,"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"children","variant":"declaration","kind":1024,"type":{"type":"reference","target":{"packageName":"@types/react","packagePath":"index.d.ts","qualifiedName":"React.ReactNode"},"name":"ReactNode","package":"@types/react","qualifiedName":"React.ReactNode"}}]}}}],"type":{"type":"reference","target":{"packageName":"@types/react","packagePath":"jsx-runtime.d.ts","qualifiedName":"JSX.Element"},"name":"Element","package":"@types/react","qualifiedName":"JSX.Element"}}]}}},{"name":"Track","variant":"declaration","kind":1024,"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"A custom track slot for "},{"kind":"code","text":"`Slider`"},{"kind":"text","text":".\nWrap any content to use as the slider's track."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"android"}]}]},"parameters":[{"name":"props","variant":"param","kind":32768,"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"children","variant":"declaration","kind":1024,"type":{"type":"reference","target":{"packageName":"@types/react","packagePath":"index.d.ts","qualifiedName":"React.ReactNode"},"name":"ReactNode","package":"@types/react","qualifiedName":"React.ReactNode"}}]}}}],"type":{"type":"reference","target":{"packageName":"@types/react","packagePath":"jsx-runtime.d.ts","qualifiedName":"JSX.Element"},"name":"Element","package":"@types/react","qualifiedName":"JSX.Element"}}]}}}],"signatures":[{"name":"Slider","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"A slider component that wraps Material3's "},{"kind":"code","text":"`Slider`"},{"kind":"text","text":"."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"android"}]}]},"parameters":[{"name":"props","variant":"param","kind":32768,"type":{"type":"reference","name":"SliderProps","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
+{"schemaVersion":"2.0","name":"expo-ui/jetpack-compose/slider","variant":"project","kind":1,"children":[{"name":"SliderColors","variant":"declaration","kind":2097152,"comment":{"summary":[{"kind":"text","text":"Colors for slider elements. Maps directly to Material3's "},{"kind":"code","text":"`SliderDefaults.colors()`"},{"kind":"text","text":"."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"android"}]}]},"children":[{"name":"activeTickColor","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"reference","target":{"packageName":"react-native","packagePath":"Libraries/StyleSheet/StyleSheet.d.ts","qualifiedName":"ColorValue"},"name":"ColorValue","package":"react-native"}},{"name":"activeTrackColor","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"reference","target":{"packageName":"react-native","packagePath":"Libraries/StyleSheet/StyleSheet.d.ts","qualifiedName":"ColorValue"},"name":"ColorValue","package":"react-native"}},{"name":"inactiveTickColor","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"reference","target":{"packageName":"react-native","packagePath":"Libraries/StyleSheet/StyleSheet.d.ts","qualifiedName":"ColorValue"},"name":"ColorValue","package":"react-native"}},{"name":"inactiveTrackColor","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"reference","target":{"packageName":"react-native","packagePath":"Libraries/StyleSheet/StyleSheet.d.ts","qualifiedName":"ColorValue"},"name":"ColorValue","package":"react-native"}},{"name":"thumbColor","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"reference","target":{"packageName":"react-native","packagePath":"Libraries/StyleSheet/StyleSheet.d.ts","qualifiedName":"ColorValue"},"name":"ColorValue","package":"react-native"}}]},{"name":"SliderProps","variant":"declaration","kind":2097152,"children":[{"name":"children","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Slot children for custom thumb and track."}]},"type":{"type":"reference","target":{"packageName":"@types/react","packagePath":"index.d.ts","qualifiedName":"React.ReactNode"},"name":"React.ReactNode","package":"@types/react"}},{"name":"colors","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Colors for slider elements. Maps to Material3's "},{"kind":"code","text":"`SliderDefaults.colors()`"},{"kind":"text","text":"."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"android"}]}]},"type":{"type":"reference","name":"SliderColors","package":"@expo/ui"}},{"name":"enabled","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Whether the slider is enabled for user interaction."}],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"true"}]}]},"type":{"type":"intrinsic","name":"boolean"}},{"name":"lowerLimit","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Lower limit the user can drag the thumb to. The visible track still\nspans "},{"kind":"code","text":"`min..max`"},{"kind":"text","text":", but the thumb stops at "},{"kind":"code","text":"`lowerLimit`"},{"kind":"text","text":" during drag."}]},"type":{"type":"intrinsic","name":"number"}},{"name":"max","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The maximum value of the slider. Updating this value does not trigger callbacks if the current value is above "},{"kind":"code","text":"`max`"},{"kind":"text","text":"."}],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"1"}]}]},"type":{"type":"intrinsic","name":"number"}},{"name":"min","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The minimum value of the slider. Updating this value does not trigger callbacks if the current value is below "},{"kind":"code","text":"`min`"},{"kind":"text","text":"."}],"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":"onValueChange","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Callback triggered on dragging along the slider."}]},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"parameters":[{"name":"value","variant":"param","kind":32768,"type":{"type":"intrinsic","name":"number"}}],"type":{"type":"intrinsic","name":"void"}}]}}},{"name":"onValueChangeFinished","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Callback triggered when the user finishes changing the value (for example, lifts a finger).\nMaps to Material3's "},{"kind":"code","text":"`onValueChangeFinished`"},{"kind":"text","text":"."}]},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"type":{"type":"intrinsic","name":"void"}}]}}},{"name":"steps","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The number of steps between the minimum and maximum values, "},{"kind":"code","text":"`0`"},{"kind":"text","text":" signifies infinite steps."}],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"0"}]}]},"type":{"type":"intrinsic","name":"number"}},{"name":"upperLimit","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Upper limit the user can drag the thumb to. The visible track still\nspans "},{"kind":"code","text":"`min..max`"},{"kind":"text","text":", but the thumb stops at "},{"kind":"code","text":"`upperLimit`"},{"kind":"text","text":" during drag."}]},"type":{"type":"intrinsic","name":"number"}},{"name":"value","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The current value of the slider."}],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"0"}]}]},"type":{"type":"intrinsic","name":"number"}}]},{"name":"Slider","variant":"declaration","kind":64,"children":[{"name":"Thumb","variant":"declaration","kind":1024,"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"A custom thumb slot for "},{"kind":"code","text":"`Slider`"},{"kind":"text","text":".\nWrap any content to use as the slider's thumb indicator."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"android"}]}]},"parameters":[{"name":"props","variant":"param","kind":32768,"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"children","variant":"declaration","kind":1024,"type":{"type":"reference","target":{"packageName":"@types/react","packagePath":"index.d.ts","qualifiedName":"React.ReactNode"},"name":"ReactNode","package":"@types/react","qualifiedName":"React.ReactNode"}}]}}}],"type":{"type":"reference","target":{"packageName":"@types/react","packagePath":"jsx-runtime.d.ts","qualifiedName":"JSX.Element"},"name":"Element","package":"@types/react","qualifiedName":"JSX.Element"}}]}}},{"name":"Track","variant":"declaration","kind":1024,"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"A custom track slot for "},{"kind":"code","text":"`Slider`"},{"kind":"text","text":".\nWrap any content to use as the slider's track."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"android"}]}]},"parameters":[{"name":"props","variant":"param","kind":32768,"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"children","variant":"declaration","kind":1024,"type":{"type":"reference","target":{"packageName":"@types/react","packagePath":"index.d.ts","qualifiedName":"React.ReactNode"},"name":"ReactNode","package":"@types/react","qualifiedName":"React.ReactNode"}}]}}}],"type":{"type":"reference","target":{"packageName":"@types/react","packagePath":"jsx-runtime.d.ts","qualifiedName":"JSX.Element"},"name":"Element","package":"@types/react","qualifiedName":"JSX.Element"}}]}}}],"signatures":[{"name":"Slider","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"A slider component that wraps Material3's "},{"kind":"code","text":"`Slider`"},{"kind":"text","text":"."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"android"}]}]},"parameters":[{"name":"props","variant":"param","kind":32768,"type":{"type":"reference","name":"SliderProps","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/docs/public/static/data/unversioned/expo-ui/swift-ui/slider.json b/docs/public/static/data/unversioned/expo-ui/swift-ui/slider.json
index 35e2e1f9f9f5c2..2c653b1fa7f7bb 100644
--- a/docs/public/static/data/unversioned/expo-ui/swift-ui/slider.json
+++ b/docs/public/static/data/unversioned/expo-ui/swift-ui/slider.json
@@ -1 +1 @@
-{"schemaVersion":"2.0","name":"expo-ui/swift-ui/slider","variant":"project","kind":1,"children":[{"name":"SliderProps","variant":"declaration","kind":2097152,"type":{"type":"intersection","types":[{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"label","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"A label describing the slider's purpose."}]},"type":{"type":"reference","target":{"packageName":"@types/react","packagePath":"index.d.ts","qualifiedName":"React.ReactNode"},"name":"React.ReactNode","package":"@types/react"}},{"name":"max","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The maximum value of the slider. Updating this value does not trigger callbacks if the current value is above "},{"kind":"code","text":"`max`"},{"kind":"text","text":"."}]},"type":{"type":"intrinsic","name":"number"}},{"name":"maximumValueLabel","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"A label displayed at the maximum value position."}]},"type":{"type":"reference","target":{"packageName":"@types/react","packagePath":"index.d.ts","qualifiedName":"React.ReactNode"},"name":"React.ReactNode","package":"@types/react"}},{"name":"min","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The minimum value of the slider. Updating this value does not trigger callbacks if the current value is below "},{"kind":"code","text":"`min`"},{"kind":"text","text":"."}]},"type":{"type":"intrinsic","name":"number"}},{"name":"minimumValueLabel","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"A label displayed at the minimum value position."}]},"type":{"type":"reference","target":{"packageName":"@types/react","packagePath":"index.d.ts","qualifiedName":"React.ReactNode"},"name":"React.ReactNode","package":"@types/react"}},{"name":"onEditingChanged","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Callback triggered when the user starts or ends editing the slider."}]},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"parameters":[{"name":"isEditing","variant":"param","kind":32768,"type":{"type":"intrinsic","name":"boolean"}}],"type":{"type":"intrinsic","name":"void"}}]}}},{"name":"onValueChange","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Callback triggered on dragging along the slider."}]},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"parameters":[{"name":"value","variant":"param","kind":32768,"type":{"type":"intrinsic","name":"number"}}],"type":{"type":"intrinsic","name":"void"}}]}}},{"name":"step","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The step increment for the slider."}]},"type":{"type":"intrinsic","name":"number"}},{"name":"value","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The current value of the slider."}]},"type":{"type":"intrinsic","name":"number"}}]}},{"type":"reference","target":{"packageName":"@expo/ui","packagePath":"src/swift-ui/types.ts","qualifiedName":"CommonViewModifierProps"},"name":"CommonViewModifierProps","package":"@expo/ui"}]}},{"name":"Slider","variant":"declaration","kind":64,"signatures":[{"name":"Slider","variant":"signature","kind":4096,"parameters":[{"name":"props","variant":"param","kind":32768,"type":{"type":"reference","name":"SliderProps","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
+{"schemaVersion":"2.0","name":"expo-ui/swift-ui/slider","variant":"project","kind":1,"children":[{"name":"SliderProps","variant":"declaration","kind":2097152,"type":{"type":"intersection","types":[{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"label","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"A label describing the slider's purpose."}]},"type":{"type":"reference","target":{"packageName":"@types/react","packagePath":"index.d.ts","qualifiedName":"React.ReactNode"},"name":"React.ReactNode","package":"@types/react"}},{"name":"lowerLimit","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Lower limit the user can drag the thumb to. The visible track still\nspans "},{"kind":"code","text":"`min..max`"},{"kind":"text","text":", but the thumb stops at "},{"kind":"code","text":"`lowerLimit`"},{"kind":"text","text":" during drag."}]},"type":{"type":"intrinsic","name":"number"}},{"name":"max","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The maximum value of the slider. Updating this value does not trigger callbacks if the current value is above "},{"kind":"code","text":"`max`"},{"kind":"text","text":"."}]},"type":{"type":"intrinsic","name":"number"}},{"name":"maximumValueLabel","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"A label displayed at the maximum value position."}]},"type":{"type":"reference","target":{"packageName":"@types/react","packagePath":"index.d.ts","qualifiedName":"React.ReactNode"},"name":"React.ReactNode","package":"@types/react"}},{"name":"min","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The minimum value of the slider. Updating this value does not trigger callbacks if the current value is below "},{"kind":"code","text":"`min`"},{"kind":"text","text":"."}]},"type":{"type":"intrinsic","name":"number"}},{"name":"minimumValueLabel","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"A label displayed at the minimum value position."}]},"type":{"type":"reference","target":{"packageName":"@types/react","packagePath":"index.d.ts","qualifiedName":"React.ReactNode"},"name":"React.ReactNode","package":"@types/react"}},{"name":"onEditingChanged","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Callback triggered when the user starts or ends editing the slider."}]},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"parameters":[{"name":"isEditing","variant":"param","kind":32768,"type":{"type":"intrinsic","name":"boolean"}}],"type":{"type":"intrinsic","name":"void"}}]}}},{"name":"onValueChange","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Callback triggered on dragging along the slider."}]},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"parameters":[{"name":"value","variant":"param","kind":32768,"type":{"type":"intrinsic","name":"number"}}],"type":{"type":"intrinsic","name":"void"}}]}}},{"name":"step","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The step increment for the slider."}]},"type":{"type":"intrinsic","name":"number"}},{"name":"upperLimit","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Upper limit the user can drag the thumb to. The visible track still\nspans "},{"kind":"code","text":"`min..max`"},{"kind":"text","text":", but the thumb stops at "},{"kind":"code","text":"`upperLimit`"},{"kind":"text","text":" during drag."}]},"type":{"type":"intrinsic","name":"number"}},{"name":"value","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The current value of the slider."}]},"type":{"type":"intrinsic","name":"number"}}]}},{"type":"reference","target":{"packageName":"@expo/ui","packagePath":"src/swift-ui/types.ts","qualifiedName":"CommonViewModifierProps"},"name":"CommonViewModifierProps","package":"@expo/ui"}]}},{"name":"Slider","variant":"declaration","kind":64,"signatures":[{"name":"Slider","variant":"signature","kind":4096,"parameters":[{"name":"props","variant":"param","kind":32768,"type":{"type":"reference","name":"SliderProps","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/docs/public/static/data/unversioned/expo-ui/swift-ui/usenativestate.json b/docs/public/static/data/unversioned/expo-ui/swift-ui/usenativestate.json
index 4435fab90f13d2..722018908bdb4c 100644
--- a/docs/public/static/data/unversioned/expo-ui/swift-ui/usenativestate.json
+++ b/docs/public/static/data/unversioned/expo-ui/swift-ui/usenativestate.json
@@ -1 +1 @@
-{"schemaVersion":"2.0","name":"expo-ui/swift-ui/usenativestate","variant":"project","kind":1,"children":[{"name":"ObservableState","variant":"declaration","kind":2097152,"comment":{"summary":[{"kind":"text","text":"Observable state shared between JavaScript and native views (Jetpack Compose\non Android and SwiftUI on iOS)."}]},"typeParameters":[{"name":"T","variant":"typeParam","kind":131072}],"type":{"type":"intersection","types":[{"type":"reference","target":{"packageName":"expo-modules-core","packagePath":"src/SharedObject.ts","qualifiedName":"SharedObject"},"name":"SharedObject","package":"expo-modules-core"},{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"value","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"The current value. Reads are safe from any thread; prefer writing from a worklet\nso the update runs on the native UI thread. Updating state from the JS thread\nmight show a development warning."}]},"type":{"type":"reference","name":"T","package":"@expo/ui","refersToTypeParameter":true}}]}}]}},{"name":"useNativeState","variant":"declaration","kind":64,"signatures":[{"name":"useNativeState","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Creates an observable native state that is automatically cleaned up when the component unmounts."}]},"typeParameters":[{"name":"T","variant":"typeParam","kind":131072}],"parameters":[{"name":"initialValue","variant":"param","kind":32768,"type":{"type":"reference","name":"T","package":"@expo/ui","refersToTypeParameter":true}}],"type":{"type":"reference","typeArguments":[{"type":"reference","name":"T","package":"@expo/ui","refersToTypeParameter":true}],"name":"ObservableState","package":"@expo/ui"}}]}],"packageName":"@expo/ui"}
\ No newline at end of file
+{"schemaVersion":"2.0","name":"expo-ui/swift-ui/usenativestate","variant":"project","kind":1,"children":[{"name":"ObservableState","variant":"declaration","kind":2097152,"comment":{"summary":[{"kind":"text","text":"Observable state shared between JavaScript and native views (Jetpack Compose\non Android and SwiftUI on iOS)."}]},"typeParameters":[{"name":"T","variant":"typeParam","kind":131072}],"type":{"type":"intersection","types":[{"type":"reference","target":{"packageName":"expo-modules-core","packagePath":"src/SharedObject.ts","qualifiedName":"SharedObject"},"name":"SharedObject","package":"expo-modules-core"},{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"value","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"The current value. Reads are safe from any thread; prefer writing from a worklet\nso the update runs on the native UI thread. Updating state from the JS thread\nmight show a development warning."}]},"type":{"type":"reference","name":"T","package":"@expo/ui","refersToTypeParameter":true}}]}}]}},{"name":"useNativeState","variant":"declaration","kind":64,"signatures":[{"name":"useNativeState","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Creates an observable native state that is automatically cleaned up when the\ncomponent unmounts. "},{"kind":"code","text":"`initialValue`"},{"kind":"text","text":" is captured once on the first render"}]},"typeParameters":[{"name":"T","variant":"typeParam","kind":131072}],"parameters":[{"name":"initialValue","variant":"param","kind":32768,"type":{"type":"reference","name":"T","package":"@expo/ui","refersToTypeParameter":true}}],"type":{"type":"reference","typeArguments":[{"type":"reference","name":"T","package":"@expo/ui","refersToTypeParameter":true}],"name":"ObservableState","package":"@expo/ui"}}]}],"packageName":"@expo/ui"}
\ No newline at end of file
diff --git a/docs/public/static/data/v56.0.0/expo-ui/community/slider.json b/docs/public/static/data/v56.0.0/expo-ui/community/slider.json
new file mode 100644
index 00000000000000..a25dd08e25b992
--- /dev/null
+++ b/docs/public/static/data/v56.0.0/expo-ui/community/slider.json
@@ -0,0 +1 @@
+{"schemaVersion":"2.0","name":"expo-ui/community/slider","variant":"project","kind":1,"children":[{"name":"SliderProps","variant":"declaration","kind":2097152,"comment":{"summary":[{"kind":"text","text":"Props for the "},{"kind":"code","text":"`Slider`"},{"kind":"text","text":" community drop-in component.\nCompatible with "},{"kind":"code","text":"`@react-native-community/slider`"},{"kind":"text","text":"."}]},"children":[{"name":"disabled","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"If true the user won't be able to move the slider."}],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"false"}]}]},"type":{"type":"intrinsic","name":"boolean"}},{"name":"inverted","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Reverses the direction of the slider so the maximum value is on the\nleft and the minimum value is on the right."}],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"false"}]}]},"type":{"type":"intrinsic","name":"boolean"}},{"name":"lowerLimit","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The lower limit value of the slider. The user won't be able to slide\nbelow this limit."}]},"type":{"type":"intrinsic","name":"number"}},{"name":"maximumTrackTintColor","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Color of the track to the right of the thumb."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"android"}]}]},"type":{"type":"reference","target":{"packageName":"react-native","packagePath":"Libraries/StyleSheet/StyleSheet.d.ts","qualifiedName":"ColorValue"},"name":"ColorValue","package":"react-native"}},{"name":"maximumValue","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Initial maximum value of the slider."}],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"1"}]}]},"type":{"type":"intrinsic","name":"number"}},{"name":"minimumTrackTintColor","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Color of the track to the left of the thumb."}]},"type":{"type":"reference","target":{"packageName":"react-native","packagePath":"Libraries/StyleSheet/StyleSheet.d.ts","qualifiedName":"ColorValue"},"name":"ColorValue","package":"react-native"}},{"name":"minimumValue","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Initial minimum value of the slider."}],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"0"}]}]},"type":{"type":"intrinsic","name":"number"}},{"name":"onValueChange","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Callback continuously called while the user is dragging the slider."}]},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"parameters":[{"name":"value","variant":"param","kind":32768,"type":{"type":"intrinsic","name":"number"}}],"type":{"type":"intrinsic","name":"void"}}]}}},{"name":"step","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Step value of the slider. The value should be between 0 and\n(maximumValue - minimumValue). A value of 0 means continuous (no\nsnapping)."}],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"0"}]}]},"type":{"type":"intrinsic","name":"number"}},{"name":"style","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Used to style and layout the Slider."}]},"type":{"type":"reference","target":{"packageName":"react-native","packagePath":"Libraries/StyleSheet/StyleSheet.d.ts","qualifiedName":"StyleProp"},"typeArguments":[{"type":"reference","target":{"packageName":"react-native","packagePath":"Libraries/StyleSheet/StyleSheetTypes.d.ts","qualifiedName":"ViewStyle"},"name":"ViewStyle","package":"react-native"}],"name":"StyleProp","package":"react-native"}},{"name":"thumbTintColor","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Color of the thumb."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"android"}]}]},"type":{"type":"reference","target":{"packageName":"react-native","packagePath":"Libraries/StyleSheet/StyleSheet.d.ts","qualifiedName":"ColorValue"},"name":"ColorValue","package":"react-native"}},{"name":"upperLimit","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The upper limit value of the slider. The user won't be able to slide\nabove this limit."}]},"type":{"type":"intrinsic","name":"number"}},{"name":"value","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Initial / current value of the slider.\nBehaves like the community lib: passing a new value updates the thumb,\nbut live drag emits via "},{"kind":"code","text":"`onValueChange`"},{"kind":"text","text":" without needing external state."}],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"0"}]}]},"type":{"type":"intrinsic","name":"number"}}]},{"name":"Slider","variant":"declaration","kind":64,"children":[{"name":"displayName","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"string"}}],"signatures":[{"name":"Slider","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"A drop-in replacement for "},{"kind":"code","text":"`@react-native-community/slider`"},{"kind":"text","text":" on web.\nRenders a native HTML "},{"kind":"code","text":"``"},{"kind":"text","text":" element."}]},"parameters":[{"name":"props","variant":"param","kind":32768,"type":{"type":"reference","name":"SliderProps","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"}}]},{"name":"default","variant":"reference","kind":4194304}],"packageName":"@expo/ui"}
\ No newline at end of file
diff --git a/docs/public/static/data/v56.0.0/expo-ui/jetpack-compose/slider.json b/docs/public/static/data/v56.0.0/expo-ui/jetpack-compose/slider.json
index 043b0fd02fd4dc..284bfffc1cf57e 100644
--- a/docs/public/static/data/v56.0.0/expo-ui/jetpack-compose/slider.json
+++ b/docs/public/static/data/v56.0.0/expo-ui/jetpack-compose/slider.json
@@ -1 +1 @@
-{"schemaVersion":"2.0","name":"expo-ui/jetpack-compose/slider","variant":"project","kind":1,"children":[{"name":"SliderColors","variant":"declaration","kind":2097152,"comment":{"summary":[{"kind":"text","text":"Colors for slider elements. Maps directly to Material3's "},{"kind":"code","text":"`SliderDefaults.colors()`"},{"kind":"text","text":"."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"android"}]}]},"children":[{"name":"activeTickColor","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"reference","target":{"packageName":"react-native","packagePath":"Libraries/StyleSheet/StyleSheet.d.ts","qualifiedName":"ColorValue"},"name":"ColorValue","package":"react-native"}},{"name":"activeTrackColor","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"reference","target":{"packageName":"react-native","packagePath":"Libraries/StyleSheet/StyleSheet.d.ts","qualifiedName":"ColorValue"},"name":"ColorValue","package":"react-native"}},{"name":"inactiveTickColor","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"reference","target":{"packageName":"react-native","packagePath":"Libraries/StyleSheet/StyleSheet.d.ts","qualifiedName":"ColorValue"},"name":"ColorValue","package":"react-native"}},{"name":"inactiveTrackColor","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"reference","target":{"packageName":"react-native","packagePath":"Libraries/StyleSheet/StyleSheet.d.ts","qualifiedName":"ColorValue"},"name":"ColorValue","package":"react-native"}},{"name":"thumbColor","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"reference","target":{"packageName":"react-native","packagePath":"Libraries/StyleSheet/StyleSheet.d.ts","qualifiedName":"ColorValue"},"name":"ColorValue","package":"react-native"}}]},{"name":"SliderProps","variant":"declaration","kind":2097152,"children":[{"name":"children","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Slot children for custom thumb and track."}]},"type":{"type":"reference","target":{"packageName":"@types/react","packagePath":"index.d.ts","qualifiedName":"React.ReactNode"},"name":"React.ReactNode","package":"@types/react"}},{"name":"colors","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Colors for slider elements. Maps to Material3's "},{"kind":"code","text":"`SliderDefaults.colors()`"},{"kind":"text","text":"."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"android"}]}]},"type":{"type":"reference","name":"SliderColors","package":"@expo/ui"}},{"name":"enabled","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Whether the slider is enabled for user interaction."}],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"true"}]}]},"type":{"type":"intrinsic","name":"boolean"}},{"name":"max","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The maximum value of the slider. Updating this value does not trigger callbacks if the current value is above "},{"kind":"code","text":"`max`"},{"kind":"text","text":"."}],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"1"}]}]},"type":{"type":"intrinsic","name":"number"}},{"name":"min","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The minimum value of the slider. Updating this value does not trigger callbacks if the current value is below "},{"kind":"code","text":"`min`"},{"kind":"text","text":"."}],"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":"onValueChange","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Callback triggered on dragging along the slider."}]},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"parameters":[{"name":"value","variant":"param","kind":32768,"type":{"type":"intrinsic","name":"number"}}],"type":{"type":"intrinsic","name":"void"}}]}}},{"name":"onValueChangeFinished","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Callback triggered when the user finishes changing the value (for example, lifts a finger).\nMaps to Material3's "},{"kind":"code","text":"`onValueChangeFinished`"},{"kind":"text","text":"."}]},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"type":{"type":"intrinsic","name":"void"}}]}}},{"name":"steps","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The number of steps between the minimum and maximum values, "},{"kind":"code","text":"`0`"},{"kind":"text","text":" signifies infinite steps."}],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"0"}]}]},"type":{"type":"intrinsic","name":"number"}},{"name":"value","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The current value of the slider."}],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"0"}]}]},"type":{"type":"intrinsic","name":"number"}}]},{"name":"Slider","variant":"declaration","kind":64,"children":[{"name":"Thumb","variant":"declaration","kind":1024,"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"A custom thumb slot for "},{"kind":"code","text":"`Slider`"},{"kind":"text","text":".\nWrap any content to use as the slider's thumb indicator."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"android"}]}]},"parameters":[{"name":"props","variant":"param","kind":32768,"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"children","variant":"declaration","kind":1024,"type":{"type":"reference","target":{"packageName":"@types/react","packagePath":"index.d.ts","qualifiedName":"React.ReactNode"},"name":"ReactNode","package":"@types/react","qualifiedName":"React.ReactNode"}}]}}}],"type":{"type":"reference","target":{"packageName":"@types/react","packagePath":"jsx-runtime.d.ts","qualifiedName":"JSX.Element"},"name":"Element","package":"@types/react","qualifiedName":"JSX.Element"}}]}}},{"name":"Track","variant":"declaration","kind":1024,"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"A custom track slot for "},{"kind":"code","text":"`Slider`"},{"kind":"text","text":".\nWrap any content to use as the slider's track."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"android"}]}]},"parameters":[{"name":"props","variant":"param","kind":32768,"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"children","variant":"declaration","kind":1024,"type":{"type":"reference","target":{"packageName":"@types/react","packagePath":"index.d.ts","qualifiedName":"React.ReactNode"},"name":"ReactNode","package":"@types/react","qualifiedName":"React.ReactNode"}}]}}}],"type":{"type":"reference","target":{"packageName":"@types/react","packagePath":"jsx-runtime.d.ts","qualifiedName":"JSX.Element"},"name":"Element","package":"@types/react","qualifiedName":"JSX.Element"}}]}}}],"signatures":[{"name":"Slider","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"A slider component that wraps Material3's "},{"kind":"code","text":"`Slider`"},{"kind":"text","text":"."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"android"}]}]},"parameters":[{"name":"props","variant":"param","kind":32768,"type":{"type":"reference","name":"SliderProps","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
+{"schemaVersion":"2.0","name":"expo-ui/jetpack-compose/slider","variant":"project","kind":1,"children":[{"name":"SliderColors","variant":"declaration","kind":2097152,"comment":{"summary":[{"kind":"text","text":"Colors for slider elements. Maps directly to Material3's "},{"kind":"code","text":"`SliderDefaults.colors()`"},{"kind":"text","text":"."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"android"}]}]},"children":[{"name":"activeTickColor","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"reference","target":{"packageName":"react-native","packagePath":"Libraries/StyleSheet/StyleSheet.d.ts","qualifiedName":"ColorValue"},"name":"ColorValue","package":"react-native"}},{"name":"activeTrackColor","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"reference","target":{"packageName":"react-native","packagePath":"Libraries/StyleSheet/StyleSheet.d.ts","qualifiedName":"ColorValue"},"name":"ColorValue","package":"react-native"}},{"name":"inactiveTickColor","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"reference","target":{"packageName":"react-native","packagePath":"Libraries/StyleSheet/StyleSheet.d.ts","qualifiedName":"ColorValue"},"name":"ColorValue","package":"react-native"}},{"name":"inactiveTrackColor","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"reference","target":{"packageName":"react-native","packagePath":"Libraries/StyleSheet/StyleSheet.d.ts","qualifiedName":"ColorValue"},"name":"ColorValue","package":"react-native"}},{"name":"thumbColor","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"reference","target":{"packageName":"react-native","packagePath":"Libraries/StyleSheet/StyleSheet.d.ts","qualifiedName":"ColorValue"},"name":"ColorValue","package":"react-native"}}]},{"name":"SliderProps","variant":"declaration","kind":2097152,"children":[{"name":"children","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Slot children for custom thumb and track."}]},"type":{"type":"reference","target":{"packageName":"@types/react","packagePath":"index.d.ts","qualifiedName":"React.ReactNode"},"name":"React.ReactNode","package":"@types/react"}},{"name":"colors","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Colors for slider elements. Maps to Material3's "},{"kind":"code","text":"`SliderDefaults.colors()`"},{"kind":"text","text":"."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"android"}]}]},"type":{"type":"reference","name":"SliderColors","package":"@expo/ui"}},{"name":"enabled","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Whether the slider is enabled for user interaction."}],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"true"}]}]},"type":{"type":"intrinsic","name":"boolean"}},{"name":"lowerLimit","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Lower limit the user can drag the thumb to. The visible track still\nspans "},{"kind":"code","text":"`min..max`"},{"kind":"text","text":", but the thumb stops at "},{"kind":"code","text":"`lowerLimit`"},{"kind":"text","text":" during drag."}]},"type":{"type":"intrinsic","name":"number"}},{"name":"max","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The maximum value of the slider. Updating this value does not trigger callbacks if the current value is above "},{"kind":"code","text":"`max`"},{"kind":"text","text":"."}],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"1"}]}]},"type":{"type":"intrinsic","name":"number"}},{"name":"min","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The minimum value of the slider. Updating this value does not trigger callbacks if the current value is below "},{"kind":"code","text":"`min`"},{"kind":"text","text":"."}],"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":"onValueChange","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Callback triggered on dragging along the slider."}]},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"parameters":[{"name":"value","variant":"param","kind":32768,"type":{"type":"intrinsic","name":"number"}}],"type":{"type":"intrinsic","name":"void"}}]}}},{"name":"onValueChangeFinished","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Callback triggered when the user finishes changing the value (for example, lifts a finger).\nMaps to Material3's "},{"kind":"code","text":"`onValueChangeFinished`"},{"kind":"text","text":"."}]},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"type":{"type":"intrinsic","name":"void"}}]}}},{"name":"steps","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The number of steps between the minimum and maximum values, "},{"kind":"code","text":"`0`"},{"kind":"text","text":" signifies infinite steps."}],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"0"}]}]},"type":{"type":"intrinsic","name":"number"}},{"name":"upperLimit","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Upper limit the user can drag the thumb to. The visible track still\nspans "},{"kind":"code","text":"`min..max`"},{"kind":"text","text":", but the thumb stops at "},{"kind":"code","text":"`upperLimit`"},{"kind":"text","text":" during drag."}]},"type":{"type":"intrinsic","name":"number"}},{"name":"value","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The current value of the slider."}],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"0"}]}]},"type":{"type":"intrinsic","name":"number"}}]},{"name":"Slider","variant":"declaration","kind":64,"children":[{"name":"Thumb","variant":"declaration","kind":1024,"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"A custom thumb slot for "},{"kind":"code","text":"`Slider`"},{"kind":"text","text":".\nWrap any content to use as the slider's thumb indicator."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"android"}]}]},"parameters":[{"name":"props","variant":"param","kind":32768,"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"children","variant":"declaration","kind":1024,"type":{"type":"reference","target":{"packageName":"@types/react","packagePath":"index.d.ts","qualifiedName":"React.ReactNode"},"name":"ReactNode","package":"@types/react","qualifiedName":"React.ReactNode"}}]}}}],"type":{"type":"reference","target":{"packageName":"@types/react","packagePath":"jsx-runtime.d.ts","qualifiedName":"JSX.Element"},"name":"Element","package":"@types/react","qualifiedName":"JSX.Element"}}]}}},{"name":"Track","variant":"declaration","kind":1024,"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"A custom track slot for "},{"kind":"code","text":"`Slider`"},{"kind":"text","text":".\nWrap any content to use as the slider's track."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"android"}]}]},"parameters":[{"name":"props","variant":"param","kind":32768,"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"children","variant":"declaration","kind":1024,"type":{"type":"reference","target":{"packageName":"@types/react","packagePath":"index.d.ts","qualifiedName":"React.ReactNode"},"name":"ReactNode","package":"@types/react","qualifiedName":"React.ReactNode"}}]}}}],"type":{"type":"reference","target":{"packageName":"@types/react","packagePath":"jsx-runtime.d.ts","qualifiedName":"JSX.Element"},"name":"Element","package":"@types/react","qualifiedName":"JSX.Element"}}]}}}],"signatures":[{"name":"Slider","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"A slider component that wraps Material3's "},{"kind":"code","text":"`Slider`"},{"kind":"text","text":"."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"android"}]}]},"parameters":[{"name":"props","variant":"param","kind":32768,"type":{"type":"reference","name":"SliderProps","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/docs/public/static/data/v56.0.0/expo-ui/swift-ui/slider.json b/docs/public/static/data/v56.0.0/expo-ui/swift-ui/slider.json
index 35e2e1f9f9f5c2..2c653b1fa7f7bb 100644
--- a/docs/public/static/data/v56.0.0/expo-ui/swift-ui/slider.json
+++ b/docs/public/static/data/v56.0.0/expo-ui/swift-ui/slider.json
@@ -1 +1 @@
-{"schemaVersion":"2.0","name":"expo-ui/swift-ui/slider","variant":"project","kind":1,"children":[{"name":"SliderProps","variant":"declaration","kind":2097152,"type":{"type":"intersection","types":[{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"label","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"A label describing the slider's purpose."}]},"type":{"type":"reference","target":{"packageName":"@types/react","packagePath":"index.d.ts","qualifiedName":"React.ReactNode"},"name":"React.ReactNode","package":"@types/react"}},{"name":"max","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The maximum value of the slider. Updating this value does not trigger callbacks if the current value is above "},{"kind":"code","text":"`max`"},{"kind":"text","text":"."}]},"type":{"type":"intrinsic","name":"number"}},{"name":"maximumValueLabel","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"A label displayed at the maximum value position."}]},"type":{"type":"reference","target":{"packageName":"@types/react","packagePath":"index.d.ts","qualifiedName":"React.ReactNode"},"name":"React.ReactNode","package":"@types/react"}},{"name":"min","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The minimum value of the slider. Updating this value does not trigger callbacks if the current value is below "},{"kind":"code","text":"`min`"},{"kind":"text","text":"."}]},"type":{"type":"intrinsic","name":"number"}},{"name":"minimumValueLabel","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"A label displayed at the minimum value position."}]},"type":{"type":"reference","target":{"packageName":"@types/react","packagePath":"index.d.ts","qualifiedName":"React.ReactNode"},"name":"React.ReactNode","package":"@types/react"}},{"name":"onEditingChanged","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Callback triggered when the user starts or ends editing the slider."}]},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"parameters":[{"name":"isEditing","variant":"param","kind":32768,"type":{"type":"intrinsic","name":"boolean"}}],"type":{"type":"intrinsic","name":"void"}}]}}},{"name":"onValueChange","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Callback triggered on dragging along the slider."}]},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"parameters":[{"name":"value","variant":"param","kind":32768,"type":{"type":"intrinsic","name":"number"}}],"type":{"type":"intrinsic","name":"void"}}]}}},{"name":"step","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The step increment for the slider."}]},"type":{"type":"intrinsic","name":"number"}},{"name":"value","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The current value of the slider."}]},"type":{"type":"intrinsic","name":"number"}}]}},{"type":"reference","target":{"packageName":"@expo/ui","packagePath":"src/swift-ui/types.ts","qualifiedName":"CommonViewModifierProps"},"name":"CommonViewModifierProps","package":"@expo/ui"}]}},{"name":"Slider","variant":"declaration","kind":64,"signatures":[{"name":"Slider","variant":"signature","kind":4096,"parameters":[{"name":"props","variant":"param","kind":32768,"type":{"type":"reference","name":"SliderProps","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
+{"schemaVersion":"2.0","name":"expo-ui/swift-ui/slider","variant":"project","kind":1,"children":[{"name":"SliderProps","variant":"declaration","kind":2097152,"type":{"type":"intersection","types":[{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"label","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"A label describing the slider's purpose."}]},"type":{"type":"reference","target":{"packageName":"@types/react","packagePath":"index.d.ts","qualifiedName":"React.ReactNode"},"name":"React.ReactNode","package":"@types/react"}},{"name":"lowerLimit","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Lower limit the user can drag the thumb to. The visible track still\nspans "},{"kind":"code","text":"`min..max`"},{"kind":"text","text":", but the thumb stops at "},{"kind":"code","text":"`lowerLimit`"},{"kind":"text","text":" during drag."}]},"type":{"type":"intrinsic","name":"number"}},{"name":"max","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The maximum value of the slider. Updating this value does not trigger callbacks if the current value is above "},{"kind":"code","text":"`max`"},{"kind":"text","text":"."}]},"type":{"type":"intrinsic","name":"number"}},{"name":"maximumValueLabel","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"A label displayed at the maximum value position."}]},"type":{"type":"reference","target":{"packageName":"@types/react","packagePath":"index.d.ts","qualifiedName":"React.ReactNode"},"name":"React.ReactNode","package":"@types/react"}},{"name":"min","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The minimum value of the slider. Updating this value does not trigger callbacks if the current value is below "},{"kind":"code","text":"`min`"},{"kind":"text","text":"."}]},"type":{"type":"intrinsic","name":"number"}},{"name":"minimumValueLabel","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"A label displayed at the minimum value position."}]},"type":{"type":"reference","target":{"packageName":"@types/react","packagePath":"index.d.ts","qualifiedName":"React.ReactNode"},"name":"React.ReactNode","package":"@types/react"}},{"name":"onEditingChanged","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Callback triggered when the user starts or ends editing the slider."}]},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"parameters":[{"name":"isEditing","variant":"param","kind":32768,"type":{"type":"intrinsic","name":"boolean"}}],"type":{"type":"intrinsic","name":"void"}}]}}},{"name":"onValueChange","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Callback triggered on dragging along the slider."}]},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"parameters":[{"name":"value","variant":"param","kind":32768,"type":{"type":"intrinsic","name":"number"}}],"type":{"type":"intrinsic","name":"void"}}]}}},{"name":"step","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The step increment for the slider."}]},"type":{"type":"intrinsic","name":"number"}},{"name":"upperLimit","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Upper limit the user can drag the thumb to. The visible track still\nspans "},{"kind":"code","text":"`min..max`"},{"kind":"text","text":", but the thumb stops at "},{"kind":"code","text":"`upperLimit`"},{"kind":"text","text":" during drag."}]},"type":{"type":"intrinsic","name":"number"}},{"name":"value","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The current value of the slider."}]},"type":{"type":"intrinsic","name":"number"}}]}},{"type":"reference","target":{"packageName":"@expo/ui","packagePath":"src/swift-ui/types.ts","qualifiedName":"CommonViewModifierProps"},"name":"CommonViewModifierProps","package":"@expo/ui"}]}},{"name":"Slider","variant":"declaration","kind":64,"signatures":[{"name":"Slider","variant":"signature","kind":4096,"parameters":[{"name":"props","variant":"param","kind":32768,"type":{"type":"reference","name":"SliderProps","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/docs/public/static/data/v56.0.0/expo-ui/swift-ui/usenativestate.json b/docs/public/static/data/v56.0.0/expo-ui/swift-ui/usenativestate.json
index 4435fab90f13d2..722018908bdb4c 100644
--- a/docs/public/static/data/v56.0.0/expo-ui/swift-ui/usenativestate.json
+++ b/docs/public/static/data/v56.0.0/expo-ui/swift-ui/usenativestate.json
@@ -1 +1 @@
-{"schemaVersion":"2.0","name":"expo-ui/swift-ui/usenativestate","variant":"project","kind":1,"children":[{"name":"ObservableState","variant":"declaration","kind":2097152,"comment":{"summary":[{"kind":"text","text":"Observable state shared between JavaScript and native views (Jetpack Compose\non Android and SwiftUI on iOS)."}]},"typeParameters":[{"name":"T","variant":"typeParam","kind":131072}],"type":{"type":"intersection","types":[{"type":"reference","target":{"packageName":"expo-modules-core","packagePath":"src/SharedObject.ts","qualifiedName":"SharedObject"},"name":"SharedObject","package":"expo-modules-core"},{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"value","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"The current value. Reads are safe from any thread; prefer writing from a worklet\nso the update runs on the native UI thread. Updating state from the JS thread\nmight show a development warning."}]},"type":{"type":"reference","name":"T","package":"@expo/ui","refersToTypeParameter":true}}]}}]}},{"name":"useNativeState","variant":"declaration","kind":64,"signatures":[{"name":"useNativeState","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Creates an observable native state that is automatically cleaned up when the component unmounts."}]},"typeParameters":[{"name":"T","variant":"typeParam","kind":131072}],"parameters":[{"name":"initialValue","variant":"param","kind":32768,"type":{"type":"reference","name":"T","package":"@expo/ui","refersToTypeParameter":true}}],"type":{"type":"reference","typeArguments":[{"type":"reference","name":"T","package":"@expo/ui","refersToTypeParameter":true}],"name":"ObservableState","package":"@expo/ui"}}]}],"packageName":"@expo/ui"}
\ No newline at end of file
+{"schemaVersion":"2.0","name":"expo-ui/swift-ui/usenativestate","variant":"project","kind":1,"children":[{"name":"ObservableState","variant":"declaration","kind":2097152,"comment":{"summary":[{"kind":"text","text":"Observable state shared between JavaScript and native views (Jetpack Compose\non Android and SwiftUI on iOS)."}]},"typeParameters":[{"name":"T","variant":"typeParam","kind":131072}],"type":{"type":"intersection","types":[{"type":"reference","target":{"packageName":"expo-modules-core","packagePath":"src/SharedObject.ts","qualifiedName":"SharedObject"},"name":"SharedObject","package":"expo-modules-core"},{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"value","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"The current value. Reads are safe from any thread; prefer writing from a worklet\nso the update runs on the native UI thread. Updating state from the JS thread\nmight show a development warning."}]},"type":{"type":"reference","name":"T","package":"@expo/ui","refersToTypeParameter":true}}]}}]}},{"name":"useNativeState","variant":"declaration","kind":64,"signatures":[{"name":"useNativeState","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Creates an observable native state that is automatically cleaned up when the\ncomponent unmounts. "},{"kind":"code","text":"`initialValue`"},{"kind":"text","text":" is captured once on the first render"}]},"typeParameters":[{"name":"T","variant":"typeParam","kind":131072}],"parameters":[{"name":"initialValue","variant":"param","kind":32768,"type":{"type":"reference","name":"T","package":"@expo/ui","refersToTypeParameter":true}}],"type":{"type":"reference","typeArguments":[{"type":"reference","name":"T","package":"@expo/ui","refersToTypeParameter":true}],"name":"ObservableState","package":"@expo/ui"}}]}],"packageName":"@expo/ui"}
\ No newline at end of file
diff --git a/packages/@expo/cli/CHANGELOG.md b/packages/@expo/cli/CHANGELOG.md
index 3938996b3ff153..f6210a0a9d2697 100644
--- a/packages/@expo/cli/CHANGELOG.md
+++ b/packages/@expo/cli/CHANGELOG.md
@@ -8,6 +8,16 @@
### 🐛 Bug fixes
+### 💡 Others
+
+## 56.1.2 — 2026-05-12
+
+_This version does not introduce any user-facing changes._
+
+## 56.1.1 — 2026-05-11
+
+### 🐛 Bug fixes
+
- Fix regression hiding stderr output on fatal exit ([#45641](https://github.com/expo/expo/pull/45641) by [@kitten](https://github.com/kitten))
### 💡 Others
diff --git a/packages/@expo/cli/package.json b/packages/@expo/cli/package.json
index b1031c94cea024..a76463bca8ee0d 100644
--- a/packages/@expo/cli/package.json
+++ b/packages/@expo/cli/package.json
@@ -1,6 +1,6 @@
{
"name": "@expo/cli",
- "version": "56.1.0",
+ "version": "56.1.2",
"description": "The Expo CLI",
"main": "main.js",
"bin": {
@@ -55,18 +55,18 @@
"@expo/devcert": "^1.2.1",
"@expo/env": "workspace:~2.2.0",
"@expo/image-utils": "workspace:^0.9.2",
- "@expo/inline-modules": "workspace:^0.0.4",
+ "@expo/inline-modules": "workspace:^0.0.5",
"@expo/json-file": "workspace:^10.1.0",
- "@expo/log-box": "workspace:^56.0.6",
+ "@expo/log-box": "workspace:^56.0.7",
"@expo/metro": "~56.0.0",
- "@expo/metro-config": "workspace:~56.0.5",
- "@expo/metro-file-map": "workspace:^56.0.0",
+ "@expo/metro-config": "workspace:~56.0.6",
+ "@expo/metro-file-map": "workspace:^56.0.1",
"@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.4",
+ "@expo/prebuild-config": "workspace:^56.0.5",
"@expo/require-utils": "workspace:^56.1.0",
- "@expo/router-server": "workspace:^56.0.5",
+ "@expo/router-server": "workspace:^56.0.6",
"@expo/schema-utils": "workspace:^56.0.0",
"@expo/spawn-async": "^1.7.2",
"@expo/ws-tunnel": "^1.0.1",
diff --git a/packages/@expo/cli/src/start/server/middleware/ManifestMiddleware.ts b/packages/@expo/cli/src/start/server/middleware/ManifestMiddleware.ts
index 8b7f1e4ce8f346..1831900007d339 100644
--- a/packages/@expo/cli/src/start/server/middleware/ManifestMiddleware.ts
+++ b/packages/@expo/cli/src/start/server/middleware/ManifestMiddleware.ts
@@ -16,6 +16,7 @@ import { resolveGoogleServicesFile, resolveManifestAssets } from './resolveAsset
import type { RuntimePlatform } from './resolvePlatform';
import { parsePlatformHeader } from './resolvePlatform';
import type { ServerNext, ServerRequest, ServerResponse } from './server.types';
+import { getActorDisplayName, getUserAsync } from '../../../api/user/user';
import { isEnableHermesManaged } from '../../../export/exportHermes';
import * as Log from '../../../log';
import { env } from '../../../utils/env';
@@ -110,10 +111,15 @@ export abstract class ManifestMiddleware<
const isHermesEnabled = isEnableHermesManaged(projectConfig.exp, platform);
+ // Resolve the signed-in CLI user to pass through the manifest
+ const user = await getUserAsync();
+ const username = getActorDisplayName(user);
+
// Create the manifest and set fields within it
const expoGoConfig = this.getExpoGoConfig({
mainModuleName,
hostname,
+ username: username !== 'anonymous' ? username : undefined,
});
const hostUri = this.options.constructUrl({ scheme: '', hostname });
@@ -229,9 +235,11 @@ export abstract class ManifestMiddleware<
private getExpoGoConfig({
mainModuleName,
hostname,
+ username,
}: {
mainModuleName: string;
hostname?: string | null;
+ username?: string;
}): ExpoGoConfig {
return {
// localhost:8081
@@ -247,6 +255,8 @@ export abstract class ManifestMiddleware<
},
// Indicates the name of the main bundle.
mainModuleName,
+ // The signed-in CLI username, used by Expo Go to verify account match.
+ ...(username ? { username } : undefined),
};
}
diff --git a/packages/@expo/cli/src/start/server/middleware/__tests__/ExpoGoManifestHandlerMiddleware-test.ts b/packages/@expo/cli/src/start/server/middleware/__tests__/ExpoGoManifestHandlerMiddleware-test.ts
index 6c4f309b33dca2..43db75b388ea2f 100644
--- a/packages/@expo/cli/src/start/server/middleware/__tests__/ExpoGoManifestHandlerMiddleware-test.ts
+++ b/packages/@expo/cli/src/start/server/middleware/__tests__/ExpoGoManifestHandlerMiddleware-test.ts
@@ -198,7 +198,7 @@ describe('_getManifestResponseAsync', () => {
middleware._resolveProjectSettingsAsync = jest.fn(
async () =>
({
- expoGoConfig: {},
+ expoGoConfig: { username: 'wat' },
hostUri: 'https://localhost:8081',
bundleUrl: 'https://localhost:8081/bundle.js',
exp: {
@@ -264,7 +264,7 @@ describe('_getManifestResponseAsync', () => {
hostUri: 'https://localhost:8081',
slug: 'slug',
},
- expoGo: {},
+ expoGo: { username: 'wat' },
scopeKey: expect.stringMatching(/@anonymous\/.*/),
},
});
@@ -324,7 +324,7 @@ describe('_getManifestResponseAsync', () => {
hostUri: 'https://localhost:8081',
slug: 'slug',
},
- expoGo: {},
+ expoGo: { username: 'wat' },
scopeKey: expect.stringMatching(/@anonymous\/.*/),
},
});
@@ -391,7 +391,7 @@ describe('_getManifestResponseAsync', () => {
hostUri: 'https://localhost:8081',
slug: 'slug',
},
- expoGo: {},
+ expoGo: { username: 'wat' },
scopeKey: expect.stringMatching(/@anonymous\/.*/),
},
});
@@ -457,7 +457,7 @@ describe('_getManifestResponseAsync', () => {
projectId: 'projectId',
},
expoClient: expect.anything(),
- expoGo: {},
+ expoGo: { username: 'wat' },
scopeKey: expect.stringMatching(/@anonymous\/.*/),
},
});
@@ -505,7 +505,7 @@ describe('_getManifestResponseAsync', () => {
projectId: 'projectId',
},
expoClient: expect.anything(),
- expoGo: {},
+ expoGo: { username: 'wat' },
scopeKey: 'scope-key',
},
});
@@ -574,7 +574,7 @@ describe('_getManifestResponseAsync', () => {
projectId: 'projectId',
},
expoClient: expect.anything(),
- expoGo: {},
+ expoGo: { username: 'wat' },
scopeKey: expect.stringMatching(/@anonymous\/.*/),
},
});
@@ -636,7 +636,7 @@ describe('_getManifestResponseAsync', () => {
projectId: 'projectId',
},
expoClient: expect.anything(),
- expoGo: {},
+ expoGo: { username: 'wat' },
scopeKey: 'scope-key',
},
});
@@ -679,7 +679,7 @@ describe('_getManifestResponseAsync', () => {
projectId: 'projectId',
},
expoClient: expect.anything(),
- expoGo: {},
+ expoGo: { username: 'wat' },
scopeKey: expect.stringMatching(/@anonymous\/.*/),
},
});
@@ -719,7 +719,7 @@ describe('_getManifestResponseAsync', () => {
projectId: 'projectId',
},
expoClient: expect.anything(),
- expoGo: {},
+ expoGo: { username: 'wat' },
scopeKey: expect.stringMatching(/@anonymous\/.*/),
},
});
diff --git a/packages/@expo/config/src/Config.types.ts b/packages/@expo/config/src/Config.types.ts
index 51360aaa3ab004..d202d8c0540046 100644
--- a/packages/@expo/config/src/Config.types.ts
+++ b/packages/@expo/config/src/Config.types.ts
@@ -90,6 +90,7 @@ export type ExpoGoConfig = {
packagerOpts: {
[key: string]: any;
};
+ username?: string;
};
export type EASConfig = {
diff --git a/packages/@expo/inline-modules/package.json b/packages/@expo/inline-modules/package.json
index 420f34ebe4b8db..084f8244ce98bf 100644
--- a/packages/@expo/inline-modules/package.json
+++ b/packages/@expo/inline-modules/package.json
@@ -1,6 +1,6 @@
{
"name": "@expo/inline-modules",
- "version": "0.0.4",
+ "version": "0.0.5",
"description": "The Expo inline modules",
"main": "build/index.js",
"scripts": {
diff --git a/packages/@expo/local-build-cache-provider/CHANGELOG.md b/packages/@expo/local-build-cache-provider/CHANGELOG.md
index f2a8f20d91d6cb..458b3d5c62cf08 100644
--- a/packages/@expo/local-build-cache-provider/CHANGELOG.md
+++ b/packages/@expo/local-build-cache-provider/CHANGELOG.md
@@ -10,6 +10,10 @@
### 💡 Others
+## 56.0.3 — 2026-05-11
+
+_This version does not introduce any user-facing changes._
+
## 56.0.2 — 2026-05-06
_This version does not introduce any user-facing changes._
diff --git a/packages/@expo/local-build-cache-provider/package.json b/packages/@expo/local-build-cache-provider/package.json
index 00619d79e92b51..4d8da9b3060b09 100644
--- a/packages/@expo/local-build-cache-provider/package.json
+++ b/packages/@expo/local-build-cache-provider/package.json
@@ -1,6 +1,6 @@
{
"name": "@expo/local-build-cache-provider",
- "version": "56.0.2",
+ "version": "56.0.3",
"description": "Local build cache provider for Expo",
"main": "build/index.js",
"types": "build/index.d.ts",
diff --git a/packages/@expo/log-box/CHANGELOG.md b/packages/@expo/log-box/CHANGELOG.md
index 19f588a081afc6..67edc3b400937d 100644
--- a/packages/@expo/log-box/CHANGELOG.md
+++ b/packages/@expo/log-box/CHANGELOG.md
@@ -10,6 +10,10 @@
### 💡 Others
+## 56.0.7 — 2026-05-11
+
+_This version does not introduce any user-facing changes._
+
## 56.0.6 — 2026-05-08
### 🐛 Bug fixes
diff --git a/packages/@expo/log-box/android/build.gradle b/packages/@expo/log-box/android/build.gradle
index 8a5432869b34dd..f86270a6f106b0 100644
--- a/packages/@expo/log-box/android/build.gradle
+++ b/packages/@expo/log-box/android/build.gradle
@@ -6,7 +6,7 @@ plugins {
}
group = 'host.exp.exponent'
-version = '56.0.6'
+version = '56.0.7'
expoModule {
canBePublished false
@@ -18,7 +18,7 @@ android {
namespace "expo.modules.logbox"
defaultConfig {
versionCode 1
- versionName "56.0.6"
+ versionName "56.0.7"
buildConfigField "boolean", "EXPO_UNSTABLE_LOG_BOX", isEnabled ? "true" : "false"
}
diff --git a/packages/@expo/log-box/package.json b/packages/@expo/log-box/package.json
index 09d8d0fcfc77e9..885aaaacb95953 100644
--- a/packages/@expo/log-box/package.json
+++ b/packages/@expo/log-box/package.json
@@ -1,6 +1,6 @@
{
"name": "@expo/log-box",
- "version": "56.0.6",
+ "version": "56.0.7",
"main": "app/index.ts",
"scripts": {
"start": "expo start",
diff --git a/packages/@expo/metro-config/CHANGELOG.md b/packages/@expo/metro-config/CHANGELOG.md
index 4914fb46b1cf16..c9b553b1c3c2b8 100644
--- a/packages/@expo/metro-config/CHANGELOG.md
+++ b/packages/@expo/metro-config/CHANGELOG.md
@@ -4,14 +4,20 @@
### 🛠 Breaking changes
-- Replace source-map representation used internally, and source-map format returned by transformer, reducing peak and retained memory usage ([#45594](https://github.com/expo/expo/pull/45594) by [@kitten](https://github.com/kitten))
-
### 🎉 New features
### 🐛 Bug fixes
### 💡 Others
+## 56.0.6 — 2026-05-11
+
+### 🛠 Breaking changes
+
+- Replace source-map representation used internally, and source-map format returned by transformer, reducing peak and retained memory usage ([#45594](https://github.com/expo/expo/pull/45594) by [@kitten](https://github.com/kitten))
+
+### 💡 Others
+
- Bump to `postcss@^8.5.14` ([#45626](https://github.com/expo/expo/pull/45626) by [@kitten](https://github.com/kitten))
## 56.0.5 — 2026-05-08
diff --git a/packages/@expo/metro-config/package.json b/packages/@expo/metro-config/package.json
index 34e7a73f93a706..4a8113afce0fa7 100644
--- a/packages/@expo/metro-config/package.json
+++ b/packages/@expo/metro-config/package.json
@@ -1,6 +1,6 @@
{
"name": "@expo/metro-config",
- "version": "56.0.5",
+ "version": "56.0.6",
"description": "A Metro config for running React Native projects with the Metro bundler",
"main": "build/ExpoMetroConfig.js",
"types": "build/ExpoMetroConfig.d.ts",
diff --git a/packages/@expo/metro-file-map/CHANGELOG.md b/packages/@expo/metro-file-map/CHANGELOG.md
index 0ea8b81b9be6e3..a49e1cd1854e17 100644
--- a/packages/@expo/metro-file-map/CHANGELOG.md
+++ b/packages/@expo/metro-file-map/CHANGELOG.md
@@ -8,6 +8,12 @@
### 🐛 Bug fixes
+### 💡 Others
+
+## 56.0.1 — 2026-05-11
+
+### 🐛 Bug fixes
+
- Fix Windows path resolution for cross-device resolved paths ([#45648](https://github.com/expo/expo/pull/45648) by [@kitten](https://github.com/kitten))
### 💡 Others
diff --git a/packages/@expo/metro-file-map/package.json b/packages/@expo/metro-file-map/package.json
index 9829d7c3bfd5fa..811ad91d9f3602 100644
--- a/packages/@expo/metro-file-map/package.json
+++ b/packages/@expo/metro-file-map/package.json
@@ -1,6 +1,6 @@
{
"name": "@expo/metro-file-map",
- "version": "56.0.0",
+ "version": "56.0.1",
"description": "A metro-file-map fork for Expo used with the Metro bundler",
"main": "build/index.js",
"types": "build/index.d.ts",
diff --git a/packages/@expo/metro-runtime/CHANGELOG.md b/packages/@expo/metro-runtime/CHANGELOG.md
index c89e8cc0306899..8b4422ced6c509 100644
--- a/packages/@expo/metro-runtime/CHANGELOG.md
+++ b/packages/@expo/metro-runtime/CHANGELOG.md
@@ -10,6 +10,10 @@
### 💡 Others
+## 56.0.6 — 2026-05-12
+
+_This version does not introduce any user-facing changes._
+
## 56.0.5 — 2026-05-08
### 💡 Others
diff --git a/packages/@expo/metro-runtime/package.json b/packages/@expo/metro-runtime/package.json
index e80094d5f6d37b..e452ed3bf02e53 100644
--- a/packages/@expo/metro-runtime/package.json
+++ b/packages/@expo/metro-runtime/package.json
@@ -1,6 +1,6 @@
{
"name": "@expo/metro-runtime",
- "version": "56.0.5",
+ "version": "56.0.6",
"description": "Tools for making advanced Metro bundler features work",
"sideEffects": true,
"main": "src/index.ts",
@@ -38,7 +38,7 @@
"url": "https://github.com/expo/expo.git"
},
"peerDependencies": {
- "@expo/log-box": "workspace:^56.0.6",
+ "@expo/log-box": "workspace:^56.0.7",
"expo": "*",
"react": "*",
"react-dom": "*",
@@ -50,7 +50,7 @@
}
},
"dependencies": {
- "@expo/log-box": "workspace:^56.0.6",
+ "@expo/log-box": "workspace:^56.0.7",
"anser": "^1.4.9",
"stacktrace-parser": "^0.1.10",
"pretty-format": "^29.7.0",
diff --git a/packages/@expo/prebuild-config/CHANGELOG.md b/packages/@expo/prebuild-config/CHANGELOG.md
index 5fe8919ecb50f1..718b41e93742e4 100644
--- a/packages/@expo/prebuild-config/CHANGELOG.md
+++ b/packages/@expo/prebuild-config/CHANGELOG.md
@@ -10,6 +10,10 @@
### 💡 Others
+## 56.0.5 — 2026-05-11
+
+_This version does not introduce any user-facing changes._
+
## 56.0.4 — 2026-05-08
### 🐛 Bug fixes
diff --git a/packages/@expo/prebuild-config/package.json b/packages/@expo/prebuild-config/package.json
index 98a7955b72b1eb..0c5e82720b5829 100644
--- a/packages/@expo/prebuild-config/package.json
+++ b/packages/@expo/prebuild-config/package.json
@@ -1,6 +1,6 @@
{
"name": "@expo/prebuild-config",
- "version": "56.0.4",
+ "version": "56.0.5",
"description": "Get the prebuild config",
"main": "build/index.js",
"scripts": {
@@ -45,7 +45,7 @@
"@expo/image-utils": "workspace:^0.9.2",
"@expo/json-file": "workspace:^10.1.0",
"@react-native/normalize-colors": "0.85.3",
- "expo-modules-autolinking": "workspace:~56.0.3",
+ "expo-modules-autolinking": "workspace:~56.0.4",
"debug": "^4.3.1",
"resolve-from": "^5.0.0",
"semver": "^7.6.0"
diff --git a/packages/@expo/router-server/CHANGELOG.md b/packages/@expo/router-server/CHANGELOG.md
index 516f89658f763f..b38ee8c1e8212b 100644
--- a/packages/@expo/router-server/CHANGELOG.md
+++ b/packages/@expo/router-server/CHANGELOG.md
@@ -10,6 +10,10 @@
### 💡 Others
+## 56.0.6 — 2026-05-12
+
+_This version does not introduce any user-facing changes._
+
## 56.0.5 — 2026-05-08
_This version does not introduce any user-facing changes._
diff --git a/packages/@expo/router-server/package.json b/packages/@expo/router-server/package.json
index 34d973dc76a5bc..75113490893010 100644
--- a/packages/@expo/router-server/package.json
+++ b/packages/@expo/router-server/package.json
@@ -1,6 +1,6 @@
{
"name": "@expo/router-server",
- "version": "56.0.5",
+ "version": "56.0.6",
"description": "Expo Router is a file-based router for React Native and web applications.",
"author": "650 Industries, Inc.",
"license": "MIT",
@@ -34,9 +34,9 @@
"expo"
],
"peerDependencies": {
- "@expo/metro-runtime": "workspace:^56.0.5",
+ "@expo/metro-runtime": "workspace:^56.0.6",
"expo": "*",
- "expo-constants": "workspace:^56.0.6",
+ "expo-constants": "workspace:^56.0.7",
"expo-font": "workspace:^56.0.3",
"expo-router": "*",
"expo-server": "workspace:^56.0.0",
diff --git a/packages/babel-preset-expo/CHANGELOG.md b/packages/babel-preset-expo/CHANGELOG.md
index 244d05ebf76695..74ab564b9f202e 100644
--- a/packages/babel-preset-expo/CHANGELOG.md
+++ b/packages/babel-preset-expo/CHANGELOG.md
@@ -8,12 +8,16 @@
### 🐛 Bug fixes
+### 💡 Others
+
+## 56.0.6 — 2026-05-11
+
+### 🐛 Bug fixes
+
- Apply fix-up transform for Hermes v1 250829098 resolving undefined for async arrow functions with non-simple params ([#45601](https://github.com/expo/expo/pull/45601) by [@kitten](https://github.com/kitten))
- Apply fix-up transform for Hermes v1 250829098 misdeclaring classes in finally blocks ([#45601](https://github.com/expo/expo/pull/45601) by [@kitten](https://github.com/kitten))
- Apply fix-up transform for Hermes v1 250829098 mishandling super.prop accesses in computed object property methods ([#45601](https://github.com/expo/expo/pull/45601) by [@kitten](https://github.com/kitten))
-### 💡 Others
-
## 56.0.5 — 2026-05-08
_This version does not introduce any user-facing changes._
diff --git a/packages/babel-preset-expo/package.json b/packages/babel-preset-expo/package.json
index be9c1bfc291fb1..d55693e4186907 100644
--- a/packages/babel-preset-expo/package.json
+++ b/packages/babel-preset-expo/package.json
@@ -1,6 +1,6 @@
{
"name": "babel-preset-expo",
- "version": "56.0.5",
+ "version": "56.0.6",
"description": "The Babel preset for Expo projects",
"main": "build/index.js",
"files": [
@@ -41,7 +41,7 @@
"peerDependencies": {
"@babel/runtime": "^7.20.0",
"expo": "*",
- "expo-widgets": "workspace:^56.0.5",
+ "expo-widgets": "workspace:^56.0.6",
"react-refresh": ">=0.14.0 <1.0.0"
},
"peerDependenciesMeta": {
diff --git a/packages/expo-app-metrics/package.json b/packages/expo-app-metrics/package.json
index 7a5abee43c0fb8..fafb1665bbf5e3 100644
--- a/packages/expo-app-metrics/package.json
+++ b/packages/expo-app-metrics/package.json
@@ -1,7 +1,7 @@
{
"name": "expo-app-metrics",
"title": "Expo App Metrics",
- "version": "56.0.5",
+ "version": "56.0.6",
"description": "Expo module that collects app startup, frame rate, memory, and session metrics",
"main": "src/index.ts",
"types": "build/index.d.ts",
diff --git a/packages/expo-asset/CHANGELOG.md b/packages/expo-asset/CHANGELOG.md
index 61d735ee1d9acd..54ceab88e61f54 100644
--- a/packages/expo-asset/CHANGELOG.md
+++ b/packages/expo-asset/CHANGELOG.md
@@ -10,6 +10,10 @@
### 💡 Others
+## 56.0.7 — 2026-05-11
+
+_This version does not introduce any user-facing changes._
+
## 56.0.6 — 2026-05-08
_This version does not introduce any user-facing changes._
diff --git a/packages/expo-asset/android/build.gradle b/packages/expo-asset/android/build.gradle
index 891604e6dc3775..fa9fbd01709e14 100644
--- a/packages/expo-asset/android/build.gradle
+++ b/packages/expo-asset/android/build.gradle
@@ -4,13 +4,13 @@ plugins {
}
group = 'expo.modules.asset'
-version = '56.0.6'
+version = '56.0.7'
android {
namespace "expo.modules.asset"
defaultConfig {
versionCode 1
- versionName "56.0.6"
+ versionName "56.0.7"
}
}
diff --git a/packages/expo-asset/package.json b/packages/expo-asset/package.json
index b9367b578e4ef0..47ed75f8a02add 100644
--- a/packages/expo-asset/package.json
+++ b/packages/expo-asset/package.json
@@ -1,6 +1,6 @@
{
"name": "expo-asset",
- "version": "56.0.6",
+ "version": "56.0.7",
"description": "An Expo universal module to download assets and pass them into other APIs",
"main": "build/index.js",
"types": "build/index.d.ts",
@@ -49,7 +49,7 @@
},
"dependencies": {
"@expo/image-utils": "workspace:^0.9.2",
- "expo-constants": "workspace:~56.0.6"
+ "expo-constants": "workspace:~56.0.7"
},
"devDependencies": {
"@testing-library/react-native": "^13.3.0",
diff --git a/packages/expo-audio/CHANGELOG.md b/packages/expo-audio/CHANGELOG.md
index a2d1ccc4a89863..9aa465034bb9dc 100644
--- a/packages/expo-audio/CHANGELOG.md
+++ b/packages/expo-audio/CHANGELOG.md
@@ -10,6 +10,10 @@
### 💡 Others
+## 56.0.4 — 2026-05-11
+
+_This version does not introduce any user-facing changes._
+
## 56.0.3 — 2026-05-06
_This version does not introduce any user-facing changes._
diff --git a/packages/expo-audio/android/build.gradle b/packages/expo-audio/android/build.gradle
index 261a892d4ea9e6..d401690f6c401a 100644
--- a/packages/expo-audio/android/build.gradle
+++ b/packages/expo-audio/android/build.gradle
@@ -4,13 +4,13 @@ plugins {
}
group = 'expo.modules.audio'
-version = '56.0.3'
+version = '56.0.4'
android {
namespace "expo.modules.audio"
defaultConfig {
versionCode 1
- versionName "56.0.3"
+ versionName "56.0.4"
}
compileOptions {
diff --git a/packages/expo-audio/package.json b/packages/expo-audio/package.json
index cde03e5d99c13d..b7ec6591427fa4 100644
--- a/packages/expo-audio/package.json
+++ b/packages/expo-audio/package.json
@@ -1,7 +1,7 @@
{
"name": "expo-audio",
"title": "Expo Audio",
- "version": "56.0.3",
+ "version": "56.0.4",
"description": "A cross-platform audio library for React Native and Expo apps.",
"main": "build/index.js",
"types": "build/index.d.ts",
diff --git a/packages/expo-auth-session/CHANGELOG.md b/packages/expo-auth-session/CHANGELOG.md
index 3d80227303eb23..4238dd48048ed8 100644
--- a/packages/expo-auth-session/CHANGELOG.md
+++ b/packages/expo-auth-session/CHANGELOG.md
@@ -10,6 +10,10 @@
### 💡 Others
+## 56.0.5 — 2026-05-12
+
+_This version does not introduce any user-facing changes._
+
## 56.0.4 — 2026-05-08
_This version does not introduce any user-facing changes._
diff --git a/packages/expo-auth-session/package.json b/packages/expo-auth-session/package.json
index 580a3bdbca2fd3..839c25a4df2925 100644
--- a/packages/expo-auth-session/package.json
+++ b/packages/expo-auth-session/package.json
@@ -1,6 +1,6 @@
{
"name": "expo-auth-session",
- "version": "56.0.4",
+ "version": "56.0.5",
"description": "Expo module for browser-based authentication",
"main": "build/index.js",
"types": "build/index.d.ts",
@@ -34,9 +34,9 @@
"homepage": "https://docs.expo.dev/versions/latest/sdk/auth-session",
"dependencies": {
"expo-application": "workspace:~56.0.3",
- "expo-constants": "workspace:~56.0.6",
+ "expo-constants": "workspace:~56.0.7",
"expo-crypto": "workspace:~56.0.3",
- "expo-linking": "workspace:~56.0.4",
+ "expo-linking": "workspace:~56.0.5",
"expo-web-browser": "workspace:~56.0.4",
"invariant": "^2.2.4"
},
diff --git a/packages/expo-background-fetch/CHANGELOG.md b/packages/expo-background-fetch/CHANGELOG.md
index d12ad3fb523f61..bb8c7778afde62 100644
--- a/packages/expo-background-fetch/CHANGELOG.md
+++ b/packages/expo-background-fetch/CHANGELOG.md
@@ -10,6 +10,10 @@
### 💡 Others
+## 56.0.6 — 2026-05-11
+
+_This version does not introduce any user-facing changes._
+
## 56.0.5 — 2026-05-08
_This version does not introduce any user-facing changes._
diff --git a/packages/expo-background-fetch/android/build.gradle b/packages/expo-background-fetch/android/build.gradle
index 8c6f0aedbeab67..48dfb9f9b63886 100644
--- a/packages/expo-background-fetch/android/build.gradle
+++ b/packages/expo-background-fetch/android/build.gradle
@@ -4,13 +4,13 @@ plugins {
}
group = 'host.exp.exponent'
-version = '56.0.5'
+version = '56.0.6'
android {
namespace "expo.modules.backgroundfetch"
defaultConfig {
versionCode 23
- versionName "56.0.5"
+ versionName "56.0.6"
consumerProguardFiles("proguard-rules.pro")
}
}
diff --git a/packages/expo-background-fetch/package.json b/packages/expo-background-fetch/package.json
index 0b7753e8850aff..1cce5d313719aa 100644
--- a/packages/expo-background-fetch/package.json
+++ b/packages/expo-background-fetch/package.json
@@ -1,6 +1,6 @@
{
"name": "expo-background-fetch",
- "version": "56.0.5",
+ "version": "56.0.6",
"description": "Expo universal module for BackgroundFetch API",
"main": "build/BackgroundFetch.js",
"types": "build/BackgroundFetch.d.ts",
@@ -32,7 +32,7 @@
"license": "MIT",
"homepage": "https://docs.expo.dev/versions/latest/sdk/background-fetch/",
"dependencies": {
- "expo-task-manager": "workspace:~56.0.5"
+ "expo-task-manager": "workspace:~56.0.6"
},
"devDependencies": {
"@types/node": "^22.14.0",
diff --git a/packages/expo-background-task/CHANGELOG.md b/packages/expo-background-task/CHANGELOG.md
index 0bc547995eb9ea..94ac080d91f1b6 100644
--- a/packages/expo-background-task/CHANGELOG.md
+++ b/packages/expo-background-task/CHANGELOG.md
@@ -10,6 +10,10 @@
### 💡 Others
+## 56.0.6 — 2026-05-11
+
+_This version does not introduce any user-facing changes._
+
## 56.0.5 — 2026-05-08
_This version does not introduce any user-facing changes._
diff --git a/packages/expo-background-task/android/build.gradle b/packages/expo-background-task/android/build.gradle
index 87764e49216628..da979b377ff85c 100644
--- a/packages/expo-background-task/android/build.gradle
+++ b/packages/expo-background-task/android/build.gradle
@@ -4,13 +4,13 @@ plugins {
}
group = 'host.exp.exponent'
-version = '56.0.5'
+version = '56.0.6'
android {
namespace "expo.modules.backgroundtask"
defaultConfig {
versionCode 23
- versionName "56.0.5"
+ versionName "56.0.6"
consumerProguardFiles("proguard-rules.pro")
}
}
diff --git a/packages/expo-background-task/package.json b/packages/expo-background-task/package.json
index 3a8d5e2d188fd3..06c17cc569016c 100644
--- a/packages/expo-background-task/package.json
+++ b/packages/expo-background-task/package.json
@@ -1,6 +1,6 @@
{
"name": "expo-background-task",
- "version": "56.0.5",
+ "version": "56.0.6",
"description": "Expo Android and iOS module for Background Task APIs",
"main": "build/BackgroundTask.js",
"types": "build/BackgroundTask.d.ts",
@@ -31,7 +31,7 @@
"license": "MIT",
"homepage": "https://docs.expo.dev/versions/latest/sdk/background-task/",
"dependencies": {
- "expo-task-manager": "workspace:~56.0.5"
+ "expo-task-manager": "workspace:~56.0.6"
},
"devDependencies": {
"expo": "workspace:*",
diff --git a/packages/expo-brownfield/CHANGELOG.md b/packages/expo-brownfield/CHANGELOG.md
index 18bc5f7e39e444..eaa0a2ccae8f28 100644
--- a/packages/expo-brownfield/CHANGELOG.md
+++ b/packages/expo-brownfield/CHANGELOG.md
@@ -8,10 +8,14 @@
### 🐛 Bug fixes
-- Fix reading updates app.manifest and meta-data tags ([#45655](https://github.com/expo/expo/pull/45655) by [@gabrieldonadel](https://github.com/gabrieldonadel))
-
### 💡 Others
+## 56.0.6 — 2026-05-11
+
+### 🐛 Bug fixes
+
+- Fix reading updates app.manifest and meta-data tags ([#45655](https://github.com/expo/expo/pull/45655) by [@gabrieldonadel](https://github.com/gabrieldonadel))
+
## 56.0.5 — 2026-05-08
_This version does not introduce any user-facing changes._
diff --git a/packages/expo-brownfield/android/build.gradle b/packages/expo-brownfield/android/build.gradle
index c6d546eafb4583..78fbecd568a507 100644
--- a/packages/expo-brownfield/android/build.gradle
+++ b/packages/expo-brownfield/android/build.gradle
@@ -4,7 +4,7 @@ plugins {
}
group = 'expo.modules.brownfield'
-version = '56.0.5'
+version = '56.0.6'
expoModule {
canBePublished false
@@ -14,7 +14,7 @@ android {
namespace "expo.modules.brownfield"
defaultConfig {
versionCode 1
- versionName '56.0.5'
+ versionName '56.0.6'
}
}
diff --git a/packages/expo-brownfield/package.json b/packages/expo-brownfield/package.json
index 5807bbd1f5469d..ca95b10d7fa10c 100644
--- a/packages/expo-brownfield/package.json
+++ b/packages/expo-brownfield/package.json
@@ -1,6 +1,6 @@
{
"name": "expo-brownfield",
- "version": "56.0.5",
+ "version": "56.0.6",
"description": "Toolkit and APIs for adding brownfield setup to Expo projects",
"main": "./build/index.js",
"types": "./build/index.d.ts",
@@ -53,7 +53,7 @@
"chalk": "^4.1.2",
"commander": "^14.0.3",
"diff": "^5.2.0",
- "expo-build-properties": "workspace:~56.0.5",
+ "expo-build-properties": "workspace:~56.0.6",
"expo-manifests": "workspace:~56.0.1",
"ora": "^5.4.1",
"prompts": "^2.4.2"
diff --git a/packages/expo-build-properties/CHANGELOG.md b/packages/expo-build-properties/CHANGELOG.md
index 89ea50235ffeb7..5588caba7629a1 100644
--- a/packages/expo-build-properties/CHANGELOG.md
+++ b/packages/expo-build-properties/CHANGELOG.md
@@ -10,6 +10,10 @@
### 💡 Others
+## 56.0.6 — 2026-05-11
+
+_This version does not introduce any user-facing changes._
+
## 56.0.5 — 2026-05-08
_This version does not introduce any user-facing changes._
diff --git a/packages/expo-build-properties/package.json b/packages/expo-build-properties/package.json
index 5c0d1529c9bcb4..3d72adeca11cd9 100644
--- a/packages/expo-build-properties/package.json
+++ b/packages/expo-build-properties/package.json
@@ -1,6 +1,6 @@
{
"name": "expo-build-properties",
- "version": "56.0.5",
+ "version": "56.0.6",
"description": "Config plugin to customize native build properties on prebuild",
"main": "build/withBuildProperties.js",
"types": "build/withBuildProperties.d.ts",
diff --git a/packages/expo-codemod/CHANGELOG.md b/packages/expo-codemod/CHANGELOG.md
index 82190918425e45..78f750eee209e5 100644
--- a/packages/expo-codemod/CHANGELOG.md
+++ b/packages/expo-codemod/CHANGELOG.md
@@ -6,12 +6,16 @@
### 🎉 New features
-- Warn when no paths are specified ([#45411](https://github.com/expo/expo/pull/45411) by [@Ubax](https://github.com/Ubax))
-
### 🐛 Bug fixes
### 💡 Others
+## 56.0.3 — 2026-05-11
+
+### 🎉 New features
+
+- Warn when no paths are specified ([#45411](https://github.com/expo/expo/pull/45411) by [@Ubax](https://github.com/Ubax))
+
## 56.0.2 — 2026-05-08
### 🎉 New features
diff --git a/packages/expo-codemod/package.json b/packages/expo-codemod/package.json
index 3f2ca8f929bd84..5168b158e6d237 100644
--- a/packages/expo-codemod/package.json
+++ b/packages/expo-codemod/package.json
@@ -1,6 +1,6 @@
{
"name": "expo-codemod",
- "version": "56.0.2",
+ "version": "56.0.3",
"description": "Codemods for migrating Expo apps between SDK versions",
"license": "MIT",
"keywords": [
diff --git a/packages/expo-constants/CHANGELOG.md b/packages/expo-constants/CHANGELOG.md
index 18d9d869803e3d..fbe18b4fb6ed3f 100644
--- a/packages/expo-constants/CHANGELOG.md
+++ b/packages/expo-constants/CHANGELOG.md
@@ -10,6 +10,10 @@
### 💡 Others
+## 56.0.7 — 2026-05-11
+
+_This version does not introduce any user-facing changes._
+
## 56.0.6 — 2026-05-08
_This version does not introduce any user-facing changes._
diff --git a/packages/expo-constants/android/build.gradle b/packages/expo-constants/android/build.gradle
index 9bfd13186c907e..069c5ec484a5ba 100644
--- a/packages/expo-constants/android/build.gradle
+++ b/packages/expo-constants/android/build.gradle
@@ -6,7 +6,7 @@ plugins {
apply from: "../scripts/get-app-config-android.gradle"
group = 'host.exp.exponent'
-version = '56.0.6'
+version = '56.0.7'
expoModule {
// We can't prebuild the module because we need to apply `get-app-config-android.gradle` script.
@@ -17,6 +17,6 @@ android {
namespace "expo.modules.constants"
defaultConfig {
versionCode 33
- versionName "56.0.6"
+ versionName "56.0.7"
}
}
diff --git a/packages/expo-constants/package.json b/packages/expo-constants/package.json
index 6f665317b81bf9..ad800743229ae3 100644
--- a/packages/expo-constants/package.json
+++ b/packages/expo-constants/package.json
@@ -1,6 +1,6 @@
{
"name": "expo-constants",
- "version": "56.0.6",
+ "version": "56.0.7",
"description": "Provides system information that remains constant throughout the lifetime of your app.",
"main": "build/Constants.js",
"types": "build/Constants.d.ts",
diff --git a/packages/expo-dev-client/CHANGELOG.md b/packages/expo-dev-client/CHANGELOG.md
index 2e13ebdc7f7098..22b24cd5e5f6a5 100644
--- a/packages/expo-dev-client/CHANGELOG.md
+++ b/packages/expo-dev-client/CHANGELOG.md
@@ -10,6 +10,10 @@
### 💡 Others
+## 56.0.6 — 2026-05-11
+
+_This version does not introduce any user-facing changes._
+
## 56.0.5 — 2026-05-08
### 💡 Others
diff --git a/packages/expo-dev-client/android/build.gradle b/packages/expo-dev-client/android/build.gradle
index 74bcd32e470dce..a81085cf4a5e03 100644
--- a/packages/expo-dev-client/android/build.gradle
+++ b/packages/expo-dev-client/android/build.gradle
@@ -8,13 +8,13 @@ expoModule {
}
group = "host.exp.exponent"
-version = "56.0.5"
+version = "56.0.6"
android {
namespace "expo.modules.devclient"
defaultConfig {
versionCode 1
- versionName "56.0.5"
+ versionName "56.0.6"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
diff --git a/packages/expo-dev-client/package.json b/packages/expo-dev-client/package.json
index a953b2a7939235..7ce735bc322ce6 100644
--- a/packages/expo-dev-client/package.json
+++ b/packages/expo-dev-client/package.json
@@ -1,6 +1,6 @@
{
"name": "expo-dev-client",
- "version": "56.0.5",
+ "version": "56.0.6",
"description": "Expo Development Client",
"main": "build/DevClient.js",
"types": "build/DevClient.d.ts",
@@ -31,8 +31,8 @@
"license": "MIT",
"homepage": "https://docs.expo.dev/versions/latest/sdk/dev-client/",
"dependencies": {
- "expo-dev-launcher": "workspace:~56.0.5",
- "expo-dev-menu": "workspace:~56.0.5",
+ "expo-dev-launcher": "workspace:~56.0.6",
+ "expo-dev-menu": "workspace:~56.0.6",
"expo-dev-menu-interface": "workspace:~56.0.0",
"expo-manifests": "workspace:~56.0.1",
"expo-updates-interface": "workspace:~56.0.1"
diff --git a/packages/expo-dev-launcher/CHANGELOG.md b/packages/expo-dev-launcher/CHANGELOG.md
index 6863cc3e517823..347059b4a24c4d 100644
--- a/packages/expo-dev-launcher/CHANGELOG.md
+++ b/packages/expo-dev-launcher/CHANGELOG.md
@@ -10,6 +10,10 @@
### 💡 Others
+## 56.0.6 — 2026-05-11
+
+_This version does not introduce any user-facing changes._
+
## 56.0.5 — 2026-05-08
### 💡 Others
diff --git a/packages/expo-dev-launcher/android/build.gradle b/packages/expo-dev-launcher/android/build.gradle
index 01276384028af5..2d5ddb38159997 100644
--- a/packages/expo-dev-launcher/android/build.gradle
+++ b/packages/expo-dev-launcher/android/build.gradle
@@ -26,13 +26,13 @@ expoModule {
}
group = "host.exp.exponent"
-version = "56.0.5"
+version = "56.0.6"
android {
namespace "expo.modules.devlauncher"
defaultConfig {
versionCode 9
- versionName "56.0.5"
+ versionName "56.0.6"
}
buildTypes {
diff --git a/packages/expo-dev-launcher/package.json b/packages/expo-dev-launcher/package.json
index 1897af09e45588..887f9f82ebba60 100644
--- a/packages/expo-dev-launcher/package.json
+++ b/packages/expo-dev-launcher/package.json
@@ -1,7 +1,7 @@
{
"name": "expo-dev-launcher",
"title": "Expo Development Launcher",
- "version": "56.0.5",
+ "version": "56.0.6",
"description": "Pre-release version of the Expo development launcher package for testing.",
"repository": {
"type": "git",
@@ -20,7 +20,7 @@
"homepage": "https://docs.expo.dev",
"dependencies": {
"@expo/schema-utils": "workspace:^56.0.0",
- "expo-dev-menu": "workspace:~56.0.5",
+ "expo-dev-menu": "workspace:~56.0.6",
"expo-manifests": "workspace:~56.0.1"
},
"peerDependencies": {
diff --git a/packages/expo-dev-menu/CHANGELOG.md b/packages/expo-dev-menu/CHANGELOG.md
index 65c6a6369b185e..9973367a4d0eea 100644
--- a/packages/expo-dev-menu/CHANGELOG.md
+++ b/packages/expo-dev-menu/CHANGELOG.md
@@ -10,6 +10,10 @@
### 💡 Others
+## 56.0.6 — 2026-05-11
+
+_This version does not introduce any user-facing changes._
+
## 56.0.5 — 2026-05-08
### 💡 Others
diff --git a/packages/expo-dev-menu/android/build.gradle b/packages/expo-dev-menu/android/build.gradle
index 528ff072b4e7a1..3906f6964d0b5b 100644
--- a/packages/expo-dev-menu/android/build.gradle
+++ b/packages/expo-dev-menu/android/build.gradle
@@ -12,7 +12,7 @@ apply plugin: 'expo-module-gradle-plugin'
apply plugin: 'org.jetbrains.kotlin.plugin.compose'
group = 'host.exp.exponent'
-version = '56.0.5'
+version = '56.0.6'
def hasDevLauncher = findProject(":expo-dev-launcher") != null
def configureInRelease = findProperty("expo.devmenu.configureInRelease") == "true"
@@ -29,7 +29,7 @@ android {
defaultConfig {
versionCode 10
- versionName '56.0.5'
+ versionName '56.0.6'
}
buildTypes {
diff --git a/packages/expo-dev-menu/package.json b/packages/expo-dev-menu/package.json
index dc73eeb7342e74..66164978ce05f7 100644
--- a/packages/expo-dev-menu/package.json
+++ b/packages/expo-dev-menu/package.json
@@ -1,6 +1,6 @@
{
"name": "expo-dev-menu",
- "version": "56.0.5",
+ "version": "56.0.6",
"description": "Expo/React Native module with the developer menu.",
"main": "build/DevMenu.js",
"types": "build/DevMenu.d.ts",
diff --git a/packages/expo-doctor/CHANGELOG.md b/packages/expo-doctor/CHANGELOG.md
index 4552fa3ac86730..40e2a53fba13f3 100644
--- a/packages/expo-doctor/CHANGELOG.md
+++ b/packages/expo-doctor/CHANGELOG.md
@@ -6,13 +6,17 @@
### 🎉 New features
-- Skip `watchFolders` check for SDK 56 ([#45567](https://github.com/expo/expo/pull/45567) by [@kitten](https://github.com/kitten))
-- Warn when `blacklistRE` or invalid `blockList` regex are used ([#45567](https://github.com/expo/expo/pull/45567) by [@kitten](https://github.com/kitten))
-
### 🐛 Bug fixes
### 💡 Others
+## 1.19.6 — 2026-05-11
+
+### 🎉 New features
+
+- Skip `watchFolders` check for SDK 56 ([#45567](https://github.com/expo/expo/pull/45567) by [@kitten](https://github.com/kitten))
+- Warn when `blacklistRE` or invalid `blockList` regex are used ([#45567](https://github.com/expo/expo/pull/45567) by [@kitten](https://github.com/kitten))
+
## 1.19.5 — 2026-05-06
_This version does not introduce any user-facing changes._
diff --git a/packages/expo-doctor/package.json b/packages/expo-doctor/package.json
index de381d93e9edca..ce8dc20f663420 100644
--- a/packages/expo-doctor/package.json
+++ b/packages/expo-doctor/package.json
@@ -1,6 +1,6 @@
{
"name": "expo-doctor",
- "version": "1.19.5",
+ "version": "1.19.6",
"main": "build/index.js",
"description": "Check your Expo project for known issues",
"keywords": [
diff --git a/packages/expo-image-manipulator/CHANGELOG.md b/packages/expo-image-manipulator/CHANGELOG.md
index bfc49af747e19c..40c77d5f2071b9 100644
--- a/packages/expo-image-manipulator/CHANGELOG.md
+++ b/packages/expo-image-manipulator/CHANGELOG.md
@@ -10,6 +10,10 @@
### 💡 Others
+## 56.0.6 — 2026-05-11
+
+_This version does not introduce any user-facing changes._
+
## 56.0.5 — 2026-05-08
_This version does not introduce any user-facing changes._
diff --git a/packages/expo-image-manipulator/android/build.gradle b/packages/expo-image-manipulator/android/build.gradle
index d16788c9fca724..6613b24601b549 100644
--- a/packages/expo-image-manipulator/android/build.gradle
+++ b/packages/expo-image-manipulator/android/build.gradle
@@ -4,12 +4,12 @@ plugins {
}
group = 'host.exp.exponent'
-version = '56.0.5'
+version = '56.0.6'
android {
namespace "expo.modules.imagemanipulator"
defaultConfig {
versionCode 23
- versionName "56.0.5"
+ versionName "56.0.6"
}
}
diff --git a/packages/expo-image-manipulator/package.json b/packages/expo-image-manipulator/package.json
index 56a1e2bea3c5ee..024aef420d9336 100644
--- a/packages/expo-image-manipulator/package.json
+++ b/packages/expo-image-manipulator/package.json
@@ -1,6 +1,6 @@
{
"name": "expo-image-manipulator",
- "version": "56.0.5",
+ "version": "56.0.6",
"description": "Provides functions that let you manipulation images on the local file system, eg: resize, crop.",
"main": "src/index.ts",
"types": "build/index.d.ts",
diff --git a/packages/expo-image-picker/CHANGELOG.md b/packages/expo-image-picker/CHANGELOG.md
index 6e707de0a3fbd7..7869368fe52084 100644
--- a/packages/expo-image-picker/CHANGELOG.md
+++ b/packages/expo-image-picker/CHANGELOG.md
@@ -10,6 +10,10 @@
### 💡 Others
+## 56.0.6 — 2026-05-11
+
+_This version does not introduce any user-facing changes._
+
## 56.0.5 — 2026-05-08
_This version does not introduce any user-facing changes._
diff --git a/packages/expo-image-picker/android/build.gradle b/packages/expo-image-picker/android/build.gradle
index b152911cf7b303..457872b65e0c1e 100644
--- a/packages/expo-image-picker/android/build.gradle
+++ b/packages/expo-image-picker/android/build.gradle
@@ -4,13 +4,13 @@ plugins {
}
group = 'host.exp.exponent'
-version = '56.0.5'
+version = '56.0.6'
android {
namespace "expo.modules.imagepicker"
defaultConfig {
versionCode 22
- versionName "56.0.5"
+ versionName "56.0.6"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
testOptions {
diff --git a/packages/expo-image-picker/package.json b/packages/expo-image-picker/package.json
index b8d1821e158487..914cbf2b1c395f 100644
--- a/packages/expo-image-picker/package.json
+++ b/packages/expo-image-picker/package.json
@@ -1,6 +1,6 @@
{
"name": "expo-image-picker",
- "version": "56.0.5",
+ "version": "56.0.6",
"description": "Provides access to the system's UI for selecting images and videos from the phone's library or taking a photo with the camera.",
"main": "build/ImagePicker.js",
"types": "build/ImagePicker.d.ts",
diff --git a/packages/expo-insights/android/build.gradle b/packages/expo-insights/android/build.gradle
index 1857e3686a10ef..8212fb0e80ee13 100644
--- a/packages/expo-insights/android/build.gradle
+++ b/packages/expo-insights/android/build.gradle
@@ -4,13 +4,13 @@ plugins {
}
group = 'host.exp.exponent'
-version = '56.0.5'
+version = '56.0.6'
android {
namespace "expo.modules.insights"
defaultConfig {
versionCode 1
- versionName "56.0.5"
+ versionName "56.0.6"
}
}
diff --git a/packages/expo-insights/package.json b/packages/expo-insights/package.json
index 4c1b001d3174b1..01c4fc8a23e4fd 100644
--- a/packages/expo-insights/package.json
+++ b/packages/expo-insights/package.json
@@ -1,7 +1,7 @@
{
"name": "expo-insights",
"title": "Expo Insights",
- "version": "56.0.5",
+ "version": "56.0.6",
"description": "Expo module that offers developers insight into the usage data of the app",
"main": "build/index.js",
"types": "build/index.d.ts",
diff --git a/packages/expo-linking/CHANGELOG.md b/packages/expo-linking/CHANGELOG.md
index 83a4aa87b8e025..011321de130cfc 100644
--- a/packages/expo-linking/CHANGELOG.md
+++ b/packages/expo-linking/CHANGELOG.md
@@ -10,6 +10,10 @@
### 💡 Others
+## 56.0.5 — 2026-05-12
+
+_This version does not introduce any user-facing changes._
+
## 56.0.4 — 2026-05-08
_This version does not introduce any user-facing changes._
diff --git a/packages/expo-linking/android/build.gradle b/packages/expo-linking/android/build.gradle
index 566c6fe09b3691..268bcf7d77b670 100644
--- a/packages/expo-linking/android/build.gradle
+++ b/packages/expo-linking/android/build.gradle
@@ -4,13 +4,13 @@ plugins {
}
group = 'host.exp.exponent'
-version = '56.0.4'
+version = '56.0.5'
android {
namespace "expo.modules.linking"
defaultConfig {
versionCode 1
- versionName "56.0.4"
+ versionName "56.0.5"
}
lintOptions {
abortOnError false
diff --git a/packages/expo-linking/package.json b/packages/expo-linking/package.json
index f68d5ada1004e0..3574c09d1bfb19 100644
--- a/packages/expo-linking/package.json
+++ b/packages/expo-linking/package.json
@@ -1,6 +1,6 @@
{
"name": "expo-linking",
- "version": "56.0.4",
+ "version": "56.0.5",
"description": "Create and open deep links universally",
"main": "build/Linking.js",
"types": "build/Linking.d.ts",
@@ -37,7 +37,7 @@
"license": "MIT",
"homepage": "https://docs.expo.dev/versions/latest/sdk/linking",
"dependencies": {
- "expo-constants": "workspace:~56.0.6",
+ "expo-constants": "workspace:~56.0.7",
"invariant": "^2.2.4"
},
"devDependencies": {
diff --git a/packages/expo-location/CHANGELOG.md b/packages/expo-location/CHANGELOG.md
index 9dfff7ee37e073..865aa4de9e2df2 100644
--- a/packages/expo-location/CHANGELOG.md
+++ b/packages/expo-location/CHANGELOG.md
@@ -10,6 +10,10 @@
### 💡 Others
+## 56.0.6 — 2026-05-11
+
+_This version does not introduce any user-facing changes._
+
## 56.0.5 — 2026-05-08
_This version does not introduce any user-facing changes._
diff --git a/packages/expo-location/android/build.gradle b/packages/expo-location/android/build.gradle
index 94da5cef29dcaf..cadd46df7ea6c3 100644
--- a/packages/expo-location/android/build.gradle
+++ b/packages/expo-location/android/build.gradle
@@ -4,13 +4,13 @@ plugins {
}
group = 'host.exp.exponent'
-version = '56.0.5'
+version = '56.0.6'
android {
namespace "expo.modules.location"
defaultConfig {
versionCode 29
- versionName "56.0.5"
+ versionName "56.0.6"
consumerProguardFiles("proguard-rules.pro")
}
}
diff --git a/packages/expo-location/package.json b/packages/expo-location/package.json
index d8ae0745f34bcd..66b9ee413ea496 100644
--- a/packages/expo-location/package.json
+++ b/packages/expo-location/package.json
@@ -1,6 +1,6 @@
{
"name": "expo-location",
- "version": "56.0.5",
+ "version": "56.0.6",
"description": "Allows reading geolocation information from the device. Your app can poll for the current location or subscribe to location update events.",
"main": "build/index.js",
"types": "build/index.d.ts",
diff --git a/packages/expo-maps/CHANGELOG.md b/packages/expo-maps/CHANGELOG.md
index 305aa71994dd94..3b0864042da8ce 100644
--- a/packages/expo-maps/CHANGELOG.md
+++ b/packages/expo-maps/CHANGELOG.md
@@ -10,6 +10,10 @@
### 💡 Others
+## 56.0.4 — 2026-05-11
+
+_This version does not introduce any user-facing changes._
+
## 56.0.3 — 2026-05-06
_This version does not introduce any user-facing changes._
diff --git a/packages/expo-maps/android/build.gradle b/packages/expo-maps/android/build.gradle
index e23eea2c53dc44..cbf1ce8e9fa375 100644
--- a/packages/expo-maps/android/build.gradle
+++ b/packages/expo-maps/android/build.gradle
@@ -14,13 +14,13 @@ apply plugin: 'expo-module-gradle-plugin'
apply plugin: 'org.jetbrains.kotlin.plugin.compose'
group = 'host.exp.exponent'
-version = '56.0.3'
+version = '56.0.4'
android {
namespace "expo.modules.maps"
defaultConfig {
versionCode 1
- versionName "56.0.3"
+ versionName "56.0.4"
}
buildFeatures {
compose true
diff --git a/packages/expo-maps/package.json b/packages/expo-maps/package.json
index 9bee7bde86e624..5019f7f68c3cff 100644
--- a/packages/expo-maps/package.json
+++ b/packages/expo-maps/package.json
@@ -1,6 +1,6 @@
{
"name": "expo-maps",
- "version": "56.0.3",
+ "version": "56.0.4",
"description": "Provides a Map component that uses Google Maps on Android and Apple Maps on iOS.",
"main": "src/index.ts",
"types": "build/index.d.ts",
diff --git a/packages/expo-module-template/$package.json b/packages/expo-module-template/$package.json
index 9e2bef5f23563b..e5670ad7c5643f 100644
--- a/packages/expo-module-template/$package.json
+++ b/packages/expo-module-template/$package.json
@@ -34,7 +34,7 @@
"babel-preset-expo": "~55.0.8",
"eslint": "~9.39.4",
"eslint-config-universe": "^15.0.3",
- "expo": "^56.0.0-preview.7",
+ "expo": "^56.0.0-preview.9",
"jest": "^29.7.0",
"jest-expo": "~55.0.9",
"prettier": "^3.0.0",
diff --git a/packages/expo-module-template/package.json b/packages/expo-module-template/package.json
index 42221bf9e947cb..0a90252049b9bd 100644
--- a/packages/expo-module-template/package.json
+++ b/packages/expo-module-template/package.json
@@ -1,6 +1,6 @@
{
"name": "expo-module-template",
- "version": "56.0.3",
+ "version": "56.0.4",
"description": "ExpoModuleTemplate standalone module",
"scripts": {},
"keywords": [
diff --git a/packages/expo-modules-autolinking/CHANGELOG.md b/packages/expo-modules-autolinking/CHANGELOG.md
index 8c56b6767e5803..56500cde83dbe6 100644
--- a/packages/expo-modules-autolinking/CHANGELOG.md
+++ b/packages/expo-modules-autolinking/CHANGELOG.md
@@ -10,6 +10,10 @@
### 💡 Others
+## 56.0.4 — 2026-05-11
+
+_This version does not introduce any user-facing changes._
+
## 56.0.3 — 2026-05-08
### 🐛 Bug fixes
diff --git a/packages/expo-modules-autolinking/package.json b/packages/expo-modules-autolinking/package.json
index 7e75069bd4d3cf..9c070ccd0734bc 100644
--- a/packages/expo-modules-autolinking/package.json
+++ b/packages/expo-modules-autolinking/package.json
@@ -1,6 +1,6 @@
{
"name": "expo-modules-autolinking",
- "version": "56.0.3",
+ "version": "56.0.4",
"description": "Scripts that autolink Expo modules.",
"main": "build/index.js",
"types": "build/index.d.ts",
diff --git a/packages/expo-modules-core/CHANGELOG.md b/packages/expo-modules-core/CHANGELOG.md
index 790adcbe2a43af..4b76f09c33edf7 100644
--- a/packages/expo-modules-core/CHANGELOG.md
+++ b/packages/expo-modules-core/CHANGELOG.md
@@ -10,6 +10,10 @@
### 💡 Others
+## 56.0.6 — 2026-05-11
+
+### 💡 Others
+
- [iOS] `AppContext.setRuntime` now takes the native React `RuntimeScheduler` pointer and a dispatch trampoline alongside the runtime pointer. ([#45636](https://github.com/expo/expo/pull/45636) by [@tsapeta](https://github.com/tsapeta))
## 56.0.5 — 2026-05-08
diff --git a/packages/expo-modules-core/android/build.gradle b/packages/expo-modules-core/android/build.gradle
index ef2f3bdebb02b5..2bae5ec61d2728 100644
--- a/packages/expo-modules-core/android/build.gradle
+++ b/packages/expo-modules-core/android/build.gradle
@@ -27,7 +27,7 @@ if (shouldIncludeCompose) {
}
group = 'host.exp.exponent'
-version = '56.0.5'
+version = '56.0.6'
def isExpoModulesCoreTests = {
Gradle gradle = getGradle()
@@ -94,7 +94,7 @@ android {
defaultConfig {
consumerProguardFiles 'proguard-rules.pro'
versionCode 1
- versionName "56.0.5"
+ versionName "56.0.6"
buildConfigField "String", "EXPO_MODULES_CORE_VERSION", "\"${versionName}\""
buildConfigField "boolean", "IS_NEW_ARCHITECTURE_ENABLED", "true"
diff --git a/packages/expo-modules-core/package.json b/packages/expo-modules-core/package.json
index d7150e4b13a8b3..05ba322912bb8c 100644
--- a/packages/expo-modules-core/package.json
+++ b/packages/expo-modules-core/package.json
@@ -1,6 +1,6 @@
{
"name": "expo-modules-core",
- "version": "56.0.5",
+ "version": "56.0.6",
"description": "The core of Expo Modules architecture",
"main": "src/index.ts",
"types": "build/index.d.ts",
@@ -56,7 +56,7 @@
},
"dependencies": {
"@expo/expo-modules-macros-plugin": "~0.0.8",
- "expo-modules-jsi": "workspace:~56.0.2",
+ "expo-modules-jsi": "workspace:~56.0.3",
"invariant": "^2.2.4"
},
"peerDependencies": {
diff --git a/packages/expo-modules-jsi/CHANGELOG.md b/packages/expo-modules-jsi/CHANGELOG.md
index 89785a17e19a5c..bb3e6fb4058da2 100644
--- a/packages/expo-modules-jsi/CHANGELOG.md
+++ b/packages/expo-modules-jsi/CHANGELOG.md
@@ -8,10 +8,14 @@
### 🐛 Bug fixes
-- [iOS] Fixed launch-time crash in apps with source-built React Native. ([#45636](https://github.com/expo/expo/pull/45636) by [@tsapeta](https://github.com/tsapeta))
-
### 💡 Others
+## 56.0.3 — 2026-05-11
+
+### 🐛 Bug fixes
+
+- [iOS] Fixed launch-time crash in apps with source-built React Native. ([#45636](https://github.com/expo/expo/pull/45636) by [@tsapeta](https://github.com/tsapeta))
+
## 56.0.2 — 2026-05-08
### 🐛 Bug fixes
diff --git a/packages/expo-modules-jsi/package.json b/packages/expo-modules-jsi/package.json
index 37b8c7bb56ae06..ea52a92db08de4 100644
--- a/packages/expo-modules-jsi/package.json
+++ b/packages/expo-modules-jsi/package.json
@@ -1,6 +1,6 @@
{
"name": "expo-modules-jsi",
- "version": "56.0.2",
+ "version": "56.0.3",
"description": "The JavaScript Interface for Expo Modules",
"main": "index.js",
"sideEffects": [],
diff --git a/packages/expo-notifications/CHANGELOG.md b/packages/expo-notifications/CHANGELOG.md
index cb61ee50ca81bf..7e7d09a791217b 100644
--- a/packages/expo-notifications/CHANGELOG.md
+++ b/packages/expo-notifications/CHANGELOG.md
@@ -10,6 +10,10 @@
### 💡 Others
+## 56.0.6 — 2026-05-11
+
+_This version does not introduce any user-facing changes._
+
## 56.0.5 — 2026-05-08
_This version does not introduce any user-facing changes._
diff --git a/packages/expo-notifications/android/build.gradle b/packages/expo-notifications/android/build.gradle
index 3bb686c16f2b35..94811c904786d1 100644
--- a/packages/expo-notifications/android/build.gradle
+++ b/packages/expo-notifications/android/build.gradle
@@ -5,13 +5,13 @@ plugins {
}
group = 'host.exp.exponent'
-version = '56.0.5'
+version = '56.0.6'
android {
namespace "expo.modules.notifications"
defaultConfig {
versionCode 21
- versionName '56.0.5'
+ versionName '56.0.6'
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
diff --git a/packages/expo-notifications/package.json b/packages/expo-notifications/package.json
index 1ce99e3ce296f3..4b6e57865297a6 100644
--- a/packages/expo-notifications/package.json
+++ b/packages/expo-notifications/package.json
@@ -1,6 +1,6 @@
{
"name": "expo-notifications",
- "version": "56.0.5",
+ "version": "56.0.6",
"description": "Provides an API to fetch push notification tokens and to present, schedule, receive, and respond to notifications.",
"main": "build/index.js",
"types": "build/index.d.ts",
@@ -46,7 +46,7 @@
"abort-controller": "^3.0.0",
"badgin": "^1.1.5",
"expo-application": "workspace:~56.0.3",
- "expo-constants": "workspace:~56.0.6"
+ "expo-constants": "workspace:~56.0.7"
},
"devDependencies": {
"@types/node": "^22.14.0",
diff --git a/packages/expo-observe/package.json b/packages/expo-observe/package.json
index bd81d5ef6a5ff6..228d03543cf5c7 100644
--- a/packages/expo-observe/package.json
+++ b/packages/expo-observe/package.json
@@ -1,7 +1,7 @@
{
"name": "expo-observe",
"title": "Expo Observe",
- "version": "56.0.5",
+ "version": "56.0.6",
"description": "Expo module that dispatches collected app metrics to EAS Observe",
"main": "src/index.ts",
"types": "build/index.d.ts",
@@ -32,7 +32,7 @@
"author": "650 Industries, Inc.",
"license": "MIT",
"dependencies": {
- "expo-app-metrics": "workspace:~56.0.5",
+ "expo-app-metrics": "workspace:~56.0.6",
"expo-eas-client": "workspace:~56.0.0"
},
"devDependencies": {
diff --git a/packages/expo-processing/package.json b/packages/expo-processing/package.json
index eb9a472f92fb8c..afad6119934c97 100644
--- a/packages/expo-processing/package.json
+++ b/packages/expo-processing/package.json
@@ -1,6 +1,6 @@
{
"name": "expo-processing",
- "version": "56.0.5",
+ "version": "56.0.6",
"description": "Utilities for using Processing.js on Expo",
"main": "index.js",
"keywords": [
diff --git a/packages/expo-router/CHANGELOG.md b/packages/expo-router/CHANGELOG.md
index 680b0663fd6fa4..3dd905f5b2a718 100644
--- a/packages/expo-router/CHANGELOG.md
+++ b/packages/expo-router/CHANGELOG.md
@@ -6,6 +6,18 @@
### 🎉 New features
+### 🐛 Bug fixes
+
+### 💡 Others
+
+## 56.1.3 — 2026-05-12
+
+_This version does not introduce any user-facing changes._
+
+## 56.1.2 — 2026-05-11
+
+### 🎉 New features
+
- export new useCurrentRouteInfo hook ([#45566](https://github.com/expo/expo/pull/45566) by [@Ubax](https://github.com/Ubax))
- Upgrade react-native-screens to 4.25.0 ([#45644](https://github.com/expo/expo/pull/45644) by [@Ubax](https://github.com/Ubax))
@@ -13,8 +25,6 @@
- Fix drawer toggle asset path. ([#45170](https://github.com/expo/expo/pull/45170) by [@sleda](https://github.com/sleda))
-### 💡 Others
-
## 56.1.1 — 2026-05-08
### 🎉 New features
diff --git a/packages/expo-router/android/build.gradle b/packages/expo-router/android/build.gradle
index b049ecb6c690bb..f126df78c26e98 100644
--- a/packages/expo-router/android/build.gradle
+++ b/packages/expo-router/android/build.gradle
@@ -4,13 +4,13 @@ plugins {
}
group = 'expo.modules.router'
-version = '56.1.1'
+version = '56.1.3'
android {
namespace "expo.modules.router"
defaultConfig {
versionCode 1
- versionName "56.1.1"
+ versionName "56.1.3"
}
lintOptions {
abortOnError false
diff --git a/packages/expo-router/package.json b/packages/expo-router/package.json
index 3c8a323bd6c7b5..8d31076771ce23 100644
--- a/packages/expo-router/package.json
+++ b/packages/expo-router/package.json
@@ -1,6 +1,6 @@
{
"name": "expo-router",
- "version": "56.1.1",
+ "version": "56.1.3",
"description": "Expo Router is a file-based router for React Native and web applications.",
"author": "650 Industries, Inc.",
"license": "MIT",
@@ -88,12 +88,12 @@
"expo"
],
"peerDependencies": {
- "@expo/log-box": "workspace:^56.0.6",
- "@expo/metro-runtime": "workspace:^56.0.5",
+ "@expo/log-box": "workspace:^56.0.7",
+ "@expo/metro-runtime": "workspace:^56.0.6",
"@testing-library/react-native": ">= 13.2.0",
"expo": "*",
- "expo-constants": "workspace:^56.0.6",
- "expo-linking": "workspace:^56.0.4",
+ "expo-constants": "workspace:^56.0.7",
+ "expo-linking": "workspace:^56.0.5",
"react": "*",
"react-dom": "*",
"react-native": "*",
@@ -149,10 +149,10 @@
"tsd": "^0.33.0"
},
"dependencies": {
- "@expo/log-box": "workspace:^56.0.6",
- "@expo/metro-runtime": "workspace:^56.0.5",
+ "@expo/log-box": "workspace:^56.0.7",
+ "@expo/metro-runtime": "workspace:^56.0.6",
"@expo/schema-utils": "workspace:^56.0.0",
- "@expo/ui": "workspace:^56.0.4",
+ "@expo/ui": "workspace:^56.0.5",
"@radix-ui/react-slot": "^1.2.0",
"@radix-ui/react-tabs": "^1.1.12",
"@react-native-masked-view/masked-view": "^0.3.2",
diff --git a/packages/expo-sharing/CHANGELOG.md b/packages/expo-sharing/CHANGELOG.md
index 7833be32b52e1a..8ae7ad8f20b5da 100644
--- a/packages/expo-sharing/CHANGELOG.md
+++ b/packages/expo-sharing/CHANGELOG.md
@@ -10,6 +10,10 @@
### 💡 Others
+## 56.0.6 — 2026-05-11
+
+_This version does not introduce any user-facing changes._
+
## 56.0.5 — 2026-05-08
_This version does not introduce any user-facing changes._
diff --git a/packages/expo-sharing/android/build.gradle b/packages/expo-sharing/android/build.gradle
index 528146e0eb677e..81a69a8796a965 100644
--- a/packages/expo-sharing/android/build.gradle
+++ b/packages/expo-sharing/android/build.gradle
@@ -4,13 +4,13 @@ plugins {
}
group = 'host.exp.exponent'
-version = '56.0.5'
+version = '56.0.6'
android {
namespace "expo.modules.sharing"
defaultConfig {
versionCode 16
- versionName '56.0.5'
+ versionName '56.0.6'
}
}
diff --git a/packages/expo-sharing/package.json b/packages/expo-sharing/package.json
index 92bd9de4f3458d..a1e49e568a55b8 100644
--- a/packages/expo-sharing/package.json
+++ b/packages/expo-sharing/package.json
@@ -1,6 +1,6 @@
{
"name": "expo-sharing",
- "version": "56.0.5",
+ "version": "56.0.6",
"description": "Provides a way to share files directly with other compatible applications.",
"main": "build/index.js",
"types": "build/index.d.ts",
diff --git a/packages/expo-task-manager/CHANGELOG.md b/packages/expo-task-manager/CHANGELOG.md
index 93bf602e34c9c9..3bf33a64f06637 100644
--- a/packages/expo-task-manager/CHANGELOG.md
+++ b/packages/expo-task-manager/CHANGELOG.md
@@ -10,6 +10,10 @@
### 💡 Others
+## 56.0.6 — 2026-05-11
+
+_This version does not introduce any user-facing changes._
+
## 56.0.5 — 2026-05-08
_This version does not introduce any user-facing changes._
diff --git a/packages/expo-task-manager/android/build.gradle b/packages/expo-task-manager/android/build.gradle
index 7d50423f8a904a..4f6050d10e7629 100644
--- a/packages/expo-task-manager/android/build.gradle
+++ b/packages/expo-task-manager/android/build.gradle
@@ -4,13 +4,13 @@ plugins {
}
group = 'host.exp.exponent'
-version = '56.0.5'
+version = '56.0.6'
android {
namespace "expo.modules.taskmanager"
defaultConfig {
versionCode 23
- versionName "56.0.5"
+ versionName "56.0.6"
}
}
diff --git a/packages/expo-task-manager/package.json b/packages/expo-task-manager/package.json
index 1ee72c1d460648..a39d1a52ac49d3 100644
--- a/packages/expo-task-manager/package.json
+++ b/packages/expo-task-manager/package.json
@@ -1,6 +1,6 @@
{
"name": "expo-task-manager",
- "version": "56.0.5",
+ "version": "56.0.6",
"description": "Expo module that provides support for tasks that can run in the background.",
"main": "build/TaskManager.js",
"types": "build/TaskManager.d.ts",
diff --git a/packages/expo-ui/CHANGELOG.md b/packages/expo-ui/CHANGELOG.md
index db9e12c666c567..aad5dd2c3231d3 100644
--- a/packages/expo-ui/CHANGELOG.md
+++ b/packages/expo-ui/CHANGELOG.md
@@ -6,10 +6,20 @@
### 🎉 New features
-- [iOS] Added the `scrollIndicators(visibility, axes?)` SwiftUI modifier in `@expo/ui/swift-ui/modifiers`, wrapping SwiftUI's `scrollIndicators(_:axes:)`. ([#45649](https://github.com/expo/expo/pull/45649) by [@vonovak](https://github.com/vonovak))
+- Added `@expo/ui/community/slider`, a drop-in replacement for `@react-native-community/slider`. ([#45623](https://github.com/expo/expo/pull/45623) by [@nishan](https://github.com/intergalacticspacehighway))
### 🐛 Bug fixes
+- Fix `useNativeState` recreating the `ObservableState` when initial value changes; the seed is now captured once via `useRef`. ([#45623](https://github.com/expo/expo/pull/45623) by [@nishan](https://github.com/intergalacticspacehighway))
+
+### 💡 Others
+
+## 56.0.5 — 2026-05-11
+
+### 🎉 New features
+
+- [iOS] Added the `scrollIndicators(visibility, axes?)` SwiftUI modifier in `@expo/ui/swift-ui/modifiers`, wrapping SwiftUI's `scrollIndicators(_:axes:)`. ([#45649](https://github.com/expo/expo/pull/45649) by [@vonovak](https://github.com/vonovak))
+
### 💡 Others
- [iOS] Consolidated the duplicate `AxisOptions` / `AxisSetType` enums into a single `AxisOptions` in `Convertibles/AxisOptions.swift`. ([#45649](https://github.com/expo/expo/pull/45649) by [@vonovak](https://github.com/vonovak))
diff --git a/packages/expo-ui/android/build.gradle b/packages/expo-ui/android/build.gradle
index ea920055fff72e..fcef1da1a1f127 100644
--- a/packages/expo-ui/android/build.gradle
+++ b/packages/expo-ui/android/build.gradle
@@ -12,13 +12,13 @@ apply plugin: 'expo-module-gradle-plugin'
apply plugin: 'org.jetbrains.kotlin.plugin.compose'
group = 'expo.modules.ui'
-version = '56.0.4'
+version = '56.0.5'
android {
namespace "expo.modules.ui"
defaultConfig {
versionCode 1
- versionName "56.0.4"
+ versionName "56.0.5"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
buildFeatures {
diff --git a/packages/expo-ui/android/src/main/java/expo/modules/ui/SliderView.kt b/packages/expo-ui/android/src/main/java/expo/modules/ui/SliderView.kt
index 27c918bc46f298..aad496149be08a 100644
--- a/packages/expo-ui/android/src/main/java/expo/modules/ui/SliderView.kt
+++ b/packages/expo-ui/android/src/main/java/expo/modules/ui/SliderView.kt
@@ -42,6 +42,8 @@ data class SliderProps(
val value: Float = 0.0f,
val min: Float = 0.0f,
val max: Float = 1.0f,
+ val lowerLimit: Float? = null,
+ val upperLimit: Float? = null,
val steps: Int = 0,
val enabled: Boolean = true,
val colors: SliderColors = SliderColors(),
@@ -60,9 +62,12 @@ fun FunctionalComposableScope.SliderContent(props: SliderProps) {
val onValueChangeFinished by remember { this@SliderContent.EventDispatcher() }
val interactionSource = remember { MutableInteractionSource() }
- var localValue by remember { mutableFloatStateOf(props.value.coerceIn(props.min, props.max)) }
+ val effectiveLower = maxOf(props.min, props.lowerLimit ?: Float.NEGATIVE_INFINITY)
+ val effectiveUpper = minOf(props.max, props.upperLimit ?: Float.POSITIVE_INFINITY)
+
+ var localValue by remember { mutableFloatStateOf(props.value.coerceIn(effectiveLower, effectiveUpper)) }
var isDragging by remember { mutableStateOf(false) }
- val clampedPropsValue = props.value.coerceIn(props.min, props.max)
+ val clampedPropsValue = props.value.coerceIn(effectiveLower, effectiveUpper)
var prevPropsValue by remember { mutableFloatStateOf(clampedPropsValue) }
if (clampedPropsValue != prevPropsValue) {
@@ -90,9 +95,10 @@ fun FunctionalComposableScope.SliderContent(props: SliderProps) {
enabled = props.enabled,
interactionSource = interactionSource,
onValueChange = {
+ val clamped = it.coerceIn(effectiveLower, effectiveUpper)
isDragging = true
- localValue = it
- onValueChange(SliderValueChangedEvent(it))
+ localValue = clamped
+ onValueChange(SliderValueChangedEvent(clamped))
},
onValueChangeFinished = {
isDragging = false
diff --git a/packages/expo-ui/build/State/useNativeState.d.ts b/packages/expo-ui/build/State/useNativeState.d.ts
index 2862d1af32702f..409a5467ecf1b9 100644
--- a/packages/expo-ui/build/State/useNativeState.d.ts
+++ b/packages/expo-ui/build/State/useNativeState.d.ts
@@ -12,7 +12,8 @@ export type ObservableState = SharedObject & {
value: T;
};
/**
- * Creates an observable native state that is automatically cleaned up when the component unmounts.
+ * Creates an observable native state that is automatically cleaned up when the
+ * component unmounts. `initialValue` is captured once on the first render
*/
export declare function useNativeState(initialValue: T): ObservableState;
//# sourceMappingURL=useNativeState.d.ts.map
\ No newline at end of file
diff --git a/packages/expo-ui/build/State/useNativeState.d.ts.map b/packages/expo-ui/build/State/useNativeState.d.ts.map
index 9eb4ad485c5741..71718b6a950ebb 100644
--- a/packages/expo-ui/build/State/useNativeState.d.ts.map
+++ b/packages/expo-ui/build/State/useNativeState.d.ts.map
@@ -1 +1 @@
-{"version":3,"file":"useNativeState.d.ts","sourceRoot":"","sources":["../../src/State/useNativeState.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,YAAY,EAA4B,MAAM,mBAAmB,CAAC;AAMhF;;;GAGG;AACH,MAAM,MAAM,eAAe,CAAC,CAAC,IAAI,YAAY,GAAG;IAC9C;;;;OAIG;IACH,KAAK,EAAE,CAAC,CAAC;CACV,CAAC;AAEF;;GAEG;AACH,wBAAgB,cAAc,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC,CAMrE"}
\ No newline at end of file
+{"version":3,"file":"useNativeState.d.ts","sourceRoot":"","sources":["../../src/State/useNativeState.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,YAAY,EAA4B,MAAM,mBAAmB,CAAC;AAOhF;;;GAGG;AACH,MAAM,MAAM,eAAe,CAAC,CAAC,IAAI,YAAY,GAAG;IAC9C;;;;OAIG;IACH,KAAK,EAAE,CAAC,CAAC;CACV,CAAC;AAEF;;;GAGG;AACH,wBAAgB,cAAc,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC,CAOrE"}
\ No newline at end of file
diff --git a/packages/expo-ui/build/community/slider/Slider.android.d.ts b/packages/expo-ui/build/community/slider/Slider.android.d.ts
new file mode 100644
index 00000000000000..55d369ccfe8d98
--- /dev/null
+++ b/packages/expo-ui/build/community/slider/Slider.android.d.ts
@@ -0,0 +1,7 @@
+import { type SliderProps } from './types';
+/**
+ * A drop-in replacement for `@react-native-community/slider` on Android.
+ * Renders a Material 3 `Slider` wrapped in a Host.
+ */
+export declare function Slider(props: SliderProps): import("react/jsx-runtime").JSX.Element;
+//# sourceMappingURL=Slider.android.d.ts.map
\ No newline at end of file
diff --git a/packages/expo-ui/build/community/slider/Slider.android.d.ts.map b/packages/expo-ui/build/community/slider/Slider.android.d.ts.map
new file mode 100644
index 00000000000000..0f2c51a88a230f
--- /dev/null
+++ b/packages/expo-ui/build/community/slider/Slider.android.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"Slider.android.d.ts","sourceRoot":"","sources":["../../../src/community/slider/Slider.android.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,SAAS,CAAC;AAI3C;;;GAGG;AACH,wBAAgB,MAAM,CAAC,KAAK,EAAE,WAAW,2CAwCxC"}
\ No newline at end of file
diff --git a/packages/expo-ui/build/community/slider/Slider.d.ts b/packages/expo-ui/build/community/slider/Slider.d.ts
new file mode 100644
index 00000000000000..eb304468e94605
--- /dev/null
+++ b/packages/expo-ui/build/community/slider/Slider.d.ts
@@ -0,0 +1,8 @@
+import { type SliderProps } from './types';
+/**
+ * A drop-in replacement for `@react-native-community/slider`. Renders a
+ * SwiftUI `Slider` on iOS, a Material 3 `Slider` on Android, and a native
+ * HTML `` on web.
+ */
+export declare function Slider(props: SliderProps): import("react/jsx-runtime").JSX.Element;
+//# sourceMappingURL=Slider.d.ts.map
\ No newline at end of file
diff --git a/packages/expo-ui/build/community/slider/Slider.d.ts.map b/packages/expo-ui/build/community/slider/Slider.d.ts.map
new file mode 100644
index 00000000000000..7095aba81836c2
--- /dev/null
+++ b/packages/expo-ui/build/community/slider/Slider.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"Slider.d.ts","sourceRoot":"","sources":["../../../src/community/slider/Slider.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,SAAS,CAAC;AAE3C;;;;GAIG;AACH,wBAAgB,MAAM,CAAC,KAAK,EAAE,WAAW,2CAkCxC"}
\ No newline at end of file
diff --git a/packages/expo-ui/build/community/slider/Slider.ios.d.ts b/packages/expo-ui/build/community/slider/Slider.ios.d.ts
new file mode 100644
index 00000000000000..f4cabf5bcffe7c
--- /dev/null
+++ b/packages/expo-ui/build/community/slider/Slider.ios.d.ts
@@ -0,0 +1,7 @@
+import { type SliderProps } from './types';
+/**
+ * A drop-in replacement for `@react-native-community/slider` on iOS.
+ * Renders a SwiftUI `Slider` wrapped in a Host.
+ */
+export declare function Slider(props: SliderProps): import("react/jsx-runtime").JSX.Element;
+//# sourceMappingURL=Slider.ios.d.ts.map
\ No newline at end of file
diff --git a/packages/expo-ui/build/community/slider/Slider.ios.d.ts.map b/packages/expo-ui/build/community/slider/Slider.ios.d.ts.map
new file mode 100644
index 00000000000000..355ede743c0267
--- /dev/null
+++ b/packages/expo-ui/build/community/slider/Slider.ios.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"Slider.ios.d.ts","sourceRoot":"","sources":["../../../src/community/slider/Slider.ios.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,SAAS,CAAC;AAM3C;;;GAGG;AACH,wBAAgB,MAAM,CAAC,KAAK,EAAE,WAAW,2CAqCxC"}
\ No newline at end of file
diff --git a/packages/expo-ui/build/community/slider/index.d.ts b/packages/expo-ui/build/community/slider/index.d.ts
new file mode 100644
index 00000000000000..524ed8544fc884
--- /dev/null
+++ b/packages/expo-ui/build/community/slider/index.d.ts
@@ -0,0 +1,5 @@
+import { Slider } from './Slider';
+export type { SliderProps } from './types';
+export default Slider;
+export { Slider };
+//# sourceMappingURL=index.d.ts.map
\ No newline at end of file
diff --git a/packages/expo-ui/build/community/slider/index.d.ts.map b/packages/expo-ui/build/community/slider/index.d.ts.map
new file mode 100644
index 00000000000000..bf4e6d509e8e1a
--- /dev/null
+++ b/packages/expo-ui/build/community/slider/index.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/community/slider/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAElC,YAAY,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAE3C,eAAe,MAAM,CAAC;AAEtB,OAAO,EAAE,MAAM,EAAE,CAAC"}
\ No newline at end of file
diff --git a/packages/expo-ui/build/community/slider/types.d.ts b/packages/expo-ui/build/community/slider/types.d.ts
new file mode 100644
index 00000000000000..5ad710b8c2d9dd
--- /dev/null
+++ b/packages/expo-ui/build/community/slider/types.d.ts
@@ -0,0 +1,75 @@
+import type { ColorValue, StyleProp, ViewStyle } from 'react-native';
+/**
+ * Props for the `Slider` community drop-in component.
+ * Compatible with `@react-native-community/slider`.
+ */
+export type SliderProps = {
+ /**
+ * Initial / current value of the slider.
+ * Behaves like the community lib: passing a new value updates the thumb,
+ * but live drag emits via `onValueChange` without needing external state.
+ * @default 0
+ */
+ value?: number;
+ /**
+ * Initial minimum value of the slider.
+ * @default 0
+ */
+ minimumValue?: number;
+ /**
+ * Initial maximum value of the slider.
+ * @default 1
+ */
+ maximumValue?: number;
+ /**
+ * The lower limit value of the slider. The user won't be able to slide
+ * below this limit.
+ */
+ lowerLimit?: number;
+ /**
+ * The upper limit value of the slider. The user won't be able to slide
+ * above this limit.
+ */
+ upperLimit?: number;
+ /**
+ * If true the user won't be able to move the slider.
+ * @default false
+ */
+ disabled?: boolean;
+ /**
+ * Step value of the slider. The value should be between 0 and
+ * (maximumValue - minimumValue). A value of 0 means continuous (no
+ * snapping).
+ * @default 0
+ */
+ step?: number;
+ /**
+ * Reverses the direction of the slider so the maximum value is on the
+ * left and the minimum value is on the right.
+ * @default false
+ */
+ inverted?: boolean;
+ /**
+ * Color of the track to the left of the thumb.
+ */
+ minimumTrackTintColor?: ColorValue;
+ /**
+ * Color of the track to the right of the thumb.
+ * @platform android
+ */
+ maximumTrackTintColor?: ColorValue;
+ /**
+ * Color of the thumb.
+ * @platform android
+ */
+ thumbTintColor?: ColorValue;
+ /**
+ * Callback continuously called while the user is dragging the slider.
+ */
+ onValueChange?: (value: number) => void;
+ /**
+ * Used to style and layout the Slider.
+ */
+ style?: StyleProp;
+};
+//# sourceMappingURL=types.d.ts.map
\ No newline at end of file
diff --git a/packages/expo-ui/build/community/slider/types.d.ts.map b/packages/expo-ui/build/community/slider/types.d.ts.map
new file mode 100644
index 00000000000000..b2960db8800598
--- /dev/null
+++ b/packages/expo-ui/build/community/slider/types.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/community/slider/types.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAErE;;;GAGG;AACH,MAAM,MAAM,WAAW,GAAG;IACxB;;;;;OAKG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;OAGG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;;;OAKG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;;;OAIG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;OAEG;IACH,qBAAqB,CAAC,EAAE,UAAU,CAAC;IACnC;;;OAGG;IACH,qBAAqB,CAAC,EAAE,UAAU,CAAC;IACnC;;;OAGG;IACH,cAAc,CAAC,EAAE,UAAU,CAAC;IAC5B;;OAEG;IACH,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC;;OAEG;IACH,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;CAC9B,CAAC"}
\ No newline at end of file
diff --git a/packages/expo-ui/build/jetpack-compose/Slider/index.d.ts b/packages/expo-ui/build/jetpack-compose/Slider/index.d.ts
index 2963e356a42635..85ba24ecdb04cb 100644
--- a/packages/expo-ui/build/jetpack-compose/Slider/index.d.ts
+++ b/packages/expo-ui/build/jetpack-compose/Slider/index.d.ts
@@ -32,6 +32,16 @@ export type SliderProps = {
* @default 1
*/
max?: number;
+ /**
+ * Lower limit the user can drag the thumb to. The visible track still
+ * spans `min..max`, but the thumb stops at `lowerLimit` during drag.
+ */
+ lowerLimit?: number;
+ /**
+ * Upper limit the user can drag the thumb to. The visible track still
+ * spans `min..max`, but the thumb stops at `upperLimit` during drag.
+ */
+ upperLimit?: number;
/**
* Whether the slider is enabled for user interaction.
* @default true
diff --git a/packages/expo-ui/build/jetpack-compose/Slider/index.d.ts.map b/packages/expo-ui/build/jetpack-compose/Slider/index.d.ts.map
index 3e8c5c815a8138..067f958ef4b7a1 100644
--- a/packages/expo-ui/build/jetpack-compose/Slider/index.d.ts.map
+++ b/packages/expo-ui/build/jetpack-compose/Slider/index.d.ts.map
@@ -1 +1 @@
-{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/jetpack-compose/Slider/index.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,cAAc,CAAC;AAE/C,OAAO,KAAK,EAAE,cAAc,EAAa,MAAM,aAAa,CAAC;AAa7D;;;GAGG;AACH,MAAM,MAAM,YAAY,GAAG;IACzB,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,gBAAgB,CAAC,EAAE,UAAU,CAAC;IAC9B,kBAAkB,CAAC,EAAE,UAAU,CAAC;IAChC,eAAe,CAAC,EAAE,UAAU,CAAC;IAC7B,iBAAiB,CAAC,EAAE,UAAU,CAAC;CAChC,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACxB;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;OAGG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC;IACb;;;OAGG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC;IACb;;;OAGG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;;OAGG;IACH,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB;;OAEG;IACH,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC;;;OAGG;IACH,qBAAqB,CAAC,EAAE,MAAM,IAAI,CAAC;IACnC;;OAEG;IACH,SAAS,CAAC,EAAE,cAAc,EAAE,CAAC;IAC7B;;OAEG;IACH,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC5B,CAAC;AAqDF;;;;GAIG;AACH,iBAAS,eAAe,CAAC,KAAK,EAAE,WAAW,2CAG1C;kBAHQ,eAAe;uBAnBF;QAAE,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;KAAE;uBAU7B;QAAE,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;KAAE;;AAiBnD,OAAO,EAAE,eAAe,IAAI,MAAM,EAAE,CAAC"}
\ No newline at end of file
+{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/jetpack-compose/Slider/index.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,cAAc,CAAC;AAE/C,OAAO,KAAK,EAAE,cAAc,EAAa,MAAM,aAAa,CAAC;AAa7D;;;GAGG;AACH,MAAM,MAAM,YAAY,GAAG;IACzB,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,gBAAgB,CAAC,EAAE,UAAU,CAAC;IAC9B,kBAAkB,CAAC,EAAE,UAAU,CAAC;IAChC,eAAe,CAAC,EAAE,UAAU,CAAC;IAC7B,iBAAiB,CAAC,EAAE,UAAU,CAAC;CAChC,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACxB;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;OAGG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC;IACb;;;OAGG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC;IACb;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;OAGG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;;OAGG;IACH,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB;;OAEG;IACH,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC;;;OAGG;IACH,qBAAqB,CAAC,EAAE,MAAM,IAAI,CAAC;IACnC;;OAEG;IACH,SAAS,CAAC,EAAE,cAAc,EAAE,CAAC;IAC7B;;OAEG;IACH,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC5B,CAAC;AAqDF;;;;GAIG;AACH,iBAAS,eAAe,CAAC,KAAK,EAAE,WAAW,2CAG1C;kBAHQ,eAAe;uBAnBF;QAAE,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;KAAE;uBAU7B;QAAE,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;KAAE;;AAiBnD,OAAO,EAAE,eAAe,IAAI,MAAM,EAAE,CAAC"}
\ No newline at end of file
diff --git a/packages/expo-ui/build/swift-ui/Slider/index.d.ts b/packages/expo-ui/build/swift-ui/Slider/index.d.ts
index a74750ed0a161a..9511c0237cf838 100644
--- a/packages/expo-ui/build/swift-ui/Slider/index.d.ts
+++ b/packages/expo-ui/build/swift-ui/Slider/index.d.ts
@@ -16,6 +16,16 @@ export type SliderProps = {
* The maximum value of the slider. Updating this value does not trigger callbacks if the current value is above `max`.
*/
max?: number;
+ /**
+ * Lower limit the user can drag the thumb to. The visible track still
+ * spans `min..max`, but the thumb stops at `lowerLimit` during drag.
+ */
+ lowerLimit?: number;
+ /**
+ * Upper limit the user can drag the thumb to. The visible track still
+ * spans `min..max`, but the thumb stops at `upperLimit` during drag.
+ */
+ upperLimit?: number;
/**
* A label describing the slider's purpose.
*/
diff --git a/packages/expo-ui/build/swift-ui/Slider/index.d.ts.map b/packages/expo-ui/build/swift-ui/Slider/index.d.ts.map
index 04eee4d7e0e04e..b48626392b4769 100644
--- a/packages/expo-ui/build/swift-ui/Slider/index.d.ts.map
+++ b/packages/expo-ui/build/swift-ui/Slider/index.d.ts.map
@@ -1 +1 @@
-{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/swift-ui/Slider/index.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,uBAAuB,EAAE,MAAM,UAAU,CAAC;AAExD,MAAM,MAAM,WAAW,GAAG;IACxB;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;OAEG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC;IACb;;OAEG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC;IACb;;OAEG;IACH,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACxB;;OAEG;IACH,iBAAiB,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACpC;;OAEG;IACH,iBAAiB,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACpC;;OAEG;IACH,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC;;OAEG;IACH,gBAAgB,CAAC,EAAE,CAAC,SAAS,EAAE,OAAO,KAAK,IAAI,CAAC;CACjD,GAAG,uBAAuB,CAAC;AAwC5B,wBAAgB,MAAM,CAAC,KAAK,EAAE,WAAW,2CAUxC"}
\ No newline at end of file
+{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/swift-ui/Slider/index.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,uBAAuB,EAAE,MAAM,UAAU,CAAC;AAExD,MAAM,MAAM,WAAW,GAAG;IACxB;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;OAEG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC;IACb;;OAEG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC;IACb;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;OAEG;IACH,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACxB;;OAEG;IACH,iBAAiB,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACpC;;OAEG;IACH,iBAAiB,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACpC;;OAEG;IACH,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC;;OAEG;IACH,gBAAgB,CAAC,EAAE,CAAC,SAAS,EAAE,OAAO,KAAK,IAAI,CAAC;CACjD,GAAG,uBAAuB,CAAC;AAwC5B,wBAAgB,MAAM,CAAC,KAAK,EAAE,WAAW,2CAUxC"}
\ No newline at end of file
diff --git a/packages/expo-ui/ios/SliderView.swift b/packages/expo-ui/ios/SliderView.swift
index 1ffa70e3be10bc..09a6771857c3d8 100644
--- a/packages/expo-ui/ios/SliderView.swift
+++ b/packages/expo-ui/ios/SliderView.swift
@@ -16,11 +16,11 @@ struct SliderView: ExpoSwiftUI.View {
#if !os(tvOS)
sliderContent
.onAppear {
- value = props.value ?? 0.0
+ value = clamp(props.value ?? 0.0)
}
.onChange(of: props.value) { newValue in
guard !isEditing else { return }
- value = newValue ?? 0.0
+ value = clamp(newValue ?? 0.0)
}
.onChange(of: value) { newValue in
if props.value != newValue {
@@ -35,6 +35,19 @@ struct SliderView: ExpoSwiftUI.View {
}
#if !os(tvOS)
+ private func clamp(_ raw: Float) -> Float {
+ let lower = Swift.max(props.min ?? -.infinity, props.lowerLimit ?? -.infinity)
+ let upper = Swift.min(props.max ?? .infinity, props.upperLimit ?? .infinity)
+ return Swift.min(upper, Swift.max(lower, raw))
+ }
+
+ private var clampedBinding: Binding {
+ Binding(
+ get: { value },
+ set: { newValue in value = clamp(newValue) }
+ )
+ }
+
@ViewBuilder
private var sliderContent: some View {
let label = props.children?.slot("label")
@@ -43,7 +56,7 @@ struct SliderView: ExpoSwiftUI.View {
if let min = props.min, let max = props.max, let step = props.step {
Slider(
- value: $value,
+ value: clampedBinding,
in: min...max,
step: step,
label: { label },
@@ -55,7 +68,7 @@ struct SliderView: ExpoSwiftUI.View {
}
} else if let min = props.min, let max = props.max {
Slider(
- value: $value,
+ value: clampedBinding,
in: min...max,
label: { label },
minimumValueLabel: { minimumValueLabel },
@@ -66,7 +79,7 @@ struct SliderView: ExpoSwiftUI.View {
}
} else if let step = props.step {
Slider(
- value: $value,
+ value: clampedBinding,
in: 0...1,
step: step,
label: { label },
@@ -78,7 +91,7 @@ struct SliderView: ExpoSwiftUI.View {
}
} else {
Slider(
- value: $value,
+ value: clampedBinding,
label: { label },
minimumValueLabel: { minimumValueLabel },
maximumValueLabel: { maximumValueLabel }
@@ -96,6 +109,8 @@ final class SliderProps: UIBaseViewProps {
@Field var step: Float?
@Field var min: Float?
@Field var max: Float?
+ @Field var lowerLimit: Float?
+ @Field var upperLimit: Float?
var onValueChanged = EventDispatcher()
var onEditingChanged = EventDispatcher()
}
diff --git a/packages/expo-ui/package.json b/packages/expo-ui/package.json
index 673b63d5ecc86e..dda2099ea92327 100644
--- a/packages/expo-ui/package.json
+++ b/packages/expo-ui/package.json
@@ -1,6 +1,6 @@
{
"name": "@expo/ui",
- "version": "56.0.4",
+ "version": "56.0.5",
"description": "A collection of UI components",
"sideEffects": [
"*.fx.js"
@@ -43,6 +43,10 @@
"types": "./build/community/picker/index.d.ts",
"default": "./src/community/picker/index.tsx"
},
+ "./community/slider": {
+ "types": "./build/community/slider/index.d.ts",
+ "default": "./src/community/slider/index.tsx"
+ },
"./community/masked-view": {
"types": "./build/community/masked-view/index.d.ts",
"default": "./src/community/masked-view/index.tsx"
diff --git a/packages/expo-ui/src/State/useNativeState.ts b/packages/expo-ui/src/State/useNativeState.ts
index d4dd47433fe5ac..a2852c566a0656 100644
--- a/packages/expo-ui/src/State/useNativeState.ts
+++ b/packages/expo-ui/src/State/useNativeState.ts
@@ -1,5 +1,6 @@
import { requireNativeModule } from 'expo';
import { type SharedObject, useReleasingSharedObject } from 'expo-modules-core';
+import { useRef } from 'react';
import { worklets } from './optionalWorklets';
@@ -19,14 +20,16 @@ export type ObservableState = SharedObject & {
};
/**
- * Creates an observable native state that is automatically cleaned up when the component unmounts.
+ * Creates an observable native state that is automatically cleaned up when the
+ * component unmounts. `initialValue` is captured once on the first render
*/
export function useNativeState(initialValue: T): ObservableState {
+ const initialValueRef = useRef(initialValue);
return useReleasingSharedObject(() => {
- const state = new ExpoUI.ObservableState({ value: initialValue });
+ const state = new ExpoUI.ObservableState({ value: initialValueRef.current });
defineValueProperty(state);
return state;
- }, [JSON.stringify(initialValue)]) as ObservableState;
+ }, []) as ObservableState;
}
type NativeObservableState = {
diff --git a/packages/expo-ui/src/community/slider/Slider.android.tsx b/packages/expo-ui/src/community/slider/Slider.android.tsx
new file mode 100644
index 00000000000000..e240d44d562bf1
--- /dev/null
+++ b/packages/expo-ui/src/community/slider/Slider.android.tsx
@@ -0,0 +1,49 @@
+import { type SliderProps } from './types';
+import { Host } from '../../jetpack-compose/Host';
+import { Slider as ComposeSlider } from '../../jetpack-compose/Slider';
+
+/**
+ * A drop-in replacement for `@react-native-community/slider` on Android.
+ * Renders a Material 3 `Slider` wrapped in a Host.
+ */
+export function Slider(props: SliderProps) {
+ const {
+ value,
+ minimumValue,
+ maximumValue,
+ lowerLimit,
+ upperLimit,
+ step,
+ disabled,
+ inverted,
+ minimumTrackTintColor,
+ maximumTrackTintColor,
+ thumbTintColor,
+ onValueChange,
+ style,
+ } = props;
+ const min = minimumValue ?? 0;
+ const max = maximumValue ?? 1;
+ const steps = step && step > 0 ? Math.max(0, Math.round((max - min) / step) - 1) : 0;
+ const hostStyle = inverted ? [style, { transform: [{ scaleX: -1 }] }] : style;
+ const colors = {
+ activeTrackColor: minimumTrackTintColor,
+ inactiveTrackColor: maximumTrackTintColor,
+ thumbColor: thumbTintColor,
+ };
+ return (
+
+
+
+ );
+}
diff --git a/packages/expo-ui/src/community/slider/Slider.ios.tsx b/packages/expo-ui/src/community/slider/Slider.ios.tsx
new file mode 100644
index 00000000000000..b9e0d6a46e98e2
--- /dev/null
+++ b/packages/expo-ui/src/community/slider/Slider.ios.tsx
@@ -0,0 +1,48 @@
+import { type SliderProps } from './types';
+import { Host } from '../../swift-ui/Host';
+import { Slider as SwiftUISlider } from '../../swift-ui/Slider';
+import { disabled as disabledModifier, tint as tintModifier } from '../../swift-ui/modifiers';
+import type { ModifierConfig } from '../../types';
+
+/**
+ * A drop-in replacement for `@react-native-community/slider` on iOS.
+ * Renders a SwiftUI `Slider` wrapped in a Host.
+ */
+export function Slider(props: SliderProps) {
+ const {
+ value,
+ minimumValue,
+ maximumValue,
+ lowerLimit,
+ upperLimit,
+ step,
+ disabled,
+ inverted,
+ minimumTrackTintColor,
+ onValueChange,
+ style,
+ } = props;
+ const hostStyle = inverted ? [style, { transform: [{ scaleX: -1 }] }] : style;
+ // SwiftUI's Slider only exposes `.tint(...)` for the minimum (active)
+ // track. `maximumTrackTintColor` and `thumbTintColor` are accepted at the
+ // type level but not visually applied on iOS
+ const modifiers: ModifierConfig[] = [];
+ if (disabled) modifiers.push(disabledModifier(true));
+ if (minimumTrackTintColor !== undefined) {
+ modifiers.push(tintModifier(minimumTrackTintColor as string));
+ }
+ return (
+
+ 0 ? step : undefined}
+ modifiers={modifiers.length > 0 ? modifiers : undefined}
+ onValueChange={onValueChange}
+ />
+
+ );
+}
diff --git a/packages/expo-ui/src/community/slider/Slider.tsx b/packages/expo-ui/src/community/slider/Slider.tsx
new file mode 100644
index 00000000000000..60acf1f8c70106
--- /dev/null
+++ b/packages/expo-ui/src/community/slider/Slider.tsx
@@ -0,0 +1,45 @@
+import * as React from 'react';
+import { StyleSheet } from 'react-native';
+
+import { type SliderProps } from './types';
+
+/**
+ * A drop-in replacement for `@react-native-community/slider`. Renders a
+ * SwiftUI `Slider` on iOS, a Material 3 `Slider` on Android, and a native
+ * HTML `` on web.
+ */
+export function Slider(props: SliderProps) {
+ const {
+ value,
+ minimumValue = 0,
+ maximumValue = 1,
+ lowerLimit,
+ upperLimit,
+ step,
+ disabled,
+ inverted,
+ minimumTrackTintColor,
+ onValueChange,
+ style,
+ } = props;
+ const clamp = (v: number) =>
+ Math.min(upperLimit ?? Infinity, Math.max(lowerLimit ?? -Infinity, v));
+ return (
+ 0 ? step : 'any'}
+ value={clamp(value ?? 0)}
+ disabled={disabled}
+ onChange={(e) => onValueChange?.(clamp(e.target.valueAsNumber))}
+ style={{
+ ...(StyleSheet.flatten(style) as React.CSSProperties),
+ ...(minimumTrackTintColor !== undefined && {
+ accentColor: minimumTrackTintColor as string,
+ }),
+ ...(inverted && { transform: 'scaleX(-1)' }),
+ }}
+ />
+ );
+}
diff --git a/packages/expo-ui/src/community/slider/index.tsx b/packages/expo-ui/src/community/slider/index.tsx
new file mode 100644
index 00000000000000..0d36bdae4a6743
--- /dev/null
+++ b/packages/expo-ui/src/community/slider/index.tsx
@@ -0,0 +1,7 @@
+import { Slider } from './Slider';
+
+export type { SliderProps } from './types';
+
+export default Slider;
+// named export needed for docs generator
+export { Slider };
diff --git a/packages/expo-ui/src/community/slider/types.tsx b/packages/expo-ui/src/community/slider/types.tsx
new file mode 100644
index 00000000000000..52f9db8cf748a6
--- /dev/null
+++ b/packages/expo-ui/src/community/slider/types.tsx
@@ -0,0 +1,75 @@
+import type { ColorValue, StyleProp, ViewStyle } from 'react-native';
+
+/**
+ * Props for the `Slider` community drop-in component.
+ * Compatible with `@react-native-community/slider`.
+ */
+export type SliderProps = {
+ /**
+ * Initial / current value of the slider.
+ * Behaves like the community lib: passing a new value updates the thumb,
+ * but live drag emits via `onValueChange` without needing external state.
+ * @default 0
+ */
+ value?: number;
+ /**
+ * Initial minimum value of the slider.
+ * @default 0
+ */
+ minimumValue?: number;
+ /**
+ * Initial maximum value of the slider.
+ * @default 1
+ */
+ maximumValue?: number;
+ /**
+ * The lower limit value of the slider. The user won't be able to slide
+ * below this limit.
+ */
+ lowerLimit?: number;
+ /**
+ * The upper limit value of the slider. The user won't be able to slide
+ * above this limit.
+ */
+ upperLimit?: number;
+ /**
+ * If true the user won't be able to move the slider.
+ * @default false
+ */
+ disabled?: boolean;
+ /**
+ * Step value of the slider. The value should be between 0 and
+ * (maximumValue - minimumValue). A value of 0 means continuous (no
+ * snapping).
+ * @default 0
+ */
+ step?: number;
+ /**
+ * Reverses the direction of the slider so the maximum value is on the
+ * left and the minimum value is on the right.
+ * @default false
+ */
+ inverted?: boolean;
+ /**
+ * Color of the track to the left of the thumb.
+ */
+ minimumTrackTintColor?: ColorValue;
+ /**
+ * Color of the track to the right of the thumb.
+ * @platform android
+ */
+ maximumTrackTintColor?: ColorValue;
+ /**
+ * Color of the thumb.
+ * @platform android
+ */
+ thumbTintColor?: ColorValue;
+ /**
+ * Callback continuously called while the user is dragging the slider.
+ */
+ onValueChange?: (value: number) => void;
+ /**
+ * Used to style and layout the Slider.
+ */
+ style?: StyleProp;
+};
diff --git a/packages/expo-ui/src/jetpack-compose/Slider/index.tsx b/packages/expo-ui/src/jetpack-compose/Slider/index.tsx
index 179a70e492ba4e..05523117de9ca3 100644
--- a/packages/expo-ui/src/jetpack-compose/Slider/index.tsx
+++ b/packages/expo-ui/src/jetpack-compose/Slider/index.tsx
@@ -47,6 +47,16 @@ export type SliderProps = {
* @default 1
*/
max?: number;
+ /**
+ * Lower limit the user can drag the thumb to. The visible track still
+ * spans `min..max`, but the thumb stops at `lowerLimit` during drag.
+ */
+ lowerLimit?: number;
+ /**
+ * Upper limit the user can drag the thumb to. The visible track still
+ * spans `min..max`, but the thumb stops at `upperLimit` during drag.
+ */
+ upperLimit?: number;
/**
* Whether the slider is enabled for user interaction.
* @default true
diff --git a/packages/expo-ui/src/swift-ui/Slider/index.tsx b/packages/expo-ui/src/swift-ui/Slider/index.tsx
index 8f0fc526ad4560..ca540fc58d1c83 100644
--- a/packages/expo-ui/src/swift-ui/Slider/index.tsx
+++ b/packages/expo-ui/src/swift-ui/Slider/index.tsx
@@ -21,6 +21,16 @@ export type SliderProps = {
* The maximum value of the slider. Updating this value does not trigger callbacks if the current value is above `max`.
*/
max?: number;
+ /**
+ * Lower limit the user can drag the thumb to. The visible track still
+ * spans `min..max`, but the thumb stops at `lowerLimit` during drag.
+ */
+ lowerLimit?: number;
+ /**
+ * Upper limit the user can drag the thumb to. The visible track still
+ * spans `min..max`, but the thumb stops at `upperLimit` during drag.
+ */
+ upperLimit?: number;
/**
* A label describing the slider's purpose.
*/
diff --git a/packages/expo-updates/CHANGELOG.md b/packages/expo-updates/CHANGELOG.md
index cd9ddcfc127e0c..d9ddde921bd4e2 100644
--- a/packages/expo-updates/CHANGELOG.md
+++ b/packages/expo-updates/CHANGELOG.md
@@ -10,6 +10,10 @@
### 💡 Others
+## 56.0.7 — 2026-05-11
+
+_This version does not introduce any user-facing changes._
+
## 56.0.6 — 2026-05-08
### 💡 Others
diff --git a/packages/expo-updates/android/build.gradle b/packages/expo-updates/android/build.gradle
index 500e00b69afc86..214dcd191c67da 100644
--- a/packages/expo-updates/android/build.gradle
+++ b/packages/expo-updates/android/build.gradle
@@ -42,7 +42,7 @@ expoModule {
}
group = 'host.exp.exponent'
-version = '56.0.6'
+version = '56.0.7'
// Utility method to derive boolean values from the environment or from Java properties,
// and return them as strings to be used in BuildConfig fields
@@ -89,7 +89,7 @@ android {
namespace "expo.modules.updates"
defaultConfig {
versionCode 31
- versionName '56.0.6'
+ versionName '56.0.7'
consumerProguardFiles("proguard-rules.pro")
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
diff --git a/packages/expo-updates/package.json b/packages/expo-updates/package.json
index 1932f03c3729ff..2ee761dc009be6 100644
--- a/packages/expo-updates/package.json
+++ b/packages/expo-updates/package.json
@@ -1,6 +1,6 @@
{
"name": "expo-updates",
- "version": "56.0.6",
+ "version": "56.0.7",
"description": "Fetches and manages remotely-hosted assets and updates to your app's JS bundle.",
"main": "build/index.js",
"types": "build/index.d.ts",
diff --git a/packages/expo-widgets/CHANGELOG.md b/packages/expo-widgets/CHANGELOG.md
index 94389f3f284b94..fdfee245c982ad 100644
--- a/packages/expo-widgets/CHANGELOG.md
+++ b/packages/expo-widgets/CHANGELOG.md
@@ -10,6 +10,10 @@
### 💡 Others
+## 56.0.6 — 2026-05-11
+
+_This version does not introduce any user-facing changes._
+
## 56.0.5 — 2026-05-08
_This version does not introduce any user-facing changes._
diff --git a/packages/expo-widgets/package.json b/packages/expo-widgets/package.json
index ed9c01747dd8cf..05ceeb0e8d9ffb 100644
--- a/packages/expo-widgets/package.json
+++ b/packages/expo-widgets/package.json
@@ -1,6 +1,6 @@
{
"name": "expo-widgets",
- "version": "56.0.5",
+ "version": "56.0.6",
"description": "Widgets.",
"main": "build/index.js",
"types": "build/index.d.ts",
@@ -32,7 +32,7 @@
"homepage": "https://docs.expo.dev/versions/latest/sdk/widgets/",
"dependencies": {
"@expo/plist": "workspace:^0.6.0",
- "@expo/ui": "workspace:~56.0.4"
+ "@expo/ui": "workspace:~56.0.5"
},
"devDependencies": {
"@expo/spawn-async": "^1.7.2",
diff --git a/packages/expo/CHANGELOG.md b/packages/expo/CHANGELOG.md
index ab308c554c78a2..54c6726a41ffdf 100644
--- a/packages/expo/CHANGELOG.md
+++ b/packages/expo/CHANGELOG.md
@@ -8,10 +8,18 @@
### 🐛 Bug fixes
-- [iOS] Fixed launch-time crash in apps with source-built React Native by wiring the React `RuntimeScheduler` into `ExpoModulesJSI` from `ExpoReactNativeFactory`. ([#45636](https://github.com/expo/expo/pull/45636) by [@tsapeta](https://github.com/tsapeta))
-
### 💡 Others
+## 56.0.0-preview.9 — 2026-05-12
+
+_This version does not introduce any user-facing changes._
+
+## 56.0.0-preview.8 — 2026-05-11
+
+### 🐛 Bug fixes
+
+- [iOS] Fixed launch-time crash in apps with source-built React Native by wiring the React `RuntimeScheduler` into `ExpoModulesJSI` from `ExpoReactNativeFactory`. ([#45636](https://github.com/expo/expo/pull/45636) by [@tsapeta](https://github.com/tsapeta))
+
## 56.0.0-preview.7 — 2026-05-08
### 🐛 Bug fixes
diff --git a/packages/expo/android/build.gradle b/packages/expo/android/build.gradle
index 46ec72c6db9217..3d903791022bb1 100644
--- a/packages/expo/android/build.gradle
+++ b/packages/expo/android/build.gradle
@@ -10,7 +10,7 @@ buildscript {
}
group = 'host.exp.exponent'
-version = '56.0.0-preview.7'
+version = '56.0.0-preview.9'
expoModule {
// We can't prebuild the module because it depends on the generated files.
@@ -21,7 +21,7 @@ android {
namespace "expo.core"
defaultConfig {
versionCode 1
- versionName "56.0.0-preview.7"
+ versionName "56.0.0-preview.9"
consumerProguardFiles("proguard-rules.pro")
}
testOptions {
diff --git a/packages/expo/bundledNativeModules.json b/packages/expo/bundledNativeModules.json
index 56438d5ca991ee..4dfff02df28718 100644
--- a/packages/expo/bundledNativeModules.json
+++ b/packages/expo/bundledNativeModules.json
@@ -1,8 +1,8 @@
{
"@expo/fingerprint": "~0.17.4",
- "@expo/metro-runtime": "~56.0.5",
+ "@expo/metro-runtime": "~56.0.6",
"@expo/vector-icons": "^15.0.2",
- "@expo/ui": "~56.0.4",
+ "@expo/ui": "~56.0.5",
"@react-native-async-storage/async-storage": "2.2.0",
"@react-native-community/datetimepicker": "9.1.0",
"@react-native-masked-view/masked-view": "0.3.2",
@@ -16,28 +16,28 @@
"expo-analytics-amplitude": "~11.3.0",
"expo-app-auth": "~11.1.0",
"expo-app-loader-provider": "~8.0.0",
- "expo-app-metrics": "~56.0.5",
+ "expo-app-metrics": "~56.0.6",
"expo-apple-authentication": "~56.0.3",
"expo-application": "~56.0.3",
- "expo-asset": "~56.0.6",
- "expo-audio": "~56.0.3",
- "expo-auth-session": "~56.0.4",
- "expo-background-fetch": "~56.0.5",
- "expo-background-task": "~56.0.5",
+ "expo-asset": "~56.0.7",
+ "expo-audio": "~56.0.4",
+ "expo-auth-session": "~56.0.5",
+ "expo-background-fetch": "~56.0.6",
+ "expo-background-task": "~56.0.6",
"expo-battery": "~56.0.3",
"expo-blur": "~56.0.3",
"expo-brightness": "~56.0.3",
- "expo-brownfield": "~56.0.5",
- "expo-build-properties": "~56.0.5",
+ "expo-brownfield": "~56.0.6",
+ "expo-build-properties": "~56.0.6",
"expo-calendar": "~56.0.4",
"expo-camera": "~56.0.3",
"expo-cellular": "~56.0.3",
"expo-checkbox": "~56.0.1",
"expo-clipboard": "~56.0.3",
- "expo-constants": "~56.0.6",
+ "expo-constants": "~56.0.7",
"expo-contacts": "~56.0.3",
"expo-crypto": "~56.0.3",
- "expo-dev-client": "~56.0.5",
+ "expo-dev-client": "~56.0.6",
"expo-device": "~56.0.4",
"expo-document-picker": "~56.0.3",
"expo-file-system": "~56.0.4",
@@ -48,37 +48,37 @@
"expo-haptics": "~56.0.3",
"expo-image": "~56.0.4",
"expo-image-loader": "~56.0.3",
- "expo-image-manipulator": "~56.0.5",
- "expo-image-picker": "~56.0.5",
+ "expo-image-manipulator": "~56.0.6",
+ "expo-image-picker": "~56.0.6",
"expo-intent-launcher": "~56.0.3",
- "expo-insights": "~56.0.5",
+ "expo-insights": "~56.0.6",
"expo-keep-awake": "~56.0.3",
"expo-linear-gradient": "~56.0.4",
- "expo-linking": "~56.0.4",
+ "expo-linking": "~56.0.5",
"expo-local-authentication": "~56.0.3",
"expo-localization": "~56.0.3",
- "expo-location": "~56.0.5",
+ "expo-location": "~56.0.6",
"expo-mail-composer": "~56.0.3",
"expo-manifests": "~56.0.2",
- "expo-maps": "~56.0.3",
+ "expo-maps": "~56.0.4",
"expo-mcp": "~0.2.1",
"expo-media-library": "~56.0.3",
"expo-mesh-gradient": "~56.0.3",
- "expo-module-template": "~56.0.3",
- "expo-modules-core": "~56.0.5",
+ "expo-module-template": "~56.0.4",
+ "expo-modules-core": "~56.0.6",
"expo-navigation-bar": "~56.0.3",
"expo-network": "~56.0.3",
- "expo-notifications": "~56.0.5",
- "expo-observe": "~56.0.5",
+ "expo-notifications": "~56.0.6",
+ "expo-observe": "~56.0.6",
"expo-print": "~56.0.3",
"expo-live-photo": "~56.0.3",
- "expo-router": "~56.1.1",
+ "expo-router": "~56.1.3",
"expo-screen-capture": "~56.0.3",
"expo-screen-orientation": "~56.0.3",
"expo-secure-store": "~56.0.3",
"expo-sensors": "~56.0.3",
"expo-server": "~56.0.1",
- "expo-sharing": "~56.0.5",
+ "expo-sharing": "~56.0.6",
"expo-sms": "~56.0.3",
"expo-speech": "~56.0.3",
"expo-splash-screen": "~56.0.4",
@@ -87,13 +87,13 @@
"expo-store-review": "~56.0.3",
"expo-symbols": "~56.0.5",
"expo-system-ui": "~56.0.4",
- "expo-task-manager": "~56.0.5",
+ "expo-task-manager": "~56.0.6",
"expo-tracking-transparency": "~56.0.3",
- "expo-updates": "~56.0.6",
+ "expo-updates": "~56.0.7",
"expo-video-thumbnails": "~56.0.3",
"expo-video": "~56.1.0",
"expo-web-browser": "~56.0.4",
- "expo-widgets": "~56.0.5",
+ "expo-widgets": "~56.0.6",
"jest-expo": "~56.0.0",
"lottie-react-native": "~7.3.4",
"react": "19.2.3",
diff --git a/packages/expo/package.json b/packages/expo/package.json
index 4815996c6f4b74..aa3b1c64e4ba0f 100644
--- a/packages/expo/package.json
+++ b/packages/expo/package.json
@@ -1,6 +1,6 @@
{
"name": "expo",
- "version": "56.0.0-preview.7",
+ "version": "56.0.0-preview.9",
"description": "The Expo SDK",
"main": "src/Expo.ts",
"module": "src/Expo.ts",
@@ -75,26 +75,26 @@
"homepage": "https://github.com/expo/expo/tree/main/packages/expo",
"dependencies": {
"@babel/runtime": "^7.20.0",
- "@expo/cli": "workspace:^56.1.0",
+ "@expo/cli": "workspace:^56.1.2",
"@expo/config": "workspace:~56.0.3",
"@expo/config-plugins": "workspace:~56.0.3",
"@expo/devtools": "workspace:~56.0.2",
"@expo/dom-webview": "workspace:~56.0.4",
"@expo/fingerprint": "workspace:^0.17.4",
- "@expo/local-build-cache-provider": "workspace:^56.0.2",
- "@expo/log-box": "workspace:^56.0.6",
+ "@expo/local-build-cache-provider": "workspace:^56.0.3",
+ "@expo/log-box": "workspace:^56.0.7",
"@expo/metro": "~56.0.0",
- "@expo/metro-config": "workspace:~56.0.5",
+ "@expo/metro-config": "workspace:~56.0.6",
"@expo/vector-icons": "^15.0.2",
"@ungap/structured-clone": "^1.3.0",
- "babel-preset-expo": "workspace:~56.0.5",
- "expo-asset": "workspace:~56.0.6",
- "expo-constants": "workspace:~56.0.6",
+ "babel-preset-expo": "workspace:~56.0.6",
+ "expo-asset": "workspace:~56.0.7",
+ "expo-constants": "workspace:~56.0.7",
"expo-file-system": "workspace:~56.0.4",
"expo-font": "workspace:~56.0.3",
"expo-keep-awake": "workspace:~56.0.3",
- "expo-modules-autolinking": "workspace:~56.0.3",
- "expo-modules-core": "workspace:~56.0.5",
+ "expo-modules-autolinking": "workspace:~56.0.4",
+ "expo-modules-core": "workspace:~56.0.6",
"pretty-format": "^29.7.0",
"react-refresh": "^0.14.2",
"whatwg-url-minimum": "^0.1.2"
diff --git a/packages/patch-project/CHANGELOG.md b/packages/patch-project/CHANGELOG.md
index b169455c119e7b..60685e995e344c 100644
--- a/packages/patch-project/CHANGELOG.md
+++ b/packages/patch-project/CHANGELOG.md
@@ -10,6 +10,10 @@
### 💡 Others
+## 56.0.8 — 2026-05-11
+
+_This version does not introduce any user-facing changes._
+
## 56.0.7 — 2026-05-08
_This version does not introduce any user-facing changes._
diff --git a/packages/patch-project/package.json b/packages/patch-project/package.json
index bfc6e371dedb88..44f8af53accb8f 100644
--- a/packages/patch-project/package.json
+++ b/packages/patch-project/package.json
@@ -1,6 +1,6 @@
{
"name": "patch-project",
- "version": "56.0.7",
+ "version": "56.0.8",
"description": "An Expo config-plugin and tool to support patch-based CNG",
"main": "build/withPatchPlugin.js",
"types": "build/withPatchPlugin.d.ts",
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index f081c5b877006f..489dcdd49c3eba 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -1798,22 +1798,22 @@ importers:
specifier: workspace:^0.9.2
version: link:../image-utils
'@expo/inline-modules':
- specifier: workspace:^0.0.4
+ specifier: workspace:^0.0.5
version: link:../inline-modules
'@expo/json-file':
specifier: workspace:^10.1.0
version: link:../json-file
'@expo/log-box':
- specifier: workspace:^56.0.6
+ specifier: workspace:^56.0.7
version: link:../log-box
'@expo/metro':
specifier: ~56.0.0
version: 56.0.0
'@expo/metro-config':
- specifier: workspace:~56.0.5
+ specifier: workspace:~56.0.6
version: link:../metro-config
'@expo/metro-file-map':
- specifier: workspace:^56.0.0
+ specifier: workspace:^56.0.1
version: link:../metro-file-map
'@expo/osascript':
specifier: workspace:^2.5.0
@@ -1825,13 +1825,13 @@ importers:
specifier: workspace:^0.6.0
version: link:../plist
'@expo/prebuild-config':
- specifier: workspace:^56.0.4
+ specifier: workspace:^56.0.5
version: link:../prebuild-config
'@expo/require-utils':
specifier: workspace:^56.1.0
version: link:../require-utils
'@expo/router-server':
- specifier: workspace:^56.0.5
+ specifier: workspace:^56.0.6
version: link:../router-server
'@expo/schema-utils':
specifier: workspace:^56.0.0
@@ -2664,7 +2664,7 @@ importers:
packages/@expo/metro-runtime:
dependencies:
'@expo/log-box':
- specifier: workspace:^56.0.6
+ specifier: workspace:^56.0.7
version: link:../log-box
anser:
specifier: ^1.4.9
@@ -2804,7 +2804,7 @@ importers:
specifier: ^4.3.1
version: 4.4.3
expo-modules-autolinking:
- specifier: workspace:~56.0.3
+ specifier: workspace:~56.0.4
version: link:../../expo-modules-autolinking
resolve-from:
specifier: ^5.0.0
@@ -2869,13 +2869,13 @@ importers:
packages/@expo/router-server:
dependencies:
'@expo/metro-runtime':
- specifier: workspace:^56.0.5
+ specifier: workspace:^56.0.6
version: link:../metro-runtime
debug:
specifier: ^4.3.4
version: 4.4.3
expo-constants:
- specifier: workspace:^56.0.6
+ specifier: workspace:^56.0.7
version: link:../../expo-constants
expo-font:
specifier: workspace:^56.0.3
@@ -3096,7 +3096,7 @@ importers:
specifier: ^4.3.4
version: 4.4.3
expo-widgets:
- specifier: workspace:^56.0.5
+ specifier: workspace:^56.0.6
version: link:../expo-widgets
devDependencies:
'@babel/core':
@@ -3437,7 +3437,7 @@ importers:
specifier: ^7.20.0
version: 7.29.2
'@expo/cli':
- specifier: workspace:^56.1.0
+ specifier: workspace:^56.1.2
version: link:../@expo/cli
'@expo/config':
specifier: workspace:~56.0.3
@@ -3455,16 +3455,16 @@ importers:
specifier: workspace:^0.17.4
version: link:../@expo/fingerprint
'@expo/local-build-cache-provider':
- specifier: workspace:^56.0.2
+ specifier: workspace:^56.0.3
version: link:../@expo/local-build-cache-provider
'@expo/log-box':
- specifier: workspace:^56.0.6
+ specifier: workspace:^56.0.7
version: link:../@expo/log-box
'@expo/metro':
specifier: ~56.0.0
version: 56.0.0
'@expo/metro-config':
- specifier: workspace:~56.0.5
+ specifier: workspace:~56.0.6
version: link:../@expo/metro-config
'@expo/vector-icons':
specifier: ^15.0.2
@@ -3473,13 +3473,13 @@ importers:
specifier: ^1.3.0
version: 1.3.0
babel-preset-expo:
- specifier: workspace:~56.0.5
+ specifier: workspace:~56.0.6
version: link:../babel-preset-expo
expo-asset:
- specifier: workspace:~56.0.6
+ specifier: workspace:~56.0.7
version: link:../expo-asset
expo-constants:
- specifier: workspace:~56.0.6
+ specifier: workspace:~56.0.7
version: link:../expo-constants
expo-file-system:
specifier: workspace:~56.0.4
@@ -3491,10 +3491,10 @@ importers:
specifier: workspace:~56.0.3
version: link:../expo-keep-awake
expo-modules-autolinking:
- specifier: workspace:~56.0.3
+ specifier: workspace:~56.0.4
version: link:../expo-modules-autolinking
expo-modules-core:
- specifier: workspace:~56.0.5
+ specifier: workspace:~56.0.6
version: link:../expo-modules-core
pretty-format:
specifier: ^29.7.0
@@ -3628,7 +3628,7 @@ importers:
specifier: workspace:^0.9.2
version: link:../@expo/image-utils
expo-constants:
- specifier: workspace:~56.0.6
+ specifier: workspace:~56.0.7
version: link:../expo-constants
react:
specifier: 19.2.3
@@ -3687,13 +3687,13 @@ importers:
specifier: workspace:~56.0.3
version: link:../expo-application
expo-constants:
- specifier: workspace:~56.0.6
+ specifier: workspace:~56.0.7
version: link:../expo-constants
expo-crypto:
specifier: workspace:~56.0.3
version: link:../expo-crypto
expo-linking:
- specifier: workspace:~56.0.4
+ specifier: workspace:~56.0.5
version: link:../expo-linking
expo-web-browser:
specifier: workspace:~56.0.4
@@ -3721,7 +3721,7 @@ importers:
packages/expo-background-fetch:
dependencies:
expo-task-manager:
- specifier: workspace:~56.0.5
+ specifier: workspace:~56.0.6
version: link:../expo-task-manager
devDependencies:
'@types/node':
@@ -3737,7 +3737,7 @@ importers:
packages/expo-background-task:
dependencies:
expo-task-manager:
- specifier: workspace:~56.0.5
+ specifier: workspace:~56.0.6
version: link:../expo-task-manager
devDependencies:
'@types/node':
@@ -3840,7 +3840,7 @@ importers:
specifier: ^5.2.0
version: 5.2.2
expo-build-properties:
- specifier: workspace:~56.0.5
+ specifier: workspace:~56.0.6
version: link:../expo-build-properties
expo-manifests:
specifier: workspace:~56.0.1
@@ -4098,10 +4098,10 @@ importers:
packages/expo-dev-client:
dependencies:
expo-dev-launcher:
- specifier: workspace:~56.0.5
+ specifier: workspace:~56.0.6
version: link:../expo-dev-launcher
expo-dev-menu:
- specifier: workspace:~56.0.5
+ specifier: workspace:~56.0.6
version: link:../expo-dev-menu
expo-dev-menu-interface:
specifier: workspace:~56.0.0
@@ -4132,7 +4132,7 @@ importers:
specifier: workspace:^56.0.0
version: link:../@expo/schema-utils
expo-dev-menu:
- specifier: workspace:~56.0.5
+ specifier: workspace:~56.0.6
version: link:../expo-dev-menu
expo-manifests:
specifier: workspace:~56.0.1
@@ -4589,7 +4589,7 @@ importers:
packages/expo-linking:
dependencies:
expo-constants:
- specifier: workspace:~56.0.6
+ specifier: workspace:~56.0.7
version: link:../expo-constants
invariant:
specifier: ^2.2.4
@@ -4873,7 +4873,7 @@ importers:
specifier: ~0.0.8
version: 0.0.8
expo-modules-jsi:
- specifier: workspace:~56.0.2
+ specifier: workspace:~56.0.3
version: link:../expo-modules-jsi
invariant:
specifier: ^2.2.4
@@ -4996,7 +4996,7 @@ importers:
specifier: workspace:~56.0.3
version: link:../expo-application
expo-constants:
- specifier: workspace:~56.0.6
+ specifier: workspace:~56.0.7
version: link:../expo-constants
react:
specifier: 19.2.3
@@ -5024,7 +5024,7 @@ importers:
packages/expo-observe:
dependencies:
expo-app-metrics:
- specifier: workspace:~56.0.5
+ specifier: workspace:~56.0.6
version: link:../expo-app-metrics
expo-eas-client:
specifier: workspace:~56.0.0
@@ -5081,16 +5081,16 @@ importers:
packages/expo-router:
dependencies:
'@expo/log-box':
- specifier: workspace:^56.0.6
+ specifier: workspace:^56.0.7
version: link:../@expo/log-box
'@expo/metro-runtime':
- specifier: workspace:^56.0.5
+ specifier: workspace:^56.0.6
version: link:../@expo/metro-runtime
'@expo/schema-utils':
specifier: workspace:^56.0.0
version: link:../@expo/schema-utils
'@expo/ui':
- specifier: workspace:^56.0.4
+ specifier: workspace:^56.0.5
version: link:../expo-ui
'@radix-ui/react-slot':
specifier: ^1.2.0
@@ -5120,7 +5120,7 @@ importers:
specifier: ^4.0.0
version: 4.0.0
expo-constants:
- specifier: workspace:^56.0.6
+ specifier: workspace:^56.0.7
version: link:../expo-constants
expo-glass-effect:
specifier: workspace:^56.0.4
@@ -5129,7 +5129,7 @@ importers:
specifier: workspace:^56.0.4
version: link:../expo-image
expo-linking:
- specifier: workspace:^56.0.4
+ specifier: workspace:^56.0.5
version: link:../expo-linking
expo-server:
specifier: workspace:^56.0.0
@@ -5897,7 +5897,7 @@ importers:
specifier: workspace:^0.6.0
version: link:../@expo/plist
'@expo/ui':
- specifier: workspace:~56.0.4
+ specifier: workspace:~56.0.5
version: link:../expo-ui
react:
specifier: 19.2.3
diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml
index 688932566b121f..50216695a257f6 100644
--- a/pnpm-workspace.yaml
+++ b/pnpm-workspace.yaml
@@ -48,3 +48,11 @@ minimumReleaseAgeExclude:
- 'react-native-reanimated'
- 'react-native-screens'
- 'whatwg-url-minimum'
+ - 'expo'
+ - 'expo-asset'
+ - 'expo-constants'
+ - 'expo-modules-autolinking'
+ - 'expo-modules-core'
+ - 'expo-modules-jsi'
+ - 'babel-preset-expo'
+ - 'jest-expo'
diff --git a/templates/expo-template-bare-minimum/package.json b/templates/expo-template-bare-minimum/package.json
index baa0a4a2fd3765..653ad6e1936134 100644
--- a/templates/expo-template-bare-minimum/package.json
+++ b/templates/expo-template-bare-minimum/package.json
@@ -2,7 +2,7 @@
"name": "expo-template-bare-minimum",
"description": "This bare project template includes a minimal setup for using unimodules with React Native.",
"license": "0BSD",
- "version": "56.0.7",
+ "version": "56.0.9",
"main": "index.js",
"scripts": {
"start": "expo start --dev-client",
@@ -11,7 +11,7 @@
"web": "expo start --web"
},
"dependencies": {
- "expo": "~56.0.0-preview.7",
+ "expo": "~56.0.0-preview.9",
"expo-status-bar": "~56.0.4",
"react": "19.2.3",
"react-native": "0.85.3"
diff --git a/templates/expo-template-blank-typescript/package.json b/templates/expo-template-blank-typescript/package.json
index f043f2e14f6dd9..23fd3d178c5ee6 100644
--- a/templates/expo-template-blank-typescript/package.json
+++ b/templates/expo-template-blank-typescript/package.json
@@ -2,7 +2,7 @@
"name": "expo-template-blank-typescript",
"description": "The Blank project template includes the minimum dependencies to run and an empty root component.",
"license": "0BSD",
- "version": "56.0.7",
+ "version": "56.0.9",
"main": "index.ts",
"scripts": {
"start": "expo start",
@@ -11,7 +11,7 @@
"web": "expo start --web"
},
"dependencies": {
- "expo": "~56.0.0-preview.7",
+ "expo": "~56.0.0-preview.9",
"expo-status-bar": "~56.0.4",
"react": "19.2.3",
"react-native": "0.85.3"
diff --git a/templates/expo-template-blank/package.json b/templates/expo-template-blank/package.json
index 608212d773c755..bc5285c7247d59 100644
--- a/templates/expo-template-blank/package.json
+++ b/templates/expo-template-blank/package.json
@@ -2,7 +2,7 @@
"name": "expo-template-blank",
"description": "The Blank project template includes the minimum dependencies to run and an empty root component.",
"license": "0BSD",
- "version": "56.0.7",
+ "version": "56.0.9",
"main": "index.js",
"scripts": {
"start": "expo start",
@@ -11,7 +11,7 @@
"web": "expo start --web"
},
"dependencies": {
- "expo": "~56.0.0-preview.7",
+ "expo": "~56.0.0-preview.9",
"expo-status-bar": "~56.0.4",
"react": "19.2.3",
"react-native": "0.85.3"
diff --git a/templates/expo-template-default/package.json b/templates/expo-template-default/package.json
index 0a61c04f96b8b3..73e246f90b844d 100644
--- a/templates/expo-template-default/package.json
+++ b/templates/expo-template-default/package.json
@@ -2,7 +2,7 @@
"name": "expo-template-default",
"license": "0BSD",
"main": "expo-router/entry",
- "version": "56.0.7",
+ "version": "56.0.9",
"scripts": {
"start": "expo start",
"reset-project": "node ./scripts/reset-project.js",
@@ -12,15 +12,15 @@
"lint": "expo lint"
},
"dependencies": {
- "@expo/ui": "~56.0.4",
- "expo": "~56.0.0-preview.7",
- "expo-constants": "~56.0.6",
+ "@expo/ui": "~56.0.5",
+ "expo": "~56.0.0-preview.9",
+ "expo-constants": "~56.0.7",
"expo-device": "~56.0.4",
"expo-font": "~56.0.3",
"expo-glass-effect": "~56.0.4",
"expo-image": "~56.0.4",
- "expo-linking": "~56.0.4",
- "expo-router": "~56.1.1",
+ "expo-linking": "~56.0.5",
+ "expo-router": "~56.1.3",
"expo-splash-screen": "~56.0.4",
"expo-status-bar": "~56.0.4",
"expo-symbols": "~56.0.5",
diff --git a/templates/expo-template-tabs/package.json b/templates/expo-template-tabs/package.json
index 90bb61adbdf5d4..f2bb758a3e429e 100644
--- a/templates/expo-template-tabs/package.json
+++ b/templates/expo-template-tabs/package.json
@@ -3,7 +3,7 @@
"main": "expo-router/entry",
"description": "The Tab Navigation project template includes several example screens.",
"license": "0BSD",
- "version": "56.0.7",
+ "version": "56.0.9",
"scripts": {
"start": "expo start",
"android": "expo start --android",
@@ -11,12 +11,12 @@
"web": "expo start --web"
},
"dependencies": {
- "expo": "~56.0.0-preview.7",
+ "expo": "~56.0.0-preview.9",
"expo-symbols": "~56.0.5",
- "expo-constants": "~56.0.6",
+ "expo-constants": "~56.0.7",
"expo-font": "~56.0.3",
- "expo-linking": "~56.0.4",
- "expo-router": "~56.1.1",
+ "expo-linking": "~56.0.5",
+ "expo-router": "~56.1.3",
"expo-splash-screen": "~56.0.4",
"expo-status-bar": "~56.0.4",
"expo-web-browser": "~56.0.4",
diff --git a/tools/src/commands/GenerateDocsAPIData.ts b/tools/src/commands/GenerateDocsAPIData.ts
index 8a98e7733dd592..2ecdf60eacc4c5 100644
--- a/tools/src/commands/GenerateDocsAPIData.ts
+++ b/tools/src/commands/GenerateDocsAPIData.ts
@@ -28,6 +28,7 @@ const uiPackagesMapping: Record = {
'expo-ui/community/masked-view': ['community/masked-view/index.tsx', 'expo-ui'],
'expo-ui/community/picker': ['community/picker/index.tsx', 'expo-ui'],
'expo-ui/community/segmented-control': ['community/segmented-control/index.tsx', 'expo-ui'],
+ 'expo-ui/community/slider': ['community/slider/index.tsx', 'expo-ui'],
// Swift UI
'expo-ui/swift-ui/accessorywidgetbackground': [