Adapters
Compare the 49 storage backends Files SDK supports, from Cloudflare R2 and S3 to Vercel Blob and the local filesystem, by what each one can do.
An adapter connects Files to one storage backend. Each is its own subpath export (files-sdk/r2, files-sdk/gcs, …) and runs the same methods, so switching providers means swapping the adapter and nothing else. Its provider’s SDK is an optional peer dependency, so the adapters you never import are never bundled.
Each adapter’s page covers installation, the options it takes, and a compatibility table for anything the provider does differently. The provider catalog has the same list as data, with the environment variables each adapter reads.
Recommended adapters
These providers help maintain Files SDK by sponsoring its development.
Other adapters
- Akamai Cloud Object Storageakamai
- Alibaba Cloud OSSalibaba
- Appwriteappwrite
- Archilarchil
- Azure Blob Storageazure
- Backblaze B2backblaze-b2
- Boxbox
- Bun S3bun-s3
- Bunny Storagebunny-storage
- Cloudinarycloudinary
- Convexconvex
- DigitalOcean Spacesdigitalocean-spaces
- Dropboxdropbox
- Exoscale Object Storageexoscale
- Filebasefilebase
- Filesystemfs
- Firebase Storagefirebase-storage
- FTPftp
- Google Cloud Storagegcs
- Google Drivegoogle-drive
- Hetzner Object Storagehetzner
- IBM Cloud Object Storageibm-cos
- iDrive e2idrive-e2
- In-Memorymemory
- MinIOminio
- Neonneon
- Netlify Blobsnetlify-blobs
- OneDriveonedrive
- Oracle Cloud Object Storageoracle-cloud
- OVHcloud Object Storageovhcloud
- PocketBasepocketbase
- Railway Bucketsrailway
- RustFSrustfs
- S3s3
- S3 (fetch)s3-fetch
- Scaleway Object Storagescaleway
- SFTPsftp
- SharePointsharepoint
- Storjstorj
- Supabase Storagesupabase
- Tencent Cloud Object Storagetencent
- Tigristigris
- UploadThinguploadthing
- Vercel Blobvercel-blob
- Vultr Object Storagevultr
- Wasabiwasabi
- WebDAVwebdav
- Yandex Object Storageyandex
Compare adapters
Every adapter runs the same methods. Where providers differ is in the options those methods take: a byte range, a folder listing, custom metadata, and so on. An adapter that can’t do something throws before calling the provider, instead of quietly ignoring the option. The table shows what each adapter supports with its default options. At runtime, files.capabilities reports the same flags for the adapter you configured.
| Adapter | Range reads | Folders | Metadata | Cache-Control | Resumable uploads | Server-side copy | Upload progress | Storage events | Signed URLs | Direct uploads | Conditional writes |
|---|---|---|---|---|---|---|---|---|---|---|---|
| Cloudflare R2Recommended | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | 7 days | Yes | No |
| Akamai Cloud Object Storage | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | 7 days | Size-capped | No |
| Alibaba Cloud OSS | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | 7 days | Size-capped | No |
| Appwrite | No | No | No | No | Yes | No | No | Yes | No | No | No |
| Archil | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | 7 days | Size-capped | No |
| Azure Blob Storage | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No |
| Backblaze B2 | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | 7 days | Yes | No |
| Box | Yes | Yes | No | No | Yes | Yes | No | Yes | Provider-set | No | No |
| Bun S3 | Yes | Yes | No | No | Yes | No | No | No | 7 days | Yes | No |
| Bunny Storage | No | No | No | No | No | No | No | No | No | No | No |
| Cloudinary | Yes | Yes | No | No | Yes | No | No | Yes | No | Yes | No |
| Convex | No | No | No | No | No | No | No | No | No | No | No |
| DigitalOcean Spaces | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | 7 days | Size-capped | No |
| Dropbox | Yes | Yes | No | No | Yes | Yes | No | No | Provider-set | No | No |
| Exoscale Object Storage | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | 7 days | Size-capped | No |
| Filebase | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | 7 days | Size-capped | No |
| Filesystem | Yes | Yes | Yes | Yes | Yes | Yes | No | No | No | No | No |
| Firebase Storage | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | 7 days | Size-capped | No |
| FTP | Yes | Yes | No | No | Yes | No | Yes | No | No | No | No |
| Google Cloud Storage | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | 7 days | Size-capped | No |
| Google Drive | Yes | Yes | Yes | No | Yes | Yes | No | No | No | Yes | No |
| Hetzner Object Storage | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | 7 days | Size-capped | No |
| IBM Cloud Object Storage | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | 7 days | Size-capped | No |
| iDrive e2 | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | 7 days | Size-capped | No |
| In-Memory | Yes | Yes | Yes | Yes | Yes | Yes | No | Yes | No | No | No |
| MinIO | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | 7 days | Size-capped | No |
| Neon | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | 7 days | Size-capped | No |
| Netlify Blobs | No | Yes | Yes | Yes | No | No | No | No | No | No | No |
| OneDrive | Yes | Yes | No | No | Yes | Yes | No | No | No | Yes | No |
| Oracle Cloud Object Storage | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | 7 days | Size-capped | No |
| OVHcloud Object Storage | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | 7 days | Size-capped | No |
| PocketBase | Yes | No | No | No | No | No | No | No | Provider-set | No | No |
| Railway Buckets | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | 7 days | Size-capped | No |
| RustFS | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | 7 days | Size-capped | No |
| S3 | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | 7 days | Size-capped | Yes |
| S3 (fetch) | Yes | Yes | Yes | Yes | No | Yes | No | Yes | 7 days | Yes | No |
| Scaleway Object Storage | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | 7 days | Size-capped | No |
| SFTP | Yes | Yes | No | No | Yes | No | No | No | No | No | No |
| SharePoint | Yes | Yes | No | No | Yes | Yes | No | No | No | Yes | No |
| Storj | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | 7 days | Size-capped | No |
| Supabase Storage | No | Yes | Yes | Yes | Yes | Yes | No | Yes | Yes | Yes | No |
| Tencent Cloud Object Storage | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | 7 days | Size-capped | No |
| Tigris | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | 7 days | Size-capped | No |
| UploadThing | Yes | No | No | No | No | No | No | No | No | Yes | No |
| Vercel Blob | Yes | Yes | No | Yes | Yes | Yes | Yes | No | No | Size-capped | No |
| Vultr Object Storage | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | 7 days | Size-capped | No |
| Wasabi | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | 7 days | Size-capped | No |
| WebDAV | Yes | Yes | No | No | No | Yes | No | No | No | No | No |
| Yandex Object Storage | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | 7 days | Size-capped | No |
- Range reads:
download(key, { range })fetches only the bytes you ask for. - Folders:
list({ delimiter: "/" })returns one level of a hierarchy, with subfolders as prefixes. - Metadata and Cache-Control:
upload()stores custom metadata or aCache-Controlheader on the object. - Resumable uploads:
upload()with anUploadControlcan pause, resume, and pick up in a later process. See resumable uploads. - Server-side copy:
copy()happens inside the provider, without downloading and re-uploading the body. - Upload progress: the provider reports byte-level progress for every body. Without it,
onProgressstill reports bytes for stream bodies, and start and finish for buffered ones. - Signed URLs:
url()returns a link that expires, up to the lifetime shown. Some adapters sign only in some modes: Vercel Blob only withaccess: "private", Dropbox unlesspublicByDefaultis set, and R2’s Workers binding only with HTTP credentials as well. - Conditional writes: uploads that apply only if the key is absent, or still has a given ETag. The
s3()adapter uses S3’s conditional requests on AWS; against another S3-compatible endpoint, opt in withconditional: truewhere the provider supports them. See conditional operations.