---
description: Capacitor File Manager plugin to read, write, copy, and move files and directories on Android, iOS, and Web, with persistent access to picked folders.
title: Capacitor File Manager Plugin - Capawesome
image: https://capawesome.io/docs/assets/images/social/sdks/capacitor/file-manager.png
---

<!doctype html> 

[Skip to content ](#capacitor-file-manager-plugin) 

[📲 Introducing **Build Sharing** — get your builds onto testers' devices with a link & QR code. No account required. ](/blog/share-mobile-app-builds-with-testers/) 

* [ SDKs ](/docs/sdks/)
* [ Web ](#web)
* [ Configuration ](#configuration)
* [ Usage ](#usage)
* [ API ](#api)
* [ Enums ](#enums)
* [ Migration from @capacitor/filesystem ](#migration-from-capacitorfilesystem)
* [ Working with other plugins ](#working-with-other-plugins)
* [ FAQ ](#faq)
* [ Related Plugins ](#related-plugins)
* [ Newsletter ](#newsletter)
* [ Changelog ](#changelog)
* [ Breaking Changes ](#breaking-changes)
* [ License ](#license)
* [ File Opener ](/docs/sdks/capacitor/file-opener/)
* [ File Picker ](/docs/sdks/capacitor/file-picker/)
* [ File Transfer ](/docs/sdks/capacitor/file-transfer/)
* [ Firebase ](/docs/sdks/capacitor/firebase/)
* [ Formbricks ](/docs/sdks/capacitor/formbricks/)
* [ Geocoder ](/docs/sdks/capacitor/geocoder/)
* [ Geofences ](/docs/sdks/capacitor/geofences/)
* [ Google Sign-In ](/docs/sdks/capacitor/google-sign-in/)
* [ Grafana Faro ](/docs/sdks/capacitor/grafana-faro/)
* [ Gyroscope ](/docs/sdks/capacitor/gyroscope/)
* [ Haptics ](/docs/sdks/capacitor/haptics/)
* [ Health ](/docs/sdks/capacitor/health/)
* [ Home Indicator ](/docs/sdks/capacitor/home-indicator/)
* [ In-App Browser ](/docs/sdks/capacitor/in-app-browser/)
* [ Install Referrer ](/docs/sdks/capacitor/install-referrer/)
* [ Intercom ](/docs/sdks/capacitor/intercom/)
* [ Intune ](/docs/sdks/capacitor/intune/)
* [ Keep Awake ](/docs/sdks/capacitor/keep-awake/)
* [ libSQL ](/docs/sdks/capacitor/libsql/)
* [ Light Sensor ](/docs/sdks/capacitor/light-sensor/)
* [ Live Update ](/docs/sdks/capacitor/live-update/)
* [ LLM ](/docs/sdks/capacitor/llm/)
* [ Localization ](/docs/sdks/capacitor/localization/)
* [ Mail Composer ](/docs/sdks/capacitor/mail-composer/)
* [ Managed Configurations ](/docs/sdks/capacitor/managed-configurations/)
* [ MapLibre ](/docs/sdks/capacitor/maplibre/)
* [ Maps Launcher ](/docs/sdks/capacitor/maps-launcher/)
* [ Media Session ](/docs/sdks/capacitor/media-session/)
* [ ML Kit ](/docs/sdks/capacitor/mlkit/)
* [ Navigation Bar ](/docs/sdks/capacitor/navigation-bar/)
* [ Network ](/docs/sdks/capacitor/network/)
* [ NFC ](/docs/sdks/capacitor/nfc/)
* [ Node.js ](/docs/sdks/capacitor/nodejs/)
* [ OAuth ](/docs/sdks/capacitor/oauth/)
* [ Passkeys ](/docs/sdks/capacitor/passkeys/)
* [ Password Autofill ](/docs/sdks/capacitor/password-autofill/)
* [ PDF Generator ](/docs/sdks/capacitor/pdf-generator/)
* [ PDF Viewer ](/docs/sdks/capacitor/pdf-viewer/)
* [ Pedometer ](/docs/sdks/capacitor/pedometer/)
* [ Permissions ](/docs/sdks/capacitor/permissions/)
* [ Phone Dialer ](/docs/sdks/capacitor/phone-dialer/)
* [ Photo Editor ](/docs/sdks/capacitor/photo-editor/)
* [ Photo Manipulator ](/docs/sdks/capacitor/photo-manipulator/)
* [ PixLive ](/docs/sdks/capacitor/pixlive/)
* [ PostHog ](/docs/sdks/capacitor/posthog/)
* [ Printer ](/docs/sdks/capacitor/printer/)
* [ Privacy Screen ](/docs/sdks/capacitor/privacy-screen/)
* [ Proximity Sensor ](/docs/sdks/capacitor/proximity-sensor/)
* [ Purchases ](/docs/sdks/capacitor/purchases/)
* [ RealtimeKit ](/docs/sdks/capacitor/realtimekit/)
* [ Root Detection ](/docs/sdks/capacitor/root-detection/)
* [ Screen Brightness ](/docs/sdks/capacitor/screen-brightness/)
* [ Screen Orientation ](/docs/sdks/capacitor/screen-orientation/)
* [ Screen Reader ](/docs/sdks/capacitor/screen-reader/)
* [ Screenshot ](/docs/sdks/capacitor/screenshot/)
* [ Secure Preferences ](/docs/sdks/capacitor/secure-preferences/)
* [ Settings Launcher ](/docs/sdks/capacitor/settings-launcher/)
* [ Shake ](/docs/sdks/capacitor/shake/)
* [ Silent Mode ](/docs/sdks/capacitor/silent-mode/)
* [ SIM ](/docs/sdks/capacitor/sim/)
* [ SMS Composer ](/docs/sdks/capacitor/sms-composer/)
* [ Speech Recognition ](/docs/sdks/capacitor/speech-recognition/)
* [ Speech Synthesis ](/docs/sdks/capacitor/speech-synthesis/)
* [ Share Target ](/docs/sdks/capacitor/share-target/)
* [ Square Mobile Payments ](/docs/sdks/capacitor/square-mobile-payments/)
* [ SQLite ](/docs/sdks/capacitor/sqlite/)
* [ Superwall ](/docs/sdks/capacitor/superwall/)
* [ System WebView ](/docs/sdks/capacitor/system-webview/)
* [ Tauri ](/docs/sdks/capacitor/tauri/)
* [ Text Interaction ](/docs/sdks/capacitor/text-interaction/)
* [ Text Zoom ](/docs/sdks/capacitor/text-zoom/)
* [ Thermal State ](/docs/sdks/capacitor/thermal-state/)
* [ Toast ](/docs/sdks/capacitor/toast/)
* [ Torch ](/docs/sdks/capacitor/torch/)
* [ Vault ](/docs/sdks/capacitor/vault/)
* [ Volume ](/docs/sdks/capacitor/volume/)
* [ Wallet ](/docs/sdks/capacitor/wallet/)
* [ Watch ](/docs/sdks/capacitor/watch/)
* [ Wifi ](/docs/sdks/capacitor/wifi/)
* [ YouTube Player ](/docs/sdks/capacitor/youtube-player/)
* [ Zip ](/docs/sdks/capacitor/zip/)
* [ Cordova ](/docs/sdks/cordova/)
* [ Cloud ](/docs/cloud/)
* [ Integrations ](/docs/cloud/live-updates/integrations/)
* Concepts
* Reference
* [ Troubleshooting ](/docs/cloud/live-updates/troubleshooting/)
* [ FAQ ](/docs/cloud/live-updates/faq/)
* [ Native Builds ](/docs/cloud/native-builds/)
* [ Set Up Environments ](/docs/cloud/native-builds/environments/)
* [ Set Up Native Configurations ](/docs/cloud/native-builds/native-configurations/)
* [ Auto-Increment Build Numbers ](/docs/cloud/native-builds/auto-incrementing-build-numbers/)
* [ Configure the Web Build Script ](/docs/cloud/native-builds/web-build-script/)
* [ Build from a Monorepo ](/docs/cloud/native-builds/monorepo/)
* [ Use pnpm, Yarn, or bun ](/docs/cloud/native-builds/package-managers/)
* [ Install Private npm Packages ](/docs/cloud/native-builds/npm-private-registry/)
* [ Override the Java Version ](/docs/cloud/native-builds/override-java-version/)
* [ Custom iOS Provisioning Profiles ](/docs/cloud/native-builds/custom-ios-provisioning-profiles/)
* [ Build without Git ](/docs/cloud/native-builds/build-without-git/)
* [ Access Git Behind a Firewall ](/docs/cloud/native-builds/firewall-access/)
* [ Integrations ](/docs/cloud/native-builds/integrations/)
* Reference
* [ Troubleshooting ](/docs/cloud/native-builds/troubleshooting/)
* [ FAQ ](/docs/cloud/native-builds/faq/)
* [ App Store Publishing ](/docs/cloud/app-store-publishing/)
* [ Submit a Build ](/docs/cloud/app-store-publishing/submit-a-build/)
* [ Submit Automatically After a Build ](/docs/cloud/app-store-publishing/submit-automatically/)
* [ Troubleshooting ](/docs/cloud/app-store-publishing/troubleshooting/)
* [ FAQ ](/docs/cloud/app-store-publishing/faq/)
* [ Automations ](/docs/cloud/automations/)
* [ Reference ](/docs/cloud/automations/reference/)
* [ Troubleshooting ](/docs/cloud/automations/troubleshooting/)
* [ FAQ ](/docs/cloud/automations/faq/)
* [ Assist ](/docs/cloud/assist/)
* [ CLI ](/docs/cloud/cli/)
* APIs and SDKs
* [ Webhooks ](/docs/cloud/webhooks/)
* [ Integrations ](/docs/cloud/integrations/)
* Notifications
* Account
* [ Organization ](/docs/cloud/organizations/)
* [ Two-Factor Enforcement ](/docs/cloud/organizations/two-factor-authentication/)
* [ Network Restrictions ](/docs/cloud/organizations/network-restrictions/)
* [ Audit Logs ](/docs/cloud/organizations/audit-logs/)
* [ Billing ](/docs/cloud/organizations/billing/)
* [ License Keys ](/docs/cloud/license-keys/)
* [ AI ](/docs/ai/)
* [ Insiders ](/docs/insiders/)
* [ Billing & Plans ](/docs/insiders/billing-and-plans/)
* [ FAQ ](/docs/insiders/faq/)
* [ License ](https://capawesome.io/legal/eula/)
* [ Support ](/docs/support/)
* [ Contributing ](/docs/contributing/)
* Contributing code
* [ Code of Conduct ](/docs/contributing/code-of-conduct/)
* [ Questions ](https://docs.github.com/en/discussions/collaborating-with-your-community-using-discussions/participating-in-a-discussion#creating-a-discussion)
* [ Blog ](/blog/)
* Categories

* [ Web ](#web)
* [ Configuration ](#configuration)
* [ Usage ](#usage)
* [ API ](#api)
* [ Enums ](#enums)
* [ Migration from @capacitor/filesystem ](#migration-from-capacitorfilesystem)
* [ Working with other plugins ](#working-with-other-plugins)
* [ FAQ ](#faq)
* [ Related Plugins ](#related-plugins)
* [ Newsletter ](#newsletter)
* [ Changelog ](#changelog)
* [ Breaking Changes ](#breaking-changes)
* [ License ](#license)

Build and Ship Mobile Apps Faster

Cloud builds, OTA live updates, and automated store releases — everything your mobile team needs in one platform.

[Start for free ](https://console.cloud.capawesome.io/?utm%5Fsource=docs&utm%5Fmedium=sidebar%5Fcta&utm%5Fcampaign=docs%5Fcta) [See our plans ](https://capawesome.io/pricing/?utm%5Fsource=docs&utm%5Fmedium=sidebar%5Fcta&utm%5Fcampaign=docs%5Fcta) 

# Capacitor File Manager Plugin[¶](#capacitor-file-manager-plugin "Permanent link")

Capacitor plugin to manage files and directories on Android, iOS and Web. Persist access to user-picked folders, run copy, move and delete operations with progress and cancellation, calculate checksums, and inspect device and app storage.

[ ![Deliver Live Updates to your Capacitor app with Capawesome Cloud](../../../assets/external/cloud.capawesome.io/assets/banners/cloud-build-and-deploy-capacitor-apps.69628c3f.png) ](https://cloud.capawesome.io/) 

## Features[¶](#features "Permanent link")

The Capacitor File Manager plugin works with the user's own storage, not just your app's sandbox. Here are some of the key features:

* 📂 **Persistent Directory Access**: Let the user pick a folder once with the [File Picker](https://capawesome.io/docs/sdks/capacitor/file-picker/) plugin and keep read and write access to it across app launches — Play-policy-compliant on Android, sandbox-correct on iOS.
* 🔗 **URI-based API**: Every method works directly with file URIs. Construct them with `getUri(...)` from well-known directories or any parent URI.
* 📄 **Files**: Read, write, append, truncate, copy, move and delete files with constant memory usage, including random access reads and writes for large files.
* 🗂️ **Directories**: Create, read, copy, move, delete and clear directories, and calculate their total size — with rich metadata and paging.
* 📊 **Progress & Cancellation**: Directory operations report progress events and can be canceled at any time.
* 🔢 **Checksums**: Calculate MD5, SHA-1 and SHA-256 checksums of files of any size with constant memory usage.
* 🧲 **Blob Reads**: Read large files as a `Blob` without base64 overhead via `readFileAsBlob(...)`.
* 💾 **Storage Info**: Query the total and free storage space of the device, the storage usage of your app, and clear the app's cache.
* 🌐 **Web Support**: A real web implementation on top of the Origin Private File System with actual directories, streaming and random access — not base64 blobs in IndexedDB.
* ⚠️ **Error Codes**: Every runtime failure rejects with a documented error code, so you can branch on it instead of parsing messages.
* 🤝 **Compatibility**: Works hand in hand with the [File Picker](https://capawesome.io/docs/sdks/capacitor/file-picker/), [File Opener](https://capawesome.io/docs/sdks/capacitor/file-opener/) and [File Transfer](https://capawesome.io/docs/sdks/capacitor/file-transfer/) plugins.
* 📦 **CocoaPods & SPM**: Supports CocoaPods and Swift Package Manager for iOS.
* 🔁 **Up-to-date**: Always supports the latest Capacitor version.
* ⭐️ **Support**: Priority support from the Capawesome Team.
* ✨ **Handcrafted**: Built from the ground up with care and expertise, not forked or AI-generated.

Missing a feature? Just [open an issue](https://github.com/capawesome-team/capacitor-plugins/issues) and we'll take a look!

## Use Cases[¶](#use-cases "Permanent link")

The File Manager plugin is typically used whenever an app needs durable access to user-picked folders or manager-grade file operations, for example:

* **Document management apps**: Let the user pick a folder once and organize, rename and sort documents in it across app launches.
* **Download and media managers**: Check the free storage space before a download, verify the result with a checksum, and move it into a user-visible folder.
* **Backup and export**: Export app data into a folder the user picked, with progress reporting and cancellation for large exports.
* **Large file processing**: Read file headers with random access, stream large files into your web code as a `Blob`, and truncate or append without rewriting the whole file.
* **Cache management**: Show the user how much space your app occupies and offer a one-tap cache cleanup.

## Compatibility[¶](#compatibility "Permanent link")

| Plugin Version | Capacitor Version | Status         |
| -------------- | ----------------- | -------------- |
| 0.x.x          | \>=8.x.x          | Active support |

## Installation[¶](#installation "Permanent link")

This plugin is only available to [Capawesome Insiders](https://capawesome.io/insiders/). First, make sure you have the Capawesome npm registry set up. You can do this by running the following commands:

`[](#%5F%5Fcodelineno-0-1)npm config set @capawesome-team:registry https://npm.registry.capawesome.io
[](#%5F%5Fcodelineno-0-2)npm config set //npm.registry.capawesome.io/:_authToken <YOUR_LICENSE_KEY>
`

**Attention**: Replace `<YOUR_LICENSE_KEY>` with the license key you received from Polar. If you don't have a license key yet, you can get one by becoming a [Capawesome Insider](https://capawesome.io/insiders/).

Next, you can use our **AI-Assisted Setup** to install the plugin. Add the [Capawesome Skills](https://github.com/capawesome-team/skills) to your AI tool using the following command:

`[](#%5F%5Fcodelineno-1-1)npx skills add capawesome-team/skills --skill capacitor-plugins
`

Then use the following prompt:

`` [](#%5F%5Fcodelineno-2-1)Use the `capacitor-plugins` skill from `capawesome-team/skills` to install the `@capawesome-team/capacitor-file-manager` plugin in my project.
 ``

If you prefer **Manual Setup**, install the plugin by running the following commands and follow the platform-specific instructions below:

`[](#%5F%5Fcodelineno-3-1)npm install @capawesome-team/capacitor-file-manager
[](#%5F%5Fcodelineno-3-2)npx cap sync
`

### Android[¶](#android "Permanent link")

This plugin requires no storage permissions. The app's sandbox directories are accessible without any permission, and user-visible folders are accessed through persisted directories, which are granted by the user in the system file picker.

#### Proguard[¶](#proguard "Permanent link")

If you are using Proguard, you need to add the following rules to your `proguard-rules.pro` file:

`[](#%5F%5Fcodelineno-4-1)-keep class io.capawesome.capacitorjs.plugins.** { *; }
`

### Web[¶](#web "Permanent link")

On the web platform, files are stored in the [Origin Private File System](https://developer.mozilla.org/en-US/docs/Web/API/File%5FSystem%5FAPI/Origin%5Fprivate%5Ffile%5Fsystem). Persisted directories and checksums are not available on the web.

#### Data persistence[¶](#data-persistence "Permanent link")

The Origin Private File System is subject to the browser's storage eviction rules. By default, storage is granted on a best-effort basis: Chromium-based browsers and Firefox only evict data under storage pressure, but Safari deletes all script-writable storage after seven days without user interaction if the app runs in a browser tab. Web apps added to the home screen are exempt from this rule.

To reduce the risk of eviction, request persistent storage with [navigator.storage.persist()](https://developer.mozilla.org/en-US/docs/Web/API/StorageManager/persist) at a moment of meaningful user engagement (for example, after sign-in or after the user has saved data for the first time). Note that persistence is granted at the browser's discretion and reduces the risk of eviction, but is not an absolute guarantee.

## Configuration[¶](#configuration "Permanent link")

No configuration required for this plugin.

## Usage[¶](#usage "Permanent link")

### Write and read a file in the app's sandbox[¶](#write-and-read-a-file-in-the-apps-sandbox "Permanent link")

`[](#%5F%5Fcodelineno-5-1)import { Directory, Encoding, FileManager } from '@capawesome-team/capacitor-file-manager';
[](#%5F%5Fcodelineno-5-2)
[](#%5F%5Fcodelineno-5-3)const writeAndReadFile = async () => {
[](#%5F%5Fcodelineno-5-4)  const { uri } = await FileManager.getUri({
[](#%5F%5Fcodelineno-5-5)    path: 'notes/todo.txt',
[](#%5F%5Fcodelineno-5-6)    directory: Directory.Data,
[](#%5F%5Fcodelineno-5-7)  });
[](#%5F%5Fcodelineno-5-8)  await FileManager.writeFile({
[](#%5F%5Fcodelineno-5-9)    uri,
[](#%5F%5Fcodelineno-5-10)    data: 'Hello, World!',
[](#%5F%5Fcodelineno-5-11)    encoding: Encoding.Utf8,
[](#%5F%5Fcodelineno-5-12)    recursive: true,
[](#%5F%5Fcodelineno-5-13)  });
[](#%5F%5Fcodelineno-5-14)  const { data } = await FileManager.readFile({ uri, encoding: Encoding.Utf8 });
[](#%5F%5Fcodelineno-5-15)  return data;
[](#%5F%5Fcodelineno-5-16)};
`

### Persist access to a picked directory[¶](#persist-access-to-a-picked-directory "Permanent link")

This requires version `8.1.0` or later of the [File Picker](https://capawesome.io/docs/sdks/capacitor/file-picker/) plugin, since `pickDirectory()` only returns a bookmark from that version on.

`[](#%5F%5Fcodelineno-6-1)import { FileManager } from '@capawesome-team/capacitor-file-manager';
[](#%5F%5Fcodelineno-6-2)import { FilePicker } from '@capawesome/capacitor-file-picker';
[](#%5F%5Fcodelineno-6-3)
[](#%5F%5Fcodelineno-6-4)const persistDirectoryAccess = async () => {
[](#%5F%5Fcodelineno-6-5)  const result = await FilePicker.pickDirectory();
[](#%5F%5Fcodelineno-6-6)  const { directory } = await FileManager.persistDirectoryAccess({
[](#%5F%5Fcodelineno-6-7)    uri: result.path,
[](#%5F%5Fcodelineno-6-8)    bookmark: result.bookmark,
[](#%5F%5Fcodelineno-6-9)  });
[](#%5F%5Fcodelineno-6-10)  return directory;
[](#%5F%5Fcodelineno-6-11)};
[](#%5F%5Fcodelineno-6-12)
[](#%5F%5Fcodelineno-6-13)const getPersistedDirectories = async () => {
[](#%5F%5Fcodelineno-6-14)  // Call this on app start and use the returned URIs
[](#%5F%5Fcodelineno-6-15)  // instead of storing them yourself.
[](#%5F%5Fcodelineno-6-16)  const { directories } = await FileManager.getPersistedDirectories();
[](#%5F%5Fcodelineno-6-17)  return directories;
[](#%5F%5Fcodelineno-6-18)};
`

### Work inside a persisted directory[¶](#work-inside-a-persisted-directory "Permanent link")

`[](#%5F%5Fcodelineno-7-1)import { Directory, FileManager } from '@capawesome-team/capacitor-file-manager';
[](#%5F%5Fcodelineno-7-2)
[](#%5F%5Fcodelineno-7-3)const exportIntoPickedDirectory = async (directoryUri: string) => {
[](#%5F%5Fcodelineno-7-4)  // Construct the URI of a file inside the picked directory.
[](#%5F%5Fcodelineno-7-5)  const { uri: targetUri } = await FileManager.getUri({
[](#%5F%5Fcodelineno-7-6)    path: 'exports/report.pdf',
[](#%5F%5Fcodelineno-7-7)    parentUri: directoryUri,
[](#%5F%5Fcodelineno-7-8)  });
[](#%5F%5Fcodelineno-7-9)  // Copy a file from the app's sandbox into the picked directory.
[](#%5F%5Fcodelineno-7-10)  const { uri: sourceUri } = await FileManager.getUri({
[](#%5F%5Fcodelineno-7-11)    path: 'report.pdf',
[](#%5F%5Fcodelineno-7-12)    directory: Directory.Cache,
[](#%5F%5Fcodelineno-7-13)  });
[](#%5F%5Fcodelineno-7-14)  const { uri } = await FileManager.copyFile({ uri: sourceUri, toUri: targetUri });
[](#%5F%5Fcodelineno-7-15)  return uri;
[](#%5F%5Fcodelineno-7-16)};
[](#%5F%5Fcodelineno-7-17)
[](#%5F%5Fcodelineno-7-18)const listPickedDirectory = async (directoryUri: string) => {
[](#%5F%5Fcodelineno-7-19)  const { entries } = await FileManager.readDirectory({ uri: directoryUri });
[](#%5F%5Fcodelineno-7-20)  return entries;
[](#%5F%5Fcodelineno-7-21)};
`

### Copy a directory with progress and cancellation[¶](#copy-a-directory-with-progress-and-cancellation "Permanent link")

`` [](#%5F%5Fcodelineno-8-1)import { FileManager } from '@capawesome-team/capacitor-file-manager';
[](#%5F%5Fcodelineno-8-2)
[](#%5F%5Fcodelineno-8-3)const copyDirectoryWithProgress = async (uri: string, toUri: string) => {
[](#%5F%5Fcodelineno-8-4)  await FileManager.addListener('operationProgress', (event) => {
[](#%5F%5Fcodelineno-8-5)    console.log(`Processed ${event.processedFiles} of ${event.totalFiles} files`);
[](#%5F%5Fcodelineno-8-6)  });
[](#%5F%5Fcodelineno-8-7)  await FileManager.copyDirectory({ uri, toUri, id: 'my-copy-operation' });
[](#%5F%5Fcodelineno-8-8)};
[](#%5F%5Fcodelineno-8-9)
[](#%5F%5Fcodelineno-8-10)const cancelCopy = async () => {
[](#%5F%5Fcodelineno-8-11)  await FileManager.cancelOperationById({ id: 'my-copy-operation' });
[](#%5F%5Fcodelineno-8-12)};
 ``

### Read a large file as a Blob[¶](#read-a-large-file-as-a-blob "Permanent link")

`[](#%5F%5Fcodelineno-9-1)import { FileManager } from '@capawesome-team/capacitor-file-manager';
[](#%5F%5Fcodelineno-9-2)
[](#%5F%5Fcodelineno-9-3)const readLargeFile = async (uri: string) => {
[](#%5F%5Fcodelineno-9-4)  // Streams the file without base64 overhead.
[](#%5F%5Fcodelineno-9-5)  const { blob } = await FileManager.readFileAsBlob({ uri });
[](#%5F%5Fcodelineno-9-6)  return blob;
[](#%5F%5Fcodelineno-9-7)};
`

### Verify a file with a checksum[¶](#verify-a-file-with-a-checksum "Permanent link")

`[](#%5F%5Fcodelineno-10-1)import { ChecksumAlgorithm, FileManager } from '@capawesome-team/capacitor-file-manager';
[](#%5F%5Fcodelineno-10-2)
[](#%5F%5Fcodelineno-10-3)const verifyFile = async (uri: string, expectedChecksum: string) => {
[](#%5F%5Fcodelineno-10-4)  const { checksum } = await FileManager.getFileChecksum({
[](#%5F%5Fcodelineno-10-5)    uri,
[](#%5F%5Fcodelineno-10-6)    algorithm: ChecksumAlgorithm.Sha256,
[](#%5F%5Fcodelineno-10-7)  });
[](#%5F%5Fcodelineno-10-8)  return checksum === expectedChecksum;
[](#%5F%5Fcodelineno-10-9)};
`

### Check the storage space[¶](#check-the-storage-space "Permanent link")

`[](#%5F%5Fcodelineno-11-1)import { FileManager } from '@capawesome-team/capacitor-file-manager';
[](#%5F%5Fcodelineno-11-2)
[](#%5F%5Fcodelineno-11-3)const checkStorage = async () => {
[](#%5F%5Fcodelineno-11-4)  const { freeBytes } = await FileManager.getDeviceStorageInfo();
[](#%5F%5Fcodelineno-11-5)  const { cacheBytes } = await FileManager.getAppStorageInfo();
[](#%5F%5Fcodelineno-11-6)  if (cacheBytes > 100_000_000) {
[](#%5F%5Fcodelineno-11-7)    await FileManager.clearCache();
[](#%5F%5Fcodelineno-11-8)  }
[](#%5F%5Fcodelineno-11-9)  return freeBytes;
[](#%5F%5Fcodelineno-11-10)};
`

## API[¶](#api "Permanent link")

* [appendFile(...)](#appendfile)
* [cancelOperationById(...)](#canceloperationbyid)
* [clearCache()](#clearcache)
* [clearDirectory(...)](#cleardirectory)
* [copyDirectory(...)](#copydirectory)
* [copyFile(...)](#copyfile)
* [createDirectory(...)](#createdirectory)
* [deleteDirectory(...)](#deletedirectory)
* [deleteFile(...)](#deletefile)
* [exists(...)](#exists)
* [getAppStorageInfo()](#getappstorageinfo)
* [getDeviceStorageInfo()](#getdevicestorageinfo)
* [getDirectorySize(...)](#getdirectorysize)
* [getFileChecksum(...)](#getfilechecksum)
* [getMetadata(...)](#getmetadata)
* [getPersistedDirectories()](#getpersisteddirectories)
* [getUri(...)](#geturi)
* [moveDirectory(...)](#movedirectory)
* [moveFile(...)](#movefile)
* [persistDirectoryAccess(...)](#persistdirectoryaccess)
* [readDirectory(...)](#readdirectory)
* [readFile(...)](#readfile)
* [readFileAsBlob(...)](#readfileasblob)
* [releaseDirectoryAccess(...)](#releasedirectoryaccess)
* [truncateFile(...)](#truncatefile)
* [writeFile(...)](#writefile)
* [addListener('operationProgress', ...)](#addlisteneroperationprogress-)
* [removeAllListeners()](#removealllisteners)
* [Interfaces](#interfaces)
* [Enums](#enums)

### appendFile(...)[¶](#appendfile "Permanent link")

`[](#%5F%5Fcodelineno-12-1)appendFile(options: AppendFileOptions) => Promise<void>
`

Append data to a file.

If the file does not exist, it is created.

| Param       | Type                                    |
| ----------- | --------------------------------------- |
| **options** | [AppendFileOptions](#appendfileoptions) |

**Since:** 0.0.1

---

### cancelOperationById(...)[¶](#canceloperationbyid "Permanent link")

`[](#%5F%5Fcodelineno-13-1)cancelOperationById(options: CancelOperationByIdOptions) => Promise<void>
`

Cancel a running directory operation.

The promise of the canceled operation is rejected with the `OPERATION_CANCELED` error code. Files that were already processed remain in place.

| Param       | Type                                                      |
| ----------- | --------------------------------------------------------- |
| **options** | [CancelOperationByIdOptions](#canceloperationbyidoptions) |

**Since:** 0.0.1

---

### clearCache()[¶](#clearcache "Permanent link")

`[](#%5F%5Fcodelineno-14-1)clearCache() => Promise<void>
`

Delete the contents of the app's cache directory.

**Since:** 0.0.1

---

### clearDirectory(...)[¶](#cleardirectory "Permanent link")

`[](#%5F%5Fcodelineno-15-1)clearDirectory(options: ClearDirectoryOptions) => Promise<void>
`

Delete the contents of a directory but keep the directory itself.

Unlike deleting and recreating the directory, this preserves persisted access to the directory.

| Param       | Type                                            |
| ----------- | ----------------------------------------------- |
| **options** | [ClearDirectoryOptions](#cleardirectoryoptions) |

**Since:** 0.0.1

---

### copyDirectory(...)[¶](#copydirectory "Permanent link")

`[](#%5F%5Fcodelineno-16-1)copyDirectory(options: CopyDirectoryOptions) => Promise<CopyDirectoryResult>
`

Copy a directory recursively.

Reports progress via the `operationProgress` event and can be canceled with `cancelOperationById(...)`.

| Param       | Type                                          |
| ----------- | --------------------------------------------- |
| **options** | [CopyDirectoryOptions](#copydirectoryoptions) |

**Returns:** `Promise<[CopyDirectoryResult](#copydirectoryresult)>`

**Since:** 0.0.1

---

### copyFile(...)[¶](#copyfile "Permanent link")

`[](#%5F%5Fcodelineno-17-1)copyFile(options: CopyFileOptions) => Promise<CopyFileResult>
`

Copy a file.

The file is copied natively with constant memory usage.

| Param       | Type                                |
| ----------- | ----------------------------------- |
| **options** | [CopyFileOptions](#copyfileoptions) |

**Returns:** `Promise<[CopyFileResult](#copyfileresult)>`

**Since:** 0.0.1

---

### createDirectory(...)[¶](#createdirectory "Permanent link")

`[](#%5F%5Fcodelineno-18-1)createDirectory(options: CreateDirectoryOptions) => Promise<CreateDirectoryResult>
`

Create a new directory.

| Param       | Type                                              |
| ----------- | ------------------------------------------------- |
| **options** | [CreateDirectoryOptions](#createdirectoryoptions) |

**Returns:** `Promise<[CreateDirectoryResult](#createdirectoryresult)>`

**Since:** 0.0.1

---

### deleteDirectory(...)[¶](#deletedirectory "Permanent link")

`[](#%5F%5Fcodelineno-19-1)deleteDirectory(options: DeleteDirectoryOptions) => Promise<void>
`

Delete a directory.

Reports progress via the `operationProgress` event and can be canceled with `cancelOperationById(...)`.

| Param       | Type                                              |
| ----------- | ------------------------------------------------- |
| **options** | [DeleteDirectoryOptions](#deletedirectoryoptions) |

**Since:** 0.0.1

---

### deleteFile(...)[¶](#deletefile "Permanent link")

`[](#%5F%5Fcodelineno-20-1)deleteFile(options: DeleteFileOptions) => Promise<void>
`

Delete a file.

| Param       | Type                                    |
| ----------- | --------------------------------------- |
| **options** | [DeleteFileOptions](#deletefileoptions) |

**Since:** 0.0.1

---

### exists(...)[¶](#exists "Permanent link")

`[](#%5F%5Fcodelineno-21-1)exists(options: ExistsOptions) => Promise<ExistsResult>
`

Check whether a file or directory exists.

| Param       | Type                            |
| ----------- | ------------------------------- |
| **options** | [ExistsOptions](#existsoptions) |

**Returns:** `Promise<[ExistsResult](#existsresult)>`

**Since:** 0.0.1

---

### getAppStorageInfo()[¶](#getappstorageinfo "Permanent link")

`[](#%5F%5Fcodelineno-22-1)getAppStorageInfo() => Promise<GetAppStorageInfoResult>
`

Get the storage usage of the app itself.

**Returns:** `Promise<[GetAppStorageInfoResult](#getappstorageinforesult)>`

**Since:** 0.0.1

---

### getDeviceStorageInfo()[¶](#getdevicestorageinfo "Permanent link")

`[](#%5F%5Fcodelineno-23-1)getDeviceStorageInfo() => Promise<GetDeviceStorageInfoResult>
`

Get the total and free storage space of the device.

**Returns:** `Promise<[GetDeviceStorageInfoResult](#getdevicestorageinforesult)>`

**Since:** 0.0.1

---

### getDirectorySize(...)[¶](#getdirectorysize "Permanent link")

`[](#%5F%5Fcodelineno-24-1)getDirectorySize(options: GetDirectorySizeOptions) => Promise<GetDirectorySizeResult>
`

Get the total size of a directory and all of its contents.

| Param       | Type                                                |
| ----------- | --------------------------------------------------- |
| **options** | [GetDirectorySizeOptions](#getdirectorysizeoptions) |

**Returns:** `Promise<[GetDirectorySizeResult](#getdirectorysizeresult)>`

**Since:** 0.0.1

---

### getFileChecksum(...)[¶](#getfilechecksum "Permanent link")

`[](#%5F%5Fcodelineno-25-1)getFileChecksum(options: GetFileChecksumOptions) => Promise<GetFileChecksumResult>
`

Calculate the checksum of a file.

The file is processed in a streaming manner with constant memory usage, so it works for files of any size.

Only available on Android and iOS.

| Param       | Type                                              |
| ----------- | ------------------------------------------------- |
| **options** | [GetFileChecksumOptions](#getfilechecksumoptions) |

**Returns:** `Promise<[GetFileChecksumResult](#getfilechecksumresult)>`

**Since:** 0.0.1

---

### getMetadata(...)[¶](#getmetadata "Permanent link")

`[](#%5F%5Fcodelineno-26-1)getMetadata(options: GetMetadataOptions) => Promise<GetMetadataResult>
`

Get the metadata of a file or directory.

| Param       | Type                                      |
| ----------- | ----------------------------------------- |
| **options** | [GetMetadataOptions](#getmetadataoptions) |

**Returns:** `Promise<[GetMetadataResult](#getmetadataresult)>`

**Since:** 0.0.1

---

### getPersistedDirectories()[¶](#getpersisteddirectories "Permanent link")

`[](#%5F%5Fcodelineno-27-1)getPersistedDirectories() => Promise<GetPersistedDirectoriesResult>
`

Get all directories with persisted access.

Stale entries are refreshed or pruned when this method is called. Call this method on app start and use the returned URIs instead of storing them yourself, since they may change between app launches.

Only available on Android and iOS.

**Returns:** `Promise<[GetPersistedDirectoriesResult](#getpersisteddirectoriesresult)>`

**Since:** 0.0.1

---

### getUri(...)[¶](#geturi "Permanent link")

`[](#%5F%5Fcodelineno-28-1)getUri(options: GetUriOptions) => Promise<GetUriResult>
`

Construct the URI of a file or directory.

Provide either `directory` to resolve the path in a well-known sandbox directory or `parentUri` to resolve the path relative to any directory URI. The file or directory does not need to exist.

| Param       | Type                            |
| ----------- | ------------------------------- |
| **options** | [GetUriOptions](#geturioptions) |

**Returns:** `Promise<[GetUriResult](#geturiresult)>`

**Since:** 0.0.1

---

### moveDirectory(...)[¶](#movedirectory "Permanent link")

`[](#%5F%5Fcodelineno-29-1)moveDirectory(options: MoveDirectoryOptions) => Promise<MoveDirectoryResult>
`

Move a directory.

Reports progress via the `operationProgress` event and can be canceled with `cancelOperationById(...)`.

| Param       | Type                                          |
| ----------- | --------------------------------------------- |
| **options** | [MoveDirectoryOptions](#movedirectoryoptions) |

**Returns:** `Promise<[MoveDirectoryResult](#movedirectoryresult)>`

**Since:** 0.0.1

---

### moveFile(...)[¶](#movefile "Permanent link")

`[](#%5F%5Fcodelineno-30-1)moveFile(options: MoveFileOptions) => Promise<MoveFileResult>
`

Move a file.

A move within the same directory is performed as a rename.

| Param       | Type                                |
| ----------- | ----------------------------------- |
| **options** | [MoveFileOptions](#movefileoptions) |

**Returns:** `Promise<[MoveFileResult](#movefileresult)>`

**Since:** 0.0.1

---

### persistDirectoryAccess(...)[¶](#persistdirectoryaccess "Permanent link")

`[](#%5F%5Fcodelineno-31-1)persistDirectoryAccess(options: PersistDirectoryAccessOptions) => Promise<PersistDirectoryAccessResult>
`

Persist access to a directory across app launches.

Pass the values returned by `FilePicker.pickDirectory()` of the Capawesome File Picker plugin. Afterwards, the URIs of the persisted directory and its contents are accepted by every method of this plugin.

Requires version `8.1.0` or later of the Capawesome File Picker plugin.

Only available on Android and iOS.

| Param       | Type                                                            |
| ----------- | --------------------------------------------------------------- |
| **options** | [PersistDirectoryAccessOptions](#persistdirectoryaccessoptions) |

**Returns:** `Promise<[PersistDirectoryAccessResult](#persistdirectoryaccessresult)>`

**Since:** 0.0.1

---

### readDirectory(...)[¶](#readdirectory "Permanent link")

`[](#%5F%5Fcodelineno-32-1)readDirectory(options: ReadDirectoryOptions) => Promise<ReadDirectoryResult>
`

Read the entries of a directory.

| Param       | Type                                          |
| ----------- | --------------------------------------------- |
| **options** | [ReadDirectoryOptions](#readdirectoryoptions) |

**Returns:** `Promise<[ReadDirectoryResult](#readdirectoryresult)>`

**Since:** 0.0.1

---

### readFile(...)[¶](#readfile "Permanent link")

`[](#%5F%5Fcodelineno-33-1)readFile(options: ReadFileOptions) => Promise<ReadFileResult>
`

Read data from a file.

Use `offset` and `length` to read a byte range of a large file.

**Attention**: To read a whole large file, use `readFileAsBlob(...)` instead, since it streams the file and avoids out-of-memory (OOM) issues. The `readFile(...)`method reads the whole file into memory and encodes it as base64.

| Param       | Type                                |
| ----------- | ----------------------------------- |
| **options** | [ReadFileOptions](#readfileoptions) |

**Returns:** `Promise<[ReadFileResult](#readfileresult)>`

**Since:** 0.0.1

---

### readFileAsBlob(...)[¶](#readfileasblob "Permanent link")

`[](#%5F%5Fcodelineno-34-1)readFileAsBlob(options: ReadFileAsBlobOptions) => Promise<ReadFileAsBlobResult>
`

Read a file as a `Blob`.

This is the recommended way to read large files. The file is streamed without base64 encoding overhead.

| Param       | Type                                            |
| ----------- | ----------------------------------------------- |
| **options** | [ReadFileAsBlobOptions](#readfileasbloboptions) |

**Returns:** `Promise<[ReadFileAsBlobResult](#readfileasblobresult)>`

**Since:** 0.0.1

---

### releaseDirectoryAccess(...)[¶](#releasedirectoryaccess "Permanent link")

`[](#%5F%5Fcodelineno-35-1)releaseDirectoryAccess(options: ReleaseDirectoryAccessOptions) => Promise<void>
`

Release persisted access to a directory.

Only available on Android and iOS.

| Param       | Type                                                            |
| ----------- | --------------------------------------------------------------- |
| **options** | [ReleaseDirectoryAccessOptions](#releasedirectoryaccessoptions) |

**Since:** 0.0.1

---

### truncateFile(...)[¶](#truncatefile "Permanent link")

`[](#%5F%5Fcodelineno-36-1)truncateFile(options: TruncateFileOptions) => Promise<void>
`

Truncate a file to a given size.

| Param       | Type                                        |
| ----------- | ------------------------------------------- |
| **options** | [TruncateFileOptions](#truncatefileoptions) |

**Since:** 0.0.1

---

### writeFile(...)[¶](#writefile "Permanent link")

`[](#%5F%5Fcodelineno-37-1)writeFile(options: WriteFileOptions) => Promise<WriteFileResult>
`

Write data to a file.

If the file does not exist, it is created. If no `position` is provided, the existing content is overwritten.

| Param       | Type                                  |
| ----------- | ------------------------------------- |
| **options** | [WriteFileOptions](#writefileoptions) |

**Returns:** `Promise<[WriteFileResult](#writefileresult)>`

**Since:** 0.0.1

---

### addListener('operationProgress', ...)[¶](#addlisteneroperationprogress "Permanent link")

`[](#%5F%5Fcodelineno-38-1)addListener(eventName: 'operationProgress', listenerFunc: (event: OperationProgressEvent) => void) => Promise<PluginListenerHandle>
`

Called when a directory operation reports progress.

| Param            | Type                                                               |
| ---------------- | ------------------------------------------------------------------ |
| **eventName**    | 'operationProgress'                                                |
| **listenerFunc** | (event: [OperationProgressEvent](#operationprogressevent)) => void |

**Returns:** `Promise<[PluginListenerHandle](#pluginlistenerhandle)>`

**Since:** 0.0.1

---

### removeAllListeners()[¶](#removealllisteners "Permanent link")

`[](#%5F%5Fcodelineno-39-1)removeAllListeners() => Promise<void>
`

Remove all listeners for this plugin.

**Since:** 0.0.1

---

### Interfaces[¶](#interfaces "Permanent link")

#### AppendFileOptions[¶](#appendfileoptions "Permanent link")

| Prop         | Type                  | Description                      | Default         | Since |
| ------------ | --------------------- | -------------------------------- | --------------- | ----- |
| **data**     | string                | The data to append to the file.  |                 | 0.0.1 |
| **encoding** | [Encoding](#encoding) | The encoding of the data option. | Encoding.Base64 | 0.0.1 |
| **uri**      | string                | The URI of the file.             |                 | 0.0.1 |

#### CancelOperationByIdOptions[¶](#canceloperationbyidoptions "Permanent link")

| Prop   | Type   | Description                                | Since |
| ------ | ------ | ------------------------------------------ | ----- |
| **id** | string | The identifier of the operation to cancel. | 0.0.1 |

#### ClearDirectoryOptions[¶](#cleardirectoryoptions "Permanent link")

| Prop    | Type   | Description               | Since |
| ------- | ------ | ------------------------- | ----- |
| **uri** | string | The URI of the directory. | 0.0.1 |

#### CopyDirectoryResult[¶](#copydirectoryresult "Permanent link")

| Prop    | Type   | Description                       | Since |
| ------- | ------ | --------------------------------- | ----- |
| **uri** | string | The URI of the created directory. | 0.0.1 |

#### CopyDirectoryOptions[¶](#copydirectoryoptions "Permanent link")

| Prop      | Type   | Description                                                                                                               | Since |
| --------- | ------ | ------------------------------------------------------------------------------------------------------------------------- | ----- |
| **id**    | string | A unique identifier for this operation. It can be used to cancel the operation and to correlate operationProgress events. | 0.0.1 |
| **toUri** | string | The URI of the directory to copy to.                                                                                      | 0.0.1 |
| **uri**   | string | The URI of the directory to copy.                                                                                         | 0.0.1 |

#### CopyFileResult[¶](#copyfileresult "Permanent link")

| Prop    | Type   | Description                                                                                                                                            | Since |
| ------- | ------ | ------------------------------------------------------------------------------------------------------------------------------------------------------ | ----- |
| **uri** | string | The URI of the created file. This may differ from the requested URI, for example if the document provider had to rename the file to avoid a collision. | 0.0.1 |

#### CopyFileOptions[¶](#copyfileoptions "Permanent link")

| Prop      | Type   | Description                     | Since |
| --------- | ------ | ------------------------------- | ----- |
| **toUri** | string | The URI of the file to copy to. | 0.0.1 |
| **uri**   | string | The URI of the file to copy.    | 0.0.1 |

#### CreateDirectoryResult[¶](#createdirectoryresult "Permanent link")

| Prop    | Type   | Description                       | Since |
| ------- | ------ | --------------------------------- | ----- |
| **uri** | string | The URI of the created directory. | 0.0.1 |

#### CreateDirectoryOptions[¶](#createdirectoryoptions "Permanent link")

| Prop          | Type    | Description                                          | Default | Since |
| ------------- | ------- | ---------------------------------------------------- | ------- | ----- |
| **recursive** | boolean | Whether or not to create missing parent directories. | true    | 0.0.1 |
| **uri**       | string  | The URI of the directory to create.                  |         | 0.0.1 |

#### DeleteDirectoryOptions[¶](#deletedirectoryoptions "Permanent link")

| Prop          | Type    | Description                                                                                                                                          | Default | Since |
| ------------- | ------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- | ------- | ----- |
| **id**        | string  | A unique identifier for this operation. It can be used to cancel the operation and to correlate operationProgress events.                            |         | 0.0.1 |
| **recursive** | boolean | Whether or not to delete the contents of the directory. If false, the call is rejected with the NOT\_EMPTY error code if the directory is not empty. | false   | 0.0.1 |
| **uri**       | string  | The URI of the directory to delete.                                                                                                                  |         | 0.0.1 |

#### DeleteFileOptions[¶](#deletefileoptions "Permanent link")

| Prop    | Type   | Description                    | Since |
| ------- | ------ | ------------------------------ | ----- |
| **uri** | string | The URI of the file to delete. | 0.0.1 |

#### ExistsResult[¶](#existsresult "Permanent link")

| Prop       | Type    | Description                                  | Since |
| ---------- | ------- | -------------------------------------------- | ----- |
| **exists** | boolean | Whether or not the file or directory exists. | 0.0.1 |

#### ExistsOptions[¶](#existsoptions "Permanent link")

| Prop    | Type   | Description                       | Since |
| ------- | ------ | --------------------------------- | ----- |
| **uri** | string | The URI of the file or directory. | 0.0.1 |

#### GetAppStorageInfoResult[¶](#getappstorageinforesult "Permanent link")

| Prop           | Type           | Description                                                                     | Since |
| -------------- | -------------- | ------------------------------------------------------------------------------- | ----- |
| **cacheBytes** | number         | The size of the app's cache in bytes.                                           | 0.0.1 |
| **dataBytes**  | number \| null | The size of the app's data in bytes. Is null if the platform cannot provide it. | 0.0.1 |

#### GetDeviceStorageInfoResult[¶](#getdevicestorageinforesult "Permanent link")

| Prop                 | Type           | Description                                                                                                                                                                  | Since |
| -------------------- | -------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----- |
| **allocatableBytes** | number \| null | The number of bytes the app is allowed to allocate, including space the system can free up for the app (e.g. by deleting caches). Is null if the platform cannot provide it. | 0.0.1 |
| **freeBytes**        | number         | The number of free bytes.                                                                                                                                                    | 0.0.1 |
| **totalBytes**       | number         | The number of total bytes.                                                                                                                                                   | 0.0.1 |

#### GetDirectorySizeResult[¶](#getdirectorysizeresult "Permanent link")

| Prop     | Type   | Description                                                       | Since |
| -------- | ------ | ----------------------------------------------------------------- | ----- |
| **size** | number | The total size of the directory and all of its contents in bytes. | 0.0.1 |

#### GetDirectorySizeOptions[¶](#getdirectorysizeoptions "Permanent link")

| Prop    | Type   | Description               | Since |
| ------- | ------ | ------------------------- | ----- |
| **uri** | string | The URI of the directory. | 0.0.1 |

#### GetFileChecksumResult[¶](#getfilechecksumresult "Permanent link")

| Prop         | Type   | Description                                                 | Since |
| ------------ | ------ | ----------------------------------------------------------- | ----- |
| **checksum** | string | The checksum of the file as a lowercase hexadecimal string. | 0.0.1 |

#### GetFileChecksumOptions[¶](#getfilechecksumoptions "Permanent link")

| Prop          | Type                                    | Description                                        | Since |
| ------------- | --------------------------------------- | -------------------------------------------------- | ----- |
| **algorithm** | [ChecksumAlgorithm](#checksumalgorithm) | The algorithm to use for the checksum calculation. | 0.0.1 |
| **uri**       | string                                  | The URI of the file.                               | 0.0.1 |

#### GetMetadataResult[¶](#getmetadataresult "Permanent link")

| Prop           | Type                    | Description                                                                                                                               | Since |
| -------------- | ----------------------- | ----------------------------------------------------------------------------------------------------------------------------------------- | ----- |
| **createdAt**  | number \| null          | The timestamp when the file or directory was created, in milliseconds since the epoch. Is null if the platform does not provide it.       | 0.0.1 |
| **mimeType**   | string \| null          | The MIME type of the file. Is null for directories or if the type is unknown.                                                             | 0.0.1 |
| **modifiedAt** | number \| null          | The timestamp when the file or directory was last modified, in milliseconds since the epoch. Is null if the platform does not provide it. | 0.0.1 |
| **name**       | string                  | The name of the file or directory.                                                                                                        | 0.0.1 |
| **size**       | number                  | The size of the file in bytes. Is always 0 for directories.                                                                               | 0.0.1 |
| **type**       | [EntryType](#entrytype) | The type of the entry.                                                                                                                    | 0.0.1 |
| **uri**        | string                  | The canonical URI of the file or directory.                                                                                               | 0.0.1 |

#### GetMetadataOptions[¶](#getmetadataoptions "Permanent link")

| Prop    | Type   | Description                       | Since |
| ------- | ------ | --------------------------------- | ----- |
| **uri** | string | The URI of the file or directory. | 0.0.1 |

#### GetPersistedDirectoriesResult[¶](#getpersisteddirectoriesresult "Permanent link")

| Prop            | Type                   | Description                            | Since |
| --------------- | ---------------------- | -------------------------------------- | ----- |
| **directories** | PersistedDirectory\[\] | The directories with persisted access. | 0.0.1 |

#### PersistedDirectory[¶](#persisteddirectory "Permanent link")

| Prop     | Type   | Description                                                                                                                                                                                                        | Since |
| -------- | ------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ----- |
| **name** | string | The name of the directory.                                                                                                                                                                                         | 0.0.1 |
| **uri**  | string | The URI of the directory. The URI identifies the persisted directory in all methods of this plugin. It may change between app launches, so do not store it yourself but retrieve it via getPersistedDirectories(). | 0.0.1 |

#### GetUriResult[¶](#geturiresult "Permanent link")

| Prop    | Type   | Description                       | Since |
| ------- | ------ | --------------------------------- | ----- |
| **uri** | string | The URI of the file or directory. | 0.0.1 |

#### GetUriOptions[¶](#geturioptions "Permanent link")

| Prop          | Type                    | Description                                                                                                                                                                                                                                                                         | Since |
| ------------- | ----------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----- |
| **directory** | [Directory](#directory) | The well-known sandbox directory to resolve the path in. Either this option or parentUri must be provided.                                                                                                                                                                          | 0.0.1 |
| **parentUri** | string                  | The URI of the directory to resolve the path in. Either this option or directory must be provided. On Android, constructing the URI of a non-existing entry inside a persisted directory is only supported for path-structured document providers such as the local device storage. | 0.0.1 |
| **path**      | string                  | The path to resolve.                                                                                                                                                                                                                                                                | 0.0.1 |

#### MoveDirectoryResult[¶](#movedirectoryresult "Permanent link")

| Prop    | Type   | Description                     | Since |
| ------- | ------ | ------------------------------- | ----- |
| **uri** | string | The URI of the moved directory. | 0.0.1 |

#### MoveDirectoryOptions[¶](#movedirectoryoptions "Permanent link")

| Prop      | Type   | Description                                                                                                               | Since |
| --------- | ------ | ------------------------------------------------------------------------------------------------------------------------- | ----- |
| **id**    | string | A unique identifier for this operation. It can be used to cancel the operation and to correlate operationProgress events. | 0.0.1 |
| **toUri** | string | The URI of the directory to move to.                                                                                      | 0.0.1 |
| **uri**   | string | The URI of the directory to move.                                                                                         | 0.0.1 |

#### MoveFileResult[¶](#movefileresult "Permanent link")

| Prop    | Type   | Description                                                                                                                                          | Since |
| ------- | ------ | ---------------------------------------------------------------------------------------------------------------------------------------------------- | ----- |
| **uri** | string | The URI of the moved file. This may differ from the requested URI, for example if the document provider had to rename the file to avoid a collision. | 0.0.1 |

#### MoveFileOptions[¶](#movefileoptions "Permanent link")

| Prop      | Type   | Description                     | Since |
| --------- | ------ | ------------------------------- | ----- |
| **toUri** | string | The URI of the file to move to. | 0.0.1 |
| **uri**   | string | The URI of the file to move.    | 0.0.1 |

#### PersistDirectoryAccessResult[¶](#persistdirectoryaccessresult "Permanent link")

| Prop          | Type                                      | Description              | Since |
| ------------- | ----------------------------------------- | ------------------------ | ----- |
| **directory** | [PersistedDirectory](#persisteddirectory) | The persisted directory. | 0.0.1 |

#### PersistDirectoryAccessOptions[¶](#persistdirectoryaccessoptions "Permanent link")

| Prop         | Type   | Description                                                                                                                                                                                                  | Since |
| ------------ | ------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ----- |
| **bookmark** | string | The base64-encoded security-scoped bookmark of the directory as returned by FilePicker.pickDirectory(). Only returned by version 8.1.0 or later of the Capawesome File Picker plugin. Only available on iOS. | 0.0.1 |
| **uri**      | string | The URI of the directory as returned by FilePicker.pickDirectory() (named path in its result).                                                                                                               | 0.0.1 |

#### ReadDirectoryResult[¶](#readdirectoryresult "Permanent link")

| Prop        | Type               | Description                   | Since |
| ----------- | ------------------ | ----------------------------- | ----- |
| **entries** | DirectoryEntry\[\] | The entries of the directory. | 0.0.1 |

#### DirectoryEntry[¶](#directoryentry "Permanent link")

| Prop           | Type                    | Description                                                                                                                   | Since |
| -------------- | ----------------------- | ----------------------------------------------------------------------------------------------------------------------------- | ----- |
| **createdAt**  | number \| null          | The timestamp when the entry was created, in milliseconds since the epoch. Is null if the platform does not provide it.       | 0.0.1 |
| **mimeType**   | string \| null          | The MIME type of the entry. Is null for directories or if the type is unknown.                                                | 0.0.1 |
| **modifiedAt** | number \| null          | The timestamp when the entry was last modified, in milliseconds since the epoch. Is null if the platform does not provide it. | 0.0.1 |
| **name**       | string                  | The name of the entry.                                                                                                        | 0.0.1 |
| **size**       | number                  | The size of the entry in bytes. Is always 0 for directories.                                                                  | 0.0.1 |
| **type**       | [EntryType](#entrytype) | The type of the entry.                                                                                                        | 0.0.1 |
| **uri**        | string                  | The URI of the entry.                                                                                                         | 0.0.1 |

#### ReadDirectoryOptions[¶](#readdirectoryoptions "Permanent link")

| Prop       | Type   | Description                                                                    | Default | Since |
| ---------- | ------ | ------------------------------------------------------------------------------ | ------- | ----- |
| **limit**  | number | The maximum number of entries to return. By default, all entries are returned. |         | 0.0.1 |
| **offset** | number | The number of entries to skip.                                                 | 0       | 0.0.1 |
| **uri**    | string | The URI of the directory to read.                                              |         | 0.0.1 |

#### ReadFileResult[¶](#readfileresult "Permanent link")

| Prop     | Type   | Description                                                                | Since |
| -------- | ------ | -------------------------------------------------------------------------- | ----- |
| **data** | string | The data read from the file, encoded as requested via the encoding option. | 0.0.1 |

#### ReadFileOptions[¶](#readfileoptions "Permanent link")

| Prop         | Type                  | Description                                                                   | Default         | Since |
| ------------ | --------------------- | ----------------------------------------------------------------------------- | --------------- | ----- |
| **encoding** | [Encoding](#encoding) | The encoding of the returned data.                                            | Encoding.Base64 | 0.0.1 |
| **length**   | number                | The maximum number of bytes to read. By default, the file is read to the end. |                 | 0.0.1 |
| **offset**   | number                | The zero-based byte offset at which to start reading.                         | 0               | 0.0.1 |
| **uri**      | string                | The URI of the file to read.                                                  |                 | 0.0.1 |

#### ReadFileAsBlobResult[¶](#readfileasblobresult "Permanent link")

| Prop     | Type | Description                         | Since |
| -------- | ---- | ----------------------------------- | ----- |
| **blob** | Blob | The contents of the file as a Blob. | 0.0.1 |

#### ReadFileAsBlobOptions[¶](#readfileasbloboptions "Permanent link")

| Prop    | Type   | Description                  | Since |
| ------- | ------ | ---------------------------- | ----- |
| **uri** | string | The URI of the file to read. | 0.0.1 |

#### ReleaseDirectoryAccessOptions[¶](#releasedirectoryaccessoptions "Permanent link")

| Prop    | Type   | Description                         | Since |
| ------- | ------ | ----------------------------------- | ----- |
| **uri** | string | The URI of the persisted directory. | 0.0.1 |

#### TruncateFileOptions[¶](#truncatefileoptions "Permanent link")

| Prop     | Type   | Description                                | Default | Since |
| -------- | ------ | ------------------------------------------ | ------- | ----- |
| **size** | number | The size in bytes to truncate the file to. | 0       | 0.0.1 |
| **uri**  | string | The URI of the file to truncate.           |         | 0.0.1 |

#### WriteFileResult[¶](#writefileresult "Permanent link")

| Prop    | Type   | Description                                                                                                                                            | Since |
| ------- | ------ | ------------------------------------------------------------------------------------------------------------------------------------------------------ | ----- |
| **uri** | string | The URI of the written file. This may differ from the requested URI, for example if the document provider had to rename the file to avoid a collision. | 0.0.1 |

#### WriteFileOptions[¶](#writefileoptions "Permanent link")

| Prop          | Type                  | Description                                                                                                                                                 | Default         | Since |
| ------------- | --------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------- | ----- |
| **data**      | string                | The data to write to the file.                                                                                                                              |                 | 0.0.1 |
| **encoding**  | [Encoding](#encoding) | The encoding of the data option.                                                                                                                            | Encoding.Base64 | 0.0.1 |
| **position**  | number                | The zero-based byte offset at which to start writing. Existing content outside of the written range is preserved. If not provided, the file is overwritten. |                 | 0.0.1 |
| **recursive** | boolean               | Whether or not to create missing parent directories.                                                                                                        | false           | 0.0.1 |
| **uri**       | string                | The URI of the file to write.                                                                                                                               |                 | 0.0.1 |

#### PluginListenerHandle[¶](#pluginlistenerhandle "Permanent link")

| Prop       | Type                |
| ---------- | ------------------- |
| **remove** | () => Promise<void> |

#### OperationProgressEvent[¶](#operationprogressevent "Permanent link")

| Prop               | Type                            | Description                                                                                                         | Since |
| ------------------ | ------------------------------- | ------------------------------------------------------------------------------------------------------------------- | ----- |
| **id**             | string \| null                  | The identifier of the operation as provided in the options of the operation. Is null if no identifier was provided. | 0.0.1 |
| **operationType**  | [OperationType](#operationtype) | The type of the operation.                                                                                          | 0.0.1 |
| **processedBytes** | number                          | The number of bytes that have been processed so far.                                                                | 0.0.1 |
| **processedFiles** | number                          | The number of files that have been processed so far.                                                                | 0.0.1 |
| **totalBytes**     | number \| null                  | The total number of bytes to process. Is null if the total is not yet known.                                        | 0.0.1 |
| **totalFiles**     | number \| null                  | The total number of files to process. Is null if the total is not yet known.                                        | 0.0.1 |

### Enums[¶](#enums "Permanent link")

#### Encoding[¶](#encoding "Permanent link")

| Members    | Value    | Description      | Since |
| ---------- | -------- | ---------------- | ----- |
| **Base64** | 'BASE64' | Base64 encoding. | 0.0.1 |
| **Utf8**   | 'UTF8'   | UTF-8 encoding.  | 0.0.1 |

#### ChecksumAlgorithm[¶](#checksumalgorithm "Permanent link")

| Members    | Value    | Description | Since |
| ---------- | -------- | ----------- | ----- |
| **Md5**    | 'MD5'    | MD5.        | 0.0.1 |
| **Sha1**   | 'SHA1'   | SHA-1.      | 0.0.1 |
| **Sha256** | 'SHA256' | SHA-256.    | 0.0.1 |

#### EntryType[¶](#entrytype "Permanent link")

| Members       | Value       | Description  | Since |
| ------------- | ----------- | ------------ | ----- |
| **Directory** | 'DIRECTORY' | A directory. | 0.0.1 |
| **File**      | 'FILE'      | A file.      | 0.0.1 |

#### Directory[¶](#directory "Permanent link")

| Members            | Value                | Description                                                                                                                                                                                                                                                                                                                       | Since |
| ------------------ | -------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----- |
| **Cache**          | 'CACHE'              | The cache directory. The system may delete this directory to free up disk space. On Android, it maps to getCacheDir(). On iOS, it maps to Library/Caches. On Web, it maps to opfs://cache.                                                                                                                                        | 0.0.1 |
| **Data**           | 'DATA'               | The directory holding application files. On Android, it maps to getFilesDir(). On iOS, it maps to Documents. On Web, it maps to opfs://data.                                                                                                                                                                                      | 0.0.1 |
| **Documents**      | 'DOCUMENTS'          | The documents directory. On Android, it maps to the app-specific documents directory (getExternalFilesDir(DIRECTORY\_DOCUMENTS)). Unlike @capacitor/filesystem, no storage permissions are required. Use persisted directories to access user-visible folders. On iOS, it maps to Documents. On Web, it maps to opfs://documents. | 0.0.1 |
| **External**       | 'EXTERNAL'           | The external directory. On Android, it maps to getExternalFilesDir(null). On iOS, it maps to Documents. On Web, it maps to opfs://external.                                                                                                                                                                                       | 0.0.1 |
| **ExternalCache**  | 'EXTERNAL\_CACHE'    | The external cache directory. On Android, it maps to getExternalCacheDir(). On iOS, it maps to Library/Caches. On Web, it maps to opfs://external-cache.                                                                                                                                                                          | 0.0.1 |
| **Library**        | 'LIBRARY'            | The library directory. On Android, it maps to getFilesDir(). On iOS, it maps to Library. On Web, it maps to opfs://library.                                                                                                                                                                                                       | 0.0.1 |
| **LibraryNoCloud** | 'LIBRARY\_NO\_CLOUD' | The library directory without cloud backup. On Android, it maps to getFilesDir(). On iOS, it maps to Library/NoCloud. On Web, it maps to opfs://library-no-cloud.                                                                                                                                                                 | 0.0.1 |
| **Temporary**      | 'TEMPORARY'          | The temporary directory. On Android, it maps to getCacheDir(). On iOS, it maps to tmp. On Web, it maps to opfs://temporary.                                                                                                                                                                                                       | 0.0.1 |

#### OperationType[¶](#operationtype "Permanent link")

| Members    | Value    | Description         | Since |
| ---------- | -------- | ------------------- | ----- |
| **Copy**   | 'COPY'   | A copy operation.   | 0.0.1 |
| **Delete** | 'DELETE' | A delete operation. | 0.0.1 |
| **Move**   | 'MOVE'   | A move operation.   | 0.0.1 |

## Migration from `@capacitor/filesystem`[¶](#migration-from-capacitorfilesystem "Permanent link")

This plugin is a replacement for the sandbox operations of `@capacitor/filesystem`. Instead of passing `path` and `directory` to every method, construct the URI once with `getUri(...)` and pass it to any method:

`[](#%5F%5Fcodelineno-40-1)// Before (@capacitor/filesystem)
[](#%5F%5Fcodelineno-40-2)const result = await Filesystem.readFile({ path: 'text.txt', directory: Directory.Data });
[](#%5F%5Fcodelineno-40-3)
[](#%5F%5Fcodelineno-40-4)// After (@capawesome-team/capacitor-file-manager)
[](#%5F%5Fcodelineno-40-5)const { uri } = await FileManager.getUri({ path: 'text.txt', directory: Directory.Data });
[](#%5F%5Fcodelineno-40-6)const result = await FileManager.readFile({ uri });
`

The `Directory` enum members have the same names and values as in `@capacitor/filesystem`.

| @capacitor/filesystem           | @capawesome-team/capacitor-file-manager                                                      |
| ------------------------------- | -------------------------------------------------------------------------------------------- |
| appendFile(...)                 | getUri(...) \+ appendFile(...)                                                               |
| checkPermissions()              | Not needed. Persisted directories replace the legacy storage permissions.                    |
| copy(...)                       | getUri(...) \+ copyFile(...) or copyDirectory(...)                                           |
| deleteFile(...)                 | getUri(...) \+ deleteFile(...)                                                               |
| downloadFile(...)               | [File Transfer](https://capawesome.io/docs/sdks/capacitor/file-transfer/) plugin             |
| getUri(...)                     | getUri(...)                                                                                  |
| mkdir(...)                      | getUri(...) \+ createDirectory(...)                                                          |
| readdir(...)                    | getUri(...) \+ readDirectory(...)                                                            |
| readFile(...)                   | getUri(...) \+ readFile(...)                                                                 |
| readFileInChunks(...)           | readFileAsBlob(...)                                                                          |
| rename(...)                     | getUri(...) \+ moveFile(...) or moveDirectory(...)                                           |
| requestPermissions()            | Not needed. Persisted directories replace the legacy storage permissions.                    |
| rmdir(...)                      | getUri(...) \+ deleteDirectory(...)                                                          |
| stat(...)                       | getUri(...) \+ getMetadata(...)                                                              |
| writeFile(...)                  | getUri(...) \+ writeFile(...)                                                                |
| Directory.ExternalStorage       | Persisted directories. Direct access to the shared storage is blocked on Android 11+ anyway. |
| Encoding.ASCII / Encoding.UTF16 | Dropped. Use Encoding.Utf8 or Encoding.Base64.                                               |

## Working with other plugins[¶](#working-with-other-plugins "Permanent link")

* **Sandbox URIs** (`file://`): Fully compatible with all file-related Capawesome plugins (File Opener, File Compressor, Zip, ...) — pass the URI wherever a `path` is expected.
* **Persisted directory URIs** (`content://` on Android, security-scoped `file://` on iOS): Not accepted by plugins that only support plain file paths. To bridge, copy the file into a sandbox directory (for example `Directory.Cache`) with `copyFile(...)`, operate on it there, and optionally copy it back.
* **Web URIs** (`opfs://`): Internal to this plugin. Use `readFileAsBlob(...)` to hand the data to other web APIs.

## FAQ[¶](#faq "Permanent link")

### How is this plugin different from other similar plugins?[¶](#how-is-this-plugin-different-from-other-similar-plugins "Permanent link")

It works with the user's own storage, not just your app's sandbox: pick a folder once and keep read and write access to it across app launches on Android and iOS, then run manager-grade operations there — recursive copy, move and delete with progress, checksums, and directory sizing. It also reports device and app storage usage, can clear the cache, and streams large files into your web code without base64 overhead. On the web, files live in the Origin Private File System with real directories and random access instead of base64 blobs in IndexedDB. If you only need to read and write files inside your app's own sandbox, a simpler approach is enough; if you need durable access to user-picked folders and integrity-checked file operations, this plugin is built for it. Backed by dedicated support.

### How do I read a whole large file?[¶](#how-do-i-read-a-whole-large-file "Permanent link")

Use `readFileAsBlob(...)`, which streams the file into a `Blob` without base64 overhead. Do not read a large file by calling `readFile(...)` with an increasing `offset` in a loop — on some storage providers every call has to skip to the offset again, which makes the loop drastically slower with every iteration. The `offset` and `length` options are intended for targeted reads, like a file header or a byte range.

### Can I use this plugin with Ionic, React, Vue or Angular?[¶](#can-i-use-this-plugin-with-ionic-react-vue-or-angular "Permanent link")

Yes, the plugin is framework-agnostic. It works in any Capacitor app regardless of the web framework, including Ionic with Angular, React, or Vue, as well as plain JavaScript projects.

## Related Plugins[¶](#related-plugins "Permanent link")

* [File Picker](https://capawesome.io/docs/sdks/capacitor/file-picker/): Let the user pick the files and directories that this plugin operates on.
* [File Opener](https://capawesome.io/docs/sdks/capacitor/file-opener/): Open files in the matching app on the device.
* [File Transfer](https://capawesome.io/docs/sdks/capacitor/file-transfer/): Download and upload files, even while the app is in the background.
* [Zip](https://capawesome.io/docs/sdks/capacitor/zip/): Compress and decompress files and directories.

## Newsletter[¶](#newsletter "Permanent link")

Stay up to date with the latest news and updates about the Capawesome, Capacitor, and Ionic ecosystem by subscribing to our [Capawesome Newsletter](https://cloud.capawesome.io/newsletter/).

## Changelog[¶](#changelog "Permanent link")

See [CHANGELOG.md](https://github.com/capawesome-team/capacitor-plugins/blob/main/packages/file-manager/CHANGELOG.md).

## Breaking Changes[¶](#breaking-changes "Permanent link")

See [BREAKING.md](https://github.com/capawesome-team/capacitor-plugins/blob/main/packages/file-manager/BREAKING.md).

## License[¶](#license "Permanent link")

See [LICENSE](https://github.com/capawesome-team/capacitor-plugins/blob/main/packages/file-manager/LICENSE).

August 15, 2026 

Back to top

```json
{"@context": "https://schema.org", "@graph": [{"@type": "TechArticle", "@id": "https://capawesome.io/docs/sdks/capacitor/file-manager/#article", "headline": "Capacitor File Manager Plugin", "name": "Capacitor File Manager Plugin", "description": "Capacitor File Manager plugin to read, write, copy, and move files and directories on Android, iOS, and Web, with persistent access to picked folders.", "inLanguage": "en", "url": "https://capawesome.io/docs/sdks/capacitor/file-manager/", "mainEntityOfPage": "https://capawesome.io/docs/sdks/capacitor/file-manager/", "author": {"@type": "Organization", "name": "Capawesome", "url": "https://capawesome.io", "logo": {"@type": "ImageObject", "url": "https://capawesome.io/assets/images/logo.svg"}}, "publisher": {"@type": "Organization", "name": "Capawesome", "url": "https://capawesome.io", "logo": {"@type": "ImageObject", "url": "https://capawesome.io/assets/images/logo.svg"}}, "about": {"@id": "https://capawesome.io/docs/sdks/capacitor/file-manager/#software"}}, {"@type": "SoftwareSourceCode", "@id": "https://capawesome.io/docs/sdks/capacitor/file-manager/#software", "name": "Capacitor File Manager Plugin", "description": "Capacitor File Manager plugin to read, write, copy, and move files and directories on Android, iOS, and Web, with persistent access to picked folders.", "url": "https://capawesome.io/docs/sdks/capacitor/file-manager/", "programmingLanguage": "TypeScript", "runtimePlatform": "Capacitor", "codeRepository": "https://github.com/capawesome-team", "author": {"@type": "Organization", "name": "Capawesome", "url": "https://capawesome.io", "logo": {"@type": "ImageObject", "url": "https://capawesome.io/assets/images/logo.svg"}}, "publisher": {"@type": "Organization", "name": "Capawesome", "url": "https://capawesome.io", "logo": {"@type": "ImageObject", "url": "https://capawesome.io/assets/images/logo.svg"}}}]}
{"@context": "https://schema.org", "@type": "FAQPage", "mainEntity": [{"@type": "Question", "name": "How is this plugin different from other similar plugins?", "acceptedAnswer": {"@type": "Answer", "text": "It works with the user's own storage, not just your app's sandbox: pick a folder once and keep read and write access to it across app launches on Android and iOS, then run manager-grade operations there — recursive copy, move and delete with progress, checksums, and directory sizing. It also reports device and app storage usage, can clear the cache, and streams large files into your web code without base64 overhead. On the web, files live in the Origin Private File System with real directories and random access instead of base64 blobs in IndexedDB. If you only need to read and write files inside your app's own sandbox, a simpler approach is enough; if you need durable access to user-picked folders and integrity-checked file operations, this plugin is built for it. Backed by dedicated support."}}, {"@type": "Question", "name": "How do I read a whole large file?", "acceptedAnswer": {"@type": "Answer", "text": "Use readFileAsBlob(...), which streams the file into a Blob without base64 overhead. Do not read a large file by calling readFile(...) with an increasing offset in a loop — on some storage providers every call has to skip to the offset again, which makes the loop drastically slower with every iteration. The offset and length options are intended for targeted reads, like a file header or a byte range."}}, {"@type": "Question", "name": "Can I use this plugin with Ionic, React, Vue or Angular?", "acceptedAnswer": {"@type": "Answer", "text": "Yes, the plugin is framework-agnostic. It works in any Capacitor app regardless of the web framework, including Ionic with Angular, React, or Vue, as well as plain JavaScript projects."}}], "url": "https://capawesome.io/docs/sdks/capacitor/file-manager/"}
```
