NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
npm · #3720 most downloaded on npm
The Expo CLI
Last release today
03 Oct 2026
Ships on a steady schedule
a new release about every 9 days
Some releases are documented
notes for 27 of the last 60 stable releases
Nothing withdrawn
no release was ever pulled
5 years old
526 releases · first in 2022
One column per quarter.
_This version does not introduce any user-facing changes._
This version does not introduce any user-facing changes.
Add react-native-web to autolinking module resolution modules (#44160 by @kitten)
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Allow expo start, expo export, and expo config to work without react-native installed for web-only projects. (#44294 by @EvanBacon)
expo start, expo export, and expo config to work without react-native installed for web-only projects. (#44294 by @EvanBacon)run:ios --device invocation (#43673 by @kitten)expo/expo CLI detection to not mistrigger for user monorepos and update for pnpm compatibility (#44101 by @kitten).MainActivity lookup when no runnable activity with MAIN/LAUNCHER intent filters exists in the manifest. (#43702 by @hwhh)/open-stack-frame to paths within server root (#44039 by @kitten)_This version does not introduce any user-facing changes._
This version does not introduce any user-facing changes.
_This version does not introduce any user-facing changes._
This version does not introduce any user-facing changes.
Fix SimulatorAppPrerequisite to fall back to reading Simulator.app/Contents/Info.plist directly when LaunchServices has not indexed the app (e.g. Xcod
SimulatorAppPrerequisite to fall back to reading Simulator.app/Contents/Info.plist directly when LaunchServices has not indexed the app (e.g. Xcode installed on an external or renamed volume). This prevents a spurious "Simulator is most likely not installed" error when running expo run:ios --device on a physical device. (#43597 by @ciospettw)Fix server being started before Metro is ready, or, if it's started, status middleware responding too soon (#43557 by @kitten)
expo start's dependency validation fail the start command (#43619 by @kitten)entryPoints order when asyncRoutes is enabled (#43531 by @hassankhan)ERR_TTY_INIT_FAILED when LOG_EVENTS=1 or LOG_EVENTS=2 is used in non-interactive terminals. (#43796 by @krystofwoldrich)_This version does not introduce any user-facing changes._
This version does not introduce any user-facing changes.
Correctly handle JavaScript assets when asyncRoutes: true in SSR (#43446 by @hassankhan)
asyncRoutes: true in SSR (#43446 by @hassankhan)@react-navigation/core and @react-navigation/native to autolinking resolution (#43456 by @kitten)tls options from Metro config to Metro runServer fork (#43186 by @cortinico)Nothing published for this version
Nothing published for this version
_This version does not introduce any user-facing changes._
This version does not introduce any user-facing changes.
Implement exponential retry for transient devicectl disconnects and fix null error logs. (#43326 by @balenamiaa)
Force forceNodeFilesystemAPI when watchman is enabled (the default) but not present (#43251 by @kitten)
forceNodeFilesystemAPI when watchman is enabled (the default) but not present (#43251 by @kitten)EXPO_NO_QR_CODE env variable to disable QR code generation (#43187 by @cortinico)_This version does not introduce any user-facing changes._
This version does not introduce any user-facing changes.
Add missing Content-Type: application/json to internal /symbolicate call (#43074 by @kitten)
Content-Type: application/json to internal /symbolicate call (#43074 by @kitten)contextKey instead of URL pathname (#43017 by [@hassankhan]setResponseHeaders() failing on responses with immutable headers (#43111 by @hassankhan)dnssd-advertise@^1.1.3 (#42928 by @kitten)COLOR=0 is set or TTY is non-interactive (#42834 by @kitten)expo start if space is insufficient (#42835 by @kitten)rawBody parsing from Metro middleware stack (#43074 by @kitten)require-from-string with @expo/require-utils (#42884 by @kitten)Add --browser option to expo login. (#42614 by @byronkarlen)
--browser option to expo login. (#42614 by @byronkarlen)fetch-nodeshim@^0.4.5 (#42896 by @kitten)experiments.autolinkingModuleResolution by default for workspaces/monorepos (#40606 by @kitten)Listen only on localhost when --localhost is passed (#42760 by @kitten)
Remove legacy typed routes logic for SDK 51 projects (#42604 by @hassankhan)
/index paths (#42629 by @hassankhan)<Head> component re-renders when focus changes (#42681 by @hassankhan)expo-router as optional peer to prevent auto-installation (#42728 by @kitten)debugOptimized build variant for active architecture filtering (#42766 by @janicduplessis)@expo/xcpretty (#42485 by @kitten)multipart/mixed logic with multitars package (#42472 by @kitten)ExternalModule resolution (#42513 by @kitten)undici dependency with fetch-nodeshim and Node built-ins (#42720 by @kitten)fetch-nodeshim@^0.4.3 (#42765 by @kitten)Reallow connections on /expo-dev-plugins/broadcast broadcast socket to local connections (#42538 by @kitten), (#42705 by @vonovak)
Add --source-maps inline option to expo export for embedding source maps in JavaScript bundles. (#42492 by @brentvatne)
--source-maps inline option to expo export for embedding source maps in JavaScript bundles. (#42492 by @brentvatne)freeport-async dependency (#42478 by @kitten)pretty-bytes for Intl.NumberFormat call with fallback (#42482 by @kitten)@expo/fingerprint is missing during build cache check (#41910 by @gustavoharff)_This version does not introduce any user-facing changes._
This version does not introduce any user-facing changes.
Treat both null and undefined loader responses as null (#42419 by @hassankhan)
null and undefined loader responses as null (#42419 by @hassankhan)Removed deprecated content property of the clipboard event listener. Use getStringAsync() instead. (#41739 by @barthap)
expo-notifications
expo-modules-core
ignoreSafeAreaKeyboardInsets to ignoreSafeArea on Host component. It now accepts 'all' or 'keyboard' instead of a boolean. (#42598 by @nishan) (#42598 by @intergalacticspacehighway)expo-localization
expo-image-loader
expo-clipboard
expo-cellular
expo-brightness
expo-blur
expo-web-browser
expo-sqlite
expo-speech
expo-sharing
expo-notifications
expo-modules-core
ExpoAppDelegate inheritance requirement in ExpoReactNativeFactory (#39417 by @gabrieldonadel)applicationDidReceiveMemoryWarning subscribing to ExpoAppDelegateSubscriberManager (#40504 by @szydlovsky)Encodable types can now be converted to JavaScript values. (#40621 by @tsapeta)subscriberDidRegister function to AppDelegate subscribers. (#40684 by @tsapeta)reloadAppAsync method to AppContext. (#42295 by @aleqsio)map to ValueOrUndefined. (#40593 by @Wenszel)process.env.EXPO_DOM_HOST_OS. (#40382 by @EvanBacon)ComposableScope for compose Content functions. (#39155 by @aleqsio)ArrayBuffer. (#39943 by @lukmccall)convertResult to Convertible. (#40302 by @jakex7)ReactActivityHandler.onDidCreateReactActivityDelegateNotification. (#40537 by @lukmccall)ReactNativeHostHandler.onDidCreateReactHost. (#40561 by @lukmccall)hermesEnabled property requirement for internal testing (#40678 by @gabrieldonadel)Class definition for shared objects is now optional. (#40708 by @tsapeta)ArrayBuffers. (#41404 by @barthap)ArrayBuffers in native modules. (#41415 by @barthap)appDelegateWillBeginInitialization function to AppDelegate subscribers. (#41456 by @tsapeta)RNHost to improve RN component layout inside SwiftUI views (#40938 by @nishan) (#40938 by @intergalacticspacehighway)ignoreSafeAreaKeyboardInsets to SwiftUIHostingView. (#41302 by @nishan) (#41302 by @intergalacticspacehighway)ArrayBuffers. (#41548 by @barthap)RCTHostRuntimeDelegate instead of unofficial bridge.runtime. (#41311 by @tsapeta)JavaScriptActor to isolate code requiring running on the JavaScript thread. (#41793 by @tsapeta)NSEdgeInsets.zero extension to better match UIEdgeInsets. (#42675 by @tsapeta)expo-media-library
expo-location
androidForegroundServiceIcon for controlling the icon for the foreground service. (#41132 by @jeppester)accuracy field to PermissionDetailsLocationIOS exposing iOS 14+ precise/reduced location authorization. (#42931 by @sbs44)expo-image-picker
expo-font
expo-file-system
idempotent option to downloadFileAsync (#39681 by @vonovak)append option to write methods. (#42778 by @aleqsio)expo-device
expo-constants
expo-crypto
expo-camera
expo-contacts
Contacts@Next (#40886 by @Wenszel)hasContactsAsync function (#40756 by @hryhoriiK97)expo-calendar
ExpoCalendar@next (#39108 by @kosmydel and @arturgesiarz) (#39108 by @kosmydel, @arturgesiarz)expo-blur
expo-auth-session
extraHeaders option to TokenRequest and RevokeTokenRequest. (#31381) by @levizimmerman and @lsarni (#31381 by @levizimmerman, @lsarni)expo-web-browser
dismissBrowser hanging when called with no browser open. (#40799 by @alanjhughes)expo-video-thumbnails
expo-task-manager
expo-sqlite
ExpoSQLite.defaultDatabaseDirectory returns undefined. (#40680 by @kudo)useSQLCipher. (#40781 by @ronickg)serializeAsync / serializeSync errors from memory database on web. (#40899 by @kudo)expo-store-review
expo-sensors
expo-sharing
expo-screen-capture
expo-screen-orientation
expo-network
expo-notifications
deleteNotificationChannelGroupAsync export (#43244 by @vonovak)NotificationForwarderActivity on Android 11/12 when Parcelable extras fail to deserialize by using byte array serialization as fallback. (#43203 by @vonovak)requestPermissionsAsync not forwarding new options to the OS when notifications were already granted (#43378 by @vonovak)expo-modules-core
TurboModuleRegistry on web (#39726 by @satya164)useReleasingSharedObject getting destroyed after a fast refresh caused by a change in its dependencies. (#39753 by @behenate)[NSString UTF8String] could return nil for certain string inputs (non-English), leading to an attempt to dereference a null pointer during jsi::String creation. (#40639 by @mohammadamin16)androidNavigationBar.enforceContrast app config property not working. (#40263 by @behenate)Either conversion in Record (#40655 by @vonovak)TextField causing crash when reload and unmounting. (#40960 by @nishan) (#40960 by @intergalacticspacehighway) (#40960, #40960 by @intergalacticspacehighway, @intergalacticspacehighway)useReleasingSharedObject to defer releasing until after render.InvalidArgsNumberException when declaring AsyncFunction with optional arguments and Promise. (#41054 by @Wenszel)AppContextActivityResultLauncher coroutine continuation is active before resuming (#41319 by @vonovak)register overload in ModuleRegistry. (#40149 by @alanjhughes)invalidate callback to SwiftUIVirtualView. (#40237 by @intergalacticspacehighway)ValueOrUndefined conversion in Record. (#40289 by @jakex7)null not being correctly converted to ValueOrUndefined in Record. (#41005 by @lukmccall)NativeModule extending Record<string, any>, which made it not type-safe. (#41320 by @lukmccall)expo -> expo-modules-core/types -> ./build/global rather than types="node" (#42751 by @kitten)DynamicBoolType to correctly distinguish boolean values from numeric 0/1. (#42978 by @nishan) (#42978 by @intergalacticspacehighway)DynamicBoolType to throw NullCastException for nil values, matching DynamicRawType behavior. (#43085 by @nishan) (#43085 by @intergalacticspacehighway)PersistentFileLog. (#43283 by @alanjhughes)field.options.insert() silently failing in fieldsOf() due to mutation on protocol existential. (#43341 by @just1and0)Prop definition component by isolating its setter to the main actor. (#43348 by @tsapeta)expo-mail-composer
expo-media-library
endCursor description in the documentation. (#39120 by @Wenszel)id to URI format (#39920 by @Wenszel)delete() throwing security exception (#39914 by @Wenszel)asset.getModificationTime to return milliseconds (#39715 by @Wenszel)expo-location
mIsHostPaused initialization. Location updates are now delivered immediately when app is in foreground, matching iOS behavior. (#41659 by @tyrauber)scope field in a permissions request result (#41328 by @vonovak)expo-localization
expo-intent-launcher
expo-image-manipulator
expo-image-picker
expo-gl
expo-font
expo-file-system
createFile and createDirectory methods. (#40314 by @jakex7)File/Directory/Paths API. (#43005 by @aleqsio)File and Directory static methods. (#43282 by @alanjhughes)expo-clipboard
expo-constants
expo-crypto
expo-camera
expo-contacts
namePrefix on iOS (#39974 by @hryhoriiK97)editWithForm throws error (#43315 by @Wenszel)expo-calendar
expo-brightness
expo-asset
expo-web-browser
experimentalLauncherActivity config plugin option as it was replaced with the useProxyActivity option on openBrowserAsync and openAuthSessionAsync methods. (#41535 by @lukmccall)warmUpAsync JSDoc. (#42944 by @brentvatne)expo-video-thumbnails
androidx.annotation:annotation dependency. (#39755 by @lukmccall)expo-task-manager
expo-sqlite
expo-sensors
expo-sms
androidx.annotation:annotation dependency. (#39756 by @lukmccall)expo-sharing
androidx.legacy:legacy-support-v4 dependency. (#39757 by @lukmccall)expo-screen-capture
removeScreenshotListener call as deprecated (#42098 by @vonovak)expo-secure-store
expo-screen-orientation
expo-notifications
assertValidAndroidAssetName from expo/config-plugins (#39883 by @vonovak)NotificationImportance.UNSPECIFIED as not suitable for use (#41709 by @vonovak)assert dependency (#42970 by @kitten)expo-modules-core
kotlinOptions to compilerOptions DSL. (#39794 by @huextrat)expo-module.config.json. (#39985, #40241 by @jakex7)RuntimeScheduler to schedule tasks on the JS thread. (#40473 by @alanjhughes)EXConstantsService) from expo-constants. (#41339 by @tsapeta)appContext.fileSystem, appContext.utilities, appContext.imageLoader and appContext.permissions with the core implementations. (#41350, #41370, #41396 by @tsapeta)executeOnJavaScriptThread in favor of runtime.schedule. (#41478 by @tsapeta & #41551 by @lukmccall) (#41478, #41551 by @tsapeta, @lukmccall)ShadowNodeProxy.setStyleSize() for Jetpack Compose integration. (#41553 by @kudo)RCTHost. (#41632 by @alanjhughes)NativeViewManagerAdapter. (#41804 by @tsapeta)EXReactNativeEventEmitter class. (#41915 by @tsapeta)NativeModulesProxy is absent. (#43020 by @tsapeta)Either type stable. (#43267 by @lukmccall)ExpoModulesCorePlugin. (#43312 by @lukmccall)expo-media-library
removeSubscription calls as deprecated (#42098 by @vonovak)android:maxSdkVersion annotation to READ_EXTERNAL_STORAGE and WRITE_EXTERNAL_STORAGE permissions. (#40976 by @behenate)expo-location
androidx.annotation:annotation dependency. (#39758 by @lukmccall)expo-localization
expo-keep-awake
expo-intent-launcher
androidx.annotation:annotation dependency. (#39760 by @lukmccall)expo-image-manipulator
androidx.annotation:annotation dependency (#39764 by @lukmccall)expo-image-loader on iOS. (#41395 by @tsapeta)expo-image-picker
expo-image-loader
expo-gl
expo-haptics
await for performHapticsAsync (#40987 by @kamui545)androidx.annotation:annotation dependency. (#39759 by @lukmccall)expo-font
expo-file-system
android:maxSdkVersion annotation to READ_EXTERNAL_STORAGE and WRITE_EXTERNAL_STORAGE permissions. (#40976 by @behenate)expo-device
androidx.legacy:legacy-support dependency. (#39762 by @lukmccall)expo-clipboard
removeClipboardListener call as deprecated (#42098 by @vonovak)expo-constants
expo-crypto
ExpoCrypto.getRandomBase64String() fallback in getRandomBytes() (#41517 by @hassankhan)expo-camera
CGImageProperties in exif data. (#40801 by @alanjhughes)expo-contacts
CNContactStore lazily (#42096 by @vonovak)androidx.annotation:annotation dependency (#39761 by @lukmccall)expo-calendar
@ in @platform ios JSDoc tag for EntityTypes enum. (#42944 by @brentvatne)expo-blur
expo-asset
expo-gl
texImage2D expo wrapper. (#41499 by @psnet)stb_image.h used for image decoding in texImage2D expo wrapper to support only JPEG, PNG, GIF image formats. Formats BMP, PSD, TGA, HDR, PIC, PNM are no longer supported. (#41001 by @psnet)stb_image.h used for image decoding in texImage2D expo wraper method. A lot of fixes and performance improvements, see related PR. (#41000 by @psnet)EXPO_USE_FAST_RESOLVER flag and implementation (#40673 by @kitten)tar@^7.5.2 (#40732 by @kitten)@expo/log-box package (#39958 by @krystofwoldrich)loader() functions are stripped from client bundles (#40670 by @hassankhan)EXPO_UNSTABLE_BONJOUR to activate Bonjour advertising (#42138 by @kitten)web.output configuration in dev server for loaders (#42147 by @hassankhan)Response objects from loader functions (#42051 by @hassankhan)expo export better. (#41692 by @EvanBacon)EXPO_NO_DEPENDENCY_VALIDATION=1 (#40043 by @kitten)TransformerErrors and SyntaxErrors from Metro (#41468 by @kitten)workerd runtime (#41502 by @hassankhan)expo install not auto-adding config plugins for scoped packages (#41613 by @kitten)metro-runtime/src/modules/empty-module.js in RSC middleware (#41687 by @kitten)nodeModulesPaths when applying autolinking and fallback resolution to Metro resolver (#41703 by @kitten)resetCache, maxWorkers, and port override args when instantiating Metro (#41854 by @shottah)/inspector/network) and devtools (/expo-dev-plugins/broadcast) sockets to local connections (#42156 by @kitten)ImmutableRequest for loader functions (#42149 by @hassankhan)experiments.reactCanary support in favor of built-in React +19.1 support. (#40386 by @EvanBacon)expo-router to @expo/router-server (#39374 by @hassankhan)HMRClient in native apps (#40449 by @krystofwoldrich)expo-router to @expo/router-server (#40484 by @hassankhan)expo-router to @expo/router-server (#40576 by @hassankhan)@expo/cli, @expo/router-server, expo-server (#40614 by @hassankhan)expo/expo development (#41383 by @kitten)@expo/config-types with cast (#41453 by @kitten)Async suffix to exportMiddleware and exportServerRoute (#41443 by @hassankhan)localhost requests (#41542 by @kitten)/_expo/touch templates (#41541 by @kitten)@expo/metro@54.2.0 and metro@0.83.3 (#41142 by @kitten)devicectl jsonVersion 3 for Xcode 26 (#42859 by @kimchi-developer)node-forge dependency range to ^1.3.3 (#41753 by @kitten)@expo/code-signing-certificates@^0.0.6 (#41965 by @kitten)EXPO_OVERRIDE_METRO_CONFIG environment variable (#42082 by @kitten)(request, params) (#42318 by @hassankhan)Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Your coding agent can read these notes before it upgrades. Set up the MCP server →