# expo-image-picker

> Provides access to the system's UI for selecting images and videos from the phone's library or taking a photo with the camera.

Latest version **57.0.19** (published 2026-09-18) · MIT license · 0 weekly downloads

## Install

```sh
npm install expo-image-picker
pnpm add expo-image-picker
yarn add expo-image-picker
bun add expo-image-picker
```

## Health

**Score 75/100 (B)** — status: active.

Positive: has types; no vulnerabilities; recently updated; high maintenance score; high quality score; popular repo; extremely popular.

Warnings: low downloads; no esm support.

## Facts

| | |
|---|---|
| Version | 57.0.19 |
| Published | 2026-09-18 |
| First published | 2019-02-19 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | bundled |
| Module format | CommonJS |
| Dependencies | 1 |
| Unpacked size | 470.2 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 52333 |
| Author | 650 Industries, Inc. |
| Maintainers | ide, brentvatne, expoadmin, exponent, bycedric, kudochien, alanhughes, tsapeta, expo-bot, philpl, ccheever, wschurman |
| Keywords | react-native, expo, image, picker, image-picker |

## Links

- npm: https://www.npmjs.com/package/expo-image-picker
- Repository: https://github.com/expo/expo
- Homepage: https://docs.expo.dev/versions/latest/sdk/imagepicker/
- Issues: https://github.com/expo/expo/issues
- npm.io page: https://npm.io/package/expo-image-picker

## Dependencies (1)

- [expo-image-loader](https://npm.io/package/expo-image-loader.md) ~57.0.1

## Alternatives

- [exif-parser](https://npm.io/package/exif-parser.md) — 3.8M weekly downloads
- [vite-plugin-compression](https://npm.io/package/vite-plugin-compression.md) — 569.5K weekly downloads
- [pica](https://npm.io/package/pica.md) — 442.4K weekly downloads
- [@reportportal/client-javascript](https://npm.io/package/@reportportal/client-javascript.md) — 408.8K weekly downloads
- [@tldraw/state](https://npm.io/package/@tldraw/state.md) — 316.0K weekly downloads

## Recent versions

- 57.0.19 (latest) — 2026-09-18
- 58.0.3 (next) — 2026-09-16
- 58.0.0-canary-20260909-ea7a89a (canary) — 2026-09-09
- 56.0.25 (sdk-56) — 2026-08-28
- 55.0.24 (sdk-55) — 2026-08-25
- 56.0.15-canary-20260701-9100865 (canary-sdk-56) — 2026-07-01
- 55.0.10-canary-20260429-a5e59cf (canary-sdk-55) — 2026-04-29
- 17.0.11 (sdk-54) — 2026-04-27
- 15.1.0 (sdk-51) — 2025-01-27
- 14.7.1 (sdk-50) — 2023-12-19
- 58.0.2 — 2026-09-15
- 57.0.18 — 2026-09-15
- 58.0.1 — 2026-09-14
- 57.0.17 — 2026-09-11
- 58.0.0 — 2026-09-10
- … 315 more at https://npm.io/package/expo-image-picker/versions

## README

<p>
  <a href="https://docs.expo.dev/versions/latest/sdk/imagepicker/">
    <img
      src="../../.github/resources/expo-image-picker.svg"
      alt="expo-image-picker"
      height="64" />
  </a>
</p>

Provides access to the system's UI for selecting images and videos from the phone's library or taking a photo with the camera.

# API documentation

- [Documentation for the latest stable release](https://docs.expo.dev/versions/latest/sdk/imagepicker/)
- [Documentation for the main branch](https://docs.expo.dev/versions/unversioned/sdk/imagepicker/)

# Installation in managed Expo projects

For [managed](https://docs.expo.dev/archive/managed-vs-bare/) Expo projects, please follow the installation instructions in the [API documentation for the latest stable release](https://docs.expo.dev/versions/latest/sdk/imagepicker/).

# Installation in bare React Native projects

For bare React Native projects, you must ensure that you have [installed and configured the `expo` package](https://docs.expo.dev/bare/installing-expo-modules/) before continuing.

### Add the package to your npm dependencies

```
npx expo install expo-image-picker
```

### Configure for Android

> This is only required for usage in bare React Native apps.

This package automatically adds the `CAMERA`, `READ_EXTERNAL_STORAGE`, and `WRITE_EXTERNAL_STORAGE` permissions. They are used when picking images from the camera directly, or from the camera roll.

```xml
<!-- Added permissions -->
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
```

### Configure for iOS

> This is only required for usage in bare React Native apps.

Add `NSPhotoLibraryUsageDescription`, `NSCameraUsageDescription`, and `NSMicrophoneUsageDescription` keys to your `Info.plist`:

```xml
<key>NSPhotoLibraryUsageDescription</key>
<string>Give $(PRODUCT_NAME) permission to save photos</string>
<key>NSCameraUsageDescription</key>
<string>Give $(PRODUCT_NAME) permission to access your camera</string>
<key>NSMicrophoneUsageDescription</key>
<string>Give $(PRODUCT_NAME) permission to use your microphone</string>
```

Run `npx pod-install` after installing the npm package.

## Config Plugin

> This plugin is applied automatically in EAS Build, only add the config plugin if you want to pass in extra properties.

After installing this npm package, add the [config plugin](https://docs.expo.dev/config-plugins/introduction) to the [`plugins`](https://docs.expo.io/versions/latest/config/app/#plugins) array of your `app.json` or `app.config.js`:

```json
{
  "expo": {
    "plugins": ["expo-image-picker"]
  }
}
```

Next, rebuild your app as described in the ["Adding custom native code"](https://docs.expo.dev/workflow/customizing/) guide.

### API

The plugin provides props for extra customization. Every time you change the props or plugins, you'll need to rebuild (and `prebuild`) the native app. If no extra properties are added, defaults will be used.

- `photosPermission` (_string | false_): Sets the iOS `NSPhotoLibraryUsageDescription` permission message to the `Info.plist`. Setting `false` will skip adding the permission on iOS and **does not** skip the permission on Android. Defaults to `Allow $(PRODUCT_NAME) to access your photos`.
- `cameraPermission` (_string | false_): Sets the iOS `NSCameraUsageDescription` permission message to the `Info.plist`. Setting `false` will skip adding the permission on iOS and **does not** skip the permission on Android. Defaults to `Allow $(PRODUCT_NAME) to access your camera`.
- `microphonePermission` (_string | false_): Sets the iOS `NSCameraUsageDescription` permission message to the `Info.plist`. Setting `false` will skip adding the permission on iOS and skips adding the `android.permission.RECORD_AUDIO` Android permission. Defaults to `Allow $(PRODUCT_NAME) to access your photos`.

### Example

```json
{
  "expo": {
    "plugins": [
      [
        "expo-image-picker",
        {
          "photosPermission": "custom photos permission",
          "cameraPermission": "Allow $(PRODUCT_NAME) to open the camera",

          "//": "Disables the microphone permission",
          "microphonePermission": false
        }
      ]
    ]
  }
}
```

# Contributing

Contributions are very welcome! Please refer to guidelines described in the [contributing guide](https://github.com/expo/expo#contributing).

---
_Source: https://npm.io/package/expo-image-picker · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
