All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
v0.13.0 - 2026-03-01
Tracking in #442.
MSRV of this minor version: 1.92.0
POST Object support:
- Split out POST Object handling (#466)
- Add POST Object success action (#467)
- Add POST policy validation (#470)
- Add support for Content-Type field in POST multipart requests (#500)
- Fix file_size calculation for post policy validation (#497)
- Fix content-length-range error code in post policy (#502)
- Fix bucket validation from URL in post policy (#507)
- Fix multipart parsing and anonymous post object (#508)
New S3 operations:
Region support:
- Add strong type
Region(#504) - Add region in
VirtualHost(#481) - Pass region & service to request extensions (#503)
Axum / tower integration:
- Implement generic
tower::ServiceforS3Serviceto enable Axum integration (#451) - Add
hyperfeaturehttp2(#459)
Configuration:
- Add
S3ConfigProvidermodule with configurable parameters (#452)
Compatibility fixes:
- Accept unquoted ETag values for S3 compatibility (#449)
- Output ETag with literal quotes in XML (#499)
- Improve S3 error response and parsing compatibility (#462)
- Ensure Name precedes Contents in ListObjectsOutput XML (#480)
- Fix SigV2: add 14 missing sub-resources to INCLUDED_QUERY (#517)
- Add S3 error codes support (#515)
- Add ignored tests and concurrent case execution (#516)
- Add Ceph s3-tests E2E runner for s3s-proxy + MinIO with baseline-aware reporting (#464)
- Classify s3tests results by S3 capability (#505)
- Adopt
date_time_format_test_suitefrom smithy-rs (#485) - Auto-discover boto3 regression tests (#510)
- Add regression tests for previously fixed issues (#488)
- Add access control tests for authenticated/anonymous access (#483)
- Add unit tests for core s3s modules (#514, #519)
- Add comprehensive API documentation to s3s crate (#492)
- Add and improve module-level docs across all modules (#513)
- Migrate Docker releases from Docker Hub to GitHub Container Registry (ghcr.io) (#490)
v0.12.0 - 2025-12-22
Tracking in #270.
MSRV of this minor version: 1.86.0
BREAKING: Architecture refactoring:
- Make S3Service shared (#9ccf2f9)
- Define http types in protocol module (#7f8be8a)
- Better route definition (#c4247b3)
- Move protocol types (#6c6b066)
BREAKING: Security improvements:
- Add memory allocation limits to stream parsers (#413)
- Fix unbounded memory allocation in http::body (#407)
- Fix unbounded memory allocation in POST object (#370, #390)
- Remove non-constant time PartialEq from SecretKey, use ConstantTimeEq (#319)
BREAKING: Content-Type validation changes (#389)
- Allow custom content-type values
- Allow empty content-type headers (#365)
BREAKING: Typed ETag support (#349, #403, #410)
- Introduced strongly-typed
ETagtype replacingStringfor conditional request headers - Added
ETagConditiontype to support wildcard*in If-Match/If-None-Match headers - Implemented RFC 9110-compliant ETag comparison methods (strong and weak validation)
- Fixed If-None-Match wildcard support (#433)
Configuration types now implement Default, Serialize, and Deserialize (#429, #435)
- All Configuration types now derive or implement
Defaulttrait - Added serde support for all Configuration types and their dependencies
Signature verification enhancements:
- AWS Signature V2 POST signature support (#358)
- STS signature validation support (#418)
- Normalize header values per AWS SigV4 specification (#393)
- Fix status code for invalid x-amz-content-sha256 header (#430)
- Handle multi-value headers in canonical requests (#408)
- Fix single chunk upload signature validation (#369)
- Add tests for PUT presigned URL signature verification (#402)
Protocol improvements:
- Enhanced checksum support and content validation (#371)
- Support streaming trailers (#59d6fd9)
- Improve error logs for HTTP parsing failures (#366)
- Fix multipart optional content_type (#355)
- Fix complete_multipart_upload keep_alive (#348)
- Ignore empty headers (#384)
- Improve TrailingHeaders (#d4a9db2)
- Host header fallback on HTTP/2 (#44c1002, #1746e26)
- Display invalid content-type content (#386)
- Add xml_attr field and related functionality for XML serialization (#299)
- Optimize StrEnum XML deserialization to reduce allocations (#313)
- Differentiate Get and List operations by id parameter (#392, #398)
- Return MalformedXML for empty XML body in operations requiring it (#377)
- Enhance extract_host to return host from URI if available (#431)
- Custom validation option via S3ServiceBuilder (#342)
Cryptography:
- Use latest RustCrypto releases (#354db52)
- Extract checksum algorithms (#09c9374)
- Use crc-fast instead of crc32fast & crc64fast-nvme (#380)
RFC 2047 support:
- Add RFC 2047 non-ASCII header encoding/decoding support (#405)
- Allow RFC2047-encoded metadata values (#434)
Examples:
- Add HTTPS example with TLS support (#409)
- Fix ListObjectsV2 response fields causing OpenDAL hang (#351)
- Preserve standard object attributes (#420)
- Make metadata file writes atomic (#360)
- Fix checksum for range requests (#285)
- Enforce multipart upload limits (#281)
- Fix trailer checksum (#ef0bd70)
- Add comprehensive test coverage with enabled advanced features (#321)
- Add multipart upload checksum support to e2e tests (#374)
- Add test_put_object_with_checksum_algorithm (#6bf36f9)
- Add MinIO feature support (#5c460a8)
- Fix optional object attributes (#346)
- Parse checksum_algorithm_header (#c8d42ed)
- Derive serde for Tagging (#6faf16e)
- Patch PartNumberMarker (#f8f28ea)
- Ignore EntityTooLarge 405 (#0ed460e)
- Timestamp derive more (#cdf9b15)
- Fix CI failure by updating missing generated code from AWS data (#323)
- Add comprehensive error case tests for aws_chunked_stream (#354, #423)
- Add OpenDAL compatibility test for S3 API integration (#317)
- Add crate
s3s-wasmfor WebAssembly support (#3c3d3cc, #452f2e3)
- Deploy cargo docs to GitHub Pages for main branch (#359)
- Standalone, static-compiled Docker image for s3s-fs/e2e/proxy (AMD64 and ARM64) (#334)
- Adjust Docker workflow for tag-based releases and weekly edge builds (#422)
v0.11.0 - 2025-03-28
Tracking in #267.
MSRV of this minor version: 1.85.0
BREAKING: Following the latest model definitions in aws-sdk-rust, s3s::dto is updated.
- You may come across some type changes reported by rustc.
- The migration is not hard but requires some time.
BREAKING: More request parameters are accepted via upgrading model definitions.
BREAKING: Policy-based access control is supported in s3s::access (#161)
- Add
S3Accesstrait for access control. - Add
S3ServiceBuilder::set_access. - Move
S3Auth::check_accesstoS3Access::check.
BREAKING: Multi-domain is supported in s3s::host. (#175)
- Add
S3Hosttrait for parsing host header. - Change
S3ServiceBuilder::set_base_domaintoS3ServiceBuilder::set_host. - Add
SingleDomainparser. - Add
MultiDomainparser.
Custom route is supported in s3s::route (#195)
- Add
S3Routetrait for custom route protected by signature verification. - Add
S3ServiceBuilder::set_route. - Signature v4 supports AWS STS requests (#208)
- Add example using axum web framework (#263)
Unstable minio branch:
- Add
miniobranch for MinIO compatibility. - This branch is automatically force-rebased to the latest
mainbranch.
Other notable changes
- feat(s3s): export xml module (#189)
- fix(s3s/ops): allow presigned url requests with up to 15 minutes clock skew (#216)
- handle fmt message with implicit arguments in s3_error macro (#228)
- feat(s3s/dto): ignore empty strings (#244)
- feat(model): extra error codes (#255)
- feat(s3s/checksum): add crc64nvme (#256)
- feat(s3s/xml): support xmlns (#265)
- Add crate
s3s-modelfor S3 model definitions.
- Add crate
s3s-policyfor S3 policy language. - Add grammar model types for serialization and deserialization in
s3s_policy::model. - Add
PatternSetfor matching multiple patterns ins3s_policy::pattern.
- Add crate
s3s-testfor custom test framework.
- Add crate
s3s-e2efor S3 compatibility tests.