README.md

July 23, 2026 · View on GitHub

FluentStorage

Version Downloads GitHub contributors License

FluentStorage is free, but powered by your donations

One Interface To Rule Them All

FluentStorage is a fully managed polycloud .NET cloud storage library, optimized for speed. It helps you interface with multiple cloud providers from a single unified API, allowing you to switch cloud providers or support multiple cloud providers without any logic changes.

FluentStorage is released under the permissive MIT License, so it can be used in both proprietary and free/open source applications. FluentStorage is written entirely in C# with no configuration files required.

Features

  • Common features
    • Unified polycloud API for Object storage and Queue messaging across all cloud storage providers
    • Each provider has its own Nuget package with zero configuration required.
    • Fully asynchronous API with identical behavior across all providers
    • Unified path system that works across all providers
    • Object manipulation commands like create/get/set/move/delete
    • High-level API to easily upload/download files
    • High-level API to easily upload/download directories or virtual directories with rule-based filtering, progress callbacks, ability to only re-transfer changed files, and a detailed transfer report provided at the end
    • Easily work with any object using read streams, write streams and seekable streams
    • File streaming support to provide video playback on top of object stores
    • Fast server-side checksum computation for Azure, GCP, FTP, SFTP, with a fallback to client-side hashing for other providers
    • Object metadata, including reading and writing object info, length, timestamps, etc
    • Memory and local disk providers, so you can test on a local machine or access attached NAS/EBS drives
    • Large suite of integration tests and some performance tests that work across all providers, which are easily configured to run against your own clouds
  • Specially for object storage
    • Presigned URL generation, with AWS-friendly and Azure-friendly API signatures
    • Virtual directory manipulation
    • Object versions, including fetching older versions, deleting a version, etc
    • Object tagging, including adding and removing tags
    • Object storage tier or storage class modification
  • Specially for SFTP and FTP
    • Directory listing & Directory manipulation
    • Fast server-side file checksums using native FTP and SSH commands
    • SSH command engine for SFTP provider, to execute native SSH commands with automatic OS and utility detection
    • File permissions/CHMOD modification
    • Get detailed server metadata and OS information

Storage Providers

FluentStorage supports the following cloud storage providers:

Documentation LinkFactory classStore classGetClient() returns
AWS S3AwsS3StorageS3StoreAmazonS3Client
Azure BlobsAzureBlobStoreAzureBlobStoreBlobServiceClient
Azure FilesAzureFilesStorageAzureFilesStoreShareServiceClient
Azure DataLakeAzureDataLakeStorageAzureDataLakeStoreExtendedSdk
GCPGoogleCloudStorageGoogleCloudStoreStorageClient
MinIO (native)MinioStorageMinioStoreMinioClient
MinIO (S3)MinioS3StorageS3StoreAmazonS3Client
Cloudflare R2CloudflareR2StorageS3StoreAmazonS3Client
DigitalOcean SpacesDigitalOceanSpacesStorageS3StoreAmazonS3Client
WasabiWasabiStorageS3StoreAmazonS3Client
Backblaze B2BackblazeB2StorageS3StoreAmazonS3Client
HetznerHetznerStorageS3StoreAmazonS3Client
VultrVultrStorageS3StoreAmazonS3Client
MongoDB GridFSMongoGridStorageMongoGridStoreMongoClient
Alibaba OSSAlibabaStorageAlibabaStoreOssClient
FTPFtpStorageFtpStoreAsyncFtpClient
SFTPSftpStorageSftpStoreSftpClient
Local DiskStorageFactoryDiskStoreIFileSystem

To add support for a new S3-compatible provider, search for [ADD STORAGE PROVIDER] across all code files.

Polycloud API

This table shows the API supported by IStore across various cloud and server providers.

API
Azure
Blobs

Azure
Files

AWS S3

GCP

MinIO

Mongo

Alibaba

FTP

SFTP

Disk
System information
  GetClient ✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️
  GetServer ✔️✔️✔️✔️
File listing
  ListDirectory ✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️
  ListObjects ✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️
File upload / download
  GetObject ✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️
  SetObject ✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️
  GetBytes ✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️
  SetBytes ✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️
  DownloadObject ✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️
  UploadObject ✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️
  OpenRead ✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️
  OpenWrite ✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️
API Azure
Blobs
Azure
Files
AWS S3 GCP MinIO Mongo Alibaba FTP SFTP Disk
Directory upload / download
  DownloadDirectory ✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️
  UploadDirectory ✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️
Directory manipulation
  IsFileSystem ✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️
  DirectoryExists ✔️✔️✔️✔️✔️✔️✔️✔️✔️
  CreateDirectory ✔️✔️✔️✔️✔️✔️✔️✔️✔️
  DeleteDirectory ✔️✔️✔️✔️✔️✔️✔️✔️✔️
  MoveDirectory ✔️✔️✔️
API Azure
Blobs
Azure
Files
AWS S3 GCP MinIO Mongo Alibaba FTP SFTP Disk
File streaming / seeking
  IsSeekable ✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️
  OpenRange ✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️
  OpenSeekable ✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️
File manipulation
  ObjectExists ✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️
  MoveObject ✔️✔️✔️✔️✔️✔️✔️✔️✔️
  DeleteObject ✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️
  DeleteObjects ✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️
File metadata
  GetObjectChecksum ✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️
  GetObjectLength ✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️
  GetObjectInfo ✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️
  GetObjectsInfo ✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️
  SetObjectInfo ✔️✔️✔️✔️✔️✔️✔️✔️
  SetObjectsInfo ✔️✔️✔️✔️✔️✔️✔️✔️
API Azure
Blobs
Azure
Files
AWS S3 GCP MinIO Mongo Alibaba FTP SFTP Disk
File versioning
  IsVersioned ✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️
  ListObjectVersions ✔️🚫✔️✔️🚫🚫🚫🚫🚫🚫
  GetObjectVersion ✔️🚫✔️✔️🚫🚫🚫🚫🚫🚫
  RestoreObjectVersion ✔️🚫✔️✔️🚫🚫🚫🚫🚫🚫
  DeleteObjectVersion ✔️🚫✔️✔️🚫🚫🚫🚫🚫🚫
File tagging
  IsTagged ✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️
  GetObjectTags ✔️🚫✔️✔️✔️🚫✔️🚫🚫🚫
  SetObjectTags ✔️🚫✔️✔️✔️🚫✔️🚫🚫🚫
  DeleteObjectTags ✔️🚫✔️✔️✔️🚫✔️🚫🚫🚫
File storage tier
  IsTiered ✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️
  GetObjectTier ✔️🚫✔️✔️✔️🚫🚫🚫🚫🚫
  SetObjectTier ✔️🚫✔️✔️✔️🚫🚫🚫🚫🚫
API Azure
Blobs
Azure
Files
AWS S3 GCP MinIO Mongo Alibaba FTP SFTP Disk
Presigned URL generation
  GetUploadUrl ✔️🚫✔️✔️✔️🚫✔️🚫🚫🚫
  GetDownloadUrl ✔️🚫✔️✔️✔️🚫✔️🚫🚫🚫
  GetPresignedUrl ✔️🚫✔️✔️✔️🚫✔️🚫🚫🚫
  GetObjectSas ✔️🚫✔️✔️✔️🚫✔️🚫🚫🚫
File permissions
  GetFilePermissions ✔️✔️
  SetFilePermissions ✔️✔️

Provider API

This table shows the API supported by specific cloud providers:


Azure Blobs

Azure Data Lake

AWS S3
IAzureBlobStore IAzureDataLakeStore IS3Storage
  • AcquireLease
  • BreakLease
  • GetContainerPublicAccess
  • SetContainerPublicAccess
  • GetStorageSas
  • GetContainerSas
  • ListFilesystems
  • CreateFilesystem
  • DeleteFilesystem
  • GetAccessControl
  • SetAccessControl
  • SetAcl

Queue Providers

FluentStorage supports the following queue/messaging providers:

Documentation LinkFactory class
AWS SQSAwsSqsStorage
Azure QueueAzureQueueStorage
Azure Service BusAzureServiceBus

Packages

Stable binaries are released on NuGet, and contain everything you need to use Cloud Storage in your .NET app.

PackageLatest VersionDownloadsDocumentation
FluentStorageVersionDownloadsStandard
FluentStorage.AWSVersionDownloadsS3, SQS
FluentStorage.GCPVersionDownloadsGCP
FluentStorage.AzureVersionDownloads---
FluentStorage.Azure.BlobsVersionDownloadsBlob
FluentStorage.Azure.FilesVersionDownloadsFile
FluentStorage.Azure.ServiceBusVersionDownloadsServiceBus
FluentStorage.Azure.KeyVaultVersionDownloadsKeyVault
FluentStorage.Azure.QueuesVersionDownloadsQueue
FluentStorage.MinioVersionDownloadsMinio
FluentStorage.MongoVersionDownloadsMongo
FluentStorage.AlibabaVersionDownloadsAlibaba
FluentStorage.FTPVersionDownloadsFTP
FluentStorage.SFTPVersionDownloadsSFTP

Concept Mapping

This table shows the API and the provider-specific concept it maps to:

ConceptAWS S3Azure BlobGCP
Versioning APIObject VersionsBlob VersionsObject Generations
Tagging APIObject TagsBlob Index Tags
/ Blob Tags
Custom Metadata
Metadata APIObject MetadataBlob MetadataObject Metadata
Storage TierStorage ClassAccess TierStorage Class
Retention API (planned)Object Lock RetentionImmutability PolicyRetention Policy
Locking API (planned)Object Lock Configuration
/ Legal Hold
Legal Hold
+ Immutability Policy
Object Holds

Storage Tier Mapping

This table shows the FluentStorage StorageTier enum and the provider-specific tier it maps to:

ConceptAWS S3Azure BlobGCP
StorageTier.StandardSTANDARDHotSTANDARD
StorageTier.IntelligentINTELLIGENT_TIERINGAutoTieringAUTOCLASS
StorageTier.NearlineSTANDARD_IACoolNEARLINE
StorageTier.ColdGLACIER_IRColdCOLDLINE
StorageTier.ArchiveGLACIERArchiveARCHIVE
StorageTier.DeepArchiveDEEP_ARCHIVEArchiveARCHIVE

Platform Support

FluentStorage works on .NET and .NET Standard/.NET Core.

PlatformBinaries Folder
.NET 7.0net70
.NET 8.0net80
.NET 9.0net90
.NET Standard 2.0netstandard2.0
.NET Standard 2.1netstandard2.1

FluentStorage is also supported on these platforms: (via .NET Standard)

  • Mono 4.6
  • Xamarin.iOS 10.0
  • Xamarin.Android 10.0
  • Universal Windows Platform 10.0

Binaries for all platforms are built from a single Visual Studio Project. You will need the latest Visual Studio to build or contribute to FluentStorage.

Architecture

Without FluentStorage

Today, most cloud applications and services are developed against vendor-specific APIs like Amazon S3 API or Azure Blob API for cloud storage capabilities.

Using multiple vendor-specific APIs can increase your vendor lock-in, and makes your application more complex and harder to maintain. And sometimes these APIs may not offer all the functionality you need for your application. Polycloud also becomes very hard to implement.

Arch

With FluentStorage

What if we had a single, consistent API to deal with all types of cloud storage? That would solve these issues and bring more flexibility in switching cloud providers or cloud services.

Thus was born the idea for FluentStorage.

You can use a single, consistent API to interact with multiple cloud providers, where each provider is supported through its own special Nuget package.

Arch

Documentation

Check the Wiki.

What's New

In 2026, we added:

  • Version 8 with a massive redesign of the entire API and behaviour
  • MongoDB GridFS provider using native MongoDB Driver
  • MinIO provider using native Minio SDK
  • Alibaba OSS provider using native Aliyun SDK
  • Cloudflare R2 provider using S3-compatible SDK
  • Backblaze B2 provider using S3-compatible SDK
  • Hetzner provider using S3-compatible SDK
  • Vultr provider using S3-compatible SDK
  • Azure.Identity support for Azure Files with token credential, client secret, and managed identity authentication.
  • Wiki pages per provider
  • Removed unused packages: Databricks, EventHub, DataLake Gen 1, ServiceFabric

In 2025, we added:

  • Azure.Identity support for Azure Blobs with token credential, client secret, and managed identity authentication.

In 2024, we added:

  • DigitalOcean Spaces provider
  • MinIO provider
  • Wasabi provider

In 2023, we added:

  • SFTP provider SSH.NET added
  • FTP provider FluentFTP updated to v44
  • AWS Nuget bumped to latest versions
  • Wiki created for documentation
  • Platform support updated to netstandard2.0,netstandard2.1,net50,net60

Similar Libraries

  • Foundatio - Caching, Messaging, Queues and Storage library with AWS, Azure and many other providers
  • SlimMessageBus - Messaging library with providers like RabbitMQ, Kafka, Azure EventHub, MQTT, Redis
  • ManagedCode.Storage - Storage library with AWS, Azure, GCP and other providers

Sponsorship

FluentStorage has received major sponsorship from these generous organizations:

Microsoft Corporation

Has FluentStorage made a difference for you or your organization? If so, consider becoming a sponsor to help keep the project thriving. Even a small monthly contribution, like $20, can make a meaningful impact.

Contributors

Special thanks to these awesome people who helped create FluentStorage!