Hayden Bleasel's unified storage SDK for TypeScript. One `Files` class for uploads, downloads, listing, signed URLs, and moving data across 48 storage backends, from S3 and R2 to GCS, Azure Blob, and the local filesystem.
You pick an adapter (files-sdk/s3, files-sdk/r2, files-sdk/gcs, ...) and the rest of the code stays the same, so changing providers means changing one import. Each provider's native SDK is an optional peer dependency, so you only install the ones you use, and files.raw hands you the native client when you need something the shared API doesn't cover. It also handles multipart and resumable uploads and search. Plugins add encryption, validation, caching, and versioning, a gateway with an authorize hook takes browser uploads, and a CLI and MCP server give scripts and agents the same operations.
v3 shipped on 9 October 2026. The new files-sdk/events plugin reads bucket notifications from S3, R2, GCS, Azure Event Grid, MinIO, and others and turns them into one created/deleted event shape with ids you can dedupe on. The gateway gained an onUploadComplete hook that runs on the server once per verified upload, so you no longer need a second endpoint that trusts the client to report it. Errors are split more cleanly too: Invalid and Unsupported are now separate from Provider, and only Provider is retried.
MIT licensed, ESM only, Node 22+ (also runs on Bun, Deno, and Cloudflare Workers). Repo: haydenbleasel/files-sdk