Garage S3, run for you.
Garage is the open-source S3 engine Storm runs in production and contributes to. Storm Buckets gives you a Garage-backed endpoint in Canada without running the cluster yourself.
Why Garage
You can read the code that stores your objects, run it yourself, and leave with it. When we find a bug, the fix goes upstream.
Fixes we sentOne binary, low requirements, plain configuration. Garage is easy to start. Running it well is the work we take off your plate.
What we run for yourclone, the AWS CLI, boto3 and the AWS SDKs work against it. Check Garage's compatibility reference for the calls your tools depend on.
Move your data inFixes we sent upstream
Status checked 2026-10-21 on git.deuxfleurs.fr.
| Status | Change | What it fixed |
|---|---|---|
| Merged 2026-05-12 | #1450 | The permissive CORS preflight answer now includes Access-Control-Allow-Headers, so browsers accept it. |
| Merged 2026-06-17 | #1469 | Bulk DeleteObjects reports a missing key as deleted, as AWS does. Shipped in v2.4.0. |
| Merged 2026-07-20 | #1492 | Browser uploads through presigned POST accept UTF-8 filenames. |
| Open | #1565 | Static website requests drop query parameters. We tested the AWS behaviour and reported it on the issue. |
Self-hosted Garage, or ours
| Job | Self-hosted | Storm Buckets |
|---|---|---|
| TLS | Garage's S3 port speaks plain HTTP. You put a proxy in front. | Every endpoint is HTTPS. |
| Admin API | The admin token lives wherever you put it. | Admin calls run through the Storm Pulse agent on the node, never over the internet. |
| Keys | garage key create and garage bucket allow. |
Dashboard keys at Read Only, Read / Write or Admin, scoped per bucket. |
| Metadata | Turn on metadata_fsync and schedule snapshots yourself. |
metadata_fsync on, with scheduled metadata snapshots. |
| Upgrades | You track releases and roll them. | We track releases and upgrade the node. |
| Hardware | Yours to buy, watch and replace. | Leased from a Canadian provider in Montreal. |
| Cost | Your hardware and your time. | $9 CAD per 1 TB block, per month. |
Running your own? Our hardening dispatch ranks every control we use, from S tier to theatre.
Where your objects sit
- RAIDZ3-backed, in a professional data centre. Your bucket sits on RAIDZ3-backed storage in a Leaseweb Canada facility in Montreal. Our where your data lives pages name the provider, the building and who owns both.
- One zone, for now. Standard storage rides through disk failures; a whole-node loss is what a second copy is for, so keep one of anything you cannot afford to lose (Terms of Service). A three-zone class, priced separately, is on the roadmap.
- Object lock or versioning. Garage implements neither. Keep history in your backup software, such as restic.
- Every S3 call. Check the operations you rely on against Garage's S3 compatibility reference and our list of what returns NotImplemented.
Coming from MinIO, or your own Garage
Keys do not carry over: Garage mints its own key IDs, so create new keys in the dashboard first. Then the copy is rclone, dry run first, checked after.
montreal-1, with path-style addressing.
$ rclone config
$ rclone copy old:bucket storm:bucket --dry-run
$ rclone copy old:bucket storm:bucket --progress
$ rclone check old:bucket storm:bucket
The full walkthrough, including the settings that make a bucket look migrated when it is not, is in Migrating from MinIO to Garage. The rclone values for Storm are in the rclone guide.
From the Dispatch
Migrating from MinIO to Garage: A Complete Guide
MinIO's community edition is archived. This is the actual migration to Garage: the rclone commands, the credential and region gotchas that look like deeper problems, and what silently doesn't come across.
Read the dispatch →
Hardening Garage for production
Getting Garage running is an afternoon. Running it so one bad day stays small is the part almost nobody writes about. Every hardening control, ranked S to F from live production, failures kept in.
Read the dispatch →Put Garage to work, without the pager.
Start with a 1 TB block on montreal-1 and add capacity as you grow. Flat CAD pricing, with uploads and API requests included.
Hosted and Operated in Canada. Pay by Interac e-Transfer.
We review every request for storage and resources by hand. We maintain strict safety standards. See our Acceptable Use Policy.
1 TB of capacity. Add more in 1 TB blocks.
- ✓ Stack blocks as you grow
- ✓ Buckets and keys are not billed units
- ✓ Custom domains + static hosting
- ✓ Audit logs
Frequently asked
Is this the same Garage I can run myself?
Yes. Storm runs the public Garage release. Fixes Storm writes go upstream to Garage, not into a private fork.
Can I bring my existing Garage or MinIO keys?
No. Garage mints its own key IDs, so you create new keys in the dashboard and copy your data across with rclone.
Does Storm replicate my data across zones?
Not yet. Standard storage is one zone on RAIDZ3-backed disks in a Leaseweb Canada data centre in Montreal, so it rides through disk failures; a whole-node loss is what a second copy is for. A three-zone class is on the roadmap.
How much does it cost?
One 1 TB block at $9 CAD per month, stacked as you grow. Uploads and API requests are included.
Can I leave?
Yes. It is the same S3 API, so the rclone command that copied your data in copies it back out, to your own Garage or anywhere else.