Everything S3 has, and everything it doesn’t
Tigris is globally distributed, S3-compatible object storage built for performance, simplicity and cost efficiency. Data lives close to where it is read, moves between clouds for free, and comes with the primitives S3 never grew: forks, snapshots, soft delete and object events. Every primitive on this page is one CLI command, and there is a real shell in the corner to run it in.
Primitives
Storage primitives for agents and teams
The building blocks you already know from S3, plus the ones you wish it had. Every tile is the one CLI command that sets it up.
Geo-redundant storage
Pick single-region, multi-region, or global placement per bucket. Keep data close to users and redundant across regions without running your own replication.
$ tigris buckets create my-bucket --locations iad,fraStorage tiers
Standard, infrequent access and two archive tiers, moved by lifecycle rules or per object. Same API, priced for the access pattern.
$ tigris buckets lifecycle create my-bucket --prefix logs/ --storage-class GLACIER --days 90Zero-copy forks
Fork a production bucket instantly. Test migrations, run experiments, or give each agent its own sandbox, with no storage duplication.
$ tigris mk my-fork --fork-of my-bucketSnapshots
Whole-bucket snapshots. Roll back to any precise second to recover from a bad write, a bug, or a hallucinated agent.
$ tigris snapshots take my-bucket pre-runSoft deletes
Deletes stop being permanent. Deleted objects go into a holding state for a retention window you choose, and any of them can be restored before it closes.
$ tigris buckets set my-bucket --soft-delete enable --retention-days 30Webhooks
Webhooks fire the moment an object is created, updated, or deleted. Wire up data pipelines without polling.
$ tigris buckets set-notifications my-bucket --url https://example.com/webhookFine-grained IAM policies
S3-compatible IAM plus per-bucket, per-prefix, and per-key policies. Scope credentials down to individual agents.
$ tigris access-keys assign tid_AaBb --bucket my-bucket --role ReadOnlyCustom domains
Serve buckets from your own domain with managed TLS. Keep branding consistent across public assets and CDNs.
$ tigris buckets set my-bucket --custom-domain assets.example.comPresigned URLs
Time-scoped, scope-limited URLs for direct upload and download. Let clients hit storage without ever touching your credentials.
$ tigris presign my-bucket/report.pdf --expires-in 3600Pick single-region, multi-region, or global placement per bucket. Keep data close to users and redundant across regions without running your own replication.
$ tigris buckets create my-bucket --locations iad,fraStandard, infrequent access and two archive tiers, moved by lifecycle rules or per object. Same API, priced for the access pattern.
$ tigris buckets lifecycle create my-bucket --prefix logs/ --storage-class GLACIER --days 90Fork a production bucket instantly. Test migrations, run experiments, or give each agent its own sandbox, with no storage duplication.
$ tigris mk my-fork --fork-of my-bucketWhole-bucket snapshots. Roll back to any precise second to recover from a bad write, a bug, or a hallucinated agent.
$ tigris snapshots take my-bucket pre-runDeletes stop being permanent. Deleted objects go into a holding state for a retention window you choose, and any of them can be restored before it closes.
$ tigris buckets set my-bucket --soft-delete enable --retention-days 30Webhooks fire the moment an object is created, updated, or deleted. Wire up data pipelines without polling.
$ tigris buckets set-notifications my-bucket --url https://example.com/webhookS3-compatible IAM plus per-bucket, per-prefix, and per-key policies. Scope credentials down to individual agents.
$ tigris access-keys assign tid_AaBb --bucket my-bucket --role ReadOnlyServe buckets from your own domain with managed TLS. Keep branding consistent across public assets and CDNs.
$ tigris buckets set my-bucket --custom-domain assets.example.comTime-scoped, scope-limited URLs for direct upload and download. Let clients hit storage without ever touching your credentials.
$ tigris presign my-bucket/report.pdf --expires-in 3600Everything else
Everything S3 has, built in
The API your code already speaks, with the parts that usually cost extra or need a second product included.
- Global distribution
- Data is stored close to the users that read it. Dynamic data placement and access-based rebalancing move objects to where they are needed, with no manual replication, no CDN to configure and no region to pick. Docs
- S3-compatible API
- Any tool, library or application that works with S3 works with Tigris. boto3, @aws-sdk, the AWS CLI, Terraform and rclone all work by changing the endpoint and access keys. Docs
- Zero egress fees
- Data transfer out is free, for every read: application servers, end users on presigned URLs, and training pipelines pulling datasets across clouds. No bandwidth charges and no surprise cross-region bills. See pricing
- Strong consistency
- Read-after-write consistency within a region for every location type, and strong consistency across regions for multi-region buckets. Docs
- Security and compliance
- SOC 2 Type II, HIPAA BAA available, encryption at rest and in transit, and access control down to the prefix and operation. Docs
- Lifecycle rules
- Move objects between storage tiers, or expire them, on rules set per bucket or key prefix. Keep hot data in Standard and let older logs and artifacts age into cheaper tiers on their own. Docs
- Conditional writes
- If-Match and If-None-Match on writes, so concurrent writers and retries never clobber each other. The building block for locks and leases on top of objects. Docs
- Multipart uploads
- Upload large objects in parallel parts and resume after a failure, with the same multipart API S3 clients already use. Docs
- Zero-downtime migration
- Shadow buckets keep an existing S3-compatible store and Tigris in sync. Objects copy over on first read, writes mirror back, and there is never a hard cutover. How it works
Side by side
Tigris, S3, R2 and GCS, feature by feature
What each store charges, where it puts your data, what it guarantees about reads, and which bucket operations it has. Specifics, not scores; the places Tigris says no are marked the same way as everyone else’s.
| Feature | Tigris | AWS S3 | Cloudflare R2 | Google Cloud Storage |
|---|---|---|---|---|
| Cost | ||||
| Standard storage | $0.020 / GB-month | $0.023 / GB-month | $0.015 / GB-month | $0.020 / GB-month |
| Egress to the internet | $0 | $0.09 / GB after 100 GB free | $0 | $0.12 / GB after 100 GB free |
| Cross-region transfer | $0 | $0.01 to $0.02 / GB, plus replication PUTs | n/a, single region | $0.02 / GB dual and multi-region replication |
| Requests, Class A / Class B | $0.005 / $0.0005 per 1,000 | $0.005 / $0.0004 per 1,000 | $4.50 / $0.36 per million | $0.005 / $0.0004 per 1,000 |
| Free tier | 5 GB, 10k Class A, 100k Class B per month | 5 GB and 100 GB egress, first 12 months | 10 GB, 1M Class A, 10M Class B per month | 5 GB, 5k Class A, 50k Class B per month |
| Placement and consistency | ||||
| Regions per bucket | Global, multi-region, dual-region or single-region, set per bucket; data moves to where it is read | One region per bucket; cross-region replication is a rule you configure and pay per GB for | One region, chosen by location hint at creation; no replication | Single, dual or multi-region buckets; replication included in the storage price |
| Endpoint | One global endpoint, t3.storage.dev, routed to the nearest replica | Per-region endpoints; Multi-Region Access Points are a separate resource | Per-account endpoint, single location | One global endpoint |
| Consistency | Strong read-after-write in region; strong across regions for multi-region buckets; global buckets replicate with sub-second lag | Strong read-after-write within the bucket region; replicated copies are asynchronous | Strong | Strong, including dual and multi-region |
| Availability commitment | 99.99% target | 99.9% SLA for Standard | 99.9% SLA | 99.95% SLA multi-region, 99.9% single |
| Bucket and object primitives | ||||
| Copy-on-write forks | Yes, any size, instant; merge and rebase | No | No | No |
| Bucket snapshots | Yes, point in time, fork from any snapshot | No; object versioning only | No | No; object versioning only |
| Soft delete | Yes, objects and whole buckets, retention window per bucket | No; versioning with delete markers | No | Yes, objects and buckets, 7 to 90 days |
| Object versioning | Yes | Yes | No | Yes |
| Conditional writes | If-Match, If-None-Match | If-Match, If-None-Match | If-Match, If-None-Match | Generation and metageneration preconditions |
| Object events | Webhooks on create, update, delete | SNS, SQS, Lambda, EventBridge | Cloudflare Queues only | Pub/Sub |
| Storage tiers | Standard, Infrequent Access, Archive Instant Retrieval, Archive; lifecycle rules per bucket or prefix | Standard, IA, One Zone-IA, Intelligent-Tiering, three Glacier classes; lifecycle rules | Standard, Infrequent Access; lifecycle rules | Standard, Nearline, Coldline, Archive; lifecycle rules |
| Access and compatibility | ||||
| S3 API | Native | Native | Compatible subset | XML API with S3 interoperability mode |
| Access control | S3-compatible IAM policies, scoped to bucket, prefix, key or operation | IAM policies, bucket policies, ACLs | API tokens scoped to buckets; no policy documents | IAM with conditions; ACLs optional |
| Presigned URLs | Yes, and on custom domains | Yes | Yes | Yes, V4 signed URLs |
| Custom domain with TLS | Yes, managed | Via CloudFront | Yes, on a Cloudflare zone | Via a load balancer |
| Migrate in place | Shadow bucket: reads pull from the old store, writes mirror back, no cutover | No; batch copy or replication | Sippy: reads pull from S3 or GCS, writes do not mirror back | No; Storage Transfer Service batch copy |
| Compliance | SOC 2 Type II, HIPAA BAA | SOC, ISO, HIPAA, FedRAMP and more | SOC 2, ISO 27001 | SOC, ISO, HIPAA and more |
List prices for the cheapest US region as published on 20 September 2026 (Tigris docs, aws.amazon.com/s3/pricing, developers.cloudflare.com/r2/pricing, cloud.google.com/storage/pricing). Free tiers and SLAs vary by class and region; check each provider before you budget.
Tigris is S3-compatible, so you keep your code and change the endpoint.
Point your SDK at t3.storage.dev and you are done.
Works with boto3, aws-sdk, the Go SDK, rclone, anything that speaks S3.
Migrating? Objects copy over on first read and writes mirror back, so both buckets stay live until you are ready.
Zero-downtime migrationStart building on Tigris
Free to start. No egress fees. No lock-in.
npx tigris initInstalls the CLI and connects your agent