Packages

expo-modules-core

58.0.23 · 19 Oct 2026MIT7.1M / weekRepositoryHomepagenpmAtom feed

297 stable releases, newest first, by release line. Notes are quoted as the maintainers published them.

  1. 58.x · latest line
  2. 58.0.23

    19 Oct 2026
    • [iOS] Reduce the overhead of returning Data and shared objects to JavaScript.

    • [Android] Fix a Jetpack Compose Host that stays blank when it mounts in a visible list row with removeClippedSubviews enabled, for example in a FlatList. The Host now measures its content when it is attached for the first time.

    • [iOS] Update expo-modules-macros to 0.21.0. @Record types now convert between JavaScript and native code with less overhead and no longer need an app context. @ExpoModule and @SharedObject now report a build error when two @JS members of one object have the same JavaScript name, because JavaScript could reach only one of them.

  3. 58.0.22

    16 Oct 2026
    • [Android] Fix native memory that grew with each module class under Hermes V1, by about 0.57 MiB per class on React Native 0.86 and 0.87 and about 93 KiB on 0.88. createClass evaluated a new JavaScript source for each class, and Hermes keeps memory for every evaluated source until the runtime is destroyed. It now evaluates one class factory for each runtime and calls it for each class. On iOS, this code creates only the four base classes (SharedObject, SharedRef, EventEmitter and NativeModule).

    • Fix an -Wunused-result warning in Worklet.cpp on Android when building with react-native-worklets@0.13. Running a worklet synchronously now discards its return value while the worklet runtime lock is still held, on Android and iOS.

    • Fix the Do not include this file directly warnings from react-native-worklets@0.13 on Android and iOS. The worklets integration now includes the specific Serializable headers instead of the deprecated worklets/SharedItems/Serializable.h.

  4. 58.0.21

    16 Oct 2026
    • [Web] Fix globalThis.expo missing on web when Rolldown or vite build on Vite 8 drops ensureNativeModulesAreInstalled and the polyfill it imports. The module is now listed in sideEffects.

  5. 58.0.20

    16 Oct 2026
    • Change the optional react-native-worklets peer dependency to 0.13.0, the version bundled with SDK 58. npm install no longer fails with ERESOLVE when the bundled react-native-worklets version is installed. Earlier react-native-worklets versions do not support React Native 0.88.

  6. 58.0.19

    15 Oct 2026
    • [iOS] Speed up module registration at app launch by classifying definition elements without protocol conformance lookups.

    • [iOS] Reduced the overhead of emitting events without a payload.

    • [iOS] Speed up app launch by computing default module, class and view names without protocol conformance lookups.

  7. 58.0.18

    14 Oct 2026
    • [iOS] Fix slow cold launches in brownfield apps where the ExpoModulesProvider lookup scanned Bundle.allFrameworks inside +load. The lookup now tries the framework that contains ExpoModulesCore before falling back to the scan.

    • [iOS] Update expo-modules-macros to 0.20.0, which binds @JS functions and setters that return nothing through the Void overload, so they no longer build an undefined value on each call.

    • [iOS] Reduced the overhead of emitting module events.

  8. 58.0.17

    13 Oct 2026
    • [iOS] Fix a launch crash (Symbol not found: _swift_allocateMetadataPack) in apps that use precompiled Expo modules and build with Xcode 27. ExpoModulesJSI no longer exports Swift runtime symbols, so the precompiled ExpoModulesCore no longer depends on them.

    • [iOS] Fix a UIViewControllerHierarchyInconsistency crash when a SwiftUI view (such as @expo/ui's Host) is rendered inside a text input's accessory view, for example React Native's InputAccessoryView or react-native-keyboard-controller's KeyboardExtender.

  9. 58.0.16

    13 Oct 2026
    • breaking

      [iOS] Make JavaScriptValue a non-copyable struct. This is a breaking change for Swift code that uses JavaScriptValue directly:

    • [Internal] Bump precompiled artifacts due to ABI breakage in expo-modules-jsi, which makes JavaScriptValue a non-copyable struct.

    • [iOS] Update expo-modules-macros to 0.16.0, which supports closure arguments in @JS functions and initializers.

  10. 58.0.15

    9 Oct 2026
    • [Android] Fix record arguments without @OptimizedRecord (such as ImagePickerOptions in older expo-image-picker versions) failing to convert in minified release builds with The 1st argument cannot be cast to type ... caused by a NullPointerException. Keep the @Field annotation class from being renamed by R8.

    • [Android] Fix release builds crashing at launch when the app uses an Expo Modules API 2.0 module, such as expo-crypto. R8 removed classes and members that the v2 runtime reaches through reflection and JNI.

    • [Android] Fixed Expo modules not receiving OnCreate when JavaScript reaches the JSI NativeModulesProxy before the legacy one, for example with lazy imports, which made modules like expo-web-browser fail on first use. Its constants are read lazily again, as before #46964.

  11. 58.0.14

    6 Oct 2026
    • [Android] Fixed a data race on the Fabric view state-prop map when Expo registers its view components while React Native builds a component descriptor registry on another thread.

    • [Internal] Import LogBox, DevSettings, and NativeComponentRegistry from the react-native public API.

  12. 58.0.13

    5 Oct 2026
    • [macOS] Attach SwiftUI hosting views even when no NSViewController is in the responder chain, such as a React root view set directly as NSWindow.contentView. Previously, @expo/ui content in such windows rendered nothing.

    • [iOS] Update expo-modules-macros to 0.15.0, which generates only the unowned decode for @Union and skips cases whose decodableKinds can't match.

    • [Internal] Make AppContext non-final, so that TestAppContext from expo-modules-test-core can subclass it.

  13. 58.0.12

    3 Oct 2026
    • [Internal][Android] expoPublish now formats the updated expo-module.config.json with oxfmt instead of prettier.

    • [iOS] Add decodableKinds to JavaScriptDecodable: the kinds of JavaScript value (JavaScriptValueKinds) that decode can accept, so code that picks between several types can skip the ones that can't match.

    • [iOS] Add JavaScriptValue.withUnownedValue(in:_:), and give the owning JavaScriptDecodable.decode a default that borrows the value and decodes it through the JavaScriptUnownedValue overload, so a conformer can implement only that one. Arrays, dictionaries, dates, records and enums now decode unowned values without copying them first.

  14. 58.0.11

    1 Oct 2026
    • [iOS] @Record now accepts properties that hold free-form Any values, such as [String: Any]? or [Any].

    • [Android] Fixed Expo views using Android layout not completing system-forced layout passes.

  15. 58.0.10

    1 Oct 2026
    • Lay out RNHostView hosted content at the size SwiftUI or Compose gives it on an axis that matchContents does not match.

  16. 58.0.9

    29 Sep 2026
    • Force-bump all packages, due to migration to changesets.

    • [iOS] Depend on expo-modules-macros, the new name of the @expo/expo-modules-macros-plugin package.

    • [iOS] Fixed a crash (The app context has been lost) when an Expo view mounts during a reload.

  17. 58.0.8

    28 Sep 2026
    • [Android] Throw a JavaScript error instead of aborting when returning a shared object whose JavaScript instance is no longer available.

  18. 58.0.7

    25 Sep 2026
    • Fixed listeners removed with subscription.remove() never being garbage-collected, together with their emitter and everything their closure references, when the closure can reach the subscription (as in useEvent, useEventListener or a useEffect that returns () => subscription.remove()).

    • [iOS] Fixed Exception reporting undefined reason to JavaScript instead of the description it was created with, which also affected every promise.reject(code, description) call.

  19. 58.0.6

    23 Sep 2026
    • Added Platform.isQuest to detect Meta Quest devices from JavaScript.

    • Preserve shared objects when React Activity becomes hidden, handle Strict Mode replay, and wait for all pending updates before releasing objects.

    • [Android] Fixed async functions rejecting with Cannot use shared object that was already released, and sharedObjectDidRelease being called in the middle of a pending call, when the garbage collector took the JS object of a shared object receiver or argument before the call finished.

  20. 58.0.5

    22 Sep 2026
    • [iOS] Added SceneGeometry.anchorPopover(of:to:rect:) so modules anchor popovers by presentation style instead of the iPad idiom, which regular-width phones such as iPhone Duo need.

    • Fixed a crash while laying out an RNHostView with matchContents whose content is laid out more than once, for example a nested host or a Reanimated node. The hosted shadow node could be released before replaceChild finished reading it.

  21. 58.0.4

    21 Sep 2026
    • [iOS] Added EmbeddedFingerprint, which reads the fingerprint a debug build embedded, with EmbeddedFingerprint.CheckProtocol carrying the literals of the fingerprint-check exchange.

    • [Android] Fixed worklet callbacks crashing with NoSuchFieldError in minified release builds.

    • [Android] Replaced the hosting ComposeView's view id with a tag for its rememberSaveable namespace, fixing a crash on react-native-screens tab switch and touches inside a Host reaching the wrong React Native view.

  22. 58.0.3

    16 Sep 2026

    This version does not introduce any user-facing changes.

  23. 58.0.2

    15 Sep 2026
    • breaking

      [Android] Compile expo-module-gradle-plugin against Android Gradle Plugin 9.2.1 and drop the Android Gradle Plugin 8 compatibility code.

    • [Android] Fixed native-backed ArrayBuffers and NativeArrayBuffers being copied instead of shared when passed back from JS on Hermes V1.

  24. 58.0.1

    14 Sep 2026
    • [iOS] Added the @Union macro that turns an enum whose cases each carry one associated value into a typed union (A | B in TypeScript), usable as a @JS argument or return value.

    • [iOS] Added the .concurrent option to @JS (@JS(.concurrent)), which runs the body of an async function off the JavaScript thread.

    • [iOS] Bumped @expo/expo-modules-macros-plugin to 0.10.0.

  25. 58.0.0

    10 Sep 2026
    • breaking

      [Android] Removed the deprecated AppContext.hostingRuntimeContext property. Use AppContext.runtime instead.

    • breaking

      [Android] Removed the deprecated AppContext.errorManager property. Use AppContext.jsLogger instead.

    • breaking

      [Android] Replaced the old ArrayBuffer interface with a concrete class, so NativeArrayBuffer and JavaScriptArrayBuffer no longer share a common ArrayBuffer supertype.

  26. 57.x
  27. 57.0.9 – 57.0.2315 releases without a noteShow each
    • 57.0.2314 Oct 2026no note
    • 57.0.2212 Oct 2026no note
    • 57.0.216 Oct 2026no note
    • 57.0.2029 Sep 2026no note
    • 57.0.1924 Sep 2026no note
    • 57.0.1811 Sep 2026no note
    • 57.0.178 Sep 2026no note
    • 57.0.164 Sep 2026no note
    • 57.0.151 Sep 2026no note
    • 57.0.1426 Aug 2026no note
    • 57.0.1324 Aug 2026no note
    • 57.0.1220 Aug 2026no note
    • 57.0.1114 Aug 2026no note
    • 57.0.106 Aug 2026no note
    • 57.0.94 Aug 2026no note
  28. 57.0.8

    29 Jul 2026
    • Added a layoutRoot prop to Expo views that marks the shadow node with the RootNodeKind trait, so measure() reports coordinates relative to that node — for views that dispatch touch events from their own root view, like RNHostView in @expo/ui.

  29. 57.0.7

    22 Jul 2026

    Reading the note…

  30. 57.0.6

    17 Jul 2026

    Reading the note…

  31. 57.0.5

    15 Jul 2026

    Reading the note…

  32. 57.0.4

    15 Jul 2026

    Reading the note…

  33. 57.0.3

    7 Jul 2026

    Reading the note…

  34. 57.0.2

    3 Jul 2026

    Reading the note…

  35. 57.0.1

    30 Jun 2026

    Reading the note…

  36. 57.0.0

    25 Jun 2026

    Reading the note…

  37. 56.x
  38. 56.0.26 – 56.0.272 releases without a noteShow each
    • 56.0.2729 Sep 2026no note
    • 56.0.2617 Sep 2026no note