Skip to content

Add Garage S3-compatible hosting and client integration #1271

Closed

Description

@fabianhainzinger

Related to an existing integration?

Yes

Existing integration

CommunityToolkit.Aspire.Hosting.Minio / CommunityToolkit.Aspire.Minio.Client

Overview

MinIO was archived in February 2026 and the existing integration is being deprecated in #1139. This proposes adding Garage as a replacement — an actively maintained, lightweight S3-compatible object store built for self-hosting.

The S3 client side would use AWSSDK.S3 since Garage implements the S3 protocol. This brings back the open question from #606 — the conclusion there was that it belongs in the community toolkit since MinIO just implements the protocol, but with the caveat "if you take a dependency on aws libraries then maybe a different story". The original MinIO integration avoided that by using the MinIO SDK directly, but a Garage integration would cross that line since there's no Garage-specific SDK. Curious whether that changes the answer on where this belongs.

Usage example

// AppHost
var garage = builder.AddGarage("garage");

var myService = builder.AddProject<Projects.MyService>()
    .WithReference(garage);

// Service registration — open question on naming:
// option A - backend-specific
builder.AddGarageClient("garage");
// option B - reflects the underlying SDK, more reusable
builder.AddAmazonS3Client("garage");

// Service
public class MyService(IAmazonS3 s3Client) { ... }

Breaking change?

No

Alternatives

Keeping the deprecated MinIO integration isn't viable. Ceph was considered but it's primarily built for large-scale enterprise deployments and comes with significant operational overhead that i think makes it unsuitable for this scenario.

Additional context

I started working on a Garage integration for my own use until I noticed @Harold-Morgan had already been working on something similar about a month ago — given their ownership of the MinIO integration I didn't want to duplicate effort or waste anyone's time. Happy to contribute to whatever is already in progress, help out with a joint PR, or just provide input if that's more useful. Wanted to raise this here before going further rather than opening a PR out of nowhere.

Related: #1139, #606

Help us help you

Yes, I'd like to be assigned to work on this item

Activity

  1. Harold-Morgan commented on Apr 14, 2026

    @Harold-Morgan
    Contributor

    I've had limited time to allocate to writing Garage integration, but I think I'll get at least draft PR done before may. If I won't be able to deliver something before that I think It'll be fair to give the task to you.

    While working on it I've come to conclusion that integration with RustFS is also a viable option and maybe can be easier/more convenient to implement. @fabianhainzinger maybe you can do that one instead?

    Good notion on using the AWSSDK.S3 sdk, I thought about switching to that one instead of native Minio library too.

  2. fabianhainzinger commented on Apr 14, 2026

    @fabianhainzinger
    Author

    Thanks @Harold-Morgan, no worries on the timeline, I'll wait for your draft before doing anything.

    RustFS is a good shout, hadn't thought of that one. The drop-in MinIO compatibility (rustfs/rustfs#2212) would make things a lot easier. Only thing giving me pause is that it's still in alpha, but if the July GA target is realistic the timing actually works out pretty well. I'd be happy to take a look at that integration and keep an eye on how the release is progressing.

  3. github-actions commented on May 15, 2026

    @github-actions
    Contributor

    We have noticed this issue has not been updated within 21 days. If there is no action on this issue in the next 14 days, we will automatically close it. You can use /stale-extend to extend the window.

  4. fabianhainzinger commented on May 15, 2026

    @fabianhainzinger
    Author

    /stale-extend

  5. Harold-Morgan commented on Jun 2, 2026

    @Harold-Morgan
    Contributor

    I still don't know when I'll have enough time to allocate to this, so if @fabianhainzinger is ready - feel free to pick up

    Although maybe I'll come up with something this summer I don't want to block anyone who wants to contribute on this

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions