File: document-picker.md | Updated: 11/15/2025
Hide navigation
Search
Ctrl K
Home Guides EAS Reference Learn
Reference version
SDK 52
Archive Expo Snack Discord and Forums Newsletter
Expo DocumentPickerA library that provides access to the system's UI for selecting documents from the available providers on the user's device.
Android
iOS
Web
Bundled version:
~13.0.3
Copy page
expo-document-picker provides access to the system's UI for selecting documents from the available providers on the user's device.
Terminal
Copy
- npx expo install expo-document-picker
If you are installing this in an existing React Native app
, make sure to install expo
in your project.
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.
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
Copy
{ "expo": { "plugins": [ [ "expo-document-picker", { "iCloudContainerEnvironment": "Production" } ] ] } }
| Name | Default | Description |
| --- | --- | --- |
| iCloudContainerEnvironment | undefined | Only for: <br><br>iOS<br><br> <br><br>Sets the iOS com.apple.developer.icloud-container-environment entitlement used for AdHoc iOS builds. Possible values: Development, Production. Learn more<br>. |
| kvStoreIdentifier | undefined | Only for: <br><br>iOS<br><br> <br><br>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).
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.
import * as DocumentPicker from 'expo-document-picker';
getDocumentAsyncAndroid
iOS
Web
Type: React.[Element](https://www.typescriptlang.org/docs/handbook/jsx.html#function-component) <[DocumentPickerOptions](https://docs.expo.dev/versions/v52.0.0/sdk/document-picker#documentpickeroptions) >
Display the system UI for choosing a document. By default, the chosen file is copied to the app's internal cache directory .
Notes for Web: The system UI can only be shown after user activation (e.g. a
Buttonpress). Therefore, callinggetDocumentAsyncincomponentDidMount, for example, will not work as intended. Thecancelevent will not be returned in the browser due to platform restrictions and inconsistencies across browsers.
DocumentPickerAssetAndroid
iOS
Web
| Property | Type | Description |
| --- | --- | --- |
| file(optional) | [File](https://docs.expo.dev/versions/v52.0.0/sdk/document-picker#file) | Only for: <br><br>Web<br><br> <br><br>File object for the parity with web File API. |
| lastModified(optional) | number | Timestamp of last document modification. |
| mimeType(optional) | string | Document MIME type. |
| name | string | Document original name. |
| size(optional) | number | Document size in bytes. |
| uri | string | An URI to the local document file. |
DocumentPickerCanceledResultAndroid
iOS
Web
Type representing canceled pick result.
| Property | Type | Description |
| --- | --- | --- |
| assets | null | Always null when the request was canceled. |
| canceled | true | Always true when the request was canceled. |
| output(optional) | null | Only for: <br><br>Web<br><br> <br><br>Always null when the request was canceled. |
DocumentPickerOptionsAndroid
iOS
Web
| Property | Type | Description |
| --- | --- | --- |
| copyToCacheDirectory(optional) | boolean | If true, the picked file is copied to FileSystem.CacheDirectory<br>, which allows other Expo APIs to read the file immediately. This may impact performance for large files, so you should consider setting this to false if you expect users to pick particularly large files and your app does not need immediate read access.<br><br>Default:true |
| multiple(optional) | boolean | Allows multiple files to be selected from the system UI.<br><br>Default:false |
| type(optional) | string \| string[] | The MIME type(s)<br> of the documents that are available to be picked. It also supports wildcards like 'image/*' to choose any image. To allow any type of document you can use '*/*'.<br><br>Default:'*/*' |
DocumentPickerResultAndroid
iOS
Web
Literal Type: union
Type representing successful and canceled document pick result.
Acceptable values are: [DocumentPickerSuccessResult](https://docs.expo.dev/versions/v52.0.0/sdk/document-picker#documentpickersuccessresult) | [DocumentPickerCanceledResult](https://docs.expo.dev/versions/v52.0.0/sdk/document-picker#documentpickercanceledresult)
DocumentPickerSuccessResultAndroid
iOS
Web
Type representing successful pick result.
| Property | Type | Description |
| --- | --- | --- |
| assets | [DocumentPickerAsset[]](https://docs.expo.dev/versions/v52.0.0/sdk/document-picker#documentpickerasset) | An array of picked assets. |
| canceled | false | If asset data have been returned this should always be false. |
| output(optional) | [FileList](https://developer.mozilla.org/en-US/docs/Web/API/FileList) | Only for: <br><br>Web<br><br> <br><br>FileList object for the parity with web File API. |