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)
PutObject (storage class)
PutObjectAcl⚠️ 4
PutObjectTagging
RestoreObject

Bucket operations

OperationTigrisR2GCS
CreateBucket
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.
  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.

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.