Skip to content

Latest commit

 

History

History
442 lines (345 loc) · 27.6 KB

File metadata and controls

442 lines (345 loc) · 27.6 KB

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.

It provides a single unified API for Object storage and Queue messaging across all cloud storage providers like AWS S3, AWS SQS, GCP Storage, FTP, FTPS, SFTP, Azure Blob, Azure Files, Azure Queue, Azure Service Bus, Azure Data Lake, Azure Key Vault, Cloudflare R2, DigitalOcean Spaces, MinIO, Wasabi, Backblaze B2, Hetzner, Vultr, Alibaba OSS. Each provider has its own Nuget package with zero configuration required.

It provides extensive Object manipulation commands, File uploads/downloads, Directory listing, File permissions/CHMOD, UTF-8 support, Async/await support and more. Its API is fully asynchronous and has identical behavior across all providers. It also implements in-memory and on-disk storage providers, so you can test on a local machine.

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

Storage Providers

FluentStorage supports the following cloud storage providers:

Documentation Link Main interface Store class GetClient() returns
AWS S3 IStore S3Store AmazonS3Client
Azure Blobs IAzureBlobStore AzureBlobStore BlobServiceClient
Azure Files IStore AzureFilesStore ShareServiceClient
Azure DataLake IStore AzureDataLakeStore ---
GCP IStore GoogleCloudStore StorageClient
MinIO IStore S3Store AmazonS3Client
Cloudflare R2 IStore S3Store AmazonS3Client
DigitalOcean Spaces IStore S3Store AmazonS3Client
Wasabi IStore S3Store AmazonS3Client
Backblaze B2 IStore S3Store AmazonS3Client
Hetzner IStore S3Store AmazonS3Client
Vultr IStore S3Store AmazonS3Client
Alibaba OSS IStore AlibabaStore OssClient
FTP IStore FtpStore AsyncFtpClient
SFTP IStore SftpStore SftpClient
Local Disk IStore DiskStore ---

To add support for a new provider, search for [ADD STORAGE PROVIDER] across all code files and make the required changes.

Polycloud API

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

API
Azure
Blobs

Azure
Files

AWS S3

GCP

Alibaba

FTP

SFTP

Local
Disk
System
   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 Alibaba FTP SFTP Local
Disk
File manipulation
   ObjectExists ✔️✔️✔️✔️✔️✔️✔️✔️
   MoveObject ✔️✔️✔️✔️✔️
   DeleteObject ✔️✔️✔️✔️✔️✔️✔️✔️
   DeleteObjects ✔️✔️✔️✔️✔️✔️✔️✔️
   GetObjectInfo ✔️✔️✔️✔️✔️✔️✔️✔️
   GetObjectsInfo ✔️✔️✔️✔️✔️✔️✔️✔️
   SetObjectInfo ✔️✔️✔️✔️✔️✔️
   SetObjectsInfo ✔️✔️✔️✔️✔️✔️
   GetFilePermissions ✔️✔️
   SetFilePermissions ✔️✔️
Directory manipulation
   DirectoryExists ✔️✔️✔️
   CreateDirectory ✔️✔️✔️
   DeleteDirectory ✔️✔️✔️✔️
   MoveDirectory ✔️✔️✔️
API Azure
Blobs
Azure
Files
AWS S3 GCP Alibaba FTP SFTP Local
Disk
Presigned URL generation
   GetUploadUrl ✔️✔️✔️✔️✔️
   GetDownloadUrl ✔️✔️✔️✔️✔️
   GetPresignedUrl ✔️✔️✔️✔️✔️
   GetObjectSas ✔️✔️✔️✔️✔️
Security and access control
   SetAcl ✔️
   AcquireLease ✔️
   BreakLease ✔️
   GetContainerPublicAccess ✔️
   SetContainerPublicAccess ✔️
   GetStorageSas ✔️
   GetContainerSas ✔️

Packages

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

Package Latest Version Downloads Documentation
FluentStorage Version Downloads Standard
FluentStorage.AWS Version Downloads S3, SQS
FluentStorage.GCP Version Downloads GCP
FluentStorage.Azure Version Downloads ---
FluentStorage.Azure.Blobs Version Downloads Blob
FluentStorage.Azure.Files Version Downloads File
FluentStorage.Azure.ServiceBus Version Downloads ServiceBus
FluentStorage.Azure.KeyVault Version Downloads KeyVault
FluentStorage.Azure.Queues Version Downloads Queue
FluentStorage.Alibaba Version Downloads Alibaba
FluentStorage.FTP Version Downloads FTP
FluentStorage.SFTP Version Downloads SFTP

Platform Support

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

Platform Binaries Folder
.NET 7.0 net70
.NET 8.0 net80
.NET 9.0 net90
.NET Standard 2.0 netstandard2.0
.NET Standard 2.1 netstandard2.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

Benefits

  1. Easy to write code that is not tied to a specific cloud provider.

  2. Easily switch between different providers without having to rewrite any part of their application or service.

  3. Easily migrate to using a new storage technology for some part of your cloud application (S3 buckets, Azure Blobs, FTP, etc.)

  4. Natively implement polycloud (support for multiple public clouds)

Documentation

Check the Wiki.

What's New

In 2026, we added:

  • Version 8 with a massive redesign of the entire API and behaviour
  • Alibaba OSS provider
  • Cloudflare R2 provider
  • Backblaze B2 provider
  • Hetzner provider
  • Vultr provider
  • 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

Supported Cloud Services

Slide

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! Shoutout to Ivan Gavryliuk for the original project Storage.Net.