Why SimpleS3? - Genbox/SimpleS3 GitHub Wiki

Amazon already created a library for S3 that can be found here. While it is a great API for a lot of people, I found it had a lot of problems. Here are the advantages of using SimpleS3:

  1. It works with third-party services such as Wasabi and Minio. Amazon's AWS SDK does not.
  2. It is very easy to use for newcomers. In AWS SDK you have to click through 10 pages of documentation just to upload an object.
  3. It is very small in size. SimpleS3 is just 520 kb in size, where AWS SDK is 3.5 MB.
  4. Built with simplicity in mind. In AWS SDK you have to do a lot of guesswork to use certain features.
  5. Much better security.
    • We use byte arrays for keys. AWS SDK has a security vulnerability because it stores the secret access key as a string.
    • We always clear derived keys after use. AWS SDK never clears the derived key
    • We support in-memory encryption of keys.
    • We support secure on-disk storage using encrypted profiles.
  6. We are designed for dependency injection.
    • Best practices for library architecture were followed in the design phase to ensure correct layering of abstractions and componentization.
    • Support for Microsoft's logging infrastructure. AWS SDK has made their own which is not as flexible.
    • Easy unit testing without the use of mocking as everything is designed against an interface.
  7. SimpleS3 is designed with high-performance and low-memory scenarios in mind.
    • Encoding, transformations and crypto code is benchmarked to ensure high throughput.
    • No extra memory allocations. Everything is memory-pooled and reused.
    • Everything is implemented asynchronously.
  8. We validate everything on the client-side.
    • Can you upload an object with '&' (ampersand) in the name? You won't find out until you try and your request fails.

To solve the problems above, I created this library as an alternative to the AWS SDK library. I think S3 is a great service and everyone should be able to use it with ease, without sacrificing security, performance or flexibility.