Important: This documentation covers Yarn 1 (Classic).
For Yarn 2+ docs and migration guide, see yarnpkg.com.

Package detail

expo-media-library

expo449.1kMIT17.1.6TypeScript support: included

Provides access to user's media library.

react-native, expo, media, library, cameraroll, photos, videos

readme

Expo logo

Expo

Expo SDK version Chat or ask a question License: MIT Downloads

Try Expo in the Browser  •  Read the Documentation  •  Learn more on our blog  •  Request a feature

Follow us on

Expo on X   Expo on GitHub   Expo on Reddit   Expo on Bluesky   Expo on LinkedIn

Introduction

Expo is an open-source platform for making universal native apps that run on Android, iOS, and the web. It includes a universal runtime and libraries that let you build native apps by writing React and JavaScript.

This repository includes the Expo SDK, Modules API, Go app, CLI, Router, documentation, and various other supporting tools. Expo Application Services (EAS) is a platform of hosted services that are deeply integrated with Expo open source tools. EAS helps you build, ship, and iterate on your app as an individual or a team.

Read the Expo Community Guidelines before interacting in the repository. Thank you for helping keep the Expo community open and welcoming!

Table of contents

📚 Documentation

Learn about building and deploying universal apps in our official docs!

🗺 Project Layout

  • packages All the source code for Expo modules, if you want to edit a library or just see how it works this is where you'll find it.
  • apps This is where you can find Expo projects which are linked to the development modules. You'll do most of your testing in here.
  • apps/expo-go This is where you can find the source code for Expo Go.
  • apps/expo-go/ios/Exponent.xcworkspace is the Xcode workspace. When developing iOS, always open this instead of Exponent.xcodeproj because the workspace also loads the CocoaPods dependencies.
  • docs The source code for https://docs.expo.dev
  • templates The template projects you get when you run npx create-expo-app
  • react-native-lab This is our fork of react-native used to build Expo Go.
  • guides In-depth tutorials for advanced topics like contributing to the client.
  • tools contain build and configuration tools.
  • template-files contains templates for files that require private keys. They are populated using the keys in template-files/keys.json.
  • template-files/ios/dependencies.json specifies the CocoaPods dependencies of the app.

🏅 Badges

Let everyone know your app can be run instantly in the Expo Go app!

runs with Expo Go

runs with Expo Go

[![runs with Expo Go](https://img.shields.io/badge/Runs%20with%20Expo%20Go-000.svg?style=flat-square&logo=EXPO&labelColor=f3f3f3&logoColor=000)](https://expo.dev/client)

[![runs with Expo Go](https://img.shields.io/badge/Runs%20with%20Expo%20Go-4630EB.svg?style=flat-square&logo=EXPO&labelColor=f3f3f3&logoColor=000)](https://expo.dev/client)

👏 Contributing

If you like Expo and want to help make it better then check out our contributing guide! Check out the CLI package to work on the Expo CLI.

❓ FAQ

If you have questions about Expo and want answers, then check out our Frequently Asked Questions!

If you still have questions you can ask them on our Discord and Forums or X @expo.

💙 The Team

Curious about who makes Expo? Here are our team members!

License

The Expo source code is made available under the MIT license. Some of the dependencies are licensed differently, with the BSD license, for example.

Star the Expo repo on GitHub to support the project

changelog

Changelog

Unpublished

🛠 Breaking changes

🎉 New features

🐛 Bug fixes

💡 Others

17.1.6 — 2025-04-30

This version does not introduce any user-facing changes.

17.1.5 — 2025-04-30

This version does not introduce any user-facing changes.

17.1.4 — 2025-04-25

🐛 Bug fixes

  • Fixed medialibraryassetschangeevent listener not capturing assets changes. (#36459 by @aleqsio)
  • Fixed build error from AppDelegate.swift integration. (#36368 by @kudo)

17.1.3 — 2025-04-21

This version does not introduce any user-facing changes.

17.1.2 — 2025-04-14

This version does not introduce any user-facing changes.

17.1.1 — 2025-04-09

This version does not introduce any user-facing changes.

17.1.0 — 2025-04-04

🎉 New features

💡 Others

17.0.6 - 2025-02-14

💡 Others

17.0.5 - 2025-01-10

This version does not introduce any user-facing changes.

17.0.4 - 2024-12-19

🐛 Bug fixes

  • [iOS] Fix unknown file type being returned for video files. (#33589 by @behenate)

17.0.3 — 2024-11-22

🐛 Bug fixes

17.0.2 — 2024-11-05

🐛 Bug fixes

  • [iOS] Fixes asset types not returned correctly. (#32621 by @aleqsio)

17.0.1 — 2024-11-04

This version does not introduce any user-facing changes.

17.0.0 — 2024-10-22

🛠 Breaking changes

🎉 New features

  • [iOS] include more error information in native rejections (#30504 by @vonovak)
  • On Android 14+, when user gave only partial asset access, presentPermissionsPickerAsync() presents the permissions dialog to allow the user to change the selected assets. (#29882 by @vonovak)

🐛 Bug fixes

  • On iOS, getAssets crashed when result was is empty (#29969 by @vonovak)
  • On Android, throw an error when deleting an asset was unsuccessful. (#29777 by @mathieupost)
  • Add missing react-native peer dependencies for isolated modules. (#30476 by @byCedric)
  • On Android, adding an asset to an album containing another album would throw an exception. (#29777 by @nafeij)
  • [Android] Fix exceptions when moving or deleting video assets. (#31424 by @behenate)

💡 Others

  • Removed redundant usage of EventEmitter instance. (#28946 by @tsapeta)

16.0.4 - 2024-06-20

🐛 Bug fixes

  • On iOS, add back image loader to handle ph:// and assets-library:// schemes. (#29747 by @alanjhughes)

16.0.3 — 2024-04-23

This version does not introduce any user-facing changes.

16.0.2 — 2024-04-22

🐛 Bug fixes

16.0.1 — 2024-04-19

This version does not introduce any user-facing changes.

16.0.0 — 2024-04-18

🎉 New features

  • [Android] Add support for allowing access permissions to only selected photos. (#27749 by @behenate)
  • [Android] Add support for granular permissions. (#27729 by @behenate)

🐛 Bug fixes

  • [iOS] Fix crash when passing default as sorting key. (#28328 by @aleqsio)
  • [Android] Fixed crash on denied permission to modify assets. (#28212 by @mathieupost)

💡 Others

  • Prevent config plugin from writing permissions until prebuild. (#28107 by @EvanBacon)
  • [iOS] Add privacy manifest describing required reason API usage. (#27770 by @aleqsio)
  • drop unused web name property. (#27437 by @EvanBacon)
  • [iOS] Migrate to expo modules. (#25587 by @alanjhughes)
  • Removed deprecated backward compatible Gradle settings. (#28083 by @kudo)
  • The ACCESS_MEDIA_LOCATION Android permission should not pulled into by default and should be pulled through Config Plugins. (#28230 by @kudo)

15.9.1 - 2023-12-19

This version does not introduce any user-facing changes.

15.9.0 — 2023-12-12

🐛 Bug fixes

  • On iOS, fix iOS 14 limited library picker presentation, using presentPermissionsPickerAsync, on nested views and reject Promise if state is not limited. (#25521 by @exodusanto)
  • Fix promises being resolved twice on Android. (#25763 by @lukmccall)

15.8.0 — 2023-11-14

🛠 Breaking changes

15.7.0 — 2023-10-17

🛠 Breaking changes

15.6.0 — 2023-09-04

🎉 New features

  • Added support for React Native 0.73. (#24018 by @kudo)

15.5.1 — 2023-08-02

🐛 Bug fixes

  • On iOS, fix issue where the wrong requester class was used if the user had requested writeOnly permissions. (#23780 by @alanjhughes)

15.5.0 — 2023-07-28

This version does not introduce any user-facing changes.

15.4.1 - 2023-07-23

🐛 Bug fixes

  • Fix albumNeedsMigrationAsync crashing if called with invalid albumId on Android. (#23516 by @lukmccall)
  • Fix the bind value at index 1 is null exception thrown by ExpoMediaLibrary.migrateAlbumIfNeededAsync on Android. (#23515 by @lukmccall)

15.4.0 — 2023-06-21

📚 3rd party library updates

🎉 New features

  • Added support for React Native 0.72. (#22588 by @kudo)

🐛 Bug fixes

  • Fixed missing permissions error on Android when the user only requests write permissions (#22457 by @alanjhughes)
  • Fixed Android build warnings for Gradle version 8. (#22537, #22609 by @kudo)

15.3.0 — 2023-05-08

🐛 Bug fixes

15.2.1 — 2023-02-09

This version does not introduce any user-facing changes.

15.2.0 — 2023-02-03

💡 Others

  • On Android bump compileSdkVersion and targetSdkVersion to 33. (#20721 by @lukmccall)

15.1.0 — 2022-12-30

🎉 New features

🐛 Bug fixes

  • Renamed the module on iOS to match the name used on Android. (#20283 by @alanhughes)
  • Fixed an issue where passing the sortBy argument to MediaLibrary.getAssetsAsync would cause the method to throw an error. (#21363 by @alanhughes)

15.0.0 — 2022-10-25

🛠 Breaking changes

  • Bumped iOS deployment target to 13.0 and deprecated support for iOS 12. (#18873 by @tsapeta)

🐛 Bug fixes

  • Fix promise rejection on M1 iOS Simulator due to UTTypeCreatePreferredIdentifierForTag not working as expected. (#19669 by @aleqsio)

💡 Others

  • [plugin] Migrate import from @expo/config-plugins to expo/config-plugins and @expo/config-types to expo/config. (#18855 by @brentvatne)
  • Drop @expo/config-plugins dependency in favor of peer dependency on expo. (#18595 by @EvanBacon)

14.2.0 — 2022-07-07

🐛 Bug fixes

  • Use PHAssetCollectionSubtypeAny subtype to avoid Recently Deleted album to show up (#17561 by @chuganzy)
  • Fix MediaLibrary._exportAsset crashing if filename is nil. (#17999 by @ken0nek)

14.1.0 — 2022-04-18

🐛 Bug fixes

  • Don't ask for ACCESS_MEDIA_LOCATION permission if it's not present in AndroidManifest.xml. (#16034 by @barthap)
  • [plugin] Fix prebuild is failing when the withMediaLibrary plugin is enabled on Android. (#15169 by @MorganV)

💡 Others

⚠️ Notices

  • On Android bump compileSdkVersion to 31, targetSdkVersion to 31 and Java version to 11. (#16941 by @bbarthec)

14.0.1 - 2022-02-01

🐛 Bug fixes

  • Fix Plugin with id 'maven' not found build error from Android Gradle 7. (#16080 by @kudo)

14.0.0 — 2021-12-03

💡 Others

13.0.1 — 2021-10-01

🐛 Bug fixes

  • Fix permissions always returning denied on android api < 29. (#14570 by @kudo)
  • Fix unhandled rejection when asset creation fails on Android. (#14583 by @barthap)

13.0.0 — 2021-09-28

🛠 Breaking changes

🎉 New features

🐛 Bug fixes

  • Restore location exif data getter for Android 10+ devices. (#14413 by @ajsmth)
  • EXIF parsing failure no longer crashes the getAssetsAsync and getAssetInfoAsync, the promise returns exif: null instead. (#14408 by @barthap)
  • Fixed createAssetAsync and saveToLibraryAsync on Android 11. (#14518 by @barthap)
  • Fix building errors from use_frameworks! in Podfile. (#14523 by @kudo)

💡 Others

  • Migrated from @unimodules/core to expo-modules-core. (#13755 by @tsapeta)
  • Added AlbumType and MediaSubtype types, added missing orientation key to the Asset type. (#13936 by @Simek)
  • Remove assets-library:// uri scheme usage in favour of ph:// (#14173 by @ajsmth)
  • Updated @expo/config-plugins (#14443 by @EvanBacon)

12.1.0 — 2021-06-16

🐛 Bug fixes

💡 Others

  • Migrated from unimodules-file-system-interface and unimodules-permissions-interface to expo-modules-core. (#12961 by @tsapeta)

12.0.2 — 2021-04-13

This version does not introduce any user-facing changes.

12.0.1 — 2021-03-31

This version does not introduce any user-facing changes.

12.0.0 — 2021-03-10

🛠 Breaking changes

  • Changed location of newly created albums on Android. From now, albums won't be saved in the root folder. (#12017 by @lukmccall)

🎉 New features

  • Converted plugin to TypeScript. (#11715 by @EvanBacon)
  • Updated Android build configuration to target Android 11 (added support for Android SDK 30). (#11647 by @bbarthec)

🐛 Bug fixes

  • Remove peerDependencies and unimodulePeerDependencies from Expo modules. (#11980 by @brentvatne)
  • In 'getAssetInfoAsync', respect the shouldDownloadFromNetwork option. (#12086 by @drtangible)

11.0.0 — 2021-01-15

⚠️ Notices

🛠 Breaking changes

🎉 New features

10.0.0 — 2020-11-17

🛠 Breaking changes

  • On iOS enabled use_frameworks! usage by replacing React dependency with React-Core. (#11057 by @bbarthec)
  • Renamed MediaLibrary.MediaLibraryAssetChangeEvent type to MediaLibrary.MediaLibraryAssetsChangeEvent.

🎉 New features

  • Added the MediaLibrary.presentPermissionsPickerAsync method that displays the system prompt allowing the user to change the selected permitted assets` on iOS.

9.2.1 — 2020-09-02

🐛 Bug fixes

  • Fixed RuntimeException: setDataSource failed: status = 0x80000000 caused by MediaMetadataRetriever. (#9855 by @lukmccall)
  • Fixed media-library methods failing when not all permissions were granted on iOS 14. (#10026 by @lukmccall)

9.2.0 — 2020-08-18

🐛 Bug fixes

  • Fixed handling albums without name on Android. (#9787 by @barthap)

9.1.0 — 2020-08-13

🎉 New features

🐛 Bug fixes

  • Fixed getAlbumsAsync(), getAlbum() and media change listener crashing on Android 10. (#9666 by @barthap)

9.0.0 — 2020-08-11

🛠 Breaking changes

  • Added external storage permissions declarations to AndroidManifest.xml on Android. (#9231 by @bycedric)

🐛 Bug fixes

  • Fixed validation for input arguments of getAssetsAsync. (#9538 by @barthap)
  • Fixed bug, where getAssetsAsync did not reject on error on Android. (#9538 by @barthap)

8.5.0 — 2020-07-29

🎉 New features

  • Added options to getAssetInfoAsync(), which allows specifying whether to download the asset from network in iOS. (#9405 by @jarvisluong)
  • Added support for the limited CAMERA_ROLL permission on iOS 14. (#9423 by @lukmccall)

🐛 Bug fixes

  • Fixed getAssetsAsync crashes when given invalid after value on Android. (#9466 by @barthap)

8.4.0 — 2020-07-27

🐛 Bug fixes

  • Fixed getAssetsAsync() and getAssetInfoAsync() location issues on Android Q. (#9315 by @barthap)

8.3.0 — 2020-07-02

🐛 Bug fixes

  • Handled the crash when calling getAssetInfoAsync on a slow motion video on iOS. (#8802 by @jarvisluong)

8.2.1 — 2020-05-29

This version does not introduce any user-facing changes.

8.2.0 — 2020-05-27

🐛 Bug fixes

  • Added missing image loader for MediaLibrary in bare workflow. (#8304 by @tsapeta)
  • Fixed MediaLibrary not compiling with the use_frameworks! option in the bare React Native application. (#7861 by @Ashoat)
  • Flip dimensions based on media rotation data on Android to match <Image> and <Video> as well as iOS behavior. (#7980 by @Ashoat)