At Fly.io, our pet-project-we-won’t-build has always been: S3-compatible, pay-as-you-go, globally caching object storage.
I’m happy to announce that our friends and partners at Tigris made it happen. Their service is running in production on Fly.io hardware today, fully integrated with flyctl
. Learn more in the Tigris overview, S3 API Compatibility docs, and pricing.
Sign up for the private beta here. We’ll start rolling out invites within a week!
Here are a few highlights:
Tigris buckets are truly global - they cache objects around the world, depending on where the objects are needed most, intelligently handling object updates and removals across regions with zero configuration. By default, objects are first stored close to where they’re pushed from. So, even single-region apps can benefit without explicit bucket placement.
Smaller assets are optimised for fast delivery directly from the FoundationDB clusters that run the show.
Replication protects objects against unlikely region-wide failures.
Tigris already covers basics like public buckets, http2 support, and signed object URLs. So, frameworks like Rails ActiveStorage work out of the box.
Note that get half of this setup on big providers, you need to setup storage buckets and a caching CDN separately, each with their own configuration and costs. Here it’s as simple as flyctl storage create
. Here’s what provisioning looks like:
f[~]$ fly storage create
? Select Organization: fly-ephemeral (fly-ephemeral)
? Choose a name, use the default, or leave blank to generate one:
Your project (crimson-violet-6526) is ready.
Set one or more of the following secrets on your target app.
BUCKET_NAME: crimson-violet-6526
AWS_ENDPOINT_URL_S3: https://fly.storage.tigris.dev
AWS_ACCESS_KEY_ID: tid_xxxxxxxxxxxxxxxxxxxxxx
AWS_SECRET_ACCESS_KEY: tsec_xxxxxxxxxxxxxxxxxxxxxxx
The Tigris and Fly.io teams are here to answer your questions. Shoot!