Skip to main content

S3 API Compatibility

Tigris is compatible with the AWS S3 API. You can use the standard AWS S3 SDKs, tools, and libraries with Tigris.

The compatibility data on this page is generated by running the same test suite against each provider using the AWS JS SDK v3. The suite includes both a TypeScript runner and a Go runner (AWS Go SDK v2). The results below use the TypeScript runner, which has broader provider compatibility. Each run creates a temporary bucket, executes all operations, and reports pass/fail results.

ProviderPassedFailedTotalScore
Tigris6176890%
Cloudflare R248206871%
Google Cloud Storage45236866%

✅ = supported |

⚠️

= partial support | ❌ = not supported

The complete list of S3 APIs is in the AWS S3 documentation.

Object operations​

OperationTigrisR2GCS
CopyObject✅✅✅
DeleteObject✅✅✅
DeleteObjects✅✅✅
DeleteObjects (quiet mode)✅✅✅
DeleteObjectTagging✅✅✅
GetObject✅✅✅
GetObject (If-Match)✅✅✅
GetObject (If-Modified-Since)✅✅✅
GetObject (If-None-Match)✅✅✅
GetObject (If-Unmodified-Since)✅✅✅
GetObject (range request)✅✅✅
GetObjectAcl✅❌⚠️ 4
GetObjectTagging✅❌❌
HeadObject✅✅✅
ListObjects✅✅✅
ListObjectsV2✅✅✅
ListObjectsV2 (delimiter)✅✅✅
ListObjectsV2 (pagination)✅✅✅
PutObject✅✅✅
PutObject (custom metadata)✅✅✅
PutObject (SHA256 checksum)✅✅✅
PutObject (SSE-S3)⚠️ 1✅✅
PutObject (storage class)✅✅✅
PutObjectAcl✅❌⚠️ 4
PutObjectTagging✅❌❌
RestoreObject✅✅❌

Bucket operations​

OperationTigrisR2GCS
CreateBucket✅ 6✅✅
DeleteBucket✅✅✅
DeleteBucketCors✅✅❌
DeleteBucketEncryption⚠️ 1✅❌
DeleteBucketLifecycle✅✅❌
DeleteBucketOwnershipControls✅❌❌
DeleteBucketTagging✅❌❌
GetBucketAccelerateConfiguration✅❌✅
GetBucketAcl✅✅⚠️ 4
GetBucketCors✅✅❌
GetBucketEncryption⚠️ 1✅❌
GetBucketLifecycleConfiguration✅✅❌
GetBucketLocation✅✅✅
GetBucketNotificationConfiguration✅❌✅
GetBucketOwnershipControls✅❌❌
GetBucketPolicy❌❌❌
GetBucketPolicyStatus✅❌✅
GetBucketTagging✅❌❌
GetBucketVersioning❌✅⚠️ 5
HeadBucket✅✅✅
ListBuckets✅✅❌
ListObjectVersions✅❌⚠️ 5
PutBucketAcl⚠️ 2❌⚠️ 4
PutBucketCors✅✅❌
PutBucketEncryption⚠️ 1✅❌
PutBucketLifecycleConfiguration✅❌❌
PutBucketNotificationConfiguration❌❌❌
PutBucketOwnershipControls✅❌❌
PutBucketPolicy❌❌❌
PutBucketTagging✅❌❌
PutBucketVersioning❌❌⚠️ 5

Multipart uploads​

OperationTigrisR2GCS
AbortMultipartUpload✅✅✅
CompleteMultipartUpload✅✅✅
CreateMultipartUpload✅✅✅
ListMultipartUploads✅✅✅
ListParts✅✅✅
UploadPart✅✅✅
UploadPartCopy✅⚠️ 3❌

Notes​

  1. Encryption: Tigris encrypts all data at rest automatically. The bucket encryption configuration APIs accept requests but server-side encryption with managed keys is always on. SSE request headers (x-amz-server-side-encryption for SSE-S3/SSE-KMS and x-amz-server-side-encryption-customer-* for SSE-C) are accepted but not applied, so customer-provided keys are not used.
  2. Canned ACLs: Only canned ACLs (public-read and private) are supported.
  3. Conditional copy: R2 supports UploadPartCopy but does not support conditional copy operations (x-amz-copy-source-if-match, etc.).
  4. GCS ACL model: GCS uses a different ACL permission model where permissions are concentric (WRITE implies READ). S3-style ACL XML is accepted but behavior differs from AWS S3.
  5. GCS versioning: GCS maps versioning to its own generation number system, which differs from S3 version IDs.
  6. Bucket location: CreateBucket accepts a LocationConstraint that names one Tigris region (iad), two regions separated by a comma (iad,sjc), or one geography (usa, eur). Omit the value or use auto for a global bucket. See Creating a bucket in a specific location.

Presigned URLs​

OperationTigrisR2GCS
PresignDeleteObject✅✅✅
PresignGetObject✅✅✅
PresignHeadObject✅✅✅
PresignPutObject✅✅✅
PresignUploadPart✅✅✅

IAM APIs​

These IAM APIs are served at https://iam.storage.dev and are not covered by the automated test suite.

IAM APISupported in Tigris
CreateAccessKeyYes
ListAccessKeysYes
UpdateAccessKeyYes
DeleteAccessKeyYes
CreatePolicyYes
ListPoliciesYes
GetPolicyYes
AttachUserPolicyYes
ListUserPoliciesYes
DeletePolicyYes
DetachUserPolicyYes

CloudFront APIs​

CloudFront APISupported in Tigris
CreatePublicKeyYes
GetPublicKeyYes
DeletePublicKeyYes
ListPublicKeysYes

Next steps​

Check out the language-specific guides on how to use the AWS S3 SDKs with Tigris.