PackageTrack

npm ยท #3758

@expo/metro-config

57.0.11expo/expo โ†—

A Metro config for running React Native projects with the Metro bundler

Release timeline

445 releases since 2020
202120222023202420252026

Releases

  1. 58.0.0-canary-20260812-27f94d412 Aug 2026pre-release

    Nothing published for this version

  2. 58.0.0-canary-20260806-8c2d0076 Aug 2026pre-release

    Nothing published for this version

  3. 57.0.1126 Aug 2026

    Nothing published for this version

  4. 57.0.1024 Aug 2026

    Nothing published for this version

  5. 57.0.920 Aug 2026

    Nothing published for this version

  6. 57.0.810 Aug 2026

    Nothing published for this version

  7. 57.0.722 Jul 2026

    Nothing published for this version

  8. 57.0.617 Jul 2026

    Nothing published for this version

  9. 57.0.515 Jul 2026

    Nothing published for this version

  10. 57.0.415 Jul 2026

    Nothing published for this version

  11. 57.0.33 Jul 2026

    Nothing published for this version

  12. 57.0.230 Jun 2026

    Nothing published for this version

  13. 57.0.127 Jun 2026

    Nothing published for this version

  14. 57.0.025 Jun 2026
    Release notes

    ๐Ÿ›  Breaking changes

    • @expo/ui
    • expo-modules-jsi
      • [iOS] JavaScriptError is now a copyable class conforming to Error (was a non-copyable struct), and JavaScriptValue no longer conforms to Error. (#47154 by @tsapeta)
    • expo-font
      • [web] Removed Server.resetServerContext(). Server-side font state is now scoped per-render via AsyncLocalStorage. (#46669 by @hassankhan)
    • @expo/cli
      • Make expo prebuild clear and regenerate the native folders by default. Pass --no-clean to apply changes to the existing folders instead. (#47209 by @alanjhughes)

    ๐ŸŽ‰ New features

    • Initial release of @expo/require-utils ๐Ÿฅณ
    • pod-install
    • @expo/ui
      • [iOS] Added the SwiftUI accessibilityHidden modifier to hide decorative views from VoiceOver and other assistive technologies during element traversal. (#46579 by @ramonclaudio)
      • [iOS] Added the SwiftUI accessibilityIdentifier modifier to set a stable identifier for UI testing tools such as XCUITest. (#46556 by @ramonclaudio)
      • [iOS] Added the SwiftUI dynamicTypeSize modifier 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 children prop to Label component, allowing custom title views (e.g. a VStack with title and subtitle) while preserving native icon spacing and Dynamic Type icon sizing.
      • [iOS] Add buttonBorderShape SwiftUI modifier, which reshapes a styled button (for example a glass button) while preserving its native press effect. (#46348 by @nishan) (#46348 by @intergalacticspacehighway)
      • [jetpack-compose] Added NavigationBar and NavigationBarItem components.
      • [iOS] Added the SwiftUI listRowSpacing modifier. (#46417 by @qiyangdev)
      • [iOS] Added support for custom SF Symbols in the SwiftUI Image component. (#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 dropShadow and innerShadow modifiers. (#46364 by @duyanhv)
      • [iOS] Added the SwiftUI imageScale modifier to scale SF Symbols within a view relative to the surrounding text (small, medium, large). (#46774 by @ramonclaudio)
      • [jetpack-compose] Added onGloballyPositioned modifier, which reports a composable's window position and size. (#46744 by @nishan) (#46744 by @intergalacticspacehighway)
      • [iOS] Extended the SwiftUI onGeometryChange modifier to also report the view's global position (x/y) alongside its size. (#46744 by @nishan) (#46744 by @intergalacticspacehighway)
      • [iOS] Added the SwiftUI minimumScaleFactor modifier 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 to useNativeState, as an alternative to reading and writing .value. (#46690 by @nishan) (#46692 by @intergalacticspacehighway)
      • [jetpack-compose] Added BasicTextField component. (#46442 by @nishan) (#46442 by @intergalacticspacehighway)
      • [iOS] Added the SwiftUI accessibilityInputLabels modifier 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 activityBackgroundTint modifier for setting Live Activity background. (#46756 by @jakex7)
      • [iOS] Added a modifiers prop to ListItem to override its default buttonStyle(.plain). (#47124 by @nishan) (#47124 by @intergalacticspacehighway)
      • [iOS][web] Added seedColor prop 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 colorScheme prop on <Host> to override the system color scheme for its subtree, matching native parity. (#46459 by @zoontek)
      • [iOS] Added the SwiftUI accessibilityElement modifier, which collapses a view's subtree into a single accessibility element via ignore, combine, or contain. (#47156 by @ramonclaudio)
      • [iOS] Added the SwiftUI redacted, unredacted, privacySensitive, and invalidatableContent modifiers, mapping SwiftUI's redaction family for native skeleton-loading and sensitive-content states. (#47269 by @ramonclaudio)
      • [iOS] Added accessibilityAddTraits and accessibilityRemoveTraits SwiftUI modifiers, accepting an array of trait names. (#47387 by @ramonclaudio)
      • [iOS] Added the SwiftUI strokeBorder modifier with a full StrokeStyle (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)
    • expo-network
    • expo-router
      • Add standard-navigation integration (#46456 by @Ubax)
      • Re-export drawer content components and types from expo-router/drawer (#46635 by @Ubax)
      • [native-tabs] Emit a tabPress event with isPrevented: true when a disabled tab is tapped, without selecting it. (#46445 by @Ubax)
      • [android] Support Stack.Toolbar.Badge in header left/right placements (#46537 by @benjaminkomen)
      • [android] Support Stack.Toolbar.Badge on Stack.Toolbar.Menu icons in header left/right placements (#47276 by @Ubax)
      • Add unstable_nativeProps to native Stack options. (#47482 by @Ubax)
      • [native-tabs] Add testID and accessibilityLabel props to NativeTabs.Trigger. (#47472 by @ramonclaudio)
      • Export the Theme type from the root expo-router entry point. (#47476 by @eliotgevers)
    • expo-modules-autolinking
      • Add option to specify targets to use with inline modules (#46698 by @HubertBer)
      • Add experimental tvos and macos resolution (#46344 by @kitten)
      • [Android] Apply the android.cmakeVersion build property to the app and all library subprojects. (#47377 by @zoontek)
    • expo-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 a jsi::Value for the zero-copy argument-decode fast path. (#46616 by @tsapeta)
      • [iOS] JavaScriptError can now wrap and throw an arbitrary JS value (not only an Error instance) via init(_:value:), preserving the thrown value's identity when it reaches JavaScript. (#47154 by @tsapeta)
      • [iOS] Add createFunction/setProperty overloads taking a UnownedThisSyncFunctionClosure, which receives this as a borrowed JavaScriptUnownedValue instead of an owning JavaScriptValue. Used by host functions that ignore this to skip the per-call owning-value allocation and its weak-runtime traffic. (#46949 by @tsapeta)
      • [iOS] Conform JavaScriptRuntime to Identifiable with an id based on the underlying runtime, equal across multiple wrappers of the same runtime. (#47068 by @tsapeta)
    • expo-media-library
    • expo-modules-core
      • [iOS] Added the @Record macro that synthesizes a record from a type's stored properties, with no @Field wrappers needed. (#46547 by @tsapeta)
      • [iOS] Added the @Event macro that turns a function-typed var on a module or shared object into a typed JavaScript event. (#46938 by @tsapeta)
      • [iOS] @ExpoModule now synthesizes the module's JavaScript name from the class name or its @ExpoModule("CustomName") argument, so a Name(โ€ฆ) 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.emit that sends an event directly to the module's own JavaScript object, mirroring SharedObject.emit. Both now share an EventEmitter protocol. (#46555 by @tsapeta)
    • expo-linking
      • Added Linking.clearInitialURL() to reset the cached deep-link URL. (#46265 by @gabrieldonadel)
    • expo-image-picker
      • [iOS] Allow launchCameraAsync to be invoked on the simulator. (#45923 by @EvanBacon)
    • expo-font
      • [web] Added Server.withServerContext(callback) which scopes server-side font loads per render. (#46669 by @hassankhan)
    • expo-contacts
      • [iOS] Add cancelButtonTitle and showsCancelButton options to contact forms. (#46960 by @Wenszel)
      • [iOS] Add preventAnimation option to presentCreateForm. (#46960 by @Wenszel)
    • expo-clipboard
    • 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

    ๐Ÿ› Bug fixes

    • expo-sqlite
      • Fixed a fatal JNI crash on Android when using useLibSQL: true, caused by the libSQL session bindings still declaring byte[] signatures after #42638 switched Kotlin and the default native bindings to ByteBuffer. (#46651 by @zoontek) (#42638, #46651 by @zoontek)
    • @expo/ui
    • expo-sensors
      • Fixed the prebuilt ExpoSensors.xcframework always returning denied for the motion permission on iOS. The prebuild config unconditionally defined EXPO_DISABLE_MOTION_PERMISSION, which is only meant to be set when opting out via the motionPermission: false config plugin option. (#46686 by @zoontek)
    • expo-router
      • [android] fix renderingMode for toolbar icons (#46149 by @Ubax)
      • Sync config plugin Props type with the options schema, adding the missing redirects, rewrites, platformRoutes, and disableSynchronousScreensUpdates options. (#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.setSystemTime across renderRouter (#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 extractExactPathFromURL against malformed percent-encoding. (#47526 by @momomuchu)
      • Fix renderRouter ignoring overrides and listing duplicate routes when an override key matches a file in appDir. (#47287 by @wwdrew)
    • expo-modules-autolinking
      • [iOS] Align the react-native-reanimated precompile config with [email protected] upstream defaults, adding the CSS/core/transition and PseudoStyles header mappings along with the missing IOS_CSS_CORE_ANIMATION and USE_ANIMATION_BACKEND feature 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-reanimated precompile config with [email protected]'s generated component and native view sources. (#47201 by @lukmccall)
      • [iOS] Respect an explicit ios.usePrecompiledModules: false even when EXPO_USE_PRECOMPILED_MODULES is already set in the environment (e.g. EAS Build). (#46983 by @ryanda9910)
      • [iOS] Add the missing ENABLE_CROSS_RUNTIME_STACK_TRACES flag to the react-native-worklets precompile config so its prebuilt XCFramework matches the package's staticFlags.json. (#47478 by @alanjhughes)
      • [iOS] Under precompiled modules, preserve a dynamic-framework subgraph set up by an earlier pre_install hook (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)
    • expo-module-scripts
    • expo-modules-jsi
      • [iOS] Fixed the xcframework build failing with a sed error when building in an environment that uses GNU sed instead of BSD sed (e.g. a Nix shell). (#46389 by @niteshbalusu11)
      • [iOS] Propagate JavaScriptPromise setup 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 getPropertyAsFunction targets a missing or non-callable property. (#46437 by @tsapeta)
      • [iOS] Throw instead of aborting when getPropertyAsObject targets 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 JavaScriptPromise that is rejected after the await begins now throws instead of resuming with the rejection value as if fulfilled. (#47154 by @tsapeta)
      • [iOS] Return NSNull instead of trapping in the deprecated JavaScriptValue.getAny() when it encounters a unrepresentable value. (#47381 by @alanjhughes)
    • expo-media-library
      • Add accessPrivileges to PermissionResponse type (#47177 by @Wenszel)
      • [iOS] Fix permission guards for limited and write-only photo library access. (#47216 by @Wenszel)
    • expo-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 Host double-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 Host matchContents views. (#46604 by @nishan) (#46604 by @intergalacticspacehighway)
      • [Android] Fix NullPointerException crash when a matchContents view 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 Double timestamps in Date Convertible. JS numbers arrive across the JSI bridge as Swift Double; the prior as? Int branch never matched, throwing ConvertingException<Date> whenever a JS caller passed someDate.getTime() to a Date / 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 onLayout against detached window to prevent LayoutNode should be attached to an owner crash. (#47085 by @roitium)
      • [Android] Fix Jetpack Compose Host content 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 previous AppContext could 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 the global.expo object. (#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 r in the iOS simulator) would freeze the app until the watchdog killed it. reloadAppAsync now triggers the reload synchronously when already on the main thread instead of always deferring via DispatchQueue.main.async. (#47392 by @brentvatne)
      • [iOS] Fix ExpoModulesProvider lookup failing for bundle names with non-identifier characters (e.g. dots). (#46424 by @shawnthye-guru)
    • expo-contacts
    • expo-calendar
      • Add @platform ios JSDoc annotations to iOS-exclusive APIs: ExpoCalendarReminder class, listReminders(), createReminder(), requestRemindersPermissions(), getRemindersPermissions(), useRemindersPermissions(), AddEventWithFormOptions.url, and AddEventWithFormOptions.alarms. (#46416 by @kota113)
      • Throw UnavailabilityError when iOS-only Reminders and Sources APIs (listReminders(), createReminder(), ExpoCalendarReminder.get/update/delete, requestRemindersPermissions(), getRemindersPermissions(), and getSourcesSync()) 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)
    • expo-blur
      • [Android] Fix gesture handlers treating views under a BlurTargetView as detached and cancelling their gestures. (#47404 by @efstathiosntonas)
    • 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 videoOrientation API with AVCaptureDevice.RotationCoordinator for 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 pictureSize to photo instead of high. (#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-config install from expo 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 Request to DevTools plugin WebSocket handlers instead of IncomingMessage. (#47410 by @krystofwoldrich)
      • Use loadModule for MCP and DevTools plugin server module loading. (#47139 by @krystofwoldrich)
      • Fall back to AGP's output-metadata.json when resolving APK filenames to support projects that override outputFileName in applicationVariants (#47083 by @NikhilVashistha)
    • expo
      • Decompress gzip / br / zstd expo/fetch responses on Android even when the caller sets their own Accept-Encoding header. (#46398 by @zoontek)
      • Fix bodyUsed leaking across siblings when fetch Response is cloned twice (#46397 by @zoontek)
      • Prevent fatal The stream is not in a state that permits close in expo/fetch when native delivers didComplete/didFailWithError after the consumer has already canceled the body stream. (#44909 by @safaiyeh)
      • Fix expo/fetch on Android sending a single 0x00 byte instead of an empty body for body-less POST/PUT/PATCH requests. (#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 asyncRoutes failing on Android and iOS with Requiring unknown module (#46870 by @hassankhan)
      • Fix Response.blob() in expo/fetch throwing when the global Blob is react-native's implementation. (#47538 by @kudo)

    ๐Ÿ’ก 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-reanimated dependency from the worklet integration; worklet features rely on react-native-worklets directly. (#46922, #46935 by @nishan) (#46922, #46935 by @intergalacticspacehighway)
      • Removed CLAUDE.md and CONTRIBUTING.md from publishing and fixed side effects. (#47451 by @kudo)
    • expo-modules-autolinking
      • Add bannerTitle and serverEntryPoint options to the DevTools plugin module config. (#46764 by @krystofwoldrich)
    • expo-modules-jsi
      • [iOS] Sync host functions no longer allocate a JavaScriptRef per call: the arguments buffer is now built inside the synchronous assumeIsolated closure 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 @JS host-call floor). (#46949 by @tsapeta)
      • [iOS] JavaScriptNativeState can now back any jsi::NativeState subtype via a void * factory, so consumers without Swift/C++ interop (e.g. expo-modules-core) can supply their own pointee. expo::NativeState ships from the xcframework as a public C++ header. (#46330 by @tsapeta)
      • NativeArrayBuffer arguments 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] JavaScriptUnownedValue and JavaScriptValuesBuffer now cache the runtime as the immortal facebook.jsi.IRuntime instead of the ARC-managed JavaScriptRuntime wrapper, removing per-call retain/release on the argument-decode hot path (measured ~16% faster addNumbers, ~24% faster addStrings). (#46792 by @tsapeta)
      • [iOS] getExpoNativeState now probes with the specialized hasNativeState<jsi::NativeState> and dynamic-casts the raw pointer once, avoiding a redundant dynamic_pointer_cast on the shared object argument unwrap hot path. (#46712 by @tsapeta)
    • expo-media-library
    • expo-modules-core
      • Native view config attributes now carry a process function 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] @ExpoModule now synthesizes a _decorateModule that binds the module's @JS functions 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.0 in peer dependencies. (#46950 by @zoontek)
      • Update edge-to-edge package to call updateEdgeToEdgeFeatureFlag (#46335 by @zoontek)
      • [iOS] Added JavaScriptDecodable / JavaScriptEncodable (composed as JavaScriptCodable), a statically-dispatched, non-erasing conversion path between JavaScript and native values for Expo Modules v2, with conformances for primitives, containers, records, enumerables and Data. (#46893 by @tsapeta)
      • [Internal] [iOS] Dropped the unused appContext parameter from the JavaScriptCodable conversions; conversions that need the app context now recover it from the runtime via the new public AppContext.from(runtime:). (#47111 by @tsapeta)
      • [iOS] JavaScriptCodable now maps Int64/UInt64 to a JS BigInt for lossless 64-bit round-tripping, and Int/UInt throw when encoding a value outside JavaScript's safe-integer range. (#46939 by @tsapeta)
      • [iOS] Added the public Exceptions.ArgumentsRangeMismatch exception, thrown by synthesized @JS function bindings when a JavaScript caller passes a number of arguments outside the accepted range. (#46901 by @tsapeta)
      • [iOS] SharedObject::NativeState now derives from expo::NativeState so the Swift wrapper can be recovered from the JS side via getNativeState, laying the groundwork for native-state-based shared object lookup. (#46330 by @tsapeta)
      • [iOS] SharedObject is now paired with its JS counterpart through a SharedObjectNativeState attached 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)
      • NativeArrayBuffer arguments 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-worklets holder instead of the reanimated _WORKLET_RUNTIME global; installOnUIRuntime now takes the holder from getUIRuntimeHolder(). (#46922, #46935 by @nishan) (#46922, #46935 by @intergalacticspacehighway)
    • expo-image-picker
      • [Web] Drop dependency on expo-modules-core Platform in favor of inline window/document checks. (#45923 by @EvanBacon)
      • Switch package entry to TypeScript source and emit declarations only. (#45923 by @EvanBacon)
    • expo-gl
    • expo-font
    • @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 serverEntryPoint that handles HTTP requests and WebSocket connections in the Expo CLI process, and a bannerTitle shown in the CLI startup banner. (#46764 by @krystofwoldrich)
    • expo
      • [Internal] Return thenable with sync-bailout for async require calls (#46539 by @kitten)
    Open source โ†’
  15. 57.0.0-canary-20260723-64edab923 Jul 2026pre-release

    Nothing published for this version

  16. 57.0.0-canary-20260720-b6d63bc20 Jul 2026pre-release

    Nothing published for this version

  17. 57.0.0-canary-20260718-7cbcda518 Jul 2026pre-release

    Nothing published for this version

  18. 57.0.0-canary-20260716-381e80616 Jul 2026pre-release

    Nothing published for this version

  19. 57.0.0-canary-20260629-301008529 Jun 2026pre-release

    Nothing published for this version

  20. 57.0.0-canary-20260526-13e89ca26 May 2026pre-release

    Nothing published for this version

  21. 56.0.1823 Jul 2026

    Nothing published for this version

  22. 56.0.1715 Jul 2026

    Nothing published for this version

  23. 56.0.163 Jul 2026

    Nothing published for this version

  24. 56.0.151 Jul 2026

    Nothing published for this version

  25. 56.0.1410 Jun 2026

    Nothing published for this version

  26. 56.0.14-canary-20260701-91008651 Jul 2026pre-release

    Nothing published for this version

  27. 56.0.14-canary-20260624-9d83b8124 Jun 2026pre-release

    Nothing published for this version

  28. 56.0.14-canary-20260606-4d4666c6 Jun 2026pre-release

    Nothing published for this version

  29. 56.0.14-canary-20260526-6cd5e3726 May 2026pre-release

    Nothing published for this version

  30. 56.0.1326 May 2026

    Nothing published for this version

  31. 56.0.1223 May 2026

    Nothing published for this version

  32. 56.0.1120 May 2026

    Nothing published for this version

  33. 56.0.1019 May 2026

    Nothing published for this version

  34. 56.0.915 May 2026

    Nothing published for this version

  35. 56.0.814 May 2026

    Nothing published for this version

  36. 56.0.713 May 2026

    Nothing published for this version

  37. 56.0.611 May 2026

    Nothing published for this version

  38. 56.0.58 May 2026

    Nothing published for this version

  39. 56.0.47 May 2026

    Nothing published for this version

  40. 56.0.36 May 2026

    Nothing published for this version

  41. 56.0.26 May 2026

    Nothing published for this version

  42. 56.0.15 May 2026

    Nothing published for this version

  43. 56.0.05 May 2026
    Release notes

    ๐Ÿ›  Breaking changes

    • unimodules-app-loader
      • Bumped minimum iOS/tvOS version to 16.4, macOS to 13.4. (#43296 by @tsapeta)
    • expo-web-browser
      • Bumped minimum iOS/tvOS version to 16.4, macOS to 13.4. (#43296 by @tsapeta)
    • expo-video-thumbnails
      • Bumped minimum iOS/tvOS version to 16.4, macOS to 13.4. (#43296 by @tsapeta)
    • expo-task-manager
      • Bumped minimum iOS/tvOS version to 16.4, macOS to 13.4. (#43296 by @tsapeta)
    • expo-store-review
      • Bumped minimum iOS/tvOS version to 16.4, macOS to 13.4. (#43296 by @tsapeta)
    • expo-speech
      • Bumped minimum iOS/tvOS version to 16.4, macOS to 13.4. (#43296 by @tsapeta)
    • expo-sqlite
      • Bumped minimum iOS/tvOS version to 16.4, macOS to 13.4. (#43296 by @tsapeta)
    • expo-sms
      • Bumped minimum iOS/tvOS version to 16.4, macOS to 13.4. (#43296 by @tsapeta)
    • expo-sharing
      • Bumped minimum iOS/tvOS version to 16.4, macOS to 13.4. (#43296 by @tsapeta)
    • expo-secure-store
      • Bumped minimum iOS/tvOS version to 16.4, macOS to 13.4. (#43296 by @tsapeta)
    • expo-sensors
      • Bumped minimum iOS/tvOS version to 16.4, macOS to 13.4. (#43296 by @tsapeta)
    • expo-screen-capture
      • Bumped minimum iOS/tvOS version to 16.4, macOS to 13.4. (#43296 by @tsapeta)
    • expo-screen-orientation
      • Bumped minimum iOS/tvOS version to 16.4, macOS to 13.4. (#43296 by @tsapeta)
    • expo-print
      • Bumped minimum iOS/tvOS version to 16.4, macOS to 13.4. (#43296 by @tsapeta)
    • expo-network
      • Bumped minimum iOS/tvOS version to 16.4, macOS to 13.4. (#43296 by @tsapeta)
    • expo-notifications
      • Bumped minimum iOS/tvOS version to 16.4, macOS to 13.4. (#43296 by @tsapeta)
    • expo-localization
      • Bumped minimum iOS/tvOS version to 16.4, macOS to 13.4. (#43296 by @tsapeta)
    • expo-media-library
      • Bumped minimum iOS/tvOS version to 16.4, macOS to 13.4. (#43296 by @tsapeta)
      • Promote the object-oriented MediaLibrary API to the root expo-media-library import and move the legacy API to expo-media-library/legacy. (#46030 by @Wenszel)
    • expo-mail-composer
      • Bumped minimum iOS/tvOS version to 16.4, macOS to 13.4. (#43296 by @tsapeta)
    • expo-location
      • Bumped minimum iOS/tvOS version to 16.4, macOS to 13.4. (#43296 by @tsapeta)
    • expo-keep-awake
      • Bumped minimum iOS/tvOS version to 16.4, macOS to 13.4. (#43296 by @tsapeta)
    • expo-modules-core
      • [iOS] Replaced the Objective-C++ JSI layer (EXJavaScriptRuntime, EXJavaScriptObject, ExpoModulesHostObject, EXSharedObjectUtils, etc.) with the new ExpoModulesJSI Swift 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)
    • expo-local-authentication
      • Bumped minimum iOS/tvOS version to 16.4, macOS to 13.4. (#43296 by @tsapeta)
    • expo-linking
      • Bumped minimum iOS/tvOS version to 16.4, macOS to 13.4. (#43296 by @tsapeta)
    • expo-image-manipulator
      • Bumped minimum iOS/tvOS version to 16.4, macOS to 13.4. (#43296 by @tsapeta)
    • expo-haptics
      • Bumped minimum iOS/tvOS version to 16.4, macOS to 13.4. (#43296 by @tsapeta)
    • expo-linear-gradient
      • Bumped minimum iOS/tvOS version to 16.4, macOS to 13.4. (#43296 by @tsapeta)
    • expo-gl
      • Bumped minimum iOS/tvOS version to 16.4, macOS to 13.4. (#43296 by @tsapeta)
    • expo-image-picker
      • Bumped minimum iOS/tvOS version to 16.4, macOS to 13.4. (#43296 by @tsapeta)
    • expo-font
      • Bumped minimum iOS/tvOS version to 16.4, macOS to 13.4. (#43296 by @tsapeta)
    • expo-document-picker
      • Bumped minimum iOS/tvOS version to 16.4, macOS to 13.4. (#43296 by @tsapeta)
    • expo-file-system
      • Bumped minimum iOS/tvOS version to 16.4, macOS to 13.4. (#43296 by @tsapeta)
      • copy() and move() methods of File and Directory are now asynchronous and return a Promise. Use copySync() and moveSync() for synchronous behavior. (#44359 by @barthap)
      • [Android] In Expo Go, Paths.cache and Paths.document are now pointing to experience-isolated directories. (#45977 by @barthap)
      • File.write() is now asynchronous and returns a Promise. Use File.writeSync() for synchronous behavior. (#45992 by @wh201906)
      • FileHandle.readBytes() and FileHandle.writeBytes() are now asynchronous and return a Promise. Use FileHandle.readBytesSync() and FileHandle.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-crypto
      • Bumped minimum iOS/tvOS version to 16.4, macOS to 13.4. (#43296 by @tsapeta)
    • expo-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-contacts import and move the legacy API to expo-contacts/legacy. (#46037 by @Wenszel)
    • expo-constants
      • Bumped minimum iOS/tvOS version to 16.4, macOS to 13.4. (#43296 by @tsapeta)
    • expo-clipboard
      • Removed deprecated setString function. Use setStringAsync instead. (#41758 by @barthap)
      • Bumped minimum iOS/tvOS version to 16.4, macOS to 13.4. (#43296 by @tsapeta)
    • expo-cellular
      • Bumped minimum iOS/tvOS version to 16.4, macOS to 13.4. (#43296 by @tsapeta)
    • expo-camera
      • Bumped minimum iOS/tvOS version to 16.4, macOS to 13.4. (#43296 by @tsapeta)
    • expo-calendar
      • Bumped minimum iOS/tvOS version to 16.4, macOS to 13.4. (#43296 by @tsapeta)
      • Promote the object-oriented Calendar API to the root expo-calendar import and move the legacy API to expo-calendar/legacy. (#46030 by @Wenszel)
    • expo-brightness
      • Bumped minimum iOS/tvOS version to 16.4, macOS to 13.4. (#43296 by @tsapeta)
    • expo-blur
      • Bumped minimum iOS/tvOS version to 16.4, macOS to 13.4. (#43296 by @tsapeta)
    • expo-battery
      • Bumped minimum iOS/tvOS version to 16.4, macOS to 13.4. (#43296 by @tsapeta)
    • expo-background-fetch
      • Bumped minimum iOS/tvOS version to 16.4, macOS to 13.4. (#43296 by @tsapeta)
    • expo-application
      • Bumped minimum iOS/tvOS version to 16.4, macOS to 13.4. (#43296 by @tsapeta)
    • expo-apple-authentication
      • Bumped minimum iOS/tvOS version to 16.4, macOS to 13.4. (#43296 by @tsapeta)
    • expo-asset
      • Bumped minimum iOS/tvOS version to 16.4, macOS to 13.4. (#43296 by @tsapeta)

    ๐ŸŽ‰ 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-browser
    • expo-task-manager
    • expo-sqlite
    • expo-sharing
    • expo-secure-store
    • expo-sensors
    • expo-screen-orientation
    • expo-notifications
    • expo-localization
    • expo-media-library
    • expo-mail-composer
    • expo-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 Equatable conformance to Either type. (#43954 by @nishan) (#43954 by @intergalacticspacehighway) (#43954, #43954 by @intergalacticspacehighway, @intergalacticspacehighway)
      • [android] Add installModuleClasses and __resolveInWorklet for resolving shared object class prototypes in the worklet runtime. (#44669 by @intergalacticspacehighway)
      • [iOS] Add installModuleClasses for 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.__resolveInWorklet for resolving shared objects in worklet runtimes. (#44215 by @nishan) (#44215 by @intergalacticspacehighway)
      • NativeArrayBuffer and JavaScriptArrayBuffer arguments now also accept typed arrays. (#43082 by @barthap)
      • [Android] Use the RuntimeScheduler to schedule tasks on the JS thread. (#43481 by @alanjhughes)
      • [iOS] Add nativeModule look up function and bundleURL to AppContext. (#43661 by @gabrieldonadel)
      • [iOS] Added a polyfill for Swift Mutex for 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.emit dropping NativeArrayBuffer values in events (#45257 by @alanjhughes)
      • Added single-payload overloads for SharedObject.emit on iOS and Android. The iOS API also accepts an already-converted JavaScriptValue payload to skip the native-to-JS conversion step. (#45596 by @tsapeta)
      • [iOS] Decodable types can now be used as native function arguments. JS values are decoded through the dynamic-type registry, so arrays, dictionaries, optionals, RawRepresentable enums and Convertibles are coerced consistently. (#45705 by @tsapeta)
      • [Android] Create Compose props without View. (#46256 by @jakex7)
    • expo-local-authentication
    • expo-linking
      • Added Linking.clearInitialURL() to reset the cached deep-link URL. (#46265 by @gabrieldonadel)
    • expo-haptics
    • expo-linear-gradient
    • expo-image-picker
    • expo-font
    • expo-document-picker
    • expo-file-system
      • [iOS] Add support for mode option 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 overwrite option to copy and move methods. (#42979 by @barthap)
      • [Android] Add mode option when opening file handle. (#42983 by @barthap)
      • Add onProgress callback and AbortSignal support to File.downloadFileAsync(). (#43053 by @aleqsio)
      • Add file.createUploadTask() and File.createDownloadTask() APIs (#44055 by @barthap)
      • Add File.upload() with legacy-compatible upload semantics, progress callbacks, and AbortSignal support. (#45033 by @barthap)
      • Add support for watching file/directory events. (#44986 by @barthap)
      • Added File.json() and File.formData() to satisfy Blob type augmentations in consumer projects. (#45685 by @mvincentong)
    • expo-device
    • expo-contacts
    • expo-cellular
    • expo-camera
    • expo-calendar
    • expo-brightness
    • expo-background-fetch
    • expo-apple-authentication
    • expo-asset

    ๐Ÿ› Bug fixes

    • expo-web-browser
      • Fixed openAuthSessionAsync silently failing on iOS 17.4+ when using https:// redirect URLs without Associated Domains entitlements. The HTTPS universal link callback API is now opt-in via the preferUniversalLinks option. (#44452 by @vonovak)
      • Fix an ES module import error in the typed config plugin. (#46089 by @zoontek)
    • 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.pro via consumerProguardFiles so the -keep class expo.modules.taskManager.** rule is added to consumer apps' R8 pass. (#46029 by @jiunshinn)
    • expo-speech
      • [Android] Fix NullPointerException in LanguageUtils.getISOCode when the TTS engine returns a voice with a non-standard locale. (#44807 by @zoontek)
    • expo-sqlite
      • Add explicit secure context error for web/wa-sqlite/AccessHandlePoolVFS.js (#40605 by @BDav24)
      • Fix an ES module import error in the typed config plugin. (#46089 by @zoontek)
    • expo-sharing
      • [iOS] Fix shareAsync promise 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)
    • expo-secure-store
      • Fix an ES module import error in the typed config plugin. (#46089 by @zoontek)
    • expo-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)
    • 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 lockAsync silently failing when flipping between previously-applied masks. (#45239 by @alanjhughes)
      • [iOS] Fixed EXC_BAD_ACCESS crash from recursive supportedInterfaceOrientations when react-native-screens per-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 isInternetReachable much more robust. Also emit network state changes when network capabilities change. (#45101 by @LumaDevelopment)
    • expo-notifications
      • [ios] Fixed requestPermissionsAsync returning raw permission result without several documented fields (#43555 by @vonovak)
      • [ios] Guard against crash in BackgroundEventTransformer when notification body is a primitive type. (#45198 by @DORI2001)
      • [web] fix getDevicePushTokenAsync export (#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 / BSPreconditionFailure on iOS 16. (#45096 by @qutrek)
      • [android] Apply bundled proguard-rules.pro via consumerProguardFiles so 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)
    • expo-localization
      • Prevalidate locale strings in config-plugin (#45888 by @kitten)
      • Fix an ES module import error in the typed config plugin. (#46089 by @zoontek)
    • expo-media-library
      • [Android] Read video dimensions from MediaStore cursor instead of opening each file with MediaMetadataRetriever, fixing extremely slow getAssetsAsync on devices with many videos. (#44714 by @oeddyo)
      • Fix an ES module import error in the typed config plugin. (#46089 by @zoontek)
    • expo-mail-composer
      • Fix an ES module import error in the typed config plugin. (#46089 by @zoontek)
    • expo-location
      • [iOS] Ignore locationUnknown errors in watchPositionAsync. (#44027 by @tsapeta)
      • [Android] Foreground service notification icon now falls back to notification_icon drawable before applicationInfo.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)
    • 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.readEntries race condition by serializing reads on the dispatch queue. (#43958 by @ramonclaudio)
      • [iOS] Fixed looking up the EXConstants.bundle from 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 ExpoHostWrapper instead of reactBridge.uiManager. (#44375 by @vonovak)
      • [iOS] Resolve react-native-worklets from 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 eventEmitter in SwiftUIVirtualView.dispatchEvent to 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 Record on Field.options. The set is now guarded by a per-field lock and accessed through a single withOptions API. (#45072 by @nishan) (#45072 by @intergalacticspacehighway)
      • [iOS] Fixed converting Enumerable function 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(...) and rgba(...) color strings when converting JS color values to android.graphics.Color. (#44023 by @dileepapeiris)
      • [iOS] Fix missing jsi headers when building static frameworks (#44865 by @gabrieldonadel)
      • Fixed runtime crash when missing Host component for SwiftUI or Jetpack Compose components. (#44118 by @kudo)
      • [iOS] Restore pre-ExpoModulesJSI Record conversion behavior by hydrating only declared fields, preserving undefined handling 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.so via 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 Encodable function results so arrays, dictionaries, optionals, RawRepresentable enums and Convertibles 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 associatedCookies in Network.requestWillBeSentExtraInfo CDP events serializing as a JSON object instead of an array. (#45720 by @huntie)
      • [Android] Keep ExpoComposeView content visible during parent view transitions (e.g., react-native-screens pop navigation). (#45942 by @intergalacticspacehighway)
      • [iOS] Fix occasional SharedObject.emit crashes caused by an off-thread JSI lookup. (#45986 by @tsapeta)
      • [Android] Suppress -Wunused-result compiler warning in FrontendConverter.cpp. (#46073 by @tomekzaw)
      • [android] Fix nested Host double-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-authentication
      • Fix an ES module import error in the typed config plugin. (#46089 by @zoontek)
    • expo-intent-launcher
      • [Android] Fixed getApplicationIcon throwing an error on Android below API 26. (#46043 by @lukmccall)
    • 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 msaaSamples and enableExperimentalWorkletSupport optional in GLViewProps to align TypeScript types with their runtime defaultProps values. (#43767 by @jcarlosroldan)
      • Install WebGLRenderingContext and WebGL2RenderingContext globals 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 WebGL2RenderingContext inherit from WebGLRenderingContext, matching the WebGL spec. gl2 instanceof WebGLRenderingContext now returns true for WebGL2 contexts, and shared constants and methods are no longer duplicated on the WebGL2 prototype. (#45871 by @tsapeta)
    • 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 null mime type reported (#43734 by @vonovak)
      • [android] Fix potential vulnerability in com.canhub.cropper.CropImageActivity being exported. (#45357 by @behenate)
      • [iOS] Fix base64 result 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-font
      • Align ServerFontResourceDescriptor.crossOrigin type with React (#45115 by @hassankhan)
      • [android] include xml-fonts in the getLoadedFonts() list (#43860 by @vonovak)
      • Sanitize values in web font loader and Android config plugin (#45887 by @kitten)
    • expo-document-picker
      • Fix an ES module import error in the typed config plugin. (#46089 by @zoontek)
    • expo-file-system
      • [Android] Fix copy/move support for SAF and content provider URIs. (#42887 by @barthap)
      • Fix out-of-memory errors when calculating file md5 hash. (#44064 by @barthap)
      • [iOS] Fix totalDiskSpace returning free disk space instead of total disk capacity. (#44849 by @shanebdavis)
      • Fix onProgress callback of File.downloadFileAsync() sometimes not firing on download completion. (#45238 by @barthap)
      • [iOS] Fix File.pickFileAsync() greying out all files when using wildcard MIME types like */* or image/*. (#45245 by @barthap)
      • Fixed the jest mock's FileSystemFileHandle to honor FileMode string values ('r', 'w', 'wa', 'wt', 'rw') instead of the obsolete name table, expose handle and file metadata, and match the documented default mode for content:// URIs. The dispatch is now exhaustive over FileMode, so future enum additions fail to compile in the mock. (by @radko93)
      • [Android] Added missing permission checks to delete() and openHandle() in the next-gen File System API. (#45967 by @barthap)
      • [Android] Fixed path traversal vulnerability in createFile, createDirectory, and rename that allowed escaping the parent directory. (#45967 by @barthap)
      • [Android] Fixed Paths.cache and Paths.document pointing to wrong directory in Expo Go. (#45977 by @barthap)
    • expo-crypto
    • expo-contacts
      • Fix expo-contacts/next throwing Cannot find native module 'ExpoContactsNext' when imported on web by adding a web shim. (#46018 by @zoontek)
      • Fix an ES module import error in the typed config plugin. (#46089 by @zoontek)
      • Fix getDetails throwing NPE on malformed label (#46405 by @Wenszel)
    • expo-cellular
      • Fix an ES module import error in the typed config plugin. (#46089 by @zoontek)
    • expo-camera
      • [Web] Fix isAvailableAsync returning true on 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 type value 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.launchScanner is interactively dismissed and the app is backgrounded/foregrounded. (#45063 by @alanjhughes)
      • [Android] Remove RECORD_AUDIO from the manifest so recordAudioAndroid depends on the plugin. (#45132 by @alanjhughes)
      • [iOS] Fix itf14 barcode type not detecting generic Interleaved 2 of 5 barcodes, so behavior matches Android's FORMAT_ITF. (#44796 by @mduchev)
      • Fix an ES module import error in the typed config plugin. (#46089 by @zoontek)
    • expo-calendar
      • Fixed NumberFormatException crash on Android when calendar/event IDs exceed Integer.MAX_VALUE. (#43344 by @olivier-bouillet)
      • [iOS] Fix deleteEventAsync deleting wrong recurring event instance when instanceStartDate is provided. (#40172 by @marcelogdeandrade)
      • [Android] Add missing escaping of calendarIds filter 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)
    • expo-brightness
      • Fix an ES module import error in the typed config plugin. (#46089 by @zoontek)
    • expo-blur
    • expo-battery
      • [android] Add BatteryState.NOT_CHARGING when power is connected but the battery is not charging (e.g. battery protection); map BATTERY_STATUS_DISCHARGING to UNPLUGGED only (#44212) (#44451 by @vj2303)
    • expo-background-fetch
      • Fix an ES module import error in the typed config plugin. (#46089 by @zoontek)
    • expo-application
    • expo-apple-authentication
      • Fix an ES module import error in the typed config plugin. (#46089 by @zoontek)
    • expo-asset
      • Fixed incorrect MD5 checksum on Android. (#43909 by @kudo)

    ๐Ÿ’ก Others

    • unimodules-app-loader
      • [iOS] Added missing Foundation.h imports in header files. (#44248 by @chrfalch)
    • expo-web-browser
      • [Android] Bring back the experimentalLauncherActivity config plugin option. (#44073 by @lukmccall)
    • expo-store-review
      • [iOS] Migrated requestReview to the new @MainActor async-function API. (#44337 by @tsapeta)
    • expo-sqlite
      • Bumped dev-plugin-webui to SDK 55. (#43412 by @kudo)
      • [iOS] Updated sync function signatures (runSync, applyChangesetSync, invertChangesetSync) to accept any AnyArrayBuffer in place of the removed JavaScriptArrayBuffer. (#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-sensors
      • Updated permission type and permission status imports to be imported from expo instead of expo-modules-core (#45565 by @Wenszel)
    • expo-screen-capture
      • Updated permission hooks and permission type imports to be imported from expo instead of expo-modules-core (#45565 by @Wenszel)
    • expo-screen-orientation
      • [iOS] Added explicit import React for xcframework compatibility. (#44248 by @chrfalch)
    • expo-notifications
      • Skip redundant device push token registration when token and metadata are unchanged since last successful registration. (#44836 by @stephanepham)
      • [iOS] Added explicit import React for xcframework compatibility. (#44248 by @chrfalch)
      • Updated permission type and permission status imports to be imported from expo instead of expo-modules-core (#45565 by @Wenszel)
    • expo-localization
    • expo-media-library
      • Mark legacy API deprecated (#44605 by @Wenszel)
      • [next] Replace JS static overrides with StaticAsyncFunction (#44473 by @Wenszel)
      • Updated permission hooks and permission type imports to be imported from expo instead of expo-modules-core (#45565 by @Wenszel)
    • expo-location
      • Updated permission hooks and permission type imports to be imported from expo instead of expo-modules-core (#45565 by @Wenszel)
    • expo-modules-core
    Open source โ†’
  44. 56.0.0-canary-20260506-964f25d6 May 2026pre-release

    Nothing published for this version

  45. 56.0.0-canary-20260506-326540f6 May 2026pre-release

    Nothing published for this version

  46. 56.0.0-canary-20260506-1b0052a6 May 2026pre-release

    Nothing published for this version

  47. 56.0.0-canary-20260506-03817f56 May 2026pre-release

    Nothing published for this version

  48. 56.0.0-canary-20260505-84af74c5 May 2026pre-release

    Nothing published for this version

  49. 56.0.0-canary-20260501-870dcba1 May 2026pre-release

    Nothing published for this version

  50. 56.0.0-canary-20260501-15d35291 May 2026pre-release

    Nothing published for this version

  51. 56.0.0-canary-20260423-c31bd8e23 Apr 2026pre-release

    Nothing published for this version

  52. 56.0.0-canary-20260420-2ac87c020 Apr 2026pre-release

    Nothing published for this version

  53. 56.0.0-canary-20260417-141204f17 Apr 2026pre-release

    Nothing published for this version

  54. 56.0.0-canary-20260414-e3dbafd14 Apr 2026pre-release

    Nothing published for this version

  55. 56.0.0-canary-20260409-6fc29919 Apr 2026pre-release

    Nothing published for this version

  56. 56.0.0-canary-20260402-87c5ce22 Apr 2026pre-release

    Nothing published for this version

  57. 56.0.0-canary-20260305-51637465 Mar 2026pre-release

    Nothing published for this version

  58. 56.0.0-canary-20260212-4f6130912 Feb 2026pre-release

    Nothing published for this version

  59. 55.0.2725 Aug 2026

    Nothing published for this version

  60. 55.0.2617 Aug 2026

    Nothing published for this version