Reference

S3 API compatibility

DeltaGlider speaks the S3 wire protocol through the s3s framework, so standard tools (AWS CLI, boto3, the AWS SDKs, Cyberduck, rclone, s3fs) work unchanged. This page is the austere list of which S3 operations the proxy implements, which it stubs, and which it rejects — so you can tell, before integrating, whether your client's calls will work.

Status legend:

  • ✅ Full — real implementation; delta compression is applied transparently where relevant.
  • ◑ Stub — the call succeeds with a fixed, well-formed response. The proxy does not store or honour the underlying feature (e.g. ACLs), but compatible clients that merely probe for it keep working.
  • 🚫 Not supported — returns 501 NotImplemented with a clear message.
  • — Not implemented — no handler; s3s returns its default NotImplemented error.

Delta compression, encryption-at-rest, replication, and lifecycle are proxy-layer features, not S3 operations. They are applied to the object operations below transparently — a client never sees them. Lifecycle and replication are configured through the proxy (YAML / admin API), not through the S3 PutBucketLifecycle / PutBucketReplication calls, which are intentionally not implemented.

Object operations

OperationStatusNotes
GetObject✅ FullDelta-decoded on read; range requests and If-Match/If-None-Match/If-Modified-Since/If-Unmodified-Since conditionals supported; response-header overrides via query params.
HeadObject✅ FullReturns object metadata; same conditional headers as GetObject.
PutObject✅ FullDelta-encoded on write for eligible types; quota-enforced; If-Match/If-None-Match conditionals; user metadata preserved.
CopyObject✅ FullSource authorization + conditionals checked; COPY/REPLACE metadata directive; destination quota enforced.
DeleteObject✅ FullSingle key, or recursive prefix delete when the key ends in /. A missing key is treated as success (S3 semantics).
DeleteObjects✅ FullBatch delete up to 1000 keys; Quiet flag and per-key error reporting honoured.

List operations

OperationStatusNotes
ListObjectsV2✅ FullContinuation-token pagination; delimiter / common-prefix; IAM-filtered (a user sees only objects they can read).
ListObjects✅ FullLegacy marker-based listing, implemented over the same path as V2.
ListBuckets✅ FullIAM-filtered; optional prefix / max-buckets pagination.

Multipart upload

OperationStatusNotes
CreateMultipartUpload✅ FullAllocates an upload ID; metadata and content-type persisted.
UploadPart✅ FullPart buffering with ETag; Content-MD5 validated; max-object-size enforced.
UploadPartCopy✅ FullCopies a (ranged) slice of a source object into the upload; source authorization checked.
CompleteMultipartUpload✅ FullDelta or passthrough chosen by size/eligibility; multipart ETag preserved; quota enforced.
AbortMultipartUpload✅ FullCancels the upload and reclaims state.
ListParts✅ Fullpart-number-marker continuation; max-parts 1–1000.
ListMultipartUploads✅ Fullkey-marker + upload-id-marker continuation; prefix / delimiter.

Bucket operations

OperationStatusNotes
CreateBucket✅ FullReturns the location header.
DeleteBucket✅ FullRequires the bucket to be empty; purges orphaned multipart state; blocks while uploads are completing.
HeadBucket✅ Full200 if the bucket exists, else 404 NoSuchBucket. Region header is us-east-1.
GetBucketLocation◑ StubReturns an empty location-constraint (interpreted as us-east-1).
GetBucketVersioning◑ StubReturns an empty status. The proxy does not implement S3 object versioning — see Versioning vs S3 versioning.

ACLs, tagging & policy

The proxy enforces access control through its own IAM / ABAC model (see IAM permissions), not through S3 ACLs, bucket policies, or object tags. The ACL probes below return a canned private response so clients that check ACLs on connect keep working; the mutation calls are explicitly rejected rather than silently ignored.

OperationStatusNotes
GetBucketAcl◑ StubBucket existence checked; returns a canned private ACL (single owner, full control).
GetObjectAcl◑ StubObject existence checked; returns a canned private ACL.
PutBucketAcl🚫 Not supported501 — "Bucket ACL mutation is not supported by this proxy".
PutObjectAcl🚫 Not supported501 — "Object ACL mutation is not supported by this proxy".
GetBucketTagging / PutBucketTagging🚫 Not supported501 — bucket tagging is not supported.
GetObjectTagging / PutObjectTagging / DeleteObjectTagging🚫 Not supported501 — object tagging is not supported.
GetBucketPolicy / PutBucketPolicy / DeleteBucketPolicy— Not implementedUse IAM permissions and admission rules instead.

Not implemented

The following families have no handler — s3s returns NotImplemented. Where a proxy-native equivalent exists, it is linked.

  • Lifecycle: PutBucketLifecycleConfiguration / GetBucketLifecycleConfiguration / DeleteBucketLifecycle → configure through the proxy instead (Expire and archive objects, Lifecycle reference).
  • Replication: PutBucketReplication / GetBucketReplication / DeleteBucketReplication → configure through the proxy instead (Replicate a bucket, Replication reference).
  • Notifications: PutBucketNotificationConfiguration / GetBucketNotificationConfiguration → use the proxy's event notifications / event outbox.
  • Object Lock / retention / legal hold: PutObjectLockConfiguration, PutObjectRetention, PutObjectLegalHold (and their getters).
  • CORS: PutBucketCors / GetBucketCors / DeleteBucketCors.
  • Website / logging / accelerate / request-payment.
  • Inventory / metrics / analytics / intelligent-tiering configurations.
  • RestoreObject, SelectObjectContent.

Non-standard endpoints the proxy adds

These are not part of the S3 spec but are served on the S3 port for compatibility and the browser UI:

EndpointPurpose
POST /{bucket} (multipart/form-data)Browser HTML-form PostObject upload — used by the embedded S3 browser. SigV4 POST-policy validated; quota enforced.
HEAD /Connection probe used by some clients (e.g. Cyberduck); returns 200 OK.

The full admin API and the docs/UI live under the /_/ prefix on the same port — _ is not a valid S3 bucket name, so it never collides with object traffic. See the admin API reference.