Home

Awesome

<p align="center"> <img src="https://github.com/robinrodricks/FluentStorage/raw/develop/.github/logo.png" alt="FluentStorage" /> </p> <p align="center"> <a href="https://www.nuget.org/packages/FluentStorage"><img src="https://img.shields.io/nuget/vpre/FluentStorage.svg" alt="Version" /></a> <a href="https://www.nuget.org/packages/FluentStorage"><img src="https://img.shields.io/nuget/dt/FluentStorage.svg" alt="Downloads" /></a> <a href="https://github.com/robinrodricks/FluentStorage/graphs/contributors"><img src="https://img.shields.io/github/contributors/robinrodricks/FluentStorage.svg" alt="GitHub contributors" /></a> <a href="https://www.codacy.com/gh/robinrodricks/FluentStorage/dashboard"><img src="https://app.codacy.com/project/badge/Grade/8bc33aa55cb8494da3a7a07dba5316f7" alt="Codacy Badge" /></a> <a href="https://github.com/robinrodricks/FluentStorage/blob/develop/LICENSE"><img src="https://img.shields.io/github/license/robinrodricks/FluentStorage.svg" alt="License" /></a> </p> <p align="center"> <b>FluentStorage is free, but powered by</b> <a href="https://github.com/sponsors/robinrodricks"><b>your donations</b></a> </p>

One Interface To Rule Them All

FluentStorage, originally known as Storage.NET, is a field-tested polycloud .NET cloud storage library that helps you interface with multiple cloud providers from a single unified interface.

It provides a generic interface for Blob storage across all cloud storage providers (AWS S3, GCP, FTP, SFTP, Azure Blob/File/Event Hub/Data Lake) and cloud messaging providers (AWS SQS, Azure Queue/ServiceBus).

It is written entirely in C#. Supports .NET 5+ and .NET Standard 2.0+. External dependencies are only added by FluentStorage sub-packages.

FluentStorage is released under the permissive MIT License, so it can be used in both proprietary and free/open source applications.

Features

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)

Storage Providers

FluentStorage supports the following cloud storage providers:

Storage ProviderDocumentation
AWS S3FluentStorage.AWS
Azure BlobsFluentStorage.Azure.Blobs
Azure FilesFluentStorage.Azure.Files
Azure DataLakeFluentStorage.Azure.DataLake
Google Cloud StorageFluentStorage.GCP
MinIOFluentStorage.AWS -> MinIO
DigitalOcean SpacesFluentStorage.AWS -> DigitalOcean Spaces
WasabiFluentStorage.AWS -> Wasabi

Packages

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

PackageLatest VersionDownloadsDocumentation
<img src="https://raw.githubusercontent.com/robinrodricks/FluentStorage/develop/.github/providers/local.png" width="32"></img>FluentStorageVersionDownloadsStandard
<img src="https://raw.githubusercontent.com/robinrodricks/FluentStorage/develop/.github/providers/aws.png" width="32"></img>FluentStorage.AWSVersionDownloadsS3, SQS
<img src="https://raw.githubusercontent.com/robinrodricks/FluentStorage/develop/.github/providers/gcp.png" width="32"></img>FluentStorage.GCPVersionDownloadsGCP
<img src="https://raw.githubusercontent.com/robinrodricks/FluentStorage/develop/.github/providers/databricks.png" width="32"></img>FluentStorage.DatabricksVersionDownloadsDatabricks
<img src="https://raw.githubusercontent.com/robinrodricks/FluentStorage/develop/.github/providers/ftp.png" width="32"></img>FluentStorage.FTPVersionDownloadsFTP
<img src="https://raw.githubusercontent.com/robinrodricks/FluentStorage/develop/.github/providers/sftp.png" width="32"></img>FluentStorage.SFTPVersionDownloadsSFTP
<img src="https://raw.githubusercontent.com/robinrodricks/FluentStorage/develop/.github/providers/azure-blob-block.png" width="32"></img>FluentStorage.Azure.BlobsVersionDownloadsBlob
<img src="https://raw.githubusercontent.com/robinrodricks/FluentStorage/develop/.github/providers/azure-blob-file.png" width="32"></img>FluentStorage.Azure.FilesVersionDownloadsFile
<img src="https://raw.githubusercontent.com/robinrodricks/FluentStorage/develop/.github/providers/azure-event-hub.png" width="32"></img>FluentStorage.Azure.EventHubVersionDownloadsEventHub
<img src="https://raw.githubusercontent.com/robinrodricks/FluentStorage/develop/.github/providers/azure-service-bus.png" width="32"></img>FluentStorage.Azure.ServiceBusVersionDownloadsServiceBus
<img src="https://raw.githubusercontent.com/robinrodricks/FluentStorage/develop/.github/providers/azure-key-vault.png" width="32"></img>FluentStorage.Azure.KeyVaultVersionDownloadsKeyVault
<img src="https://raw.githubusercontent.com/robinrodricks/FluentStorage/develop/.github/providers/azure-service-fabric.png" width="32"></img>FluentStorage.Azure.ServiceFabricVersionDownloadsServiceFabric
<img src="https://raw.githubusercontent.com/robinrodricks/FluentStorage/develop/.github/providers/azure-queue-storage.png" width="32"></img>FluentStorage.Azure.QueuesVersionDownloadsQueue
<img src="https://raw.githubusercontent.com/robinrodricks/FluentStorage/develop/.github/providers/azure-data-lake.png" width="32"></img>FluentStorage.Azure.DataLakeVersionDownloadsDataLake

Platform Support

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

PlatformBinaries Folder
.NET 5.0net50
.NET 6.0net60
.NET Standard 2.0netstandard2.0
.NET Standard 2.1netstandard2.1

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

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.

Documentation

Check the Wiki.

What's New

In 2024, we added:

In 2023, we added:

Supported Cloud Services

Slide

Similar Libraries

Sponsorship

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.

As a seasoned freelancer with over a decade of experience, your support helps me continue dedicating time to these open-source projects while also supporting my family. Your contributions directly fuel the work that makes a difference to millions of developers around the world.

Contributors

Special thanks to these awesome people who helped create FluentStorage! Shoutout to Ivan Gavryliuk for the original project Storage.Net.

<a href="https://github.com/robinrodricks/FluentStorage/graphs/contributors"> <!--- <img src="https://contributors-img.web.app/image?repo=robinrodricks/FluentStorage" /> --> <img src="https://github.com/robinrodricks/FluentStorage/raw/develop/.github/contributors.png" /> </a>