Object Storage 3 services 1.4 GiB RAM 21 GB disk

Garage

The maintained S3-compatible object store - where the self-hosting world went after MinIO archived.

One-click deploy, from $13/mo on a Miget plan.

The self-hosted S3 story changed in 2026: MinIO archived its open-source repository in April, its Docker image froze in September 2025 (with an October CVE fix that never shipped), and its console had already been reduced to an object browser. Garage is where the community went - a single static Rust binary from Deuxfleurs, AGPL, releasing steadily, designed for self-hosting from day one.

This template ships Garage v2.3 with the community-standard garage-webui in front (cluster status, buckets, keys, object browsing - more than MinIO’s gutted console offered). Configuration is a baked TOML with secrets in env, and the one-time init - layout plus first bucket and key - is four documented commands in the app shell.

Same honest scoping as the old minio page: Miget’s native Buckets remain the lower-ops choice for plain storage; Garage is for when you specifically want self-managed S3 with full control.

#what you get

  • Full S3 API: path-style, presigned URLs, every S3 SDK works
  • Single static Rust binary - sips RAM, releases actively
  • garage-webui: buckets, keys, cluster status, object browser
  • Baked single-node config; scales to real clusters upstream
  • AGPL with a non-profit steward - no rug to pull
  • Drop-in for the catalogue’s filestash/sftpgo S3 frontends

#topology

ServiceRolePublic
garageS3 API :3900 + admin API :3903no
webuimanagement UI (:3909)no
webnginx :5000 -> webuiyes

#miget sizing

// this stack needs

1.4 GiB RAM · 21 GB disk · 3 services

Garage targets 1 GB RAM hardware - it idles far below that. The data volume is the dial; the documented 4-command init assigns its capacity to the layout.

Hobby - recommended fit

$13/mo

1 vCPU · 2 GiB · 50 GiB disk

Headroom for your own apps: 2 GiB at $19/mo

Professional - production

$43/mo

2 vCPU · 4 GiB · 25 GiB disk

Dedicated resources, production SLOs - plan details

One Miget plan is a fixed pool of compute - the whole stack (managed databases included) deploys inside it, and anything left over runs your other apps. No per-service or per-seat math.

#vs. other PaaS

Estimated monthly cost of running this exact stack (1.4 GiB RAM, 21 GB disk, 3 containers) elsewhere, from published June 2026 rates.

PlatformEst. monthlyNotes
Miget $13 flat compose stacks first-class: one deploy, dedicated vCPU, managed Postgres/Valkey, volumes and TLS all included in the plan
Heroku ~$69 no volumes; nothing between 1 GB ($50) and 2.5 GB ($250) dynos - 2 GB containers cost far more than shown
Render ~$26 per-service instances (0.5 GB $7, 2 GB $25) - every container is its own paid service
DO App Platform ~$22 no persistent volumes - stateful containers need managed DBs/Spaces (base $5 Spaces included here)
Railway ~$17 usage-based ($10/GB RAM-mo); vCPU billed separately at $20/vCPU-mo on top
Fly.io ~$11 cheapest sticker price - but burstable shared CPUs (1/16 core; dedicated vCPUs cost ~2-3×), no compose deploys (one app per container, manual wiring), managed DBs billed extra

Estimates assume RAM fully allocated at published on-demand rates - and sticker price isn't the whole comparison: the cheaper rows buy burstable shared CPUs, per-service wiring instead of a compose deploy, and managed databases billed separately. Heroku and DO App Platform have no persistent volumes at all - stateful stacks like this one need workarounds there.

#deploy it

On Miget

  1. Create a Compose Stack in app.miget.com pointing at the templates repository
  2. Set the stack path to garage
  3. Set the required variable:
    • GARAGE_RPC_SECRET / GARAGE_ADMIN_TOKEN, cluster secret + admin API token
  4. Deploy. Miget layers compose.miget.yaml (RAM, privacy, volumes, managed services) automatically

Locally first?

Every template is portable, vanilla Docker Compose - the Miget overrides are ignored locally:

git clone https://github.com/deployable-sh/stacks
cd miget-compose-templates/garage
docker compose up -d

Same files, same behavior. The template README covers connection strings and scaling notes.

#faq

What exactly happened to MinIO?

Image publishing stopped September 2025, an October CVE fix never shipped as an image, the repo entered maintenance in December, and the project was archived April 2026 with users pointed at the commercial AIStor. Our minio template remains, pinned to the last image with this history documented - but new deployments should land here.

Do my S3 tools work against Garage?

Yes - endpoint http://garage:3900, region "garage", path-style addressing: boto3, the AWS CLI, rclone, and the catalogue’s filestash and sftpgo all behave normally. Keys and buckets come from the 4-command init or the web UI afterward.

Why is there a one-time init step?

Garage is honestly a clustered system that also runs single-node: the layout step tells it which node owns how much capacity. Four commands in the app shell, once, documented in the README - the price of an architecture that scales to real multi-node later.

Ship Garage today

One compose stack, 1.4 GiB of RAM, from $13/month flat, and it runs on your laptop with the same files.