This documentation is available as Markdown for AI agents and LLMs. See the full Markdown index or append .md to any documentation URL.

Expo DocumentPicker iconExpo DocumentPicker

A library that provides access to the system's UI for selecting documents from the available providers on the user's device.

Android
iOS
Web
Included in Expo Go
Recommended version:
~56.0.4

expo-document-picker provides access to the system's UI for selecting documents from the available providers on the user's device.

Installation

Terminal
- npx expo install expo-document-picker
- yarn expo install expo-document-picker
- pnpm expo install expo-document-picker
- bun expo install expo-document-picker

If you are installing this in an existing React Native app, make sure to install expo in your project.

Configuration in app config

You can configure expo-document-picker using its built-in config plugin if you use config plugins in your project (Continuous Native Generation (CNG)). The plugin allows you to configure various properties that cannot be set at runtime and require building a new app binary to take effect. If your app does not use CNG, then you'll need to manually configure the library.

Example app.json with config plugin

If you want to enable iCloud storage features, set the expo.ios.usesIcloudStorage key to true in the app config file as specified configuration properties.

Running EAS Build locally will use iOS capabilities signing to enable the required capabilities before building.

app.json
{ "expo": { "plugins": [ [ "expo-document-picker", { "iCloudContainerEnvironment": "Production" } ] ] } }

Configurable properties

NameDefaultDescription
iCloudContainerEnvironmentundefined
Only for: 
iOS

Sets the iOS com.apple.developer.icloud-container-environment entitlement used for AdHoc iOS builds. Possible values: Development, Production. Learn more.

kvStoreIdentifierundefined
Only for: 
iOS

Overrides the default iOS com.apple.developer.ubiquity-kvstore-identifier entitlement, which uses your Apple Team ID and bundle identifier. This may be needed if your app was transferred to another Apple Team after enabling iCloud storage.

Are you using this library in an existing React Native app?

Apps that don't use EAS Build and want iCloud storage features must manually configure the iCloud service with CloudKit support for their bundle identifier.

If you enable the iCloud capability through the Apple Developer Console, then be sure to add the following entitlements in your ios/[app]/[app].entitlements file (where dev.expo.my-app if your bundle identifier):

<key>com.apple.developer.icloud-container-identifiers</key> <array> <string>iCloud.dev.expo.my-app</string> </array> <key>com.apple.developer.icloud-services</key> <array> <string>CloudDocuments</string> </array> <key>com.apple.developer.ubiquity-container-identifiers</key> <array> <string>iCloud.dev.expo.my-app</string> </array> <key>com.apple.developer.ubiquity-kvstore-identifier</key> <string>$(TeamIdentifierPrefix)dev.expo.my-app</string>

Apple Developer Console also requires an iCloud Container to be created. When registering the new container, you are asked to provide a description and identifier for the container. You may enter any name under the description. Under the identifier, add iCloud.<your_bundle_identifier> (same value used for com.apple.developer.icloud-container-identifiers and com.apple.developer.ubiquity-container-identifiers entitlements).

Using with expo-file-system

When using expo-document-picker with expo-file-system, it's not always possible for the file system to read the file immediately after the expo-document-picker picks it.

To allow the expo-file-system to read the file immediately after it is picked, you'll need to ensure that the copyToCacheDirectory option is set to true.

API

import * as DocumentPicker from 'expo-document-picker';

No API data file found, sorry!