| Name | Modified | Size | Downloads / Week |
|---|---|---|---|
| Parent folder | |||
| 5.2.0 source code.tar.gz | 2026-08-22 | 578.8 kB | |
| 5.2.0 source code.zip | 2026-08-22 | 1.0 MB | |
| README.md | 2026-08-22 | 14.3 kB | |
| Totals: 3 Items | 1.6 MB | 0 | |
Version 5.x is JDK17 LTS bytecode compatible, with Docker and JUnit / direct Java integration.
- Features and fixes
- feat: Persist per-part checksums uploaded via
UploadPartas.partmeta.jsonsidecar files so thatCompleteMultipartUploadcan pass without clients re-sending per-part checksums forFULL_OBJECTtype uploads. (#3034) - feat: Expose per-part checksum metadata via
ListParts(returned in eachPartelement) andGetObjectAttributes(ObjectPartsattribute). - feat: Correctly model the S3 checksum type support matrix —
COMPOSITErequires per-part checksums inCompleteMultipartUpload;FULL_OBJECTdoes not. - feat: Default
ChecksumTypeis now derived per algorithm when not explicitly specified (CRC64NVME→FULL_OBJECT;CRC32/CRC32C/SHA1/SHA256→COMPOSITE), matching real S3 behavior. - feat: Reject invalid algorithm/type combinations at
CreateMultipartUploadwith HTTP 400 (COMPOSITE+CRC64NVME,FULL_OBJECT+SHA1,FULL_OBJECT+SHA256). - feat: validated all tests in MultipartIT.kt against real S3 backend.
- feat:
S3MockContainer(Testcontainers) now supports the S3 Vectors API. CallwithVectors()to activate thevectorsSpring profile and connect via the newvectorsHttpEndpoint/vectorsHttpsEndpointaccessors (container ports9092/9193). - feat:
S3MockContainer(Testcontainers) addswithDebug()to activate the server'sdebugSpring profile andwithSpringProfiles(...)to add arbitrary profiles. Spring profiles now compose (comma-separated, de-duplicated) instead of overwriting, sowithVectors(),withDebug(), andwithSpringProfiles(...)can be freely combined. - fix:
x-amz-delete-marker: trueis now correctly returned when deleting a versioned object that is itself a delete marker (previously returnedfalse). - fix:
bucket-owner-full-controlcanned ACL now correctly grantsFULL_CONTROLto the bucket owner (was incorrectly grantingREAD, same asbucket-owner-read). - fix:
ListObjectVersionsno longer skips objects whose key contains characters requiring URL-encoding — a decoding mismatch caused their version metadata lookup to fail, returning an empty version list for those keys. - fix:
CompleteMultipartUploadnow returns a properNoSuchUploadS3 error instead of an internal server error when the upload result cannot be resolved. - fix:
GetObjectLegalHoldandGetObjectRetentionnow correctly return a404 NotFoundwhen only the other lock type is set on the object, instead of incorrectly returning200 OKwith an empty body. - fix:
ListObjectVersionsnow URL-encodes theDelimiterfield in the response whenencoding-type=urlis requested, consistent withPrefix,KeyMarker, and object keys. - fix:
PutObjectRetention/GetObjectRetentionnow parseRetainUntilDatewith full nanosecond precision instead of truncating to milliseconds, fixing incorrect retention timestamp comparisons. - fix: hardened internal per-key locking (bucket/object/multipart/vector stores) against unbounded memory growth and a race that could cause NPEs or double-locking under concurrent access — no observable API change.
- fix:
ListBuckets/ListObjectsV2no longer leak an entry into an in-memory pagination-state map on every truncated listing that isn't paged through to exhaustion — the "continue after" marker is now encoded directly into the continuation token instead of being tracked server-side, so long-lived servers under sustained listing traffic no longer grow memory unboundedly. - fix:
PutObject/PostObject/UploadPartno longer leak the request's temp file on disk when a later validation (bucket existence, MD5/checksum mismatch, invalid part number, etc.) rejects the request — the temp file is now always cleaned up, not just on the success path. - fix:
CompleteMultipartUploadnow closes already-opened part-file streams if a later part fails to open, instead of leaking their file descriptors. - fix:
ListBucketsnow rejects a non-positivemax-bucketswith400 Bad Requestinstead of an unhandled exception. - fix: removed a log statement that echoed the raw, attacker-controlled
Content-MD5request header, which could be used to forge log entries. - fix:
GetObjectwith aRangeheader no longer risks a500 Internal Server Erroron large objects — range positioning now guarantees an exact skip to the requested start offset instead of relying onInputStream.skip, which is permitted to skip fewer bytes than requested. - fix: dropped the unused
software.amazon.awssdk:s3client SDK dependency from the server module (only itschecksums,regions, andutilshelper classes were ever used) — shrinks the Docker image by removing ~15 transitive jars (Netty/Apache HTTP clients, protocol/model classes) that were never exercised at runtime. - fix: Reject negative
max-partsandmax-uploadsmultipart listing parameters instead of failing with server errors. - fix:
ListPartsnow correctly returnsIsTruncated=falseand aNextPartNumberMarkerequal to the last returned part's number (or0/the request'spart-number-markerwhen no parts are returned, e.g.max-parts=0) instead ofnull/incorrectly reporting the page as truncated, matching real S3. - fix:
ListMultipartUploadswithmax-uploads=0now returns an empty, non-truncated page (IsTruncated=falseand emptyNextKeyMarker/NextUploadIdMarker) instead of incorrectly reporting the page as truncated, matching real S3. - chore: replaced the runtime
software.amazon.awssdk:aws-crt-clientdependency with a pure-JVMCrc64Nvmechecksum implementation. The nativeaws-crtlibrary was only pulled in to compute theCRC64NVMEchecksum and bundled ~20MB of per-platform native binaries (MQTT, S3, TLS, HTTP) that were otherwise unused — shrinking the executable fat jar from ~54MB to ~34MB (−37%) and removing native-library loading at startup.aws-crtis now a test-only dependency (the AWS SDK chunk-encoder used to build test fixtures still requires it). - chore: dropped the
software.amazon.awssdk:regionsdependency from the server module. It was only used to type thecom.adobe.testing.s3mock.store.regionconfig property (defaultus-east-1), but transitively bundled the entiresdk-corechain (sdk-core,third-party-jackson-core,retries,profiles,json-utils, and several SPIs). The property is now a plainString, shrinking the executable fat jar by a further ~3MB (~34MB to ~31MB). No user-facing change — the region is still configured the same way. - chore: Modernized the Docker image build.
- The hand-written multi-stage
Dockerfileanddocker buildxshell scripts (and the entiredockermodule) were replaced by the Spring Boot Maven plugin'sbuild-imagegoal. - The build is using the BellSoft Alpaquita Linux (musl) Cloud Native Buildpacks builder (
bellsoft/buildpacks.builder:musl) instead of the default Paketonoble-java-tinybuilder, and the jlink JRE is trimmed further (--vm=serverdrops the unused client/minimal JVMs,--compress=zip-9shrinks the module layer). - fix:
S3MockContainer.withVolumeAsRoot(...)now runs the container asroot. Because the Buildpacks image runs as the non-rootcnbuser, writes to a host-owned bind mount previously failed with HTTP 500 on Linux (e.g. in CI) — the container could not write into a directory it did not own. - fix: switched the image's GC from ZGC to Serial GC. ZGC's concurrent-collection overhead was too costly at the container's tuned low-memory footprint, causing
-XX:+ExitOnOutOfMemoryError-triggered JVM exits under concurrent load (surfacing to clients asConnection reset) — Serial GC's fully-compacting collections reclaim memory more reliably at this heap size.
- The hand-written multi-stage
- chore: The
integration-testsmodule now starts one S3Mock container per test class via Testcontainers instead of the fabric8docker-maven-plugin, giving each test class full state isolation. - Version updates (deliverable dependencies)
- Bump spring-boot.version from 4.1.0 to 4.1.1
- Bump software.amazon.awssdk:bom from 2.46.11 to 2.53.2
- Bump aws.sdk.kotlin:s3-jvm from 1.6.96 to 1.8.32
- Bump kotlin.version from 2.3.21 to 2.4.10
- Version updates (build dependencies)
- Bump com.diffplug.spotless:spotless-maven-plugin from 3.8.0 to 3.10.0
- Bump com.puppycrawl.tools:checkstyle from 13.6.0 to 14.0.0
- Bump com.tngtech.archunit:archunit-junit5 from 1.4.2 to 1.5.0
- Bump digital.pragmatech.testing:spring-test-profiler from 0.1.2 to 0.3.0
- Bump org.apache.maven:apache-maven from 3.9.14 to 3.9.16
- Bump org.apache.maven.plugins:maven-jar-plugin from 3.5.0 to 3.5.1
- Bump org.xmlunit:xmlunit-assertj3 from 2.12.0 to 2.13.0
- Bump actions/checkout from 7.0.0 to 7.0.1
- Bump actions/setup-java from 5.3.0 to 5.7.0
- Bump actions/stale from 10.3.0 to 11.0.0
- Bump docker/setup-buildx-action from 4.2.0 to 4.3.0
- Bump docker/setup-qemu-action from 4.1.0 to 4.2.0
- Bump github/codeql-action from 4.36.2 to 4.37.7
- Bump ossf/scorecard-action from 2.4.3 to 2.4.4
- Bump step-security/harden-runner from 2.19.4 to 2.21.1
What's Changed
- feat: persist part metadata by @afranken in https://github.com/adobe/S3Mock/pull/3089
- chore(deps): bump the github-actions group across 1 directory with 5 updates by @dependabot[bot] in https://github.com/adobe/S3Mock/pull/3093
- chore(deps): bump com.puppycrawl.tools:checkstyle from 13.6.0 to 13.7.0 by @dependabot[bot] in https://github.com/adobe/S3Mock/pull/3090
- chore(deps): bump docker/setup-qemu-action from 4.1.0 to 4.2.0 by @dependabot[bot] in https://github.com/adobe/S3Mock/pull/3092
- chore(deps): bump the aws-sdk group across 1 directory with 2 updates by @dependabot[bot] in https://github.com/adobe/S3Mock/pull/3056
- Chore/maintenance for 5.2.0 by @afranken in https://github.com/adobe/S3Mock/pull/3091
- Chore/maintenance for 5.2.0 ctd by @afranken in https://github.com/adobe/S3Mock/pull/3094
- chore(deps): bump docker/setup-buildx-action from 3.11.1 to 4.2.0 by @dependabot[bot] in https://github.com/adobe/S3Mock/pull/3096
- chore(deps): bump the github-actions group across 1 directory with 7 updates by @dependabot[bot] in https://github.com/adobe/S3Mock/pull/3100
- chore(deps): bump the kotlin group across 1 directory with 6 updates by @dependabot[bot] in https://github.com/adobe/S3Mock/pull/3070
- chore(deps): bump com.puppycrawl.tools:checkstyle from 13.7.0 to 13.8.0 by @dependabot[bot] in https://github.com/adobe/S3Mock/pull/3101
- chore(deps-dev): bump org.apache.maven.plugins:maven-jar-plugin from 3.5.0 to 3.5.1 in the maven-plugins group by @dependabot[bot] in https://github.com/adobe/S3Mock/pull/3105
- chore(deps): bump the github-actions group across 1 directory with 6 updates by @dependabot[bot] in https://github.com/adobe/S3Mock/pull/3104
- Maintenance for 5.2.0 by @afranken in https://github.com/adobe/S3Mock/pull/3097
- chore(deps): bump ossf/scorecard-action from 2.4.3 to 2.4.4 by @dependabot[bot] in https://github.com/adobe/S3Mock/pull/3107
- chore(deps): bump digital.pragmatech.testing:spring-test-profiler from 0.1.2 to 0.2.3 by @dependabot[bot] in https://github.com/adobe/S3Mock/pull/3108
- chore(deps): bump actions/stale from 10.4.0 to 11.0.0 in the github-actions group by @dependabot[bot] in https://github.com/adobe/S3Mock/pull/3112
- chore(deps): bump com.diffplug.spotless:spotless-maven-plugin from 3.8.0 to 3.9.0 by @dependabot[bot] in https://github.com/adobe/S3Mock/pull/3111
- chore(deps): bump com.puppycrawl.tools:checkstyle from 13.8.0 to 13.9.0 by @dependabot[bot] in https://github.com/adobe/S3Mock/pull/3109
- chore(deps): bump the github-actions group with 5 updates by @dependabot[bot] in https://github.com/adobe/S3Mock/pull/3119
- chore(deps-dev): bump org.xmlunit:xmlunit-assertj3 from 2.12.0 to 2.13.0 by @dependabot[bot] in https://github.com/adobe/S3Mock/pull/3118
- chore(deps): bump the kotlin group across 1 directory with 6 updates by @dependabot[bot] in https://github.com/adobe/S3Mock/pull/3103
- chore(deps): bump the aws-sdk group across 1 directory with 2 updates by @dependabot[bot] in https://github.com/adobe/S3Mock/pull/3116
- chore(deps): bump digital.pragmatech.testing:spring-test-profiler from 0.2.3 to 0.3.0 by @dependabot[bot] in https://github.com/adobe/S3Mock/pull/3121
- chore(deps): bump the github-actions group across 1 directory with 5 updates by @dependabot[bot] in https://github.com/adobe/S3Mock/pull/3125
- chore(deps): bump com.tngtech.archunit:archunit-junit5 from 1.4.2 to 1.5.0 by @dependabot[bot] in https://github.com/adobe/S3Mock/pull/3124
- chore(deps): bump org.apache.maven:apache-maven from 3.9.14 to 3.9.16 by @dependabot[bot] in https://github.com/adobe/S3Mock/pull/3130
- chore(deps): bump com.puppycrawl.tools:checkstyle from 13.9.0 to 13.10.0 by @dependabot[bot] in https://github.com/adobe/S3Mock/pull/3128
- chore(deps): bump the github-actions group across 1 directory with 5 updates by @dependabot[bot] in https://github.com/adobe/S3Mock/pull/3131
- chore(deps): bump com.puppycrawl.tools:checkstyle from 13.10.0 to 13.11.0 by @dependabot[bot] in https://github.com/adobe/S3Mock/pull/3133
- chore(deps): bump docker/setup-buildx-action from 4.2.0 to 4.3.0 by @dependabot[bot] in https://github.com/adobe/S3Mock/pull/3135
- chore(deps): bump com.diffplug.spotless:spotless-maven-plugin from 3.9.0 to 3.10.0 by @dependabot[bot] in https://github.com/adobe/S3Mock/pull/3134
- Maintenance for 5.2.0 by @afranken in https://github.com/adobe/S3Mock/pull/3117
- chore(deps): bump com.puppycrawl.tools:checkstyle from 13.11.0 to 14.0.0 by @dependabot[bot] in https://github.com/adobe/S3Mock/pull/3136
- chore: changelog for 5.2.0 by @afranken in https://github.com/adobe/S3Mock/pull/3137
- chore(deps): bump the aws-sdk group across 1 directory with 2 updates by @dependabot[bot] in https://github.com/adobe/S3Mock/pull/3123
- chore: skip spotless during release by @afranken in https://github.com/adobe/S3Mock/pull/3138
Full Changelog: https://github.com/adobe/S3Mock/compare/5.1.0...5.2.0