The Expo CLI
Last release today
26 Aug 2026
Ships on a steady schedule
a new release about every 9 days
Rarely documented
notes for 4 of 350 stable releases
Nothing withdrawn
no release was ever pulled
4 years old
501 releases ยท first in 2022
Release timeline
501 releases since 2022Releases
- 58.0.0-canary-20260812-27f94d412 Aug 2026pre-release
Nothing published for this version
- 58.0.0-canary-20260806-8c2d0076 Aug 2026pre-release
Nothing published for this version
- 57.0.1926 Aug 2026
Nothing published for this version
- 57.0.1824 Aug 2026
Nothing published for this version
- 57.0.1720 Aug 2026
Nothing published for this version
- 57.0.1617 Aug 2026
Nothing published for this version
- 57.0.1514 Aug 2026
Nothing published for this version
- 57.0.1410 Aug 2026
Nothing published for this version
- 57.0.136 Aug 2026
Nothing published for this version
- 57.0.124 Aug 2026
Nothing published for this version
- 57.0.1129 Jul 2026
Nothing published for this version
- 57.0.1022 Jul 2026
Nothing published for this version
- 57.0.917 Jul 2026
Nothing published for this version
- 57.0.815 Jul 2026
Nothing published for this version
- 57.0.715 Jul 2026
Nothing published for this version
- 57.0.67 Jul 2026
Nothing published for this version
- 57.0.57 Jul 2026
Nothing published for this version
- 57.0.43 Jul 2026
Nothing published for this version
- 57.0.330 Jun 2026
Nothing published for this version
- 57.0.230 Jun 2026
Nothing published for this version
- 57.0.127 Jun 2026
Nothing published for this version
- 57.0.025 Jun 2026
Release notes
Open source โ๐ Breaking changes
@expo/ui- [universal][android] Use
BasicTextFieldcomponent instead of Filled Material TextField. (#46442 by @nishan) (#46442 by @intergalacticspacehighway)
- [universal][android] Use
expo-modules-jsiexpo-font- [web] Removed
Server.resetServerContext(). Server-side font state is now scoped per-render viaAsyncLocalStorage. (#46669 by @hassankhan)
- [web] Removed
@expo/cli- Make
expo prebuildclear and regenerate the native folders by default. Pass--no-cleanto apply changes to the existing folders instead. (#47209 by @alanjhughes)
- Make
๐ New features
- Initial release of
@expo/require-utils๐ฅณ pod-install@expo/ui- [iOS] Added the SwiftUI
accessibilityHiddenmodifier to hide decorative views from VoiceOver and other assistive technologies during element traversal. (#46579 by @ramonclaudio) - [iOS] Added the SwiftUI
accessibilityIdentifiermodifier to set a stable identifier for UI testing tools such as XCUITest. (#46556 by @ramonclaudio) - [iOS] Added the SwiftUI
dynamicTypeSizemodifier to set or constrain the Dynamic Type size within a view. Accepts a single size or a{ min, max }range, and cascades from<Host>to bound how far text scales at the largest accessibility sizes. (#46540 by @ramonclaudio) - [iOS] Added
childrenprop toLabelcomponent, allowing custom title views (e.g. aVStackwith title and subtitle) while preserving native icon spacing and Dynamic Type icon sizing. - [iOS] Add
buttonBorderShapeSwiftUI modifier, which reshapes a styled button (for example aglassbutton) while preserving its native press effect. (#46348 by @nishan) (#46348 by @intergalacticspacehighway) - [jetpack-compose] Added
NavigationBarandNavigationBarItemcomponents. - [iOS] Added the SwiftUI
listRowSpacingmodifier. (#46417 by @qiyangdev) - [iOS] Added support for custom SF Symbols in the SwiftUI
Imagecomponent. (#46183 by @cinques) - [swift-ui] Added
<DisclosureGroup.Label>for custom label style. (#46288 by @kudo) - [universal] Added
<Collapsible.labelStyle>for custom label style. (#46288 by @kudo) - [jetpack-compose] Added
dropShadowandinnerShadowmodifiers. (#46364 by @duyanhv) - [iOS] Added the SwiftUI
imageScalemodifier to scale SF Symbols within a view relative to the surrounding text (small,medium,large). (#46774 by @ramonclaudio) - [jetpack-compose] Added
onGloballyPositionedmodifier, which reports a composable's window position and size. (#46744 by @nishan) (#46744 by @intergalacticspacehighway) - [iOS] Extended the SwiftUI
onGeometryChangemodifier to also report the view's global position (x/y) alongside its size. (#46744 by @nishan) (#46744 by @intergalacticspacehighway) - [iOS] Added the SwiftUI
minimumScaleFactormodifier to let text shrink down to a given fraction of its size before truncating. (#46740 by @nishan) (#46740 by @intergalacticspacehighway) - [iOS][android] Added React Compiler-friendly
get()/set()accessors touseNativeState, as an alternative to reading and writing.value. (#46690 by @nishan) (#46692 by @intergalacticspacehighway) - [jetpack-compose] Added
BasicTextFieldcomponent. (#46442 by @nishan) (#46442 by @intergalacticspacehighway) - [iOS] Added the SwiftUI
accessibilityInputLabelsmodifier to set alternative spoken phrases Voice Control uses to refer to a view (for example "Hang up" for an "End" button). (#46661 by @ramonclaudio) - [iOS] Added the SwiftUI
activityBackgroundTintmodifier for setting Live Activity background. (#46756 by @jakex7) - [iOS] Added a
modifiersprop toListItemto override its defaultbuttonStyle(.plain). (#47124 by @nishan) (#47124 by @intergalacticspacehighway) - [iOS][web] Added
seedColorprop to the universal and SwiftUI<Host>, used as the SwiftUI tint on iOS and to derive the primary color scale on web. (#46566 by @zoontek) - [web] Honor the
colorSchemeprop on<Host>to override the system color scheme for its subtree, matching native parity. (#46459 by @zoontek) - [iOS] Added the SwiftUI
accessibilityElementmodifier, which collapses a view's subtree into a single accessibility element viaignore,combine, orcontain. (#47156 by @ramonclaudio) - [iOS] Added the SwiftUI
redacted,unredacted,privacySensitive, andinvalidatableContentmodifiers, mapping SwiftUI's redaction family for native skeleton-loading and sensitive-content states. (#47269 by @ramonclaudio) - [iOS] Added
accessibilityAddTraitsandaccessibilityRemoveTraitsSwiftUI modifiers, accepting an array of trait names. (#47387 by @ramonclaudio) - [iOS] Added the SwiftUI
strokeBordermodifier with a fullStrokeStyle(line width, cap, join, miter limit, dash array, dash phase) for dashed and dotted inset borders that follow the shape's corners. (#47426 by @ramonclaudio)
- [iOS] Added the SwiftUI
expo-networkexpo-router- Add
standard-navigationintegration (#46456 by @Ubax) - Re-export drawer content components and types from
expo-router/drawer(#46635 by @Ubax) - [native-tabs] Emit a
tabPressevent withisPrevented: truewhen adisabledtab is tapped, without selecting it. (#46445 by @Ubax) - [android] Support
Stack.Toolbar.Badgein header left/right placements (#46537 by @benjaminkomen) - [android] Support
Stack.Toolbar.BadgeonStack.Toolbar.Menuicons in header left/right placements (#47276 by @Ubax) - Add
unstable_nativePropsto native Stack options. (#47482 by @Ubax) - [native-tabs] Add
testIDandaccessibilityLabelprops toNativeTabs.Trigger. (#47472 by @ramonclaudio) - Export the
Themetype from the rootexpo-routerentry point. (#47476 by @eliotgevers)
- Add
expo-modules-autolinkingexpo-modules-jsi- [iOS] Add closure-taking
JavaScriptObject.setProperty(_:function:)overloads that create a sync or async host function from the given closure. (#46622 by @tsapeta) - [iOS] Add
JavaScriptUnownedValue, a non-owning, non-copyable value that borrows ajsi::Valuefor the zero-copy argument-decode fast path. (#46616 by @tsapeta) - [iOS]
JavaScriptErrorcan now wrap and throw an arbitrary JS value (not only anErrorinstance) viainit(_:value:), preserving the thrown value's identity when it reaches JavaScript. (#47154 by @tsapeta) - [iOS] Add
createFunction/setPropertyoverloads taking aUnownedThisSyncFunctionClosure, which receivesthisas a borrowedJavaScriptUnownedValueinstead of an owningJavaScriptValue. Used by host functions that ignorethisto skip the per-call owning-value allocation and itsweak-runtime traffic. (#46949 by @tsapeta) - [iOS] Conform
JavaScriptRuntimetoIdentifiablewith anidbased on the underlying runtime, equal across multiple wrappers of the same runtime. (#47068 by @tsapeta)
- [iOS] Add closure-taking
expo-media-libraryexpo-modules-core- [iOS] Added the
@Recordmacro that synthesizes a record from a type's stored properties, with no@Fieldwrappers needed. (#46547 by @tsapeta) - [iOS] Added the
@Eventmacro that turns a function-typedvaron a module or shared object into a typed JavaScript event. (#46938 by @tsapeta) - [iOS]
@ExpoModulenow synthesizes the module's JavaScript name from the class name or its@ExpoModule("CustomName")argument, so aName(โฆ)definition entry is no longer required. (#46938 by @tsapeta) - [iOS] Added
SharedObject.native(from:)that recovers the native shared object paired with a JavaScript object, with a generic overload that returns the concrete subclass directly. (#47054 by @tsapeta) - [iOS] Added
Module.emitthat sends an event directly to the module's own JavaScript object, mirroringSharedObject.emit. Both now share anEventEmitterprotocol. (#46555 by @tsapeta)
- [iOS] Added the
expo-linking- Added
Linking.clearInitialURL()to reset the cached deep-link URL. (#46265 by @gabrieldonadel)
- Added
expo-image-picker- [iOS] Allow
launchCameraAsyncto be invoked on the simulator. (#45923 by @EvanBacon)
- [iOS] Allow
expo-font- [web] Added
Server.withServerContext(callback)which scopes server-side font loads per render. (#46669 by @hassankhan)
- [web] Added
expo-contactsexpo-clipboard- Add macOS support. (#46479 by @gabrieldonadel)
expo-brownfield- [iOS] Add hostProvidedFrameworks option to skip Frameworks provided by the host app (#46355 by @gabrieldonadel)
expo-camera- Enabled responsive capture and fast capture prioritization on iOS for lower shutter lag and faster successive photo captures.
@expo/package-manager@expo/cli- Support Bundler-managed CocoaPods installations (#43605 by @tiwari91, @kitten)
- Add option to specify targets to use with inline modules (#46698 by @HubertBer)
- Support Device Hub as Simulator replacement for Xcode 27+ (#46757 by @byCedric, @GersonRocha9)
- Add experimental
tvosandmacosautolinking gated byexpriments.outOfTreePlatforms(#46344 by @kitten)
๐ Bug fixes
expo-sqlite@expo/ui- [iOS] Fix Mac Catalyst build failure with
activityBackgroundTint(#46929 by @theeket) - [iOS] Fix the SwiftUI
listRowInsetsmodifier being ignored when every edge is set to0, so a row can now reset all of its insets. (#47000 by @nishan) (#47000 by @intergalacticspacehighway) - [android] Fix
FieldGrouprendering an empty row/section when a conditional child (e.g.{condition && <FieldGroup.Section>โฆ</FieldGroup.Section>}) evaluates tofalse. (##46874 by @dileepapeiris) - [android] Fix React Native
Pressable/Buttontaps not registering oncommunity/pager-viewpages after the first on physical devices. (#46851 by @nishan) (#46851 by @intergalacticspacehighway) - [universal] Fix user-supplied
modifiershaving no effect when the component derives a modifier of the same type from its props, e.g.buttonStyleonButtonalways losing to thevariantprop. (#46815 by @nishan) (#46815 by @intergalacticspacehighway) - [android] Fix race between JS imperative
expand()and Compose handler registration onModalBottomSheet. AddsinitialFullyExpandedprop to drive initial snap state natively. (#46367 by @duyanhv) - [iOS][android] Fix
community/bottom-sheetblocking touches behind the sheet after it's dismissed. (#46805 by @nishan) (#46805 by @intergalacticspacehighway) - [android] Fix React Native touchables (e.g.
Pressable) oncommunity/pager-viewpages not responding, or triggering the wrong page's handler, after navigating between pages. (#46778 by @nishan) (#46778 by @intergalacticspacehighway) - [iOS] Fix
font,dynamicTypeSize, andresizablemodifiers not applying to the SwiftUIImage. SF Symbols scale with Dynamic Type when afontmodifier sets atextStyle. (#46714 by @ramonclaudio) - [android] Fix React Native
ScrollViewnested scrolling insideBottomSheet. (#46544 by @nishan) (#46544 by @intergalacticspacehighway) - [jetpack-compose] Fix layout shift when
HostwithmatchContentsis used inside React Native Screens. (#46604 by @nishan) (#46604 by @intergalacticspacehighway) - [iOS] Fix
PagerViewoffsettingScrollViewby safe area insets. (#46637 by @nishan) (#46637 by @intergalacticspacehighway) - [iOS] Fix
SegmentedControlbeing overlapped by sibling components inside aScrollView, by disabling theHostsafe area insets. (#46575 by @nishan) (#46575 by @intergalacticspacehighway) - [iOS] Fix the community
DateTimePicker,MenuView,Picker, andSliderapplying safe area insets (including keyboard avoidance) twice, by disabling theHostsafe area insets (ignoreSafeArea="all"). (#46721 by @nishan) (#46721 by @intergalacticspacehighway) - [jetpack-compose] Fix
TextFieldjiggling the surrounding content while its label animates on focus (a Material 3 expressive motion spring overshoot). (#46568 by @nishan) (#46568 by @intergalacticspacehighway) - [iOS] Fix
BottomSheetanimating open from the bottom-left corner infitToContentsmode. (#46546 by @nishan) (#46546 by @intergalacticspacehighway) - [iOS] Fix
TextFieldandSecureFieldworkletonTextChangefiring more than once per keystroke (when a change triggers reformatting) and on programmatic text updates. (#46483 by @nishan) (#46483 by @intergalacticspacehighway) - [iOS] Fix the
fontmodifier dropping Dynamic Type scaling (relativeTo) andweighton concatenatedTextruns. The Text-concatenation path now resolves the sameFontas the view path. (#46509 by @ramonclaudio) - [android] Fix universal
TextInputignoringstylebackgroundColor/borderWidthand not applyingtextAlignto the placeholder. (#46441 by @duyanhv) - [android] Fix
Switchalignment whenlabelis provided (#47088 by @rklomp) - [iOS] Fix universal
ListItemstretching a fixed-size raw RN view in its leading/trailing slot to fill the row instead of honoring its size, matching Android. (#46883 by @david-videau-ortega) (#47236 by @nishan) (#47236 by @intergalacticspacehighway) - [Android] Fix the
@expo-ui/community/datetime-pickerdialog ignoringminimumDate/maximumDatefor its year range, so the calendar and year picker no longer always span 1900โ2100. (#47206 by @vioodle) (#47213 by @nishan) (#47213 by @vioodle, @intergalacticspacehighway) - [iOS][Android] Fix a scrollable (e.g.
FlatList) inside@expo/ui/community/bottom-sheetnot scrolling when the<BottomSheet>is mounted inside another same-orientation list (such as aFlatListheader). (#47197 by @nishan) (#47197 by @intergalacticspacehighway) - [iOS][Android] Fix a scrollable child (e.g.
FlatList,ScrollView) inside@expo/ui/community/bottom-sheetnot scrolling to the end when using fixed snap points. (#47245 by @nishan) (#47245 by @intergalacticspacehighway) - [iOS] Fix the SwiftUI
TextFieldcrashing with "String index is out of bounds" on iOS 18 when JS writes new text into a focused field that holds an active text selection. (#47447 by @nishan) (#47447 by @intergalacticspacehighway) - [iOS][android] Fix
community/masked-viewdoubling offsets and transforms by re-applying the user-suppliedstyleto the inner mask/contentViewwrappers. (#47067 by @tsushanth) - [iOS] Fix the graphical
DatePickerstyle (community/datetime-pickerdisplay="inline") rendering undersized on mount and jumping to its correct size on the first tap. (#47062 by @etiennetalbot) (#47465 by @nishan) (#47465 by @etiennetalbot, @intergalacticspacehighway)
- [iOS] Fix Mac Catalyst build failure with
expo-sensorsexpo-router- [android] fix renderingMode for toolbar icons (#46149 by @Ubax)
- Sync config plugin
Propstype with the options schema, adding the missingredirects,rewrites,platformRoutes, anddisableSynchronousScreensUpdatesoptions. (#46677 by @zoontek) - Allow async routes to rehydrate synchronously by carrying through preloaded modules preventing FOUC in production output (#46539 by @kitten)
- Fix type inference for
unstable_createStandardRouterNavigator(#46737 by @Ubax) - Preserve a system time mocked with
jest.setSystemTimeacrossrenderRouter(#46978 by @Ubax) - [ios] Fix white flash behind screens during the interactive swipe-back gesture by forwarding the theme background to the native stack container. (#47121 by @kevenleone)
- [android] Remove navigation state restoration across activity recreation. (#47422 by @Ubax)
- fix press detection with android bottom toolbar (#47389 by @Ubax)
- Guard the deep link decode in
extractExactPathFromURLagainst malformed percent-encoding. (#47526 by @momomuchu) - Fix
renderRouterignoringoverridesand listing duplicate routes when an override key matches a file inappDir. (#47287 by @wwdrew)
expo-modules-autolinking- [iOS] Align the
react-native-reanimatedprecompile config with[email protected]upstream defaults, adding theCSS/core/transitionandPseudoStylesheader mappings along with the missingIOS_CSS_CORE_ANIMATIONandUSE_ANIMATION_BACKENDfeature flags so its XCFramework builds. (#46950 by @zoontek) - Fixed build error for unresolvable
expo-modules-macros-plugin. (#46294 by @kudo) - Fixed the macro plugin flag not being applied to test targets, so macros couldn't be used in unit tests. (#46595 by @tsapeta)
- [iOS] Align the
react-native-reanimatedprecompile config with[email protected]'s generated component and native view sources. (#47201 by @lukmccall) - [iOS] Respect an explicit
ios.usePrecompiledModules: falseeven whenEXPO_USE_PRECOMPILED_MODULESis already set in the environment (e.g. EAS Build). (#46983 by @ryanda9910) - [iOS] Add the missing
ENABLE_CROSS_RUNTIME_STACK_TRACESflag to thereact-native-workletsprecompile config so its prebuilt XCFramework matches the package'sstaticFlags.json. (#47478 by @alanjhughes) - [iOS] Under precompiled modules, preserve a dynamic-framework subgraph set up by an earlier
pre_installhook (e.g.@rnmapbox/maps) โ both the dynamic frameworks and the pods that link against them โ instead of forcing them back to static libraries. (#47500 by @kudo)
- [iOS] Align the
expo-module-scriptsexpo-modules-jsi- [iOS] Fixed the xcframework build failing with a
sederror when building in an environment that uses GNUsedinstead of BSDsed(e.g. a Nix shell). (#46389 by @niteshbalusu11) - [iOS] Propagate
JavaScriptPromisesetup failures instead of trapping the app. (#46106 by @qutrek) (#46145 by @mvincentong) (#46145 by @qutrek, @mvincentong) - Fix build framework for macOS (#46413 by @gabrieldonadel)
- Fix build framework for Mac Catalyst (#46289 by @theeket)
- [iOS] Throw instead of aborting when
getPropertyAsFunctiontargets a missing or non-callable property. (#46437 by @tsapeta) - [iOS] Throw instead of aborting when
getPropertyAsObjecttargets a non-object property. (#46438 by @tsapeta) - [iOS] Include the Swift toolchain version in the xcframework cache key so upgrading Xcode rebuilds slices instead of reusing ones built by an older compiler. (#46523 by @tsapeta)
- [iOS] Ignore already-settled promises. (#46765 by @jakex7)
- [iOS] Awaiting a
JavaScriptPromisethat is rejected after the await begins now throws instead of resuming with the rejection value as if fulfilled. (#47154 by @tsapeta) - [iOS] Return
NSNullinstead of trapping in the deprecatedJavaScriptValue.getAny()when it encounters a unrepresentable value. (#47381 by @alanjhughes)
- [iOS] Fixed the xcframework build failing with a
expo-media-libraryexpo-modules-core- [iOS] Propagate async-function promise construction failures instead of trapping the app. (#46106 by @qutrek) (#46145 by @mvincentong) (#46145 by @qutrek, @mvincentong)
- [iOS] Read iPad-specific supported orientations from
UISupportedInterfaceOrientations~ipad. (#46281 by @bryandent) (#46306 by @mvincentong) (#46306 by @bryandent, @mvincentong) - [android] Fix nested
Hostdouble-composing children. (#46304 by @nishan) (#46304 by @intergalacticspacehighway) - [iOS] Throw an actionable error when a worklet is used but
react-native-worklets's native adapter isn't linked, instead of a misleading "not an instance of Worklet" failure. (#46571 by @chrfalch) - [android] Add a synchronous shadow node size update path, fixing a layout shift for
HostmatchContentsviews. (#46604 by @nishan) (#46604 by @intergalacticspacehighway) - [Android] Fix
NullPointerExceptioncrash when amatchContentsview is unmounted while a shadow node size update is pending (e.g. closing a bottom sheet mid-resize). (#46785 by @nishan) (#46785 by @intergalacticspacehighway) - [iOS] Accept JS
Doubletimestamps inDateConvertible. JS numbers arrive across the JSI bridge as SwiftDouble; the prioras? Intbranch never matched, throwingConvertingException<Date>whenever a JS caller passedsomeDate.getTime()to aDate/Date?argument. (#46340 by @kyleasaff) - [Android] Fix events being silently dropped for Compose views in custom modules. (#46623 by @benjaminkomen) (#46624 by @nishan) (#46624 by @benjaminkomen, @intergalacticspacehighway)
- [Android] Fixed Expo UI re-compose when switching screens in react-native-screens. (#46650 by @kudo)
- [iOS] Pair a native shared object with one JavaScript object per runtime, so a shared object exposed to several runtimes (e.g. the main and UI runtimes, or worklet contexts) keeps a live pairing in each instead of only the one paired last. (#47238 by @tsapeta)
- [Android][compose] Guard
onLayoutagainst detached window to preventLayoutNode should be attached to an ownercrash. (#47085 by @roitium) - [Android] Fix Jetpack Compose
Hostcontent disappearing before a react-native-screens pop animation finishes, by deferring composition disposal to window detach while the view is still on-screen for a transition. (#45914, #47086 by @aubrey-wodonga) (#47099 by @nishan) (#47099 by @intergalacticspacehighway) - [iOS] Fix a crash on
Updates.reloadAsync()where the previousAppContextcould deallocate before the old runtime finished tearing down, releasing cached JSI objects against a dying runtime on the wrong thread. Its lifetime is now tied to the runtime via native state attached to theglobal.expoobject. (#47051 by @HaiyiMei) (#47080, #47098 by @tsapeta) (#47080, #47098 by @HaiyiMei, @tsapeta) - [iOS] Fix a reload deadlock on the new architecture where reloading (from pressing
rin the iOS simulator) would freeze the app until the watchdog killed it.reloadAppAsyncnow triggers the reload synchronously when already on the main thread instead of always deferring viaDispatchQueue.main.async. (#47392 by @brentvatne) - [iOS] Fix
ExpoModulesProviderlookup failing for bundle names with non-identifier characters (e.g. dots). (#46424 by @shawnthye-guru)
expo-contactsexpo-calendar- Add
@platform iosJSDoc annotations to iOS-exclusive APIs:ExpoCalendarReminderclass,listReminders(),createReminder(),requestRemindersPermissions(),getRemindersPermissions(),useRemindersPermissions(),AddEventWithFormOptions.url, andAddEventWithFormOptions.alarms. (#46416 by @kota113) - Throw
UnavailabilityErrorwhen iOS-only Reminders and Sources APIs (listReminders(),createReminder(),ExpoCalendarReminder.get/update/delete,requestRemindersPermissions(),getRemindersPermissions(), andgetSourcesSync()) are called on non-iOS platforms. (#46416 by @kota113) - Return a denied permission response from
useRemindersPermissions()on non-iOS platforms instead of throwing. (#46416 by @kota113)
- Add
expo-blur- [Android] Fix gesture handlers treating views under a
BlurTargetViewas detached and cancelling their gestures. (#47404 by @efstathiosntonas)
- [Android] Fix gesture handlers treating views under a
expo-camera- Host the iOS camera preview on the view's backing layer so it no longer zooms into place on launch. (#47172 by @alanjhughes)
- Replace the deprecated
videoOrientationAPI withAVCaptureDevice.RotationCoordinatorfor the iOS camera preview. (#47172 by @alanjhughes) - Fix dark frames and the preview rotating into place on iOS launch by fully configuring the camera session before it starts running. (#47173 by @alanjhughes)
- Default the iOS camera
pictureSizetophotoinstead ofhigh. (#47173 by @alanjhughes)
@expo/cli- Symbolicate web error stacks in the dev server console. (#46584 by @krystofwoldrich)
- Disable sextant QR code rendering for Windows Terminal (#46455 by @kitten)
- Use favicon from app config when SSR is enabled (#46570 by @hassankhan)
- Remove
@expo/metro-configinstall fromexpo customize metro.config.js(#46600 by @kitten) - Place static entries last in serialized HTML output (#46539 by @kitten)
- Focus the booted device in Device Hub using its
devices://deep link instead of only bringing the app forward. (#46809 by @krystofwoldrich) - Include external CSS imports in the production server manifest (#46984 by @hassankhan)
- Avoid writing a 500 response when a DevTools plugin server request has already started or aborted. (#47192 by @krystofwoldrich)
- Pass a fetch API
Requestto DevTools plugin WebSocket handlers instead ofIncomingMessage. (#47410 by @krystofwoldrich) - Use
loadModulefor MCP and DevTools plugin server module loading. (#47139 by @krystofwoldrich) - Fall back to AGP's
output-metadata.jsonwhen resolving APK filenames to support projects that overrideoutputFileNameinapplicationVariants(#47083 by @NikhilVashistha)
expo- Decompress
gzip/br/zstdexpo/fetchresponses on Android even when the caller sets their ownAccept-Encodingheader. (#46398 by @zoontek) - Fix
bodyUsedleaking across siblings when fetch Response is cloned twice (#46397 by @zoontek) - Prevent fatal
The stream is not in a state that permits closeinexpo/fetchwhen native deliversdidComplete/didFailWithErrorafter the consumer has already canceled the body stream. (#44909 by @safaiyeh) - Fix
expo/fetchon Android sending a single0x00byte instead of an empty body for body-lessPOST/PUT/PATCHrequests. (#46678 by @zoontek) - Forward unhandled errors and rejections to the dev server console. (#46578 by @krystofwoldrich)
- Include JavaScript and React component stacks in web dev server error logs. (#46584 by @krystofwoldrich)
- Fix
asyncRoutesfailing on Android and iOS withRequiring unknown module(#46870 by @hassankhan) - Fix
Response.blob()inexpo/fetchthrowing when the globalBlobis react-native's implementation. (#47538 by @kudo)
- Decompress
๐ก Others
@expo/ui- Export public component props as interfaces to support module augmentation. by @Brentlok
- [universal] Revamp web universal components (
Button,Checkbox,FieldGroup,Picker,Slider,Switch,TextInput) with shared design tokens, light / dark themes, and keyboard focus styles. (#46258, #46541 by @zoontek) - [iOS][android] Removed the
react-native-reanimateddependency from the worklet integration; worklet features rely onreact-native-workletsdirectly. (#46922, #46935 by @nishan) (#46922, #46935 by @intergalacticspacehighway) - Removed
CLAUDE.mdandCONTRIBUTING.mdfrom publishing and fixed side effects. (#47451 by @kudo)
expo-modules-autolinking- Add
bannerTitleandserverEntryPointoptions to the DevTools plugin module config. (#46764 by @krystofwoldrich)
- Add
expo-modules-jsi- [iOS] Sync host functions no longer allocate a
JavaScriptRefper call: the arguments buffer is now built inside the synchronousassumeIsolatedclosure instead of being boxed to cross the closure boundary, removing a heap allocation and its retain/release/dealloc from every host call (measured ~10% faster on the no-op@JShost-call floor). (#46949 by @tsapeta) - [iOS]
JavaScriptNativeStatecan now back anyjsi::NativeStatesubtype via avoid *factory, so consumers without Swift/C++ interop (e.g.expo-modules-core) can supply their own pointee.expo::NativeStateships from the xcframework as a public C++ header. (#46330 by @tsapeta) NativeArrayBufferarguments no longer copy the buffer when it's already native-backed. (#46448 by @barthap)- [iOS] Type the host-object setter pointer explicitly so the nil-check conversion type-checks reliably. (#46736 by @tsapeta)
- [iOS]
JavaScriptUnownedValueandJavaScriptValuesBuffernow cache the runtime as the immortalfacebook.jsi.IRuntimeinstead of the ARC-managedJavaScriptRuntimewrapper, removing per-call retain/release on the argument-decode hot path (measured ~16% fasteraddNumbers, ~24% fasteraddStrings). (#46792 by @tsapeta) - [iOS]
getExpoNativeStatenow probes with the specializedhasNativeState<jsi::NativeState>and dynamic-casts the raw pointer once, avoiding a redundantdynamic_pointer_caston the shared object argument unwrap hot path. (#46712 by @tsapeta)
- [iOS] Sync host functions no longer allocate a
expo-media-libraryexpo-modules-core- Native view config attributes now carry a
processfunction that unwraps shared objects to their registry id, so callers can pass shared objects directly as view props instead of unwrapping them manually. (#46212 by @tsapeta) - [iOS]
@ExpoModulenow synthesizes a_decorateModulethat binds the module's@JSfunctions directly onto the JS object, letting the module holder skip the dynamic definition path for synthesized modules. (#46612 by @tsapeta) - Allow
react-native-worklets^0.9.0in peer dependencies. (#46950 by @zoontek) - Update edge-to-edge package to call
updateEdgeToEdgeFeatureFlag(#46335 by @zoontek) - [iOS] Added
JavaScriptDecodable/JavaScriptEncodable(composed asJavaScriptCodable), a statically-dispatched, non-erasing conversion path between JavaScript and native values for Expo Modules v2, with conformances for primitives, containers, records, enumerables andData. (#46893 by @tsapeta) - [Internal] [iOS] Dropped the unused
appContextparameter from theJavaScriptCodableconversions; conversions that need the app context now recover it from the runtime via the new publicAppContext.from(runtime:). (#47111 by @tsapeta) - [iOS]
JavaScriptCodablenow mapsInt64/UInt64to a JSBigIntfor lossless 64-bit round-tripping, andInt/UIntthrow when encoding a value outside JavaScript's safe-integer range. (#46939 by @tsapeta) - [iOS] Added the public
Exceptions.ArgumentsRangeMismatchexception, thrown by synthesized@JSfunction bindings when a JavaScript caller passes a number of arguments outside the accepted range. (#46901 by @tsapeta) - [iOS]
SharedObject::NativeStatenow derives fromexpo::NativeStateso the Swift wrapper can be recovered from the JS side viagetNativeState, laying the groundwork for native-state-based shared object lookup. (#46330 by @tsapeta) - [iOS]
SharedObjectis now paired with its JS counterpart through aSharedObjectNativeStateattached to the JS object, so registry lookups in both directions go through the native state and fall back to the legacy id-based path. (#46712 by @tsapeta) NativeArrayBufferarguments no longer copy the buffer when it's already native-backed. (#46448 by @barthap)- [iOS][android] Resolve the worklet UI runtime from its
react-native-workletsholder instead of the reanimated_WORKLET_RUNTIMEglobal;installOnUIRuntimenow takes the holder fromgetUIRuntimeHolder(). (#46922, #46935 by @nishan) (#46922, #46935 by @intergalacticspacehighway)
- Native view config attributes now carry a
expo-image-picker- [Web] Drop dependency on
expo-modules-corePlatformin favor of inlinewindow/documentchecks. (#45923 by @EvanBacon) - Switch package entry to TypeScript source and emit declarations only. (#45923 by @EvanBacon)
- [Web] Drop dependency on
expo-gl- Update docs to
createContextAsyncanddestroyContextAsyncmethods which purpose wasn't documented and was confusing. (#47200 by @HubertBer)
- Update docs to
expo-font- Resolve package-style font paths. (#46784 by @maxlapides)
@expo/cli- Bump to
@expo/ws-tunnel@^2.0.0(#46696 by @kitten) - [Internal] Unify favicon injection between SPA, SSG and SSR pipelines (#46586 by @hassankhan)
- [Internal] Unify the sync realpath helper and make fallback handling explicit. (#47175 by @krystofwoldrich)
- Add server functions and startup banners to DevTools plugins. Plugins can define a
serverEntryPointthat handles HTTP requests and WebSocket connections in the Expo CLI process, and abannerTitleshown in the CLI startup banner. (#46764 by @krystofwoldrich)
- Bump to
expo
- 57.0.0-canary-20260723-64edab923 Jul 2026pre-release
Nothing published for this version
- 57.0.0-canary-20260720-b6d63bc20 Jul 2026pre-release
Nothing published for this version
- 57.0.0-canary-20260718-7cbcda518 Jul 2026pre-release
Nothing published for this version
- 57.0.0-canary-20260716-381e80616 Jul 2026pre-release
Nothing published for this version
- 57.0.0-canary-20260629-301008529 Jun 2026pre-release
Nothing published for this version
- 57.0.0-canary-20260526-13e89ca26 May 2026pre-release
Nothing published for this version
- 56.1.2417 Aug 2026
Nothing published for this version
- 56.1.236 Aug 2026
Nothing published for this version
- 56.1.2229 Jul 2026
Nothing published for this version
- 56.1.2123 Jul 2026
Nothing published for this version
- 56.1.2015 Jul 2026
Nothing published for this version
- 56.1.197 Jul 2026
Nothing published for this version
- 56.1.183 Jul 2026
Nothing published for this version
- 56.1.171 Jul 2026
Nothing published for this version
- 56.1.1615 Jun 2026
Nothing published for this version
- 56.1.1510 Jun 2026
Nothing published for this version
- 56.1.145 Jun 2026
Nothing published for this version
- 56.1.1329 May 2026
Nothing published for this version
- 56.1.13-canary-20260701-91008651 Jul 2026pre-release
Nothing published for this version
- 56.1.13-canary-20260624-9d83b8124 Jun 2026pre-release
Nothing published for this version
- 56.1.13-canary-20260606-4d4666c6 Jun 2026pre-release
Nothing published for this version
- 56.1.13-canary-20260526-6cd5e3726 May 2026pre-release
Nothing published for this version
- 56.1.1226 May 2026
Nothing published for this version
- 56.1.1123 May 2026
Nothing published for this version
- 56.1.1021 May 2026
Nothing published for this version
- 56.1.921 May 2026
Nothing published for this version
- 56.1.821 May 2026
Nothing published for this version
- 56.1.720 May 2026
Nothing published for this version
- 56.1.619 May 2026
Nothing published for this version
- 56.1.515 May 2026
Nothing published for this version
- 56.1.414 May 2026
Nothing published for this version
- 56.1.313 May 2026
Nothing published for this version
- 56.1.212 May 2026
Nothing published for this version
- 56.1.111 May 2026
Nothing published for this version
- 56.1.08 May 2026
Nothing published for this version
- 56.0.67 May 2026
Nothing published for this version
- 56.0.56 May 2026
Nothing published for this version
- 56.0.46 May 2026
Nothing published for this version