WriteableFileProviders.Minio
2027.1.1
dotnet add package WriteableFileProviders.Minio --version 2027.1.1
NuGet\Install-Package WriteableFileProviders.Minio -Version 2027.1.1
<PackageReference Include="WriteableFileProviders.Minio" Version="2027.1.1" />
<PackageVersion Include="WriteableFileProviders.Minio" Version="2027.1.1" />
<PackageReference Include="WriteableFileProviders.Minio" />
paket add WriteableFileProviders.Minio --version 2027.1.1
#r "nuget: WriteableFileProviders.Minio, 2027.1.1"
#:package WriteableFileProviders.Minio@2027.1.1
#addin nuget:?package=WriteableFileProviders.Minio&version=2027.1.1
#tool nuget:?package=WriteableFileProviders.Minio&version=2027.1.1
WriteableFileProviders.Minio
A MinIO bucket as an IWriteableFileProvider. Part of
WriteableFileProviders. It runs on AWSSDK.S3 4, the
S3 protocol MinIO speaks, not on the Minio SDK.
Install
dotnet add package WriteableFileProviders.Minio
Needs .NET 10, and is native AOT compatible. Keep every WriteableFileProviders package in an app on the same major version.
Use
using WriteableFileProviders;
using WriteableFileProviders.Minio;
await using var files = new WriteableMinioFileProvider(new MinioFileProviderOptions
{
HostAndPort = "minio.example.net:9000",
UseSSL = true,
AccessKey = configuration["Minio:AccessKey"],
SecretKey = configuration["Minio:SecretKey"],
BucketName = "files",
});
await files.UpdateFileAsync("reports/2026.csv", stream);
var url = await files.GetSignedUrlAsync("reports/2026.csv", new SignedUrlOptions { Validity = TimeSpan.FromHours(1) });
From configuration (services.AddWriteableFileProvider(section)):
{ "Files": { "Type": "WriteableMinioFileProvider", "HostAndPort": "minio.example.net:9000", "UseSSL": true,
"AccessKey": "...", "SecretKey": "...", "BucketName": "files" } }
Or pass an IAmazonS3 you build, such as an AmazonS3Client with ServiceURL and ForcePathStyle = true. The
provider never disposes it, and reads only the bucket, the root, CreateBucketIfMissing and AllowInsecureHttp from
the options.
Configuration
| Option | Default | Meaning |
|---|---|---|
HostAndPort |
required | The server, as host:port or host: no scheme, path or query. |
UseSSL |
false |
Use HTTPS. Plain HTTP is allowed only toward a loopback host, unless AllowInsecureHttp is set. |
AllowInsecureHttp |
false |
Allow plain HTTP toward any host, such as a server on a private network. |
AccessKey, SecretKey |
anonymous | The key pair. Set both or neither. The secret key is a secret. |
BucketName |
required | The bucket. |
Region |
asked from the server | The server's region (MINIO_SITE_REGION). Empty: the provider asks once, on first use. |
CreateBucketIfMissing |
false |
Create the bucket on first use. Without it, a missing bucket throws InvalidOperationException. |
RootDirectoryPath |
the bucket | The folder in the bucket the provider is confined to. |
Authentication
A MinIO key pair, or none for anonymous access, which can't presign URLs. For anything else, pass your own
IAmazonS3. Nothing touches the network until the first call.
What's different
- Conditions aren't atomic.
IfMatchandIfNotExistsare checked by the provider first, then sent with the write. MinIO releases without conditional writes ignore them, so a concurrent change can slip in between. - Copies and moves aren't atomic either: MinIO ignores
If-None-Matchon copies andIf-Matchon deletes, so the provider checks the destination and the source's version itself. A source changed meanwhile undoes the move. - A file and a folder with the same name: MinIO lists only the file, and hides what's under the folder until the file is deleted.
- Writes up to 8 MiB are one request, larger ones a multipart upload (10,000 parts at most). A failed write leaves
the old content. Appends rewrite the file with
If-Matchon the version read, and after a concurrent write read it again and append after it, up to five attempts in all. - Listings carry no content type;
GetFileInfoAsyncdoes. - No storage class is sent: MinIO refuses the ones it doesn't know.
- Signed URLs are presigned read and write URLs, up to 7 days, over the scheme
UseSSLpicks. Create URLs come from the gateway. With your own client, setAllowShorterValidity. - A server with a site region needs
RegionforCreateBucketIfMissingto create a missing bucket. WatchthrowsNotSupportedException.
Learn more
- The guide: reading and writing, signed URLs, errors, providers compared.
- Moving from 2026.
| 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
- AWSSDK.S3 (>= 4.0.104.2)
- WriteableFileProviders.Common (>= 2027.1.1 && < 2028.0.0-alpha)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 2027.1.1 | 139 | 10/13/2026 |
| 2027.1.1-rc.1 | 58 | 10/13/2026 |
| 2027.1.0 | 97 | 10/12/2026 |
| 2027.1.0-rc.1 | 64 | 10/12/2026 |
| 2027.0.0 | 403 | 10/11/2026 |
| 2027.0.0-rc.2 | 72 | 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