@capgo/capacitor-file

January 31, 2026 · View on GitHub

Capgo - Instant updates for capacitor

➡️ Get Instant updates for your App with Capgo

Missing a feature? We'll build the plugin for you 💪

Capacitor plugin for file system operations. A modern replacement for cordova-plugin-file with a compatible API.

Why Capacitor File?

A reliable native file system plugin built for Capacitor apps with advanced features not available in the official Filesystem plugin:

  • Partial file reading - Read specific portions of files with offset and length parameters (great for large files)
  • Random access writes - Write at specific byte positions with position parameter
  • Cordova compatible API - Familiar methods like requestFileSystem(), resolveLocalFileSystemURL(), getFile(), and getDirectory()
  • All platform directories - Access Documents, Library, Cache, External storage and more
  • Progress events - Monitor read/write operations with real-time progress updates
  • Free and open source - No paid services required

Perfect for apps that need to work with large files, migrate from Cordova, or require random access file operations.

Documentation

The most complete doc is available here: https://capgo.app/docs/plugins/file/

Compatibility

Plugin versionCapacitor compatibilityMaintained
v8.*.*v8.*.*
v7.*.*v7.*.*On demand
v6.*.*v6.*.*
v5.*.*v5.*.*

Note: The major version of this plugin follows the major version of Capacitor. Use the version that matches your Capacitor installation (e.g., plugin v8 for Capacitor 8). Only the latest major version is actively maintained.

Install

npm install @capgo/capacitor-file
npx cap sync

API

Capacitor File Plugin Implements file system operations similar to the Cordova File plugin

requestFileSystem(...)

requestFileSystem(options: RequestFileSystemOptions) => Promise<FileSystem>

Request a file system.

ParamTypeDescription
optionsRequestFileSystemOptions- File system request options

Returns: Promise<FileSystem>


resolveLocalFileSystemURL(...)

resolveLocalFileSystemURL(options: ResolveURLOptions) => Promise<Entry>

Resolve a file URL to an entry.

ParamTypeDescription
optionsResolveURLOptions- URL to resolve

Returns: Promise<Entry>


getFile(...)

getFile(options: GetFileOptions) => Promise<FileEntry>

Get a file entry.

ParamTypeDescription
optionsGetFileOptions- File path and options

Returns: Promise<FileEntry>


getDirectory(...)

getDirectory(options: GetDirectoryOptions) => Promise<DirectoryEntry>

Get a directory entry.

ParamTypeDescription
optionsGetDirectoryOptions- Directory path and options

Returns: Promise<DirectoryEntry>


readFile(...)

readFile(options: ReadFileOptions) => Promise<ReadFileResult>

Read a file as text or base64.

ParamTypeDescription
optionsReadFileOptions- Read options

Returns: Promise<ReadFileResult>


readAsDataURL(...)

readAsDataURL(options: ReadFileOptions) => Promise<{ data: string; }>

Read a file as a data URL (base64 with MIME type prefix).

ParamTypeDescription
optionsReadFileOptions- Read options

Returns: Promise<{ data: string; }>


writeFile(...)

writeFile(options: WriteFileOptions) => Promise<WriteFileResult>

Write data to a file.

ParamTypeDescription
optionsWriteFileOptions- Write options

Returns: Promise<WriteFileResult>


appendFile(...)

appendFile(options: WriteFileOptions) => Promise<WriteFileResult>

Append data to a file.

ParamTypeDescription
optionsWriteFileOptions- Write options (append is forced to true)

Returns: Promise<WriteFileResult>


deleteFile(...)

deleteFile(options: DeleteFileOptions) => Promise<void>

Delete a file.

ParamTypeDescription
optionsDeleteFileOptions- Delete options

mkdir(...)

mkdir(options: MkdirOptions) => Promise<void>

Create a directory.

ParamTypeDescription
optionsMkdirOptions- Directory creation options

rmdir(...)

rmdir(options: DeleteDirectoryOptions) => Promise<void>

Delete a directory.

ParamTypeDescription
optionsDeleteDirectoryOptions- Delete options

readdir(...)

readdir(options: ReaddirOptions) => Promise<ReaddirResult>

Read directory contents.

ParamTypeDescription
optionsReaddirOptions- Read options

Returns: Promise<ReaddirResult>


stat(...)

stat(options: StatOptions) => Promise<StatResult>

Get metadata about a file or directory.

ParamTypeDescription
optionsStatOptions- Stat options

Returns: Promise<StatResult>


getMetadata(...)

getMetadata(options: StatOptions) => Promise<Metadata>

Get metadata about a file or directory. Alias for stat().

ParamTypeDescription
optionsStatOptions- Stat options

Returns: Promise<Metadata>


rename(...)

rename(options: RenameOptions) => Promise<void>

Rename or move a file or directory.

ParamTypeDescription
optionsRenameOptions- Rename options

move(...)

move(options: RenameOptions) => Promise<void>

Move a file or directory. Alias for rename().

ParamTypeDescription
optionsRenameOptions- Move options

copy(...)

copy(options: CopyOptions) => Promise<CopyResult>

Copy a file or directory.

ParamTypeDescription
optionsCopyOptions- Copy options

Returns: Promise<CopyResult>


exists(...)

exists(options: ExistsOptions) => Promise<ExistsResult>

Check if a file or directory exists.

ParamTypeDescription
optionsExistsOptions- Check options

Returns: Promise<ExistsResult>


getUri(...)

getUri(options: GetUriOptions) => Promise<GetUriResult>

Get the URI for a file.

ParamTypeDescription
optionsGetUriOptions- URI options

Returns: Promise<GetUriResult>


truncate(...)

truncate(options: TruncateOptions) => Promise<void>

Truncate a file to a specified size.

ParamTypeDescription
optionsTruncateOptions- Truncate options

getDirectories()

getDirectories() => Promise<FileDirectories>

Get all known file system directories.

Returns: Promise<FileDirectories>


getFreeDiskSpace()

getFreeDiskSpace() => Promise<{ free: number; }>

Get the free disk space in bytes.

Returns: Promise<{ free: number; }>


addListener('readProgress', ...)

addListener(eventName: 'readProgress', listenerFunc: (progress: ProgressEvent) => void) => Promise<PluginListenerHandle>

Listen for read progress events.

ParamTypeDescription
eventName'readProgress'- Must be 'readProgress'
listenerFunc(progress: ProgressEvent) => void- Callback receiving progress updates

Returns: Promise<PluginListenerHandle>


addListener('writeProgress', ...)

addListener(eventName: 'writeProgress', listenerFunc: (progress: ProgressEvent) => void) => Promise<PluginListenerHandle>

Listen for write progress events.

ParamTypeDescription
eventName'writeProgress'- Must be 'writeProgress'
listenerFunc(progress: ProgressEvent) => void- Callback receiving progress updates

Returns: Promise<PluginListenerHandle>


removeAllListeners()

removeAllListeners() => Promise<void>

Remove all event listeners.


getPluginVersion()

getPluginVersion() => Promise<{ version: string; }>

Get the plugin version.

Returns: Promise<{ version: string; }>


checkPermissions()

checkPermissions() => Promise<FilePermissionStatus>

Check the current permission status for file operations. On Android, this checks for external storage permissions. On iOS and web, this always returns 'granted' as no special permissions are needed.

Returns: Promise<FilePermissionStatus>


requestPermissions(...)

requestPermissions(options?: PermissionRequestOptions | undefined) => Promise<FilePermissionStatus>

Request permissions for file operations. On Android, this requests external storage permissions needed for accessing files outside the app's private directories. On iOS and web, this always returns 'granted' as no special permissions are needed.

ParamTypeDescription
optionsPermissionRequestOptions- Optional configuration for the permission request

Returns: Promise<FilePermissionStatus>


Interfaces

FileSystem

Represents a file system

PropTypeDescription
namestringThe name of the file system
rootDirectoryEntryThe root directory of the file system

DirectoryEntry

Represents a directory entry

PropTypeDescription
isFilefalseTrue if this is a file
isDirectorytrueTrue if this is a directory

RequestFileSystemOptions

Options for requesting a file system

PropTypeDescription
typeFileSystemTypeThe type of file system to request
sizenumberRequested size in bytes (may not be enforced on all platforms)

Entry

Represents a file or directory entry

PropTypeDescription
isFilebooleanTrue if this is a file
isDirectorybooleanTrue if this is a directory
namestringThe name of the file or directory
fullPathstringThe full path relative to the filesystem root
nativeURLstringThe native file:// URI

ResolveURLOptions

Options for resolving a URL to an entry

PropTypeDescription
urlstringThe URL to resolve (file:// or cdvfile://)

FileEntry

Represents a file entry

PropTypeDescription
isFiletrueTrue if this is a file
isDirectoryfalseTrue if this is a directory

GetFileOptions

Options for getting a file

PropTypeDescription
pathstringPath to the file
directoryDirectoryBase directory
optionsGetOptionsOptions for creating the file

GetOptions

Options for creating or getting files/directories

PropTypeDescription
createbooleanCreate the file/directory if it doesn't exist
exclusivebooleanIf true and create is true, throw error if file/directory already exists

GetDirectoryOptions

Options for getting a directory

PropTypeDescription
pathstringPath to the directory
directoryDirectoryBase directory
optionsGetOptionsOptions for creating the directory

ReadFileResult

Result of reading a file

PropTypeDescription
datastringFile contents as string (text) or base64 (binary)

ReadFileOptions

Options for reading a file

PropTypeDescription
pathstringPath to the file
directoryDirectoryBase directory
encodingEncodingEncoding for text files (omit for binary/base64)
offsetnumberByte offset to start reading from (default: 0)
lengthnumberNumber of bytes to read (default: read to end of file)

WriteFileResult

Result of writing a file

PropTypeDescription
uristringThe URI of the written file

WriteFileOptions

Options for writing a file

PropTypeDescription
pathstringPath to the file
directoryDirectoryBase directory
datastringData to write (string for text, base64 for binary)
encodingEncodingEncoding for text files
appendbooleanIf true, append to existing file instead of overwriting
recursivebooleanCreate intermediate directories if they don't exist
positionnumberByte position to start writing at (for random access writes). If not specified, writes from beginning or appends based on 'append' flag

DeleteFileOptions

Options for deleting a file or directory

PropTypeDescription
pathstringPath to the file or directory
directoryDirectoryBase directory

MkdirOptions

Options for creating a directory

PropTypeDescription
pathstringPath to the directory
directoryDirectoryBase directory
recursivebooleanCreate intermediate directories if they don't exist

DeleteDirectoryOptions

Options for deleting a directory recursively

PropTypeDescription
pathstringPath to the directory
directoryDirectoryBase directory
recursivebooleanIf true, delete contents recursively

ReaddirResult

Result of reading a directory

PropTypeDescription
entriesEntry[]List of entries in the directory

ReaddirOptions

Options for reading a directory

PropTypeDescription
pathstringPath to the directory
directoryDirectoryBase directory

StatResult

Result of getting file/directory information

PropTypeDescription
type'file' | 'directory'Type: 'file' or 'directory'
sizenumberSize in bytes
ctimenumberCreation time (if available)
mtimenumberLast modification time
uristringThe URI

StatOptions

Options for getting file information

PropTypeDescription
pathstringPath to the file or directory
directoryDirectoryBase directory

Metadata

Represents metadata about a file or directory

PropTypeDescription
modificationTimenumberLast modification date
sizenumberSize in bytes (0 for directories)

RenameOptions

Options for renaming/moving a file or directory

PropTypeDescription
fromstringCurrent path
tostringNew path
directoryDirectoryBase directory for 'from' path
toDirectoryDirectoryBase directory for 'to' path

CopyResult

Result of copy operation

PropTypeDescription
uristringThe URI of the copied file

CopyOptions

Options for copying a file or directory

PropTypeDescription
fromstringSource path
tostringDestination path
directoryDirectoryBase directory for source
toDirectoryDirectoryBase directory for destination

ExistsResult

Result of existence check

PropTypeDescription
existsbooleanTrue if the file or directory exists
type'file' | 'directory'Type if exists: 'file' or 'directory'

ExistsOptions

Options for checking if a file or directory exists

PropTypeDescription
pathstringPath to check
directoryDirectoryBase directory

GetUriResult

Result of getting a URI

PropTypeDescription
uristringThe native URI

GetUriOptions

Options for getting the URI of a file

PropTypeDescription
pathstringPath to the file
directoryDirectoryBase directory

TruncateOptions

Options for truncating a file

PropTypeDescription
pathstringPath to the file
directoryDirectoryBase directory
sizenumberSize to truncate to (default: 0)

FileDirectories

Known file system directories exposed by the plugin

PropTypeDescription
applicationDirectorystringApplication installation directory (read-only)
applicationStorageDirectorystringApplication storage directory root
dataDirectorystringPersistent private data directory
cacheDirectorystringCache directory
externalRootDirectorystringExternal root directory (Android)
externalApplicationStorageDirectorystringExternal application storage directory (Android)
externalDataDirectorystringExternal data directory (Android)
externalCacheDirectorystringExternal cache directory (Android)
documentsDirectorystringDocuments directory (iOS)
syncedDataDirectorystringSynced data directory (iOS iCloud)
libraryDirectorystringLibrary directory (iOS)
tempDirectorystringTemporary directory

PluginListenerHandle

PropType
remove() => Promise<void>

ProgressEvent

Progress event for file operations

PropTypeDescription
loadednumberBytes loaded so far
totalnumberTotal bytes (if known)
lengthComputablebooleanWhether total is computable

FilePermissionStatus

Permission status for file operations

PropTypeDescription
publicStoragePermissionStatePermission state for reading public/external storage

PermissionRequestOptions

Options for requesting permissions

PropTypeDescriptionDefault
showSettingsAlertbooleanIf true, shows an alert to open settings when permission is deniedfalse
titlestringTitle for the settings alert dialog
messagestringMessage for the settings alert dialog
openSettingsButtonTitlestringText for the "Open Settings" button
cancelButtonTitlestringText for the "Cancel" button

Type Aliases

PermissionState

'prompt' | 'prompt-with-rationale' | 'granted' | 'denied'

Enums

FileSystemType

MembersValue
TEMPORARY0
PERSISTENT1

Directory

MembersValueDescription
Documents'DOCUMENTS'The Documents directory (iOS) / files directory (Android) Persistent, user-visible, backed up
Data'DATA'The Data directory Persistent private data storage
Library'LIBRARY'The Library directory (iOS) / files directory (Android) Persistent but not visible to user
Cache'CACHE'The Cache directory Temporary cache, may be cleared by OS
External'EXTERNAL'External storage (Android only) SD card or external storage root
ExternalStorage'EXTERNAL_STORAGE'External storage data directory (Android only)
Application'APPLICATION'Application bundle/assets directory (read-only)

Encoding

MembersValue
UTF8'utf8'
ASCII'ascii'
UTF16'utf16'

Usage Examples

Reading a File

import { CapacitorFile, Directory, Encoding } from '@capgo/capacitor-file';

// Read as text
const result = await CapacitorFile.readFile({
  path: 'my-file.txt',
  directory: Directory.Documents,
  encoding: Encoding.UTF8,
});
console.log(result.data);

// Read as base64 (binary)
const binaryResult = await CapacitorFile.readFile({
  path: 'image.png',
  directory: Directory.Documents,
});
console.log(binaryResult.data); // base64 string

// Read partial file (offset and length) - great for large files!
const partialResult = await CapacitorFile.readFile({
  path: 'large-file.bin',
  directory: Directory.Documents,
  offset: 1024,    // Start at byte 1024
  length: 512,     // Read 512 bytes
});
console.log(partialResult.data); // base64 encoded chunk

Writing a File

import { CapacitorFile, Directory, Encoding } from '@capgo/capacitor-file';

// Write text
await CapacitorFile.writeFile({
  path: 'my-file.txt',
  directory: Directory.Documents,
  data: 'Hello, World!',
  encoding: Encoding.UTF8,
  recursive: true, // Create parent directories if needed
});

// Write binary (base64)
await CapacitorFile.writeFile({
  path: 'image.png',
  directory: Directory.Documents,
  data: 'iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNk+M9QDwADhgGAWjR9awAAAABJRU5ErkJggg==',
});

// Write at specific position (random access) - great for patching files!
await CapacitorFile.writeFile({
  path: 'data.bin',
  directory: Directory.Documents,
  data: 'PATCHED',
  encoding: Encoding.UTF8,
  position: 100,  // Write starting at byte 100
});

Creating and Reading Directories

import { CapacitorFile, Directory } from '@capgo/capacitor-file';

// Create a directory
await CapacitorFile.mkdir({
  path: 'my-folder/sub-folder',
  directory: Directory.Documents,
  recursive: true,
});

// Read directory contents
const result = await CapacitorFile.readdir({
  path: 'my-folder',
  directory: Directory.Documents,
});

for (const entry of result.entries) {
  console.log(`${entry.name} - ${entry.isFile ? 'file' : 'directory'}`);
}

Copying and Moving Files

import { CapacitorFile, Directory } from '@capgo/capacitor-file';

// Copy a file
await CapacitorFile.copy({
  from: 'original.txt',
  to: 'backup/original-copy.txt',
  directory: Directory.Documents,
  toDirectory: Directory.Documents,
});

// Move/rename a file
await CapacitorFile.rename({
  from: 'old-name.txt',
  to: 'new-name.txt',
  directory: Directory.Documents,
});

Checking File Existence

import { CapacitorFile, Directory } from '@capgo/capacitor-file';

const result = await CapacitorFile.exists({
  path: 'my-file.txt',
  directory: Directory.Documents,
});

if (result.exists) {
  console.log(`Found ${result.type}`);
}

Getting File Information

import { CapacitorFile, Directory } from '@capgo/capacitor-file';

const stat = await CapacitorFile.stat({
  path: 'my-file.txt',
  directory: Directory.Documents,
});

console.log(`Size: ${stat.size} bytes`);
console.log(`Modified: ${new Date(stat.mtime)}`);
console.log(`Type: ${stat.type}`);

Migration from cordova-plugin-file

This plugin provides similar functionality to cordova-plugin-file with a more modern API. Here's a quick comparison:

Cordova File PluginThis Plugin
window.resolveLocalFileSystemURL()CapacitorFile.resolveLocalFileSystemURL()
directoryEntry.getFile()CapacitorFile.getFile()
directoryEntry.getDirectory()CapacitorFile.getDirectory()
fileReader.readAsText()CapacitorFile.readFile({ encoding: Encoding.UTF8 })
fileReader.readAsDataURL()CapacitorFile.readAsDataURL()
fileWriter.write()CapacitorFile.writeFile()
entry.remove()CapacitorFile.deleteFile()
entry.moveTo()CapacitorFile.move()
entry.copyTo()CapacitorFile.copy()
directoryEntry.removeRecursively()CapacitorFile.rmdir({ recursive: true })
cordova.file.dataDirectoryDirectory.Data
cordova.file.documentsDirectoryDirectory.Documents
cordova.file.cacheDirectoryDirectory.Cache

License

MPL-2.0