WriteableFileProviders.Common
2027.0.0
See the version list below for details.
dotnet add package WriteableFileProviders.Common --version 2027.0.0
NuGet\Install-Package WriteableFileProviders.Common -Version 2027.0.0
<PackageReference Include="WriteableFileProviders.Common" Version="2027.0.0" />
<PackageVersion Include="WriteableFileProviders.Common" Version="2027.0.0" />
<PackageReference Include="WriteableFileProviders.Common" />
paket add WriteableFileProviders.Common --version 2027.0.0
#r "nuget: WriteableFileProviders.Common, 2027.0.0"
#:package WriteableFileProviders.Common@2027.0.0
#addin nuget:?package=WriteableFileProviders.Common&version=2027.0.0
#tool nuget:?package=WriteableFileProviders.Common&version=2027.0.0
WriteableFileProviders.Common
The core of WriteableFileProviders: the
IWriteableFileProvider interface, the base class every provider builds on, and building a provider from
configuration.
Install
You rarely install it yourself: each provider package brings it.
dotnet add package WriteableFileProviders.Physical
Or .AzureBlob, .AmazonS3, .Minio, .GoogleCloudStorage, .Box, .SharePoint. Install Common alone to write a
provider of your own. Needs .NET 10, and is native AOT compatible, except building a provider from configuration
(Native AOT). Keep every WriteableFileProviders
package in an app on the same major version.
Use
using WriteableFileProviders;
IWriteableFileProvider files = WriteableFileProviderSerializer.FromConfiguration(configuration.GetSection("Files"));
await files.UpdateFileAsync("reports/2026.csv", stream); // creates reports/ if missing
await files.UpdateFileAsync("app.log", line, UpdateFileOptions.Append);
await using var slice = await files.ReadRangeAsync("big.bin", 1_000_000, 4096); // 4,096 bytes from 1,000,000
await foreach (var entry in files.EnumerateAsync("reports", recursive: true)) { }
await files.MoveAsync("reports/2026.csv", "archive/2026.csv"); // FileExistsException if taken
var url = await files.GetSignedUrlAsync("archive/2026.csv", new SignedUrlOptions { Validity = TimeSpan.FromMinutes(15) });
Paths are relative to the provider's root, and nothing outside it can be reached. Every member is async, except the
three IFileProvider ones (GetFileInfo, GetDirectoryContents, Watch).
Configuration
{ "Files": { "Type": "WriteableAzureBlobFileProvider", "AccountName": "contoso", "AccountKey": "...", "ContainerName": "files" } }
| Key | Default | Meaning |
|---|---|---|
Type |
required | The provider's class name, in any case. |
RootDirectoryPath |
the store's root | The folder the provider is confined to, such as tenants/acme. |
RootDirectorySegments |
The same folder as an array of names. | |
| any other | The provider's options, by property name, in any case. Its README lists them. |
Register it with dependency injection as a singleton IWriteableFileProvider, which the container builds on first use
and disposes:
services.AddWriteableFileProvider(configuration.GetSection("Files"));
For several providers, register each under a key: services.AddKeyedSingleton<IWriteableFileProvider>(key, ...).
WriteableFileProviderSerializer also reads JSON (FromJson) and writes a provider back (ToJson, ToJsonString).
The JSON holds the options' secrets: never log it. To build a provider of your own from configuration, call
WriteableFileProviderSerializer.Register<TProvider>() first, or pass its assembly.
The serializer finds types and reads options through reflection, so it warns in a trimmed or native AOT app. There, bind the options and build the provider in code:
var options = configuration.GetSection("Files").Get<AzureBlobFileProviderOptions>()!;
services.AddWriteableFileProvider(_ => new WriteableAzureBlobFileProvider(options));
Learn more
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net10.0 is compatible. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net10.0
- Microsoft.Extensions.Configuration.Abstractions (>= 10.0.12)
- Microsoft.Extensions.DependencyInjection.Abstractions (>= 10.0.12)
- Microsoft.Extensions.FileProviders.Abstractions (>= 10.0.12)
NuGet packages (8)
Showing the top 5 NuGet packages that depend on WriteableFileProviders.Common:
| Package | Downloads |
|---|---|
|
WriteableFileProviders.Physical
Read, write, list and watch files in a folder on the local disk through IWriteableFileProvider: atomic writes and appends, conditional writes, byte-range and seekable reads, change notifications. The same API as the Azure Blob, Amazon S3, MinIO, Google Cloud Storage, Box and SharePoint providers. Native AOT compatible. |
|
|
WriteableFileProviders.AzureBlob
Azure Blob Storage as a writeable IFileProvider: read, write, append, list, copy and move blobs in a container through IWriteableFileProvider, on block blobs, with conditional writes, byte ranges, Microsoft Entra ID sign-in and SAS URLs (service or user delegation). The same API as the local disk, Amazon S3, MinIO, Google Cloud Storage, Box and SharePoint providers. Native AOT compatible. |
|
|
WriteableFileProviders.AmazonS3
Amazon S3 and S3-compatible storage as a writeable IFileProvider: read, write, append, list, copy and move objects in a bucket through IWriteableFileProvider, on the AWS SDK for .NET v4, with multipart uploads, conditional writes, byte ranges and presigned URLs. The same API as the local disk, Azure Blob, MinIO, Google Cloud Storage, Box and SharePoint providers. Native AOT compatible. |
|
|
WriteableFileProviders.Minio
MinIO as a writeable IFileProvider: read, write, append, list, copy and move objects in a bucket through IWriteableFileProvider, on the AWS SDK for .NET v4 (no Minio SDK), with multipart uploads, byte ranges and presigned URLs. The same API as the local disk, Azure Blob, Amazon S3, Google Cloud Storage, Box and SharePoint providers. Native AOT compatible. |
|
|
WriteableFileProviders.SharePoint
SharePoint document libraries as a writeable IFileProvider: read, write, append, list, copy and move files through IWriteableFileProvider and Microsoft Graph, with upload sessions, byte ranges, sign-in by secret, certificate or managed identity, and download URLs. The same API as the local disk, Azure Blob, Amazon S3, MinIO, Google Cloud Storage and Box providers. Native AOT compatible. |
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 2027.1.1 | 204 | 10/13/2026 |
| 2027.1.1-rc.1 | 95 | 10/13/2026 |
| 2027.1.0 | 163 | 10/12/2026 |
| 2027.1.0-rc.1 | 99 | 10/12/2026 |
| 2027.0.0 | 555 | 10/11/2026 |
| 2027.0.0-rc.2 | 98 | 10/11/2026 |
What each release changed: https://github.com/serionist/WriteableFileProviders/blob/main/CHANGELOG.md. Moving from 2026.x: https://github.com/serionist/WriteableFileProviders/blob/main/docs/migration-2027.md