Reusable require and Node resolution utilities library for Expo
Last release 2 days ago
25 Aug 2026
Ships on a steady schedule
a new release about every 2 weeks
Most releases are documented
notes for 16 of 24 stable releases
Nothing withdrawn
no release was ever pulled
6 months old
59 releases ยท first in 2026
Release timeline
59 releases since 2026Releases
- 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.524 Aug 2026
Nothing published for this version
- 57.0.422 Jul 2026
- 57.0.315 Jul 2026
- 57.0.215 Jul 2026
Nothing published for this version
- 57.0.13 Jul 2026
Release notes
Open source โ๐ Bug fixes
- Automatically switch to ESM mode when evaluated module contains non-qualifying module syntax, like
import.metaor top-level await (#47441 by @kitten)
๐ก Others
- Automatically switch to ESM mode when evaluated module contains non-qualifying module syntax, like
- 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.623 Jul 2026
Nothing published for this version
- 56.1.515 Jul 2026
Nothing published for this version
- 56.1.43 Jul 2026
Nothing published for this version
- 56.1.4-canary-20260701-91008651 Jul 2026pre-release
Nothing published for this version
- 56.1.4-canary-20260624-9d83b8124 Jun 2026pre-release
Nothing published for this version
- 56.1.4-canary-20260606-4d4666c6 Jun 2026pre-release
Nothing published for this version
- 56.1.4-canary-20260526-6cd5e3726 May 2026pre-release
Nothing published for this version
- 56.1.323 May 2026
- 56.1.220 May 2026
Release notes
Open source โ๐ New features
- Add special case for file specifiers, like relative and absolute paths, to
resolveFrom(#45983 by @kitten)
๐ก Others
- Add special case for file specifiers, like relative and absolute paths, to
- 56.1.115 May 2026
Release notes
Open source โ - 56.1.08 May 2026
- 56.0.16 May 2026
- 56.0.05 May 2026
Release notes
Open source โ๐ Breaking changes
unimodules-app-loaderexpo-web-browserexpo-video-thumbnailsexpo-task-managerexpo-store-reviewexpo-speechexpo-sqliteexpo-smsexpo-sharingexpo-secure-storeexpo-sensorsexpo-screen-captureexpo-screen-orientationexpo-printexpo-networkexpo-notificationsexpo-localizationexpo-media-libraryexpo-mail-composerexpo-locationexpo-keep-awakeexpo-modules-core- [iOS] Replaced the Objective-C++ JSI layer (
EXJavaScriptRuntime,EXJavaScriptObject,ExpoModulesHostObject,EXSharedObjectUtils, etc.) with the newExpoModulesJSISwift package. Third-party native modules depending on these types must migrate to the new Swift-first API. (#44337 by @tsapeta) - Bumped minimum iOS/tvOS version to 16.4, macOS to 13.4. (#43296 by @tsapeta)
- [iOS] Replaced the Objective-C++ JSI layer (
expo-local-authenticationexpo-linkingexpo-image-manipulatorexpo-hapticsexpo-linear-gradientexpo-glexpo-image-pickerexpo-fontexpo-document-pickerexpo-file-system- Bumped minimum iOS/tvOS version to 16.4, macOS to 13.4. (#43296 by @tsapeta)
copy()andmove()methods ofFileandDirectoryare now asynchronous and return a Promise. UsecopySync()andmoveSync()for synchronous behavior. (#44359 by @barthap)- [Android] In Expo Go,
Paths.cacheandPaths.documentare now pointing to experience-isolated directories. (#45977 by @barthap) File.write()is now asynchronous and returns a Promise. UseFile.writeSync()for synchronous behavior. (#45992 by @wh201906)FileHandle.readBytes()andFileHandle.writeBytes()are now asynchronous and return a Promise. UseFileHandle.readBytesSync()andFileHandle.writeBytesSync()for synchronous behavior. (#46280 by @wh201906)
expo-device- [iOS] Change the names of "iPad Air (11-inch) (6th generation)", "iPad Air (13-inch) (6th generation)" and "iPhone SE" to "iPad Air 11-inch (M2)", "iPad Air 13-inch (M2)" and "iPhone SE (1st generation)". (#43644 by @prusnak)
- Bumped minimum iOS/tvOS version to 16.4, macOS to 13.4. (#43296 by @tsapeta)
expo-cryptoexpo-contacts- [next] Fix permission functions, presentPicker cancel, presentAccessPicker types (#44847 by @Wenszel)
- Bumped minimum iOS/tvOS version to 16.4, macOS to 13.4. (#43296 by @tsapeta)
- Promote the object-oriented Contacts API to the root
expo-contactsimport and move the legacy API toexpo-contacts/legacy. (#46037 by @Wenszel)
expo-constantsexpo-clipboardexpo-cellularexpo-cameraexpo-calendarexpo-brightnessexpo-blurexpo-batteryexpo-background-fetchexpo-applicationexpo-apple-authenticationexpo-asset
๐ New features
- Initial release of
@expo/cli๐ฅณ - Initial release of
@expo/package-manager๐ฅณ - Initial release of
expo๐ฅณ - Initial release of
expo-brownfield๐ฅณ - Initial release of
expo-json-utils๐ฅณ - Initial release of
expo-modules-autolinking๐ฅณ - Initial release of
expo-router๐ฅณ - Initial release of
expo-module-scripts๐ฅณ - Initial release of
expo-modules-jsi๐ฅณ - Initial release of
@expo/ui๐ฅณ - Initial release of
pod-install๐ฅณ expo-web-browserexpo-task-managerexpo-sqliteexpo-sharingexpo-secure-storeexpo-sensorsexpo-screen-orientationexpo-notificationsexpo-localizationexpo-media-library- [next] Add support for listeners (#44326 by @Wenszel)
- [next] Add
presentPermissionsPicker(#44432 by @Wenszel) - [next][iOS] Add
asset.getMediaSubtypes(),asset.getLivePhotoVideoUri(),asset.getIsInCloud(), andasset.getOrientation()(#44568 by @Wenszel) - [next] Add
asset.getAlbums()(#44604 by @Wenszel) - [next] Add
Album.getAll()(#44446 by @Wenszel) - [next][iOS] Add
album.removeAssets()(#44455 by @Wenszel) - [next] Add usePermissions (#44403 by @Wenszel)
- [next][iOS] Fixed
Query.limit(0)returning all assets instead of an empty array (#44245 by @Wenszel) - [next] Add getPermissionsAsync (#44244 by @Wenszel)
- Expose a typed config plugin function (#44098 by @zoontek)
- [next][iOS] Added support to add or remove assets from Favorites smart album (#43598 by @awaisanjumx2)
- [iOS] Added support to add or remove assets to Favorites smart album (#43459 by @awaisanjumx2)
- [android] Add
getFavorite()/setFavorite()(#45768 by @Wenszel)
expo-mail-composerexpo-location- Expose a typed config plugin function (#44098 by @zoontek)
- Added motion activity APIs:
getMotionActivityAsync,watchMotionActivityAsync, and permission helpers. (#44893 by @Guccio163)
expo-modules-core- [iOS] Added
Equatableconformance toEithertype. (#43954 by @nishan) (#43954 by @intergalacticspacehighway) (#43954, #43954 by @intergalacticspacehighway, @intergalacticspacehighway) - [android] Add
installModuleClassesand__resolveInWorkletfor resolving shared object class prototypes in the worklet runtime. (#44669 by @intergalacticspacehighway) - [iOS] Add
installModuleClassesfor building shared object class prototypes in alternate JS runtimes. (#44214 by @nishan) (#44214 by @intergalacticspacehighway) - [iOS] Install sync functions on shared object worklet prototypes and add
SharedObject.__resolveInWorkletfor resolving shared objects in worklet runtimes. (#44215 by @nishan) (#44215 by @intergalacticspacehighway) NativeArrayBufferandJavaScriptArrayBufferarguments now also accept typed arrays. (#43082 by @barthap)- [Android] Use the
RuntimeSchedulerto schedule tasks on the JS thread. (#43481 by @alanjhughes) - [iOS] Add
nativeModulelook up function andbundleURLto AppContext. (#43661 by @gabrieldonadel) - [iOS] Added a polyfill for Swift
Mutexfor older platform versions. (#44122 by @tsapeta) - [Android] Exposed a shared OkHttpClient instance through AppContext with new coroutine-friendly extensions. (#44854 by @lukmccall)
- [Android] Allow compile-time optimization of compose view props when the property class is annotated with
@OptimizedComposeProps. (#45021 by @lukmccall) - [iOS] Fixed
SharedObject.emitdroppingNativeArrayBuffervalues in events (#45257 by @alanjhughes) - Added single-payload overloads for
SharedObject.emiton iOS and Android. The iOS API also accepts an already-convertedJavaScriptValuepayload to skip the native-to-JS conversion step. (#45596 by @tsapeta) - [iOS]
Decodabletypes can now be used as native function arguments. JS values are decoded through the dynamic-type registry, so arrays, dictionaries, optionals,RawRepresentableenums andConvertibles are coerced consistently. (#45705 by @tsapeta) - [Android] Create Compose props without View. (#46256 by @jakex7)
- [iOS] Added
expo-local-authenticationexpo-linking- Added
Linking.clearInitialURL()to reset the cached deep-link URL. (#46265 by @gabrieldonadel)
- Added
expo-haptics- Add web haptics for iOS Safari using checkbox. (#44261 by @EvanBacon)
expo-linear-gradient- Add macOS support (#45448 by @gabrieldonadel)
expo-image-picker- Expose a typed config plugin function (#44098 by @zoontek)
- [iOS] Allow
launchCameraAsyncto be invoked on the simulator. (#45923 by @EvanBacon)
expo-font- Expose a typed config plugin function (#44098 by @zoontek)
- Add structured server resource descriptors for streaming SSR (#44927 by @hassankhan)
expo-document-pickerexpo-file-system- [iOS] Add support for
modeoption when opening file handle. (#44559 by @gfemec) - Expose a typed config plugin function (#44098 by @zoontek)
- Add support picking for multiple files and choosing multiple MIME types. File.pickFileAsync() has now feature parity with
expo-document-picker. (#43411 by @HubertBer) - Add
overwriteoption to copy and move methods. (#42979 by @barthap) - [Android] Add
modeoption when opening file handle. (#42983 by @barthap) - Add
onProgresscallback andAbortSignalsupport toFile.downloadFileAsync(). (#43053 by @aleqsio) - Add
file.createUploadTask()andFile.createDownloadTask()APIs (#44055 by @barthap) - Add
File.upload()with legacy-compatible upload semantics, progress callbacks, andAbortSignalsupport. (#45033 by @barthap) - Add support for watching file/directory events. (#44986 by @barthap)
- Added
File.json()andFile.formData()to satisfyBlobtype augmentations in consumer projects. (#45685 by @mvincentong)
- [iOS] Add support for
expo-deviceexpo-contactsexpo-cellularexpo-camera- [Web] Expands support for barcode types that can be scanned. (#43403 by @alanjhughes)
- Expose a typed config plugin function (#44098 by @zoontek)
expo-calendar- [iOS][next] Add support for writeOnly permissions (#44967 by @Wenszel)
- [iOS][next] Add
calendar.addEventWithForm()(#44966 by @Wenszel) - [iOS][next] Add
presentPicker()(#44965 by @Wenszel) - Expose a typed config plugin function (#44098 by @zoontek)
- [Android][next] Add
calendar.addEventWithForm()(#46004 by @Wenszel)
expo-brightnessexpo-background-fetchexpo-apple-authenticationexpo-asset
๐ Bug fixes
expo-web-browser- Fixed
openAuthSessionAsyncsilently failing on iOS 17.4+ when usinghttps://redirect URLs without Associated Domains entitlements. The HTTPS universal link callback API is now opt-in via thepreferUniversalLinksoption. (#44452 by @vonovak) - Fix an ES module import error in the typed config plugin. (#46089 by @zoontek)
- Fixed
expo-task-manager- Fixed JS timers hanging during background task execution on Android by registering with
HeadlessJsTaskContext. (#43821 by @janicduplessis) - Fix an ES module import error in the typed config plugin. (#46089 by @zoontek)
- [android] Apply bundled
proguard-rules.proviaconsumerProguardFilesso the-keep class expo.modules.taskManager.**rule is added to consumer apps' R8 pass. (#46029 by @jiunshinn)
- Fixed JS timers hanging during background task execution on Android by registering with
expo-speechexpo-sqliteexpo-sharing- [iOS] Fix
shareAsyncpromise leaking when the user picks an activity and then cancels its follow-up dialog (e.g. taps Print, then cancels the print dialog). The completion handler now resolves unconditionally on dismissal. (@Elehiggle) (by @Elehiggle) - Fix an ES module import error in the typed config plugin. (#46089 by @zoontek)
- [iOS] Fix
expo-secure-storeexpo-sensors- [iOS] Fixed TCC crash on iOS 26 during Metro reload when
motionPermission: falseโCMAltimeter.stopRelativeAltitudeUpdates()now only runs if updates were started. (#45396 by @JustinFay01) - Fix an ES module import error in the typed config plugin. (#46089 by @zoontek)
- [iOS] Fixed TCC crash on iOS 26 during Metro reload when
expo-screen-orientation- [iOS] Fixed per-screen orientation not working with expo-dev-client by searching child VCs for react-native-screens orientation when an intermediate VC blocks the traversal. (#44181 by @vonovak)
- [iOS] Fixed
lockAsyncsilently failing when flipping between previously-applied masks. (#45239 by @alanjhughes) - [iOS] Fixed
EXC_BAD_ACCESScrash from recursivesupportedInterfaceOrientationswhenreact-native-screensper-screen orientation is set. (#45733 by @rayabelcode) - Fix an ES module import error in the typed config plugin. (#46089 by @zoontek)
expo-network- [Android] Fixed network state listener emitting a stale "connected" event when the device disconnects from the network on Android 13+. (#44656 by @gueroverdenwshq)
- [Android] Make
isInternetReachablemuch more robust. Also emit network state changes when network capabilities change. (#45101 by @LumaDevelopment)
expo-notifications- [ios] Fixed
requestPermissionsAsyncreturning raw permission result without several documented fields (#43555 by @vonovak) - [ios] Guard against crash in
BackgroundEventTransformerwhen notification body is a primitive type. (#45198 by @DORI2001) - [web] fix
getDevicePushTokenAsyncexport (#44413 by @vonovak) - [ios] fix unhandled promise rejection in
getRegistrationInfoAsync, relax keychain accessibility to allow access after device unlocked. (#43829 by @jmalmo) - [ios] Dispatch foreground notification completion handler on the main thread to prevent SIGTRAP /
BSPreconditionFailureon iOS 16. (#45096 by @qutrek) - [android] Apply bundled
proguard-rules.proviaconsumerProguardFilesso the-keep class expo.modules.notifications.**rule is added to consumer apps' R8 pass. (#45974 by @jiunshinn) - Fix an ES module import error in the typed config plugin. (#46089 by @zoontek)
- [ios] Fixed
expo-localizationexpo-media-libraryexpo-mail-composerexpo-location- [iOS] Ignore
locationUnknownerrors inwatchPositionAsync. (#44027 by @tsapeta) - [Android] Foreground service notification icon now falls back to
notification_icondrawable beforeapplicationInfo.icon. The launcher icon is full-color and renders as a solid white square in notifications. (#44309 by @creatornader) - Fix an ES module import error in the typed config plugin. (#46089 by @zoontek)
- [iOS] Ignore
expo-keep-awake- fix(keep-awake): catch activation promise rejection on Android (#45006 by @cortinico)
expo-modules-core- [Android] Fixed Compose view clipping that caused Material ripple effects to be cut off (e.g., Switch thumb ripple). (#43656 by @vonovak)
- [iOS] Fix memory leak due to retain cycle in SwiftUI views. (#43468 by @nishan) (#43468 by @intergalacticspacehighway) (#43468, #43468 by @intergalacticspacehighway, @intergalacticspacehighway)
- [iOS] Fixed compilation issues due to missing fallthrough case in
EXJavaScriptSerializable. (#43634 by @tjzel) - [iOS] Fixed adding SwiftUI views to tabs BottomAccessory. (#44247 by @t0maboro)
- [iOS] Fix crash that can occur when reloading JavaScript bundle due to object deallocating off the JavaScript thread. (#43937 by @cltnschlosser)
- [iOS] Fixed runtime setup crashing in the old bridge module. (#44121 by @tsapeta)
- [iOS] Make access to module registry thread safe. (#44042 by @alanjhughes)
- [iOS] Fixed
PersistentFileLog.readEntriesrace condition by serializing reads on the dispatch queue. (#43958 by @ramonclaudio) - [iOS] Fixed looking up the
EXConstants.bundlefrom the main bundle to allow running with precompiled XCFrameworks. (#44551 by @chrfalch) - [iOS] Fixed Constants.expoConfig returning null due to optional value wrapping in ConstantsProvider. (#44550 by @chrfalch)
- [iOS] Fixed view lookup in bridgeless mode by using
ExpoHostWrapperinstead ofreactBridge.uiManager. (#44375 by @vonovak) - [iOS] Resolve
react-native-workletsfrom existing podspec, falling back to peer resolution (#44232 by @kitten) - [iOS] Fix finding EXConstants.bundle inside framework bundle for brownfield (#44810 by @gabrieldonadel)
- [iOS] Guard against null
eventEmitterinSwiftUIVirtualView.dispatchEventto prevent SIGSEGV after view teardown. (#45175 by @DORI2001) - [iOS] Fix double to UIColor conversion (#45387 by @Wenszel)
- [iOS] Fix random crash when concurrent access of the same
RecordonField.options. The set is now guarded by a per-field lock and accessed through a singlewithOptionsAPI. (#45072 by @nishan) (#45072 by @intergalacticspacehighway) - [iOS] Fixed converting
Enumerablefunction results to JS values. (#45168 by @tsapeta) - [iOS] Fixed prebuild dependencies for
ExpoModulesJSI(#45124 by @chrfalch) - [iOS] Add async/await overload for StaticAsyncFunction (#44471 by @Wenszel)
- [Android] Added support for CSS
rgb(...)andrgba(...)color strings when converting JS color values toandroid.graphics.Color. (#44023 by @dileepapeiris) - [iOS] Fix missing jsi headers when building static frameworks (#44865 by @gabrieldonadel)
- Fixed runtime crash when missing
Hostcomponent for SwiftUI or Jetpack Compose components. (#44118 by @kudo) - [iOS] Restore pre-ExpoModulesJSI
Recordconversion behavior by hydrating only declared fields, preservingundefinedhandling for object properties, and emitting typed records directly to JS. (#45085 by @barthap) - Fix reading EXConstants.bundle when using prebuilds + brownfield with SPM (#45148 by @gabrieldonadel)
- [Android] Resolve
libworklets.sovia prefab before falling back to local CMake output. (#43863 by @Insik-Han) - [iOS] Fix dictionary/array returns from sync functions invoked in the worklet runtime. (#45419 by @nishan) (#45419 by @intergalacticspacehighway)
- [Android] Fix unsetting border width on views with border radius causing views to disappear (#45467 by @fractalbeauty)
- [iOS] Fix encoding
Encodablefunction results so arrays, dictionaries, optionals,RawRepresentableenums andConvertibles route through their dynamic types instead of producing wrong shapes. (#45575 by @tsapeta) - [Android] Avoid remounting Jetpack Compose views during same-frame React Native reparenting. (#45711 by @mvincentong)
- [Android] Fixed
associatedCookiesinNetwork.requestWillBeSentExtraInfoCDP events serializing as a JSON object instead of an array. (#45720 by @huntie) - [Android] Keep
ExpoComposeViewcontent visible during parent view transitions (e.g.,react-native-screenspop navigation). (#45942 by @intergalacticspacehighway) - [iOS] Fix occasional
SharedObject.emitcrashes caused by an off-thread JSI lookup. (#45986 by @tsapeta) - [Android] Suppress
-Wunused-resultcompiler warning inFrontendConverter.cpp. (#46073 by @tomekzaw) - [android] Fix nested
Hostdouble-composing children. (#46304 by @nishan) (#46304 by @intergalacticspacehighway) - [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)
expo-local-authenticationexpo-intent-launcher- [Android] Fixed
getApplicationIconthrowing an error on Android below API 26. (#46043 by @lukmccall)
- [Android] Fixed
expo-image-manipulator- [iOS] Preserve HEIC orientation when loading local files for image manipulation. (#43725 by @maxsz)
- [Android] Save manipulated images in the scoped cache directory. (#45708 by @mvincentong)
- [Web] Throw an error when requested mime type is not supported. (#46165 by @alanjhughes)
expo-gl- Make
msaaSamplesandenableExperimentalWorkletSupportoptional inGLViewPropsto align TypeScript types with their runtimedefaultPropsvalues. (#43767 by @jcarlosroldan) - Install
WebGLRenderingContextandWebGL2RenderingContextglobals and their numeric constants at module init so libraries that read them before any GL context is created no longer crash. (#45865 by @tsapeta) - Make
WebGL2RenderingContextinherit fromWebGLRenderingContext, matching the WebGL spec.gl2 instanceof WebGLRenderingContextnow returnstruefor WebGL2 contexts, and shared constants and methods are no longer duplicated on the WebGL2 prototype. (#45871 by @tsapeta)
- Make
expo-image-picker- [android] fix cropper default colors in light mode (#42437 by @fobos531)
- [android] Handle edge-to-edge display in crop activity. (#44208 by @zoontek)
- fix potential
nullmime type reported (#43734 by @vonovak) - [android] Fix potential vulnerability in
com.canhub.cropper.CropImageActivitybeing exported. (#45357 by @behenate) - [iOS] Fix
base64result not being a JPEG data. (#43806 by @barthap) - [Android] Follow system day/night theme in crop activity. (#44944 by @jeferson-sb)
- Fix an ES module import error in the typed config plugin. (#46089 by @zoontek)
expo-fontexpo-document-pickerexpo-file-system- [Android] Fix copy/move support for SAF and content provider URIs. (#42887 by @barthap)
- Fix out-of-memory errors when calculating file
md5hash. (#44064 by @barthap) - [iOS] Fix
totalDiskSpacereturning free disk space instead of total disk capacity. (#44849 by @shanebdavis) - Fix
onProgresscallback ofFile.downloadFileAsync()sometimes not firing on download completion. (#45238 by @barthap) - [iOS] Fix
File.pickFileAsync()greying out all files when using wildcard MIME types like*/*orimage/*. (#45245 by @barthap) - Fixed the jest mock's
FileSystemFileHandleto honorFileModestring values ('r','w','wa','wt','rw') instead of the obsolete name table, expose handle and file metadata, and match the documented default mode forcontent://URIs. The dispatch is now exhaustive overFileMode, so future enum additions fail to compile in the mock. (by @radko93) - [Android] Added missing permission checks to
delete()andopenHandle()in the next-gen File System API. (#45967 by @barthap) - [Android] Fixed path traversal vulnerability in
createFile,createDirectory, andrenamethat allowed escaping the parent directory. (#45967 by @barthap) - [Android] Fixed
Paths.cacheandPaths.documentpointing to wrong directory in Expo Go. (#45977 by @barthap)
expo-crypto- Access
cryptoonglobalThisrather than justwindow.crypto(#43405 by @bradleyayers)
- Access
expo-contactsexpo-cellularexpo-camera- [Web] Fix
isAvailableAsyncreturningtrueon devices without a camera. (#43932 by @alanjhughes) - [iOS] Use runtime camera availability checks in Simulator so camera code paths can run when a runtime video device is present while preserving fallback behavior when no device is available. (by @kmagiera) (#44159 by @kmagiera) (#44159 by @kmagiera, @kmagiera) (#44159, #44159 by @kmagiera, @kmagiera, @kmagiera, @kmagiera)
- [iOS] Fix inconsistent barcode
typevalue returned by ZXing fallback scanner (code39, pdf417, codabar) โ it now returns the same format as the AVFoundation scanner (e.g."code39"instead of"org.iso.Code39"). (#44726 by @jensdev) - [iOS] Fix orientation issue caused by upstream changes. (#44171 by @alanjhughes)
- [iOS] Fix camera activity indicator remaining active after
CameraView.launchScanneris interactively dismissed and the app is backgrounded/foregrounded. (#45063 by @alanjhughes) - [Android] Remove
RECORD_AUDIOfrom the manifest sorecordAudioAndroiddepends on the plugin. (#45132 by @alanjhughes) - [iOS] Fix
itf14barcode type not detecting generic Interleaved 2 of 5 barcodes, so behavior matches Android'sFORMAT_ITF. (#44796 by @mduchev) - Fix an ES module import error in the typed config plugin. (#46089 by @zoontek)
- [Web] Fix
expo-calendar- Fixed
NumberFormatExceptioncrash on Android when calendar/event IDs exceedInteger.MAX_VALUE. (#43344 by @olivier-bouillet) - [iOS] Fix
deleteEventAsyncdeleting wrong recurring event instance wheninstanceStartDateis provided. (#40172 by @marcelogdeandrade) - [Android] Add missing escaping of
calendarIdsfilter input (#45951 by @kitten) - [next] Remove legacy exports (#45739 by @Wenszel)
- Fix an ES module import error in the typed config plugin. (#46089 by @zoontek)
- Fixed
expo-brightnessexpo-blur- [Android] Fix Fabric mount/detach mismatch in
BlurTargetViewthat could triggerview already removed from parenterrors during root tree transitions. (#43595 by @stathis) (#43595 by @efstathiosntonas) (#43595, #43595 by @efstathiosntonas, @efstathiosntonas) - [Android] Fix the initial blur value not taking the
blurReductionFactorinto account. (#43814 by @behenate)
- [Android] Fix Fabric mount/detach mismatch in
expo-batteryexpo-background-fetchexpo-application- [Android] Fix
PromiseAlreadySettledExceptioncrash ingetInstallReferrerAsyncwhenonInstallReferrerServiceDisconnectedgets called after promise settlement. (#43419 by @nishan) (#43419 by @intergalacticspacehighway) (#43419, #43419 by @intergalacticspacehighway, @intergalacticspacehighway)
- [Android] Fix
expo-apple-authenticationexpo-asset
๐ก Others
unimodules-app-loaderexpo-web-browser- [Android] Bring back the
experimentalLauncherActivityconfig plugin option. (#44073 by @lukmccall)
- [Android] Bring back the
expo-store-reviewexpo-sqlite- Bumped dev-plugin-webui to SDK 55. (#43412 by @kudo)
- [iOS] Updated sync function signatures (
runSync,applyChangesetSync,invertChangesetSync) to acceptany AnyArrayBufferin place of the removedJavaScriptArrayBuffer. (#44337 by @tsapeta) - Session changesets now use native
ArrayBuffers. (#42638 by @barthap) - Statement bind params now use native
ArrayBuffers for blob columns. (#42639 by @barthap) - [Android] Returned blob columns now use native
ArrayBuffers. (#42640 by @barthap) - [iOS] Returned blob columns now use native
ArrayBuffers. (#42642 by @barthap)
expo-sensorsexpo-screen-captureexpo-screen-orientationexpo-notifications- Skip redundant device push token registration when token and metadata are unchanged since last successful registration. (#44836 by @stephanepham)
- [iOS] Added explicit
import Reactfor xcframework compatibility. (#44248 by @chrfalch) - Updated permission type and permission status imports to be imported from
expoinstead ofexpo-modules-core(#45565 by @Wenszel)
expo-localization- Use ReactI18nUtil dependency for enabling RTL support. (#40575 by @nishan) (#40575 by @intergalacticspacehighway)
expo-media-libraryexpo-locationexpo-modules-core- [iOS] Extracted ObjC protocols (
EXAppContextProtocol,EXReactDelegateProtocol,EXAppContextFactoryRegistry) for cross-xcframework module boundaries. Refactored legacy module registry, Fabric view headers, JSI layer, and podspecs for xcframework compatibility. (#44248 by @chrfalch) - [iOS] Add
ViewWrapperprotocol andAnyContentViewProviderfor type-erased access to wrapped SwiftUI views. (#43669 by @nishan) (#43669 by @intergalacticspacehighway) (#43669, #43669 by @intergalacticspacehighway, @intergalacticspacehighway) - [iOS] Make RNHostView SwiftUI view (#43570 by @nishan) (#43570 by @intergalacticspacehighway) (#43570, #43570 by @intergalacticspacehighway, @intergalacticspacehighway)
- [iOS] Reduced per-call overhead of invoking native functions from JavaScript. (#45093 by @tsapeta)
- [iOS] Fixed precompile build failing on
SwiftUIVirtualViewSharedImpl+Private.hleaking into the public module umbrella. (#44993 by @chrfalch) - [iOS] Added explicit c++ linkage specifier to
ExpoModulesCore.podspecto propagate to swift-only targets like Expo Widgets (#44984 by @chrfalch) - [iOS] Rewrote the core type system, definitions,
AppContext, and worklets integration on top of the newExpoModulesJSIpackage. (#44337 by @tsapeta) - [iOS] Decoupled Worklets integration into separate podspec. (#42971 by @chrfalch)
- [iOS] Improved conversions of returned arrays and dict
- [iOS] Extracted ObjC protocols (
Additional notes
Open source โ - 56.0.0-canary-20260506-964f25d6 May 2026pre-release
Nothing published for this version
- 56.0.0-canary-20260506-326540f6 May 2026pre-release
Nothing published for this version
- 56.0.0-canary-20260506-1b0052a6 May 2026pre-release
Nothing published for this version
- 56.0.0-canary-20260506-03817f56 May 2026pre-release
Nothing published for this version
- 56.0.0-canary-20260505-84af74c5 May 2026pre-release
Nothing published for this version
- 56.0.0-canary-20260501-870dcba1 May 2026pre-release
Nothing published for this version
- 56.0.0-canary-20260501-15d35291 May 2026pre-release
Nothing published for this version
- 56.0.0-canary-20260423-c31bd8e23 Apr 2026pre-release
Nothing published for this version
- 56.0.0-canary-20260420-2ac87c020 Apr 2026pre-release
Nothing published for this version
- 56.0.0-canary-20260417-141204f17 Apr 2026pre-release
Nothing published for this version
- 56.0.0-canary-20260414-e3dbafd14 Apr 2026pre-release
Nothing published for this version
- 56.0.0-canary-20260409-6fc29919 Apr 2026pre-release
Nothing published for this version
- 56.0.0-canary-20260402-87c5ce22 Apr 2026pre-release
Nothing published for this version
- 56.0.0-canary-20260305-51637465 Mar 2026pre-release
Nothing published for this version
- 56.0.0-canary-20260212-4f6130912 Feb 2026pre-release
Nothing published for this version
- 55.0.825 Aug 2026
Nothing published for this version
- 55.0.717 Aug 2026
Nothing published for this version
- 55.0.615 Jul 2026
Nothing published for this version
- 55.0.55 May 2026
- 55.0.49 Apr 2026
Release notes
Open source โ๐ New features
- Add
resolveFromutility that supports custom extensions and not following symlinks (#44114 by @kitten) - Add
resolveGlobalutility for sharp and ngrok resolution (#44236 by @kitten)
๐ Bug fixes
- Add
- 55.0.4-canary-20260402-9da566b2 Apr 2026pre-release
Nothing published for this version
- 55.0.4-canary-20260401-5e87ef71 Apr 2026pre-release
Nothing published for this version
- 55.0.4-canary-20260328-bdc627328 Mar 2026pre-release
Nothing published for this version
- 55.0.4-canary-20260328-204918728 Mar 2026pre-release
Nothing published for this version
- 55.0.4-canary-20260327-0789fbc27 Mar 2026pre-release
Nothing published for this version
- 55.0.317 Mar 2026
Release notes
Open source โ - 55.0.3-canary-20260429-a5e59cf29 Apr 2026pre-release
Nothing published for this version
- 55.0.3-canary-20260424-7bedc9d24 Apr 2026pre-release
Nothing published for this version
- 55.0.225 Feb 2026
- 55.0.120 Feb 2026
- 55.0.016 Feb 2026
Release notes
Open source โ๐ Breaking changes
expo-notificationsexpo-modules-core- [Android] Drop support for legacy architecture.
- [iOS] Renamed
ignoreSafeAreaKeyboardInsetstoignoreSafeAreaonHostcomponent. It now accepts'all'or'keyboard'instead of a boolean. (#42598 by @nishan) (#42598 by @intergalacticspacehighway)
expo-localizationexpo-image-loaderexpo-clipboardexpo-cellularexpo-brightnessexpo-blur
๐ New features
expo-web-browser- Add support for auth universal links callback (#42695 by @gabrieldonadel)
expo-sqliteexpo-speechexpo-sharingexpo-notifications- [android] Support subscribing to Firebase broadcast topics by (#17674 @mmomtchev) (#17674 by @mmomtchev)
- improve runtime validation for NotificationTriggerInput (#41538 by @vonovak)
- improve custom sound validation (#43189 by @vonovak)
expo-modules-core- [Android] Starts using precompiled headers to improve build times. (#39641 by @lukmccall)
- Remove
ExpoAppDelegateinheritance requirement in ExpoReactNativeFactory (#39417 by @gabrieldonadel) - [iOS] Introduce ExpoAppDelegateSubscriberManager class (#40008 by @gabrieldonadel)
- [iOS] Add
applicationDidReceiveMemoryWarningsubscribing to ExpoAppDelegateSubscriberManager (#40504 by @szydlovsky) - [iOS] Swift's
Encodabletypes can now be converted to JavaScript values. (#40621 by @tsapeta) - [iOS] Added
subscriberDidRegisterfunction to AppDelegate subscribers. (#40684 by @tsapeta) - Add
reloadAppAsyncmethod to AppContext. (#42295 by @aleqsio) - Add
maptoValueOrUndefined. (#40593 by @Wenszel) - Add types for
process.env.EXPO_DOM_HOST_OS. (#40382 by @EvanBacon) - [Android] Add
ComposableScopefor compose Content functions. (#39155 by @aleqsio) - [Android] Adds support for
ArrayBuffer. (#39943 by @lukmccall) - [Android] Add experimental formatters API. (#38946 by @lukmccall)
- [iOS] Add
convertResulttoConvertible. (#40302 by @jakex7) - [iOS] Adopted Swift 6 (#40369 by @tsapeta)
- Add StaticFunction and StaticAsyncFunction to Class in modules API. (#39228, #38754 by @jakex7)
- [Android] Added
ReactActivityHandler.onDidCreateReactActivityDelegateNotification. (#40537 by @lukmccall) - [Android] Added
ReactNativeHostHandler.onDidCreateReactHost. (#40561 by @lukmccall) - [Android] Remove
hermesEnabledproperty requirement for internal testing (#40678 by @gabrieldonadel) - [iOS]
Classdefinition for shared objects is now optional. (#40708 by @tsapeta) - Split out JSI layer from the modules core. (#40755 by @tsapeta)
- [Android] Improved support for
ArrayBuffers. (#41404 by @barthap) - [Android] Add support for creating
ArrayBuffers in native modules. (#41415 by @barthap) - [iOS] Added
appDelegateWillBeginInitializationfunction to AppDelegate subscribers. (#41456 by @tsapeta) - [iOS] Added
RNHostto improve RN component layout inside SwiftUI views (#40938 by @nishan) (#40938 by @intergalacticspacehighway) - [iOS] Added
ignoreSafeAreaKeyboardInsetstoSwiftUIHostingView. (#41302 by @nishan) (#41302 by @intergalacticspacehighway) - [iOS] Added support for
ArrayBuffers. (#41548 by @barthap) - [iOS] JSI runtime is now accessed from public
RCTHostRuntimeDelegateinstead of unofficialbridge.runtime. (#41311 by @tsapeta) - [iOS] Introduced global
JavaScriptActorto isolate code requiring running on the JavaScript thread. (#41793 by @tsapeta) - [iOs] Add experimental formatters API. (#42023 by @lukmccall)
- [macOS] Added
NSEdgeInsets.zeroextension to better matchUIEdgeInsets. (#42675 by @tsapeta)
expo-media-libraryexpo-location- [Android] Add option
androidForegroundServiceIconfor controlling the icon for the foreground service. (#41132 by @jeppester) - [iOS] Added
accuracyfield toPermissionDetailsLocationIOSexposing iOS 14+ precise/reduced location authorization. (#42931 by @sbs44)
- [Android] Add option
expo-image-pickerexpo-fontexpo-file-system- add
idempotentoption todownloadFileAsync(#39681 by @vonovak) - Add write options for base64 encoded bytes. (#39963 by @aleqsio)
- [iOS] Add file sharing config options (#39286 by @kosmydel)
- [Android] Add contentUri property. (#40002 by @aleqsio)
- Add
appendoption to write methods. (#42778 by @aleqsio)
- add
expo-deviceexpo-constants- [android] Read projectRoot from expo-autolinking (#40666 by @gabrieldonadel)
expo-cryptoexpo-camera- Allow disabling the barcode scanner functionality via config plugin. (#40444 by @alanjhughes)
- Allow users to set video stabilization mode when recording videos. (#41666 by @alanjhughes)
- [Android] Add support for screen flash on the front camera. (#41667 by @alanjhughes)
expo-contacts- Add
Contacts@Next(#40886 by @Wenszel) - [Android] Implement
hasContactsAsyncfunction (#40756 by @hryhoriiK97)
- Add
expo-calendar- [iOS] Added support for allโday reminders (#39028) by @dominik-miskovic (#39028 by)
- [next] Implement
ExpoCalendar@next(#39108 by @kosmydel and @arturgesiarz) (#39108 by @kosmydel, @arturgesiarz)
expo-blurexpo-auth-session- Added
extraHeadersoption toTokenRequestandRevokeTokenRequest. (#31381) by @levizimmerman and @lsarni (#31381 by @levizimmerman, @lsarni)
- Added
๐ Bug fixes
expo-web-browser- [Android] Fix multiple runs of prebuild repeateadly adding generated code. (#39702 by @alanjhughes)
- [iOS] Fix
dismissBrowserhanging when called with no browser open. (#40799 by @alanjhughes) - [Android] Fix the browser closing after the app is backgrounded by adding a new option to use a proxy activity to launch custom tabs. (#41457 by @lukmccall)
expo-video-thumbnails- [Android] Fixed broken thumbnail generation on Android 9 and lower. (#3854081613 by @andrejpavlovic) (#40816 by @andrejpavlovic)
expo-task-manager- [Android] Fix NPE in updateOrScheduleJob in task manager (#40396 by @SamuelBrucksch)
- [Android] Fix job scheduling ANR caused by cancel/reschedule pattern that prevented jobs from executing and accumulated data until exceeding Binder transaction limit. (#41688 by @tyrauber)
expo-sqlite- Throwing error when
ExpoSQLite.defaultDatabaseDirectoryreturns undefined. (#40680 by @kudo) - Fixed node runtime bundling error on web. (#40739 by @kudo)
- Fixed Android 16kb page size issue when enabling
useSQLCipher. (#40781 by @ronickg) - Fixed
serializeAsync/serializeSyncerrors from memory database on web. (#40899 by @kudo)
- Throwing error when
expo-store-review- [iOS] Fix 'requestReview' function failing. (#40080 by @hryhoriiK97)
expo-sensorsexpo-sharingexpo-screen-capture- Prevent multiple blur views from being added during rapid app state changes. (#39633 by @hryhoriiK97)
- [iOS] Fix main thread violation warnings on app startup. (#42204 by @lukmccall)
expo-screen-orientationexpo-networkexpo-notifications- [android] avoid crash emitting a new token event when module is destroyed (#41754 by @vonovak)
- [ios] fix completion handler never called for background notifications (#41300 by @vonovak)
- Adjustments after removal of notification section of Expo config. (#41972 by @douglowder)
- [Android] fix background task not consistently executing (#43245 by @vonovak)
- [Android] fix
deleteNotificationChannelGroupAsyncexport (#43244 by @vonovak) - add FCM intent origin validation (#43206 by @vonovak)
- Fixed crash in
NotificationForwarderActivityon Android 11/12 when Parcelable extras fail to deserialize by using byte array serialization as fallback. (#43203 by @vonovak) - [ios] Fixed
requestPermissionsAsyncnot forwarding new options to the OS when notifications were already granted (#43378 by @vonovak)
expo-modules-core- Fix runtime error due to passing undefined into function that doesnt receive any argument (#39594 by @mrevanzak)
- Fix build error on Vite due to non-existent import for
TurboModuleRegistryon web (#39726 by @satya164) - [iOS] Return EXJavaScriptValue from null/undefined in arrays. (#39872 by @jakex7)
- [iOS] Fix NSURL to JSIString conversion returning nil. (#39567 by @behenate)
- Fix SharedObject created with
useReleasingSharedObjectgetting destroyed after a fast refresh caused by a change in its dependencies. (#39753 by @behenate) - [core] [iOS] Addresses a potential crash where
[NSString UTF8String]could returnnilfor certain string inputs (non-English), leading to an attempt to dereference a null pointer duringjsi::Stringcreation. (#40639 by @mohammadamin16) - [Android] Fix
androidNavigationBar.enforceContrastapp config property not working. (#40263 by @behenate) - [iOS] Fix
Eitherconversion inRecord(#40655 by @vonovak) - [iOS] Fix sizing glitch when React Native components are used as child in Expo UI components (#40693 by @nishan) (#40693 by @intergalacticspacehighway) (#40693, #40693 by @intergalacticspacehighway, @intergalacticspacehighway)
- [iOS] Fix
TextFieldcausing crash when reload and unmounting. (#40960 by @nishan) (#40960 by @intergalacticspacehighway) (#40960, #40960 by @intergalacticspacehighway, @intergalacticspacehighway) - [iOS] Universal links not working on cold start. (#41185) by @jbaudanza (#41185 by @jbaudanza) (#41185, #41185 by @jbaudanza, @jbaudanza)
- [Android] Fixed DSL view props using stale state when updating. (#41622 by @kimchi-developer)
- [core] Fixed
useReleasingSharedObjectto defer releasing until after render. - [android] Fix source sets for events for functional view definitions. (#41685 by @aleqsio)
- [iOS] Fix throwing
InvalidArgsNumberExceptionwhen declaringAsyncFunctionwith optional arguments andPromise. (#41054 by @Wenszel) - [iOS] fix queue assertion crash (#41296 by @vonovak)
- [Android] check if
AppContextActivityResultLaunchercoroutine continuation is active before resuming (#41319 by @vonovak) - [RSC] Fix server components asserting from missing native modules. (#40388 by @EvanBacon)
- [Android] Restore
registeroverload inModuleRegistry. (#40149 by @alanjhughes) - [iOS] Add
invalidatecallback to SwiftUIVirtualView. (#40237 by @intergalacticspacehighway) - [iOS] Fix
ValueOrUndefinedconversion inRecord. (#40289 by @jakex7) - [iOS] Improve RN component layout when hosted in SwiftUI (#40794 by @nishan) (#40794 by @intergalacticspacehighway)
- [iOS] Fixed
nullnot being correctly converted toValueOrUndefinedinRecord. (#41005 by @lukmccall) - Fixed
NativeModuleextendingRecord<string, any>, which made it not type-safe. (#41320 by @lukmccall) - [iOS] Fix missing headers when using static frameworks (#41970 by @gabrieldonadel)
- [iOS] Add shallow equality check before triggering view prop setters to avoid unnecessary calls. (#39331 by @nishan) (#39331 by @intergalacticspacehighway)
- Fix react-native-macos 0.81 support (#42366 by @gabrieldonadel)
- [Android] Fixed crashes in JavaScriptValue/JavaScriptObject destructor caused by freeing memory after the runtime is destroyed. (#42440 by @lukmccall)
- [Android] Added missing checks in the promise implementation. (#42467 by @lukmccall)
- [iOS] Fixed a crash in Fabric when unmounting a view while a geometry change event is being dispatched. (#42628 by @danishshaik) (#42634 by @danishshaik) (#42634 by @danishshaik, @danishshaik)
- [iOS] Fix crashes when converting a single JSValue into an Array. (#42694 by @behenate)
- Added more Jetpack Compose support. (#42734 by @kudo)
- Fix global type declaration chain to point to
expo -> expo-modules-core/types -> ./build/globalrather thantypes="node"(#42751 by @kitten) - [iOS] Fixed missing dependencies when building from source (#42901 by @chrfalch)
- [iOS] Added
DynamicBoolTypeto correctly distinguish boolean values from numeric 0/1. (#42978 by @nishan) (#42978 by @intergalacticspacehighway) - [iOS] Fixed
DynamicBoolTypeto throwNullCastExceptionfor nil values, matchingDynamicRawTypebehavior. (#43085 by @nishan) (#43085 by @intergalacticspacehighway) - [iOS] Fix crash from
PersistentFileLog. (#43283 by @alanjhughes) - [iOS] Fixed
field.options.insert()silently failing infieldsOf()due to mutation on protocol existential. (#43341 by @just1and0) - [iOS] Fixed warnings in
Propdefinition component by isolating its setter to the main actor. (#43348 by @tsapeta)
expo-mail-composerexpo-media-library- [next][android] Fix Failed To Build Unique File exception (#42222 by @Wenszel)
- [next][android] Fix creating album with name with spaces (#42220 by @Wenszel)
- Fix
endCursordescription in the documentation. (#39120 by @Wenszel) - [next][iOS] Convert
idto URI format (#39920 by @Wenszel) - [next][android] Fix
delete()throwing security exception (#39914 by @Wenszel) - [next][android] Change default root directory to Pictures (#39716 by @Wenszel)
- [next] Fix
asset.getModificationTimeto return milliseconds (#39715 by @Wenszel)
expo-location- [Android] Fixed deferred location updates being applied in foreground due to incorrect
mIsHostPausedinitialization. Location updates are now delivered immediately when app is in foreground, matching iOS behavior. (#41659 by @tyrauber) - use WGS 84 as reference for altitude on iOS (#41318 by @vonovak)
- fix position of the
scopefield in a permissions request result (#41328 by @vonovak) - [Web] Stop using legacy event emitter. (#41680 by @alanjhughes)
- [Android] Fixed deferred location updates being applied in foreground due to incorrect
expo-localization- Correct types for getCalendars and getLocales (#39703 by @kadikraman)
- [android] fix: convert BCP-47 locales to Android resource qualifiers (#40901 by @kosmydel)
expo-intent-launcher- [Android] Fixed Double to Long conversion for intent extras to support calendar timestamps and other large numeric values. (#42386 by @brianomchugh)
expo-image-manipulatorexpo-image-pickerexpo-glexpo-fontexpo-file-system- [Android] Fix incorrect AndroidManifest.xml location. (#39134 by @robertying)
- Fix typedoc in the File class. (#40064 by @aleqsio)
- [Android] Fix getContentUri. (#40001 by @aleqsio)
- [Android] Fix recursive file deletion. (#40248 by @aleqsio)
- [iOS] Add missing
createFileandcreateDirectorymethods. (#40314 by @jakex7) - [file-system] Fix package exports for Typescript projects (#39543 by @smoores-dev)
- [Android] Fix bundle directory listing returning incorrect names, URIs and trailing slashes for files. (#42882 by @aleqsio)
- Fix Jest mock to support new
File/Directory/PathsAPI. (#43005 by @aleqsio) - Fix incorrect return types for
FileandDirectorystatic methods. (#43282 by @alanjhughes)
expo-clipboardexpo-constantsexpo-cryptoexpo-camera- [Android] Fix barcode scanner on devices without access to Google Play Services. (#39612 by @behenate)
- [Android] Fix certain exif keys being dropped because of invalid values. (#41043 by @alanjhughes)
- [Android] Fix camera not being recreated on the old architecture. (#41405 by @alanjhughes)
- [iOS] Return correct size information when using image refs. (#41658 by @alanjhughes)
- [iOS] Fix incorrect isPinchToZoomEnabled default value for scanner. (#41803 by @hssdiv)
- [iOS] Fixed a number of configuration issues and error inconsistencies. (#42926 by @alanjhughes)
expo-contacts- [iOS] Fixed issue with missing
namePrefixon iOS (#39974 by @hryhoriiK97) - [iOS] Fixed phonetic name fields being assigned to wrong keys (#40013 by @hryhoriiK97)
- [Android] Fix updating contact with existing image (#42133 by @Wenszel) (#42133 by @wenszel)
- [Android] Fix adding contact when default account is set to cloud (#42203 by @Wenszel)
- Fix
editWithFormthrows error (#43315 by @Wenszel)
- [iOS] Fixed issue with missing
expo-calendarexpo-brightnessexpo-asset
๐ก Others
expo-web-browser- [Android] Remove
experimentalLauncherActivityconfig plugin option as it was replaced with theuseProxyActivityoption onopenBrowserAsyncandopenAuthSessionAsyncmethods. (#41535 by @lukmccall) - Fixed missing word in
warmUpAsyncJSDoc. (#42944 by @brentvatne)
- [Android] Remove
expo-video-thumbnails- [Android] Remove unused
androidx.annotation:annotationdependency. (#39755 by @lukmccall)
- [Android] Remove unused
expo-task-managerexpo-sqliteexpo-sensorsexpo-sms- [Android] Removed unused
androidx.annotation:annotationdependency. (#39756 by @lukmccall)
- [Android] Removed unused
expo-sharing- [Android] Removed unused
androidx.legacy:legacy-support-v4dependency. (#39757 by @lukmccall)
- [Android] Removed unused
expo-screen-capture- Remove warning about iOS screenshot limitations. (#40115 by @hryhoriiK97)
- mark
removeScreenshotListenercall as deprecated (#42098 by @vonovak)
expo-secure-store- [iOS] Remove byte limit warning. (#40187 by @alanjhughes)
expo-screen-orientationexpo-notifications- add a warning for getDevicePushTokenAsync on iOS simulators (#40028 by @vonovak)
- validate sound resource names with
assertValidAndroidAssetNamefromexpo/config-plugins(#39883 by @vonovak) - [android] migrate off of legacy expo-modules-core apis (#41731 by @vonovak)
- [ios] migrate permission requester to swift (#42010 by @vonovak)
- [android] remove token listener on module destroy (#41275 by @vonovak)
- Remove tests-related files from the published package content. (#39551 by @Simek)
- [ios] migrate notification serializer to swift (#38633 by @vonovak)
- [android] bump firebase notifications dependency (#42016 by @vonovak)
- [android] mark
NotificationImportance.UNSPECIFIEDas not suitable for use (#41709 by @vonovak) - Remove unused
assertdependency (#42970 by @kitten) - [Android] migrate several Java files to Kotlin (#43249 by @vonovak)
expo-modules-core- [ios] - Set host dimension synchronously on native (#40017 by @nishan) (#40017 by @intergalacticspacehighway) (#40017, #40017 by @intergalacticspacehighway, @intergalacticspacehighway)
- [iOS] Removed some runtime type checks for dynamic types. (#40611 by @tsapeta)
- [iOS] Added base props support for SwiftUI integration. (#40492 by @kudo)
- [Android] Migrated from
kotlinOptionstocompilerOptionsDSL. (#39794 by @huextrat) - [iOS] Add explicit CallInvoker and CallbackWrapper imports to EXJSIUtils (#39818 by @gabrieldonadel)
- [Android] Refactor getDelayLoadAppHandler to use ReactHost (#40084 by @gabrieldonadel)
- [Android] Use module name from
expo-module.config.json. (#39985, #40241 by @jakex7) - [iOS] Use the
RuntimeSchedulerto schedule tasks on the JS thread. (#40473 by @alanjhughes) - Remove tests related files from the published package content. (#39551 by @Simek)
- Remove old REACT_NATIVE_TARGET_VERSION checks (#40843 by @gabrieldonadel)
- [iOS] Moved the implementation of the constants provider (
EXConstantsService) fromexpo-constants. (#41339 by @tsapeta) - [iOS] Replaced
appContext.fileSystem,appContext.utilities,appContext.imageLoaderandappContext.permissionswith the core implementations. (#41350, #41370, #41396 by @tsapeta) - Deprecated
executeOnJavaScriptThreadin favor ofruntime.schedule. (#41478 by @tsapeta & #41551 by @lukmccall) (#41478, #41551 by @tsapeta, @lukmccall) - Added
ShadowNodeProxy.setStyleSize()for Jetpack Compose integration. (#41553 by @kudo) - [iOS] Create wrapper for
RCTHost. (#41632 by @alanjhughes) - Removed unnecessary warning in the legacy
NativeViewManagerAdapter. (#41804 by @tsapeta) - [iOS] Removed legacy
EXReactNativeEventEmitterclass. (#41915 by @tsapeta) - [iOS] Removed legacy log handler. (#41916 by @tsapeta)
- [macos] Remove [email protected] workarounds (#42409 by @gabrieldonadel)
- Improved Jetpack Compose integration for Expo UI. (#42450 by @kudo)
- Removed needless warning when
NativeModulesProxyis absent. (#43020 by @tsapeta) - [iOS] Removed some unused code. (#42949 by @tsapeta)
- Fixed view updates for Jetpack Compose integration. (#42732 by @kudo)
- [Android] Promoted
Eithertype stable. (#43267 by @lukmccall) - [Android] Remove legacy
ExpoModulesCorePlugin. (#43312 by @lukmccall)
expo-media-library- [next][android] Refactor permissions (#40076 by @Wenszel)
- [next] Add test screens (#39951 by @Wenszel)
- [next] Add documentation (#39754 by @Wenszel)
- mark
removeSubscriptioncalls as deprecated (#42098 by @vonovak) - Remove tests related files from the published package content. (#39551 by @Simek)
- [Android] Add
android:maxSdkVersionannotation toREAD_EXTERNAL_STORAGEandWRITE_EXTERNAL_STORAGEpermissions. (#40976 by @behenate)
expo-location- [Android] Removed unused
androidx.annotation:annotationdependency. (#39758 by @lukmccall)
- [Android] Removed unused
expo-localizationexpo-keep-awakeexpo-intent-launcher- [Android] Removed unused
androidx.annotation:annotationdependency. (#39760 by @lukmccall)
- [Android] Removed unused
expo-image-manipulator- [Android] Removed unused
androidx.annotation:annotationdependency (#39764 by @lukmccall) - [iOS] Removed dependency on
expo-image-loaderon iOS. (#41395 by @tsapeta)
- [Android] Removed unused
expo-image-pickerexpo-image-loader- [Android] Removed references to legacy native modules API. (#41858 by @lukmccall)
expo-glexpo-haptics- [Android] Fix missing
awaitforperformHapticsAsync(#40987 by @kamui545) - [Android] Removed unused
androidx.annotation:annotationdependency. (#39759 by @lukmccall)
- [Android] Fix missing
expo-fontexpo-file-system- [Android] Add
android:maxSdkVersionannotation toREAD_EXTERNAL_STORAGEandWRITE_EXTERNAL_STORAGEpermissions. (#40976 by @behenate) - [Android] Removed references to legacy native modules API. (#41791 by @lukmccall)
- [Android] Add
expo-device- [Android] Removed unused
androidx.legacy:legacy-supportdependency. (#39762 by @lukmccall)
- [Android] Removed unused
expo-clipboard- Remove tests related files from the published package content. (#39551 by @Simek)
- mark
removeClipboardListenercall as deprecated (#42098 by @vonovak) - [iOS] Update documentation regarding the edge case when the user denies paste permission (#40259 by @hryhoriiK97)
- Update internal TypeScript types. (#41740 by @barthap)
expo-constants- [Android] Removed unused native dependencies. (#39763 by @lukmccall)
- [Android] Removed references to legacy native modules API. (#41855 by @lukmccall)
expo-crypto- bump base64-js from 1.2.3 to 1.5.1 (#41211 by @hassankhan)
- remove
ExpoCrypto.getRandomBase64String()fallback ingetRandomBytes()(#41517 by @hassankhan)
expo-camera- [iOS] Support all valid gps tags from
CGImagePropertiesin exif data. (#40801 by @alanjhughes)
- [iOS] Support all valid gps tags from
expo-contacts- Added ContactSerializationException for error handling. (#40426 by @hryhoriiK97)
- Added contact image uri validation. (#39658 by @hryhoriiK97)
- [ios] create
CNContactStorelazily (#42096 by @vonovak) - [Android] Removed unused
androidx.annotation:annotationdependency (#39761 by @lukmccall)
expo-calendar- [Android] Refactored module native code. (#40548 by @barthap)
- Fixed missing
@in@platform iosJSDoc tag forEntityTypesenum. (#42944 by @brentvatne)
expo-blurexpo-asset
โ ๏ธ Notices
expo-gl- Performance optimization: remove support of GIF image format in image decoding in
texImage2Dexpo wrapper. (#41499 by @psnet) - Performance optimization: reduce supported old image formats in lib
stb_image.hused for image decoding intexImage2Dexpo wrapper to support only JPEG, PNG, GIF image formats. Formats BMP, PSD, TGA, HDR, PIC, PNM are no longer supported. (#41001 by @psnet) - Updated library
stb_image.hused for image decoding intexImage2Dexpo wraper method. A lot of fixes and performance improvements, see related PR. (#41000 by @psnet) - Added support for React Native 0.82.x. (#39678 by @gabrieldonadel)
- Performance optimization: remove support of GIF image format in image decoding in
- 55.0.0-canary-20260223-05214f123 Feb 2026pre-release
Nothing published for this version