{"id":15127670,"url":"https://github.com/adobe/s3mock","last_synced_at":"2025-05-13T22:03:08.728Z","repository":{"id":38082248,"uuid":"97753277","full_name":"adobe/S3Mock","owner":"adobe","description":"A simple mock implementation of the AWS S3 API startable as Docker image, TestContainer, JUnit 4 rule, JUnit Jupiter extension or TestNG listener","archived":false,"fork":false,"pushed_at":"2025-04-27T20:39:43.000Z","size":6885,"stargazers_count":908,"open_issues_count":9,"forks_count":184,"subscribers_count":20,"default_branch":"main","last_synced_at":"2025-04-27T21:19:10.042Z","etag":null,"topics":["amd64","arm64","aws","aws-s3","docker","java","junit","kotlin","mock","s3","testcontainers","testing"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/adobe.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":".github/CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":"AUTHORS","dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2017-07-19T19:23:56.000Z","updated_at":"2025-04-27T20:11:08.000Z","dependencies_parsed_at":"2023-12-29T14:28:45.315Z","dependency_job_id":"fecc20fe-da01-47dd-943a-60206cb1ac6a","html_url":"https://github.com/adobe/S3Mock","commit_stats":null,"previous_names":[],"tags_count":142,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/adobe%2FS3Mock","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/adobe%2FS3Mock/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/adobe%2FS3Mock/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/adobe%2FS3Mock/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/adobe","download_url":"https://codeload.github.com/adobe/S3Mock/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":251557158,"owners_count":21608589,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["amd64","arm64","aws","aws-s3","docker","java","junit","kotlin","mock","s3","testcontainers","testing"],"created_at":"2024-09-26T02:05:16.062Z","updated_at":"2025-05-13T22:03:08.721Z","avatar_url":"https://github.com/adobe.png","language":"Java","readme":"[![Latest Version](https://img.shields.io/maven-central/v/com.adobe.testing/s3mock.svg?maxAge=3600\u0026label=Latest%20Release)](https://search.maven.org/#search%7Cga%7C1%7Cg%3Acom.adobe.testing%20a%3As3mock)\n![Maven Build](https://github.com/adobe/S3Mock/workflows/Maven%20Build/badge.svg)\n[![Docker Hub](https://img.shields.io/badge/docker-latest-blue.svg)](https://hub.docker.com/r/adobe/s3mock/)\n[![Docker Pulls](https://img.shields.io/docker/pulls/adobe/s3mock)](https://hub.docker.com/r/adobe/s3mock)\n[![Java17](https://img.shields.io/badge/MADE%20with-Java17-RED.svg)](#Java)\n[![Kotlin](https://img.shields.io/badge/MADE%20with-Kotlin-RED.svg)](#Kotlin)  \n[![OpenSSF Best Practices](https://bestpractices.coreinfrastructure.org/projects/7673/badge)](https://bestpractices.coreinfrastructure.org/projects/7673)\n[![OpenSSF Scorecard](https://img.shields.io/ossf-scorecard/github.com/adobe/S3Mock?label=openssf%20scorecard\u0026style=flat)](https://api.securityscorecards.dev/projects/github.com/adobe/S3Mock)\n[![GitHub stars](https://img.shields.io/github/stars/adobe/S3Mock.svg?style=social\u0026label=Star\u0026maxAge=2592000)](https://github.com/adobe/S3Mock/stargazers/)\n\n\u003c!-- TOC --\u003e\n  * [S3Mock](#s3mock)\n  * [Changelog](#changelog)\n  * [Supported S3 operations](#supported-s3-operations)\n  * [Usage](#usage)\n    * [Usage of AWS S3 SDKs](#usage-of-aws-s3-sdks)\n      * [Path-style vs Domain-style access](#path-style-vs-domain-style-access)\n      * [Presigned URLs](#presigned-urls)\n      * [Self-signed SSL certificate](#self-signed-ssl-certificate)\n    * [Usage of AWS CLI](#usage-of-aws-cli)\n    * [Usage of plain HTTP / HTTPS with cURL](#usage-of-plain-http--https-with-curl)\n    * [S3Mock configuration options](#s3mock-configuration-options)\n    * [S3Mock Docker](#s3mock-docker)\n      * [Start using the command-line](#start-using-the-command-line)\n      * [Start using the Fabric8 Docker-Maven-Plugin](#start-using-the-fabric8-docker-maven-plugin)\n      * [Start using Testcontainers](#start-using-testcontainers)\n      * [Start using Docker compose](#start-using-docker-compose)\n        * [Simple example](#simple-example)\n        * [Expanded example](#expanded-example)\n      * [Start using self-signed SSL certificate](#start-using-self-signed-ssl-certificate)\n    * [S3Mock Java](#s3mock-java)\n      * [Start using the JUnit4 Rule](#start-using-the-junit4-rule)\n      * [Start using the JUnit5 Extension](#start-using-the-junit5-extension)\n      * [Start using the TestNG Listener](#start-using-the-testng-listener)\n      * [Start programmatically](#start-programmatically)\n  * [File System Structure](#file-system-structure)\n    * [Root-Folder](#root-folder)\n    * [Buckets](#buckets)\n    * [Objects](#objects)\n    * [Multipart Uploads](#multipart-uploads)\n  * [Build \u0026 Run](#build--run)\n    * [Java](#java)\n    * [Kotlin](#kotlin)\n  * [Governance model](#governance-model)\n  * [Vulnerability reports](#vulnerability-reports)\n  * [Security](#security)\n  * [Contributing](#contributing)\n  * [Licensing](#licensing)\n\u003c!-- TOC --\u003e\n\n## S3Mock\n`S3Mock` is a lightweight server that implements parts of the [Amazon S3 API](https://docs.aws.amazon.com/AmazonS3/latest/API/Welcome.html).  \nIt has been created to support local integration testing by reducing infrastructure dependencies.\n\nThe `S3Mock` server can be started as a standalone *Docker* container, using *Testcontainers*, *JUnit4*, *JUnit5* and *TestNG* support, or programmatically.\n\n## Changelog\n\nSee [GitHub releases](https://github.com/adobe/S3Mock/releases).  \nSee also the [changelog](CHANGELOG.md) for detailed information about changes in releases and changes planned for future releases.  \n\n## Supported S3 operations\n\nOf these [operations of the Amazon S3 API](https://docs.aws.amazon.com/AmazonS3/latest/API/API_Operations_Amazon_Simple_Storage_Service.html), all marked :white_check_mark: are supported by S3Mock:\n\n| Operation                                                                                                                                           | Support            | Comment                |\n|-----------------------------------------------------------------------------------------------------------------------------------------------------|--------------------|------------------------|\n| [AbortMultipartUpload](https://docs.aws.amazon.com/AmazonS3/latest/API/API_AbortMultipartUpload.html)                                               | :white_check_mark: |                        |\n| [CompleteMultipartUpload](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CompleteMultipartUpload.html)                                         | :white_check_mark: |                        |\n| [CopyObject](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html)                                                                   | :white_check_mark: |                        |\n| [CreateBucket](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateBucket.html)                                                               | :white_check_mark: |                        |\n| [CreateMultipartUpload](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateMultipartUpload.html)                                             | :white_check_mark: |                        |\n| [DeleteBucket](https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucket.html)                                                               | :white_check_mark: |                        |\n| [DeleteBucketAnalyticsConfiguration](https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucketAnalyticsConfiguration.html)                   | :x:                |                        |\n| [DeleteBucketCors](https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucketCors.html)                                                       | :x:                |                        |\n| [DeleteBucketEncryption](https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucketEncryption.html)                                           | :x:                |                        |\n| [DeleteBucketIntelligentTieringConfiguration](https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucketIntelligentTieringConfiguration.html) | :x:                |                        |\n| [DeleteBucketInventoryConfiguration](https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucketInventoryConfiguration.html)                   | :x:                |                        |\n| [DeleteBucketLifecycle](https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucketLifecycle.html)                                             | :white_check_mark: |                        |\n| [DeleteBucketMetricsConfiguration](https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucketMetricsConfiguration.html)                       | :x:                |                        |\n| [DeleteBucketOwnershipControls](https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucketOwnershipControls.html)                             | :x:                |                        |\n| [DeleteBucketPolicy](https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucketPolicy.html)                                                   | :x:                |                        |\n| [DeleteBucketReplication](https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucketReplication.html)                                         | :x:                |                        |\n| [DeleteBucketTagging](https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucketTagging.html)                                                 | :x:                |                        |\n| [DeleteBucketWebsite](https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucketWebsite.html)                                                 | :x:                |                        |\n| [DeleteObject](https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteObject.html)                                                               | :white_check_mark: |                        |\n| [DeleteObjects](https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteObjects.html)                                                             | :white_check_mark: |                        |\n| [DeleteObjectTagging](https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteObjectTagging.html)                                                 | :x:                |                        |\n| [DeletePublicAccessBlock](https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeletePublicAccessBlock.html)                                         | :x:                |                        |\n| [GetBucketAccelerateConfiguration](https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketAccelerateConfiguration.html)                       | :x:                |                        |\n| [GetBucketAcl](https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketAcl.html)                                                               | :x:                |                        |\n| [GetBucketAnalyticsConfiguration](https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketAnalyticsConfiguration.html)                         | :x:                |                        |\n| [GetBucketCors](https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketCors.html)                                                             | :x:                |                        |\n| [GetBucketEncryption](https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketEncryption.html)                                                 | :x:                |                        |\n| [GetBucketIntelligentTieringConfiguration](https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketIntelligentTieringConfiguration.html)       | :x:                |                        |\n| [GetBucketInventoryConfiguration](https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketInventoryConfiguration.html)                         | :x:                |                        |\n| [GetBucketLifecycle](https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketLifecycle.html)                                                   | :x:                | Deprecated in S3 API   |\n| [GetBucketLifecycleConfiguration](https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketLifecycleConfiguration.html)                         | :white_check_mark: |                        |\n| [GetBucketLocation](https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketLocation.html)                                                     | :white_check_mark: |                        |\n| [GetBucketLogging](https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketLogging.html)                                                       | :x:                |                        |\n| [GetBucketMetricsConfiguration](https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketMetricsConfiguration.html)                             | :x:                |                        |\n| [GetBucketNotification](https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketNotification.html)                                             | :x:                |                        |\n| [GetBucketNotificationConfiguration](https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketNotificationConfiguration.html)                   | :x:                |                        |\n| [GetBucketOwnershipControls](https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketOwnershipControls.html)                                   | :x:                |                        |\n| [GetBucketPolicy](https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketPolicy.html)                                                         | :x:                |                        |\n| [GetBucketPolicyStatus](https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketPolicyStatus.html)                                             | :x:                |                        |\n| [GetBucketReplication](https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketReplication.html)                                               | :x:                |                        |\n| [GetBucketRequestPayment](https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketRequestPayment.html)                                         | :x:                |                        |\n| [GetBucketTagging](https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketTagging.html)                                                       | :x:                |                        |\n| [GetBucketVersioning](https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketVersioning.html)                                                 | :white_check_mark: |                        |\n| [GetBucketWebsite](https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketWebsite.html)                                                       | :x:                |                        |\n| [GetObject](https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html)                                                                     | :white_check_mark: |                        |\n| [GetObjectAcl](https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObjectAcl.html)                                                               | :white_check_mark: |                        |\n| [GetObjectAttributes](https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObjectAttributes.html)                                                 | :white_check_mark: | for objects, not parts |\n| [GetObjectLegalHold](https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObjectLegalHold.html)                                                   | :white_check_mark: |                        |\n| [GetObjectLockConfiguration](https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObjectLockConfiguration.html)                                   | :white_check_mark: |                        |\n| [GetObjectRetention](https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObjectRetention.html)                                                   | :white_check_mark: |                        |\n| [GetObjectTagging](https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObjectTagging.html)                                                       | :white_check_mark: |                        |\n| [GetObjectTorrent](https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObjectTorrent.html)                                                       | :x:                |                        |\n| [GetPublicAccessBlock](https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetPublicAccessBlock.html)                                               | :x:                |                        |\n| [HeadBucket](https://docs.aws.amazon.com/AmazonS3/latest/API/API_HeadBucket.html)                                                                   | :white_check_mark: |                        |\n| [HeadObject](https://docs.aws.amazon.com/AmazonS3/latest/API/API_HeadObject.html)                                                                   | :white_check_mark: |                        |\n| [ListBucketAnalyticsConfigurations](https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListBucketAnalyticsConfigurations.html)                     | :x:                |                        |\n| [ListBucketIntelligentTieringConfigurations](https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListBucketIntelligentTieringConfigurations.html)   | :x:                |                        |\n| [ListBucketInventoryConfigurations](https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListBucketInventoryConfigurations.html)                     | :x:                |                        |\n| [ListBucketMetricsConfigurations](https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListBucketMetricsConfigurations.html)                         | :x:                |                        |\n| [ListBuckets](https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListBuckets.html)                                                                 | :white_check_mark: |                        |\n| [ListMultipartUploads](https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListMultipartUploads.html)                                               | :white_check_mark: |                        |\n| [ListObjects](https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListObjects.html)                                                                 | :white_check_mark: | Deprecated in S3 API   |\n| [ListObjectsV2](https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListObjectsV2.html)                                                             | :white_check_mark: |                        |\n| [ListObjectVersions](https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListObjectVersions.html)                                                   | :white_check_mark: |                        |\n| [ListParts](https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListParts.html)                                                                     | :white_check_mark: |                        |\n| [PostObject](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectPOST.html)                                                                   | :white_check_mark: |                        |\n| [PutBucketAccelerateConfiguration](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketAccelerateConfiguration.html)                       | :x:                |                        |\n| [PutBucketAcl](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketAcl.html)                                                               | :x:                |                        |\n| [PutBucketAnalyticsConfiguration](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketAnalyticsConfiguration.html)                         | :x:                |                        |\n| [PutBucketCors](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketCors.html)                                                             | :x:                |                        |\n| [PutBucketEncryption](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketEncryption.html)                                                 | :x:                |                        |\n| [PutBucketIntelligentTieringConfiguration](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketIntelligentTieringConfiguration.html)       | :x:                |                        |\n| [PutBucketInventoryConfiguration](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketInventoryConfiguration.html)                         | :x:                |                        |\n| [PutBucketLifecycle](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketLifecycle.html)                                                   | :x:                | Deprecated in S3 API   |\n| [PutBucketLifecycleConfiguration](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketLifecycleConfiguration.html)                         | :white_check_mark: |                        |\n| [PutBucketLogging](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketLogging.html)                                                       | :x:                |                        |\n| [PutBucketMetricsConfiguration](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketMetricsConfiguration.html)                             | :x:                |                        |\n| [PutBucketNotification](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketNotification.html)                                             | :x:                |                        |\n| [PutBucketNotificationConfiguration](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketNotificationConfiguration.html)                   | :x:                |                        |\n| [PutBucketOwnershipControls](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketOwnershipControls.html)                                   | :x:                |                        |\n| [PutBucketPolicy](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketPolicy.html)                                                         | :x:                |                        |\n| [PutBucketReplication](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketReplication.html)                                               | :x:                |                        |\n| [PutBucketRequestPayment](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketRequestPayment.html)                                         | :x:                |                        |\n| [PutBucketTagging](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketTagging.html)                                                       | :x:                |                        |\n| [PutBucketVersioning](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketVersioning.html)                                                 | :white_check_mark: |                        |\n| [PutBucketWebsite](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketWebsite.html)                                                       | :x:                |                        |\n| [PutObject](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html)                                                                     | :white_check_mark: |                        |\n| [PutObjectAcl](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObjectAcl.html)                                                               | :white_check_mark: |                        |\n| [PutObjectLegalHold](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObjectLegalHold.html)                                                   | :white_check_mark: |                        |\n| [PutObjectLockConfiguration](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObjectLockConfiguration.html)                                   | :white_check_mark: |                        |\n| [PutObjectRetention](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObjectRetention.html)                                                   | :white_check_mark: |                        |\n| [PutObjectTagging](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObjectTagging.html)                                                       | :white_check_mark: |                        |\n| [PutPublicAccessBlock](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutPublicAccessBlock.html)                                               | :x:                |                        |\n| [RestoreObject](https://docs.aws.amazon.com/AmazonS3/latest/API/API_RestoreObject.html)                                                             | :x:                |                        |\n| [SelectObjectContent](https://docs.aws.amazon.com/AmazonS3/latest/API/API_SelectObjectContent.html)                                                 | :x:                |                        |\n| [UploadPart](https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPart.html)                                                                   | :white_check_mark: |                        |\n| [UploadPartCopy](https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPartCopy.html)                                                           | :white_check_mark: |                        |\n| [WriteGetObjectResponse](https://docs.aws.amazon.com/AmazonS3/latest/API/API_WriteGetObjectResponse.html)                                           | :x:                |                        |\n\n## Usage\n\n### Usage of AWS S3 SDKs\n\nS3Mock can be used with any of the available AWS S3 SDKs.\n\nThe [Integration Tests](integration-tests) contain various examples of how to use the S3Mock with the AWS SDK for Java v1 and v2 in Kotlin.\nThe modules below [testsupport](testsupport) contain examples in Java.\n\n`S3Client` or `S3Presigner` instances are created here:\n* Kotlin: [Integration Test base class](integration-tests/src/test/kotlin/com/adobe/testing/s3mock/its/S3TestBase.kt)\n* Java: [S3Mock unit test starter base class](testsupport/common/src/main/java/com/adobe/testing/s3mock/testsupport/common/S3MockStarter.java)\n\n#### Path-style vs Domain-style access\n\nAWS S3 SDKs usually use domain-style access by default. Configuration is needed for path-style access.\n\nS3Mock currently only supports path-style access (e.g., `http://localhost:9090/bucket/someKey`).\n\nDomain-style access to buckets (e.g., `http://bucket.localhost:9090/someKey`) does not work.\nThis is due to the fact that the domain `localhost` is special and does not allow for subdomain access without modifications to the operating system.\n\n#### Presigned URLs\n\nS3 SDKs can be used to [create presigned URLs](https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-presigned-url.html), the S3 API supports access through those URLs. \n\nS3Mock will accept presigned URLs, but it *ignores all parameters*.  \nFor instance, S3Mock does not verify the HTTP verb that the presigned uri was created with, and it does not validate whether the link is expired or not.\n\nS3 SDKs can be used to create presigned URLs pointing to S3Mock if they're configured for path-style access. See the \"Usage of...\" section above for links to examples on how to use the SDK with presigned URLs.\n\n#### Self-signed SSL certificate\n\nS3Mock supports connections via HTTP and HTTPS. It includes a self-signed SSL certificate which is rejected by most HTTP clients by default.\nTo use HTTPS, the self-signed certificate must be accepted by the client. \n\nOn command line, this can be done by setting the `--no-verify-ssl` option in the AWS CLI or by using the `--insecure` option in cURL, see below.\n\nJava and Kotlin SDKs can be configured to trust any SSL certificate, see links to `S3Client` creation above. \n\n### Usage of AWS CLI\n\nS3Mock can be used with the AWS CLI. Setting the `--endpoint-url` enables path-style access, `--no-verify-ssl` is needed for HTTPS access.\n\nExamples:\n\nCreate bucket \n```shell\naws s3api create-bucket --bucket my-bucket --endpoint-url=http://localhost:9090\n```\n\nPut object \n```shell\naws s3api put-object --bucket my-bucket --key my-file --body ./my-file --endpoint-url=http://localhost:9090\n```\n\nGet object \n```shell\naws s3api get-object --bucket my-bucket --key my-file --endpoint-url=http://localhost:9090 my-file-output\n```\n\nGet object using HTTPS \n```shell\naws s3api get-object --bucket my-bucket --key my-file --no-verify-ssl --endpoint-url=https://localhost:9191 my-file-output\n```\n\n### Usage of plain HTTP / HTTPS with cURL\n\nAs long as the requests work with the S3 API, they will work with S3Mock as well. Use `--insecure` to ignore SSL errors.\n\nExamples:\n\nCreate bucket\n```shell\ncurl --request PUT \"http://localhost:9090/my-test-bucket/\"\n```\n\nPut object\n```shell\ncurl --request PUT --upload-file ./my-file http://localhost:9090/my-test-bucket/my-file\n```\n\nGet object\n```shell\ncurl --request GET http://localhost:9090/my-test-bucket/my-file -O\n```\n\nGet object using HTTPS\n```shell\ncurl --insecure --request GET https://localhost:9191/my-test-bucket/my-file -O\n```\n\n### S3Mock configuration options\n\nThe mock can be configured with the following environment variables:\n\n- `validKmsKeys`: list of KMS Key-Refs that are to be treated as *valid*.\n  - KMS keys must be configured as valid ARNs in the format of \"`arn:aws:kms:region:acct-id:key/key-id`\", for example \"`arn:aws:kms:us-east-1:1234567890:key/valid-test-key-id`\"\n  - The list must be comma separated keys like `arn-1, arn-2`\n  - When requesting with KMS encryption, the key ID is passed to the SDK / CLI, in the example above this would be \"`valid-test-key-id`\".\n  - *S3Mock does not implement KMS encryption*, if a key ID is passed in a request, S3Mock will just validate if a given Key was configured during startup and reject the request if the given Key was not configured.\n- `initialBuckets`: list of names for buckets that will be available initially.\n  - The list must be comma separated names like `bucketa, bucketb`\n- `root`: the base directory to place the temporary files exposed by the mock. If S3Mock is started in Docker, a volume must be mounted as the `root` directory, see examples below.\n- `debug`: set to `true` to enable [Spring Boot's debug output](https://docs.spring.io/spring-boot/docs/current/reference/html/features.html#features.logging.console-output).\n- `trace`: set to `true` to enable  [Spring Boot's trace output](https://docs.spring.io/spring-boot/docs/current/reference/html/features.html#features.logging.console-output).\n- `retainFilesOnExit`: set to `true` to let S3Mock keep all files that were created during its lifetime. Default is `false`, all files are removed if S3Mock shuts down.\n\n### S3Mock Docker\n\nThe `S3Mock` Docker container is the recommended way to use `S3Mock`.  \nIt is released to [Docker Hub](https://hub.docker.com/r/adobe/s3mock).  \nThe container is lightweight, built on top of the official [Linux Alpine image](https://hub.docker.com/_/alpine).\n\nIf needed, configure [memory](https://docs.docker.com/engine/reference/commandline/run/#specify-hard-limits-on-memory-available-to-containers--m---memory) and [cpu](https://docs.docker.com/engine/reference/commandline/run/#options) limits for the S3Mock docker container.\n\nThe JVM will automatically use half the available memory.\n\n#### Start using the command-line\n\nStarting on the command-line:\n\n    docker run -p 9090:9090 -p 9191:9191 -t adobe/s3mock\n\nThe port `9090` is for HTTP, port `9191` is for HTTPS.\n\nExample with configuration via environment variables:\n\n    docker run -p 9090:9090 -p 9191:9191 -e initialBuckets=test -e debug=true -t adobe/s3mock\n\n#### Start using the Fabric8 Docker-Maven-Plugin\n\nOur [integration tests](integration-tests) are using the Amazon S3 Client to verify the server functionality against the S3Mock. During the Maven build, the Docker image is started using the [docker-maven-plugin](https://dmp.fabric8.io/) and the corresponding ports are passed to the JUnit test through the `maven-failsafe-plugin`. See [`BucketIT`](integration-tests/src/test/kotlin/com/adobe/testing/s3mock/its/BucketIT.kt) as an example on how it's used in the code.\n\nThis way, one can easily switch between calling the S3Mock or the real S3 endpoint and this doesn't add any additional Java dependencies to the project.\n\n#### Start using Testcontainers\n\nThe [`S3MockContainer`](testsupport/testcontainers/src/main/java/com/adobe/testing/s3mock/testcontainers/S3MockContainer.java) is a `Testcontainer` implementation that comes pre-configured exposing HTTP and HTTPS ports. Environment variables can be set on startup.\n\nThe example [`S3MockContainerJupiterTest`](testsupport/testcontainers/src/test/java/com/adobe/testing/s3mock/testcontainers/S3MockContainerJupiterTest.java) demonstrates the usage with JUnit 5.  The example [`S3MockContainerManualTest`](testsupport/testcontainers/src/test/java/com/adobe/testing/s3mock/testcontainers/S3MockContainerManualTest.java) demonstrates the usage with plain Java.\n\nTestcontainers provides integrations for JUnit 4, JUnit 5 and Spock.  \nFor more information, visit the [Testcontainers](https://www.testcontainers.org/) website.\n\nTo use the [`S3MockContainer`](testsupport/testcontainers/src/main/java/com/adobe/testing/s3mock/testcontainers/S3MockContainer.java), use the following Maven artifact in `test` scope:\n\n```xml\n\u003cdependency\u003e\n \u003cgroupId\u003ecom.adobe.testing\u003c/groupId\u003e\n \u003cartifactId\u003es3mock-testcontainers\u003c/artifactId\u003e\n \u003cversion\u003e...\u003c/version\u003e\n \u003cscope\u003etest\u003c/scope\u003e\n\u003c/dependency\u003e\n```\n\n#### Start using Docker compose\n\n##### Simple example\n\nCreate a file `docker-compose.yml`\n\n```yaml\nservices:\n  s3mock:\n    image: adobe/s3mock:latest\n    environment:\n      - initialBuckets=bucket1\n    ports:\n      - 9090:9090\n```\n\nStart with `docker compose up -d`\n\nStop with `docker compose down`\n\n##### Expanded example\n\nSuppose we want to see what S3Mock is persisting, and look at the logs it generates in detail.\n\nA local directory is needed, let's call it `locals3root`. This directory must be mounted as a volume into the Docker container when it's started, and that mounted volume must then be configured as the `root` for S3Mock. Let's call the mounted volume inside the container `containers3root`. S3Mock will delete all files when it shuts down, `retainFilesOnExit=true` tells it to leave all files instead.\n\nAlso, to see debug logs, `debug=true` must be configured for S3Mock.\n\nCreate a file `docker-compose.yml`\n\n```yaml\nservices:\n  s3mock:\n    image: adobe/s3mock:latest\n    environment:\n      - debug=true\n      - retainFilesOnExit=true\n      - root=containers3root\n    ports:\n      - 9090:9090\n      - 9191:9191\n    volumes:\n      - ./locals3root:/containers3root\n```\n\nCreate a directory `locals3root`.\n\nStart with `docker compose up -d`\n\nCreate a bucket \"my-test-bucket\" with `curl --request PUT \"http://localhost:9090/my-test-bucket/\"`\n\nStop with `docker compose down`\n\nLook into the directory `locals3root` where metadata and contents of the bucket are stored.\n\n```shell\n$ mkdir s3mock-mounttest\n$ cd s3mock-mounttest\n$ mkdir locals3root\n$ cat docker-compose.yml\nservices:\n  s3mock:\n    image: adobe/s3mock:latest\n    environment:\n      - debug=true\n      - retainFilesOnExit=true\n      - root=containers3root\n    ports:\n      - 9090:9090\n      - 9191:9191\n    volumes:\n      - ./locals3root:/containers3root\n\n$ docker compose up -d\n[+] Running 2/2\n ✔ Network s3mock-mounttest_default     Created\n ✔ Container s3mock-mounttest-s3mock-1  Started\n$ curl --request PUT \"http://localhost:9090/my-test-bucket/\"\n$ docker compose down\n[+] Running 2/0\n ✔ Container s3mock-mounttest-s3mock-1  Removed\n ✔ Network s3mock-mounttest_default     Removed\n \n$ ls locals3root\nmy-test-bucket\n$ ls locals3root/my-test-bucket\nbucketMetadata.json\n```\n\n#### Start using self-signed SSL certificate\n\nS3Mock includes a self-signed SSL certificate:\n\n```shell\n$ curl -vvv --insecure --request GET https://localhost:9191/my-test-bucket/my-file -O\n[...]\n* Server certificate:\n*  subject: C=DE; ST=Hamburg; L=Hamburg; O=S3Mock; OU=S3Mock; CN=Adobe S3Mock\n*  start date: Jul 25 12:28:53 2022 GMT\n*  expire date: Nov 25 12:28:53 3021 GMT\n*  issuer: C=DE; ST=Hamburg; L=Hamburg; O=S3Mock; OU=S3Mock; CN=Adobe S3Mock\n*  SSL certificate verify result: self signed certificate (18), continuing anyway.\n[...]\n```\n\nTo use a custom self-signed SSL certificate, derive your own Docker container from the S3Mock container:\n\n```dockerfile\nFROM adobe/s3mock:4.2.0\n\nENV server.ssl.key-store=/opt/customcert.jks\nENV server.ssl.key-store-password=password\nENV server.ssl.key-alias=selfsigned\n\nRUN keytool -genkey -keyalg RSA -alias selfsigned \\\n  -validity 360 \\\n  -keystore /opt/customcert.jks \\\n  -dname \"cn=Test, ou=Test, o=Docker, l=NY, st=NY, c=US\" \\\n  -storepass password -keysize 2048 \\\n  -ext \"san=dns:localhost\"\n```\n\n```shell\n$ curl -vvv --insecure --request GET https://localhost:9191/my-test-bucket/my-file -O\n[...]\n* Server certificate:\n*  subject: C=US; ST=NY; L=NY; O=Docker; OU=Test; CN=Test\n*  start date: May  9 14:33:40 2025 GMT\n*  expire date: May  4 14:33:40 2026 GMT\n*  issuer: C=US; ST=NY; L=NY; O=Docker; OU=Test; CN=Test\n*  SSL certificate verify result: self signed certificate (18), continuing anyway.\n[...]\n```\n\n### S3Mock Java\n\n`S3Mock` Java libraries are released and published to the Sonatype Maven Repository and subsequently published to\nthe official [Maven mirrors](https://search.maven.org/search?q=g:com.adobe.testing%20a:s3mock).\n\n| :warning: WARNING                                                                                 |\n|:--------------------------------------------------------------------------------------------------|\n| Using the Java libraries is **discouraged**, see explanation below                                |\n| Using the Docker image is **encouraged** to insulate both S3Mock and your application at runtime. |\n\n`S3Mock` is built using Spring Boot, if projects use `S3Mock` by adding the dependency to their project and starting\nthe `S3Mock` during a JUnit test, classpaths of the tested application and of the `S3Mock` are merged, leading\nto unpredictable and undesired effects such as class conflicts or dependency version conflicts.  \nThis is especially problematic if the tested application itself is a Spring (Boot) application, as both applications will load configurations based on availability of certain classes in the classpath, leading to unpredictable runtime behaviour.\n\n_This is the opposite of what software engineers are trying to achieve when thoroughly testing code in continuous integration..._\n\n`S3Mock` dependencies are updated regularly, any update could break any number of projects.  \n**See also [issues labelled \"dependency-problem\"](https://github.com/adobe/S3Mock/issues?q=is%3Aissue+label%3Adependency-problem).**\n\n**See also [the Java section below](#Java)**\n\n#### Start using the JUnit4 Rule\n\nThe example [`S3MockRuleTest`](testsupport/junit4/src/test/java/com/adobe/testing/s3mock/junit4/S3MockRuleTest.java) demonstrates the usage of the `S3MockRule`, which can be configured through a _builder_.\n\nTo use the JUnit4 Rule, use the following Maven artifact in `test` scope:\n\n```xml\n\u003cdependency\u003e\n \u003cgroupId\u003ecom.adobe.testing\u003c/groupId\u003e\n \u003cartifactId\u003es3mock-junit4\u003c/artifactId\u003e\n \u003cversion\u003e...\u003c/version\u003e\n \u003cscope\u003etest\u003c/scope\u003e\n\u003c/dependency\u003e\n```\n\n#### Start using the JUnit5 Extension\n\nThe `S3MockExtension` can currently be used in two ways:\n\n1. Declaratively using `@ExtendWith(S3MockExtension.class)` and by injecting a properly configured instance of `AmazonS3` client and/or the started `S3MockApplication` to the tests.\nSee examples: [`S3MockExtensionDeclarativeTest`](testsupport/junit5/src/test/java/com/adobe/testing/s3mock/junit5/sdk1/S3MockExtensionDeclarativeTest.java)  (for SDKv1)\nor [`S3MockExtensionDeclarativeTest`](testsupport/junit5/src/test/java/com/adobe/testing/s3mock/junit5/sdk2/S3MockExtensionDeclarativeTest.java) (for SDKv2)\n\n2. Programmatically using `@RegisterExtension` and by creating and configuring the `S3MockExtension` using a _builder_.\nSee examples: [`S3MockExtensionProgrammaticTest`](testsupport/junit5/src/test/java/com/adobe/testing/s3mock/junit5/sdk1/S3MockExtensionProgrammaticTest.java) (for SDKv1)\nor [`S3MockExtensionProgrammaticTest`](testsupport/junit5/src/test/java/com/adobe/testing/s3mock/junit5/sdk2/S3MockExtensionProgrammaticTest.java) (for SDKv2)\n\nTo use the JUnit5 Extension, use the following Maven artifact in `test` scope:\n\n```xml\n\u003cdependency\u003e\n  \u003cgroupId\u003ecom.adobe.testing\u003c/groupId\u003e\n  \u003cartifactId\u003es3mock-junit5\u003c/artifactId\u003e\n  \u003cversion\u003e...\u003c/version\u003e\n  \u003cscope\u003etest\u003c/scope\u003e\n\u003c/dependency\u003e\n```\n\n#### Start using the TestNG Listener\n\nThe example [`S3MockListenerXMLConfigurationTest`](testsupport/testng/src/test/java/com/adobe/testing/s3mock/testng/S3MockListenerXmlConfigurationTest.java) demonstrates the usage of the `S3MockListener`, which can be configured as shown in [`testng.xml`](testsupport/testng/src/test/resources/testng.xml). The listener bootstraps the S3Mock application before TestNG execution starts and shuts down the application just before the execution terminates. Please refer to [`IExecutionListener`](https://github.com/testng-team/testng/blob/master/testng-core-api/src/main/java/org/testng/IExecutionListener.java) from the TestNG API.\n\nTo use the TestNG Listener, use the following Maven artifact in `test` scope:\n\n```xml\n\u003cdependency\u003e\n \u003cgroupId\u003ecom.adobe.testing\u003c/groupId\u003e\n \u003cartifactId\u003es3mock-testng\u003c/artifactId\u003e\n \u003cversion\u003e...\u003c/version\u003e\n \u003cscope\u003etest\u003c/scope\u003e\n\u003c/dependency\u003e\n```\n\n#### Start programmatically\n\nInclude the following dependency and use one of the `start` methods in `com.adobe.testing.s3mock.S3MockApplication`:\n\n```xml\n\u003cdependency\u003e\n  \u003cgroupId\u003ecom.adobe.testing\u003c/groupId\u003e\n  \u003cartifactId\u003es3mock\u003c/artifactId\u003e\n  \u003cversion\u003e...\u003c/version\u003e\n\u003c/dependency\u003e\n```\n\n## File System Structure\n\nS3Mock stores Buckets, Objects, Parts and other data on disk.  \nThis lets users inspect the stored data while the S3Mock is running.  \nIf the config property `retainFilesOnExit` is set to `true`, this data will not be deleted when S3Mock is shut down.\n\n| :exclamation: FYI                                                                                                                                                                                                                                   |\n|:----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| While it _may_ be possible to start S3Mock on a root folder from a previous run and have all data available through the S3 API, the structure and contents of the files are not considered Public API, and are subject to change in later releases. |\n| Also, there are no automated test cases for this behaviour.                                                                                                                                                                                         |\n\n### Root-Folder\nS3Mock stores buckets and objects a root-folder.\n\nThis folder is expected to be empty when S3Mock starts. See also FYI above.\n```\n/\u003croot-folder\u003e/\n```\n\n### Buckets\nBuckets are stored as a folder with their name as created through the S3 API directly below the root:\n```\n/\u003croot-folder\u003e/\u003cbucket-name\u003e/\n```\n[BucketMetadata](server/src/main/java/com/adobe/testing/s3mock/store/BucketMetadata.java) is stored in a file in the bucket directory, serialized as JSON.  \n[BucketMetadata](server/src/main/java/com/adobe/testing/s3mock/store/BucketMetadata.java) contains the \"key\" -\u003e \"uuid\" dictionary for all objects uploaded to this bucket among other data.\n```\n/\u003croot-folder\u003e/\u003cbucket-name\u003e/bucketMetadata.json\n```\n### Objects\n\nObjects are stored in folders below the bucket they were created in.\nA folder is created that uses the Object's UUID assigned in the [BucketMetadata](server/src/main/java/com/adobe/testing/s3mock/store/BucketMetadata.java) as a name.\n```\n/\u003croot-folder\u003e/\u003cbucket-name\u003e/\u003cuuid\u003e/\n```\nObject data is stored below that UUID folder.\n\nBinary data is always stored in a file `binaryData`\n```\n/\u003croot-folder\u003e/\u003cbucket-name\u003e/\u003cuuid\u003e/binaryData\n```\n\n[Object metadata](server/src/main/java/com/adobe/testing/s3mock/store/S3ObjectMetadata.java) is serialized as JSON and stored as `objectMetadata.json`\n```\n/\u003croot-folder\u003e/\u003cbucket-name\u003e/\u003cuuid\u003e/objectMetadata.json\n```\n\n[Object ACL](server/src/main/java/com/adobe/testing/s3mock/dto/AccessControlPolicy.java) is serialized as JSON and stored as `objectAcl.xml`\n```\n/\u003croot-folder\u003e/\u003cbucket-name\u003e/\u003cuuid\u003e/objectAcl.json\n```\n\n### Multipart Uploads\n\nMultipart Uploads are created in a bucket using object keys and an uploadId.  \nThe object is assigned a UUID within the bucket (stored in [BucketMetadata](server/src/main/java/com/adobe/testing/s3mock/store/BucketMetadata.java)).  \nThe [Multipart upload metadata](server/src/main/java/com/adobe/testing/s3mock/store/MultipartUploadInfo.java) is currently not stored on disk.\n\nThe multiparts folder is created below the bucket folder and named with the `uploadId`:\n```\n/\u003croot-folder\u003e/\u003cbucket-name\u003e/multiparts/\u003cuploadId\u003e/\n```\n\nThe multiparts metadata file is created below the folder named with the `uploadId`:\n```\n/\u003croot-folder\u003e/\u003cbucket-name\u003e/multiparts/\u003cuploadId\u003e/multipartMetadata.json\n```\n\nEach part is stored in the parts folder with the `partNo` as name and `.part` as a suffix.\n```\n/\u003croot-folder\u003e/\u003cbucket-name\u003e/multiparts/\u003cuploadId\u003e/\u003cpartNo\u003e.part\n```\n\nOnce the MultipartUpload is completed, the `uploadId` folder is deleted.\n\n## Build \u0026 Run\n\nTo build this project, you need Docker, JDK 17 or higher, and Maven:\n\n    ./mvnw clean install\n\nIf you want to skip the Docker build, pass the optional parameter \"skipDocker\":\n\n    ./mvnw clean install -DskipDocker\n\nYou can run the S3Mock from the sources by either of the following methods:\n\n* Run or Debug the class `com.adobe.testing.s3mock.S3MockApplication` in the IDE.\n* using Docker:\n  * `./mvnw clean package -pl server -am -DskipTests`\n  * `docker run -p 9090:9090 -p 9191:9191 -t adobe/s3mock:latest`\n* using the Docker Maven plugin:\n  * `./mvnw clean package docker:start -pl server -am -DskipTests -Ddocker.follow -Dit.s3mock.port_http=9090 -Dit.s3mock.port_https=9191` (stop with `ctrl-c`)\n\nOnce the application is started, you can execute the `*IT` tests from your IDE.\n\n### Java\nThis repo is built with Java 17, output is _currently_ bytecode compatible with Java 17.\n\n### Kotlin\nThe [Integration Tests](integration-tests) are built in Kotlin.\n\n## Governance model\n\nThe project owner and leads makes all final decisions. See the `developers` section in the [pom.xml](pom.xml) for a list of leads.\n\n## Vulnerability reports\n\nS3Mock uses GitHub actions to produce an SBOM and to check dependencies for vulnerabilities. All vulnerabilities are evaluated and fixed if possible.\nVulnerabilities may also be reported through the GitHub issue tracker.\n\n## Security\n\nS3Mock is not intended to be used in production environments. It is a mock server that is meant to be used in development and testing environments only. It does not implement all security features of AWS S3, and should not be used as a replacement for AWS S3 in production.\nIt is implemented using [Spring Boot](https://github.com/spring-projects/spring-boot), which is a Java framework that is designed to be secure by default.\n\n## Contributing\n\nContributions are welcome! Read the [Contributing Guide](./.github/CONTRIBUTING.md) for more information.\n\n## Licensing\n\nThis project is licensed under the Apache V2 License. See [LICENSE](LICENSE) for more information.\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fadobe%2Fs3mock","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fadobe%2Fs3mock","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fadobe%2Fs3mock/lists"}