S3 API Compatibility | Tigris Object Storage Documentation

Tigris 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.

Provider Passed Failed Total Score
Tigris 61 7 68 90%
Cloudflare R2 48 20 68 71%
Google Cloud Storage 45 23 68 66%

✅ = supported | ⚠️ = partial support | ❌ = not supported

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

Object operations

Operation Tigris R2 GCS
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

Operation Tigris R2 GCS
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

Operation Tigris R2 GCS
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

Operation Tigris R2 GCS
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 API Supported in Tigris
CreateAccessKey Yes
ListAccessKeys Yes
UpdateAccessKey Yes
DeleteAccessKey Yes
CreatePolicy Yes
ListPolicies Yes
GetPolicy Yes
AttachUserPolicy Yes
ListUserPolicies Yes
DeletePolicy Yes
DetachUserPolicy Yes

CloudFront APIs

CloudFront API Supported in Tigris
CreatePublicKey Yes
GetPublicKey Yes
DeletePublicKey Yes
ListPublicKeys Yes

Next steps

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