S3 Compatibility

The RustFS S3 compatibility matrix: which S3 APIs are implemented, which are planned, and which are intentionally out of scope, backed by the executable Ceph s3tests suites.

RustFS provides broad S3 API compatibility for supported features. It does not claim complete coverage of every standard or vendor-specific S3 behavior. This page reproduces the upstream S3 compatibility matrix, which ties the compatibility claim to the executable Ceph s3tests lists under scripts/s3-tests/ in the RustFS repository.

Legend: ✅ implemented and gated by tests · ❌ planned but not yet implemented · ⊘ intentionally excluded (out of scope).

Test list sources

ListPurposeCountSource
Implemented testsStandard S3 tests expected to pass; used by the default local s3tests run.452scripts/s3-tests/implemented_tests.txt
Lifecycle behavior testsExpiration behavior cases gated by the dedicated lifecycle lane (debug-accelerated day + scanner enabled).5scripts/s3-tests/lifecycle_behavior_tests.txt
Unimplemented testsStandard S3 features planned but not yet implemented.17scripts/s3-tests/unimplemented_tests.txt
Excluded testsVendor-specific or intentionally unsupported behavior excluded from compatibility gating.273scripts/s3-tests/excluded_tests.txt

Counts ignore blank lines and comments.

Supported coverage

The implemented test list currently covers the common object-storage surface:

Bucket APIs

AreaStatus
Bucket create / delete / list / head
Bucket and object tagging
Bucket policy put / get / delete
Public access block put / get / delete

Object APIs

AreaStatus
Object put / get / delete / copy / head
ListObjects / ListObjectsV2 with prefix, delimiter, marker, max-keys
Presigned GET and PUT URLs
Range and conditional reads
User metadata
SSE-C and selected SSE-KMS edge cases
Selected versioning, object-lock, checksum, CORS, raw request, and conditional write behavior

Multipart APIs

AreaStatus
Multipart upload create / upload / complete / abort
Selected multipart copy, checksum, and object-attribute behavior

Planned standard coverage

These are standard S3 areas that remain planned work and are not yet complete:

AreaStatusEvidence
Bucket access loggingunimplemented_tests.txt
POST Object form upload checksum handlingunimplemented_tests.txt
Bucket ownership controlsunimplemented_tests.txt
IAM-account or multi-storage-class dependent casesunimplemented_tests.txt
Tenanted bucket policy edge cases❌ (needs investigation)unimplemented_tests.txt
Multipart upload listing and part lookup compatibility edge cases⊘ (not part of default gate)excluded_tests.txt

Intentional exclusions

The excluded list contains tests that do not block the RustFS compatibility gate. They fall into two classes:

  • vendor-specific or non-portable behavior not required for RustFS S3 compatibility;
  • intentionally unsupported product behavior, such as ACL authorization.

Lifecycle behavior lane

The lifecycle behavior lane runs real Days-based expiration cases. It requires RUSTFS_ILM_DEBUG_DAY_SECS (the Ceph lc_debug_interval equivalent) and an enabled background scanner, and runs separately from the default single-server gate because a global debug day would also shrink the x-amz-expiration header asserted by other lifecycle header tests.

:::note For the authoritative, always-current test lists and the update rule that moves entries from unimplemented to implemented, see the upstream matrix: docs/architecture/s3-compatibility-matrix.md. :::

On this page