{"id":13872234,"url":"https://github.com/soto-project/soto","last_synced_at":"2025-05-16T01:06:56.123Z","repository":{"id":37080786,"uuid":"84738742","full_name":"soto-project/soto","owner":"soto-project","description":"Swift SDK for AWS that works on Linux, macOS and iOS","archived":false,"fork":false,"pushed_at":"2025-05-05T03:11:37.000Z","size":382966,"stargazers_count":916,"open_issues_count":10,"forks_count":91,"subscribers_count":16,"default_branch":"main","last_synced_at":"2025-05-05T04:24:23.407Z","etag":null,"topics":["aws","aws-sdk","aws-sdk-swift","server-side-swift","swift","swift-nio"],"latest_commit_sha":null,"homepage":"https://soto.codes","language":"Swift","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/soto-project.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null},"funding":{"github":"adam-fowler"}},"created_at":"2017-03-12T16:07:09.000Z","updated_at":"2025-05-03T08:14:15.000Z","dependencies_parsed_at":"2023-02-19T04:00:43.167Z","dependency_job_id":"de1ef146-33a7-4e3b-acb7-2bf9a21fea79","html_url":"https://github.com/soto-project/soto","commit_stats":{"total_commits":867,"total_committers":10,"mean_commits":86.7,"dds":0.2295271049596309,"last_synced_commit":"eda662e974ab718a1932c3e4f3f0d63d2024b67b"},"previous_names":["swift-aws/aws-sdk-swift"],"tags_count":115,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/soto-project%2Fsoto","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/soto-project%2Fsoto/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/soto-project%2Fsoto/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/soto-project%2Fsoto/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/soto-project","download_url":"https://codeload.github.com/soto-project/soto/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254448579,"owners_count":22072764,"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":["aws","aws-sdk","aws-sdk-swift","server-side-swift","swift","swift-nio"],"created_at":"2024-08-05T23:00:37.637Z","updated_at":"2025-05-16T01:06:51.092Z","avatar_url":"https://github.com/soto-project.png","language":"Swift","funding_links":["https://github.com/sponsors/adam-fowler"],"categories":["Swift","SDKs and Samples"],"sub_categories":["Swift SDK"],"readme":"# Soto for AWS\n\n[![sswg:incubating|104x20](https://img.shields.io/badge/sswg-incubating-blue.svg)](https://github.com/swift-server/sswg/blob/master/process/incubation.md#incubating-level)\n[\u003cimg src=\"http://img.shields.io/badge/swift-5.6_to_5.8-brightgreen.svg\" alt=\"Swift 5.4\" /\u003e](https://swift.org)\n[\u003cimg src=\"https://github.com/soto-project/soto/workflows/CI/badge.svg\" /\u003e](https://github.com/soto-project/soto/actions?query=workflow%3ACI)\n\nSoto is a Swift language SDK for Amazon Web Services (AWS), working on Linux, macOS and iOS. This library provides access to all AWS services. The service APIs it provides are a direct mapping of the REST APIs Amazon publishes for each of its services. Soto is a community supported project and is in no way affiliated with AWS.\n\nTable of Contents\n-----------------\n\n- [Structure](#structure)\n- [Swift Package Manager](#swift-package-manager)\n- [Compatibility](#compatibility)\n- [Configuring Credentials](#configuring-credentials)\n- [Using Soto](#using-soto)\n- [Documentation](#documentation)\n    - [API Reference](#api-reference)\n    - [User guides](#user-guides)\n- [Contributing](#contributing)\n- [License](#license)\n\n## Structure\n\nThe library consists of three parts\n1. [soto-core](https://github.com/soto-project/soto-core) which does all the core request encoding and signing, response decoding and error handling.\n2. The service [api files](https://github.com/soto-project/soto/tree/main/Sources/Soto/Services) which define the individual AWS services and their commands with their input and output structures.\n3. The [CodeGenerator](https://github.com/soto-project/soto/tree/main/CodeGenerator) which builds the service api files from the [JSON model](https://github.com/soto-project/soto/tree/main/models/apis) files supplied by Amazon.\n\n## Swift Package Manager\n\nSoto uses the Swift Package Manager to manage its code dependencies. To use Soto in your codebase it is recommended you do the same. Add a dependency to the package in your own Package.swift dependencies.\n```swift\n    dependencies: [\n        .package(url: \"https://github.com/soto-project/soto.git\", from: \"6.0.0\")\n    ],\n```\nThen add target dependencies for each of the Soto targets you want to use.\n```swift\n    targets: [\n        .target(name: \"MyApp\", dependencies: [\n            .product(name: \"SotoS3\", package: \"soto\"),\n            .product(name: \"SotoSES\", package: \"soto\"),\n            .product(name: \"SotoIAM\", package: \"soto\")\n        ]),\n    ]\n)\n```\nAlternatively if you are using Xcode 11 or later you can use the Swift Package Manager integration and add a dependency to Soto through that.\n\n## Compatibility\n\nSoto works on Linux, macOS and iOS. It requires v2.0 of [Swift NIO](https://github.com/apple/swift-nio). Below is a compatibility table for different Soto versions.\n\n| Version | Swift | MacOS | iOS    | Linux              | Vapor  |\n|---------|-------|-------|--------|--------------------|--------|\n| 6.x     | 5.4 - | ✓     | 12.0 - | Ubuntu 18.04-22.04 | 4.0    |\n| 5.x     | 5.2 - | ✓     | 12.0 - | Ubuntu 18.04-20.04 | 4.0    |\n\n## Configuring Credentials\n\nBefore using the SDK, you will need AWS credentials to sign all your requests. Credentials can be provided to the library in the following ways.\n- Environment variables `AWS_ACCESS_KEY_ID` and `AWS_SECRET_ACCESS_KEY`\n- ECS container IAM policy\n- EC2 IAM instance profile\n- Shared credentials file in your home directory\n- Static credentials provided at runtime\n\nYou can find out more about credential providers [here](https://soto.codes/user-guides/credential-providers.html)\n\n## Using Soto\n\nTo use Soto you need to create an `AWSClient` and a service object for the AWS service you want to work with. The `AWSClient` provides all the communication with AWS and the service object provides the configuration and APIs for communicating with a specific AWS service. More can be found out about `AWSClient` [here](https://soto.codes/user-guides/awsclient.html) and the AWS service objects [here](https://soto.codes/user-guides/service-objects.html).\n\n```swift\nimport SotoS3 //ensure this module is specified as a dependency in your package.swift\n\nlet bucket = \"my-bucket\"\n\nlet client = AWSClient(\n    credentialProvider: .static(accessKeyId: \"Your-Access-Key\", secretAccessKey: \"Your-Secret-Key\"),\n    httpClientProvider: .createNew\n)\nlet s3 = S3(client: client, region: .uswest2)\n\nfunc createBucketPutGetObject() async throws -\u003e S3.GetObjectOutput {\n    // Create Bucket, Put an Object, Get the Object\n    let createBucketRequest = S3.CreateBucketRequest(bucket: bucket)\n    _ = try await s3.createBucket(createBucketRequest)\n    // Upload text file to the s3\n    let bodyData = \"hello world\"\n    let putObjectRequest = S3.PutObjectRequest(\n        acl: .publicRead,\n        body: .string(bodyData),\n        bucket: bucket,\n        key: \"hello.txt\"\n    )\n    _ = try await s3.putObject(putObjectRequest)\n    // download text file just uploaded to S3\n    let getObjectRequest = S3.GetObjectRequest(bucket: bucket, key: \"hello.txt\")\n    let response = try await s3.getObject(getObjectRequest)\n    // print contents of response\n    if let body = response.body?.asString() {\n        print(body)\n    }\n    return response\n}\n```\n\n## Build Plugin\n\nSoto is a vary large package. If you would rather not include it in your package dependencies you can instead use the SotoCodeGenerator Swift Package Manager build plugin to generate the Swift source code for only the services/operations you actually need. Find out more [here](https://github.com/soto-project/soto-codegenerator/blob/main/README.md).\n\n## Documentation\n\n### API Reference\n\nVisit [soto.codes](https://soto.codes) to browse the user guides and api reference. As there is a one-to-one correspondence with AWS REST api calls and the Soto api calls, you can also use the official AWS [documentation](https://docs.aws.amazon.com/) for more detailed information about AWS commands.\n\n### User guides\n\nAdditional user guides for specific elements of Soto are available\n\n- [Getting Started](https://soto.codes/getting-started.html)\n- [Upgrading to Soto v5](https://soto.codes/2020/12/upgrading-to-v5.html)\n- [AWSClient](https://soto.codes/user-guides/awsclient.html)\n- [AWS Service Objects](https://soto.codes/user-guides/service-objects.html)\n- [Credential Providers](https://soto.codes/user-guides/credential-providers.html)\n- [Error Handling](https://soto.codes/user-guides/error-handling.html)\n- [Streaming Payloads](https://soto.codes/user-guides/streaming-payloads.html)\n- [DynamoDB and Codable](https://soto.codes/user-guides/dynamodb-and-codable.html)\n- [S3 Multipart Upload](https://soto.codes/user-guides/s3-multipart-upload.html)\n- [Using Soto on AWS Lambda](https://soto.codes/user-guides/using-soto-on-aws-lambda.html)\n- [Using Soto with Vapor 4](https://soto.codes/user-guides/using-soto-with-vapor.html)\n\n## Contributing\n\nWe welcome and encourage contributions from all developers. Please read [CONTRIBUTING.md](CONTRIBUTING.md) for our contributing guidelines.\n\n## License\nSoto is released under the [Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0). See LICENSE for details.\n\n## Backers\nSupport development of Soto by becoming a [backer](https://github.com/sponsors/adam-fowler)\n\n\u003ca href=\"https://github.com/brokenhandsio\"\u003e\n    \u003cimg src=\"https://avatars1.githubusercontent.com/u/23179490?s=120\" width=\"60px\"\u003e\n\u003c/a\u003e\n\u003ca href=\"https://github.com/bitwit\"\u003e\n    \u003cimg src=\"https://avatars1.githubusercontent.com/u/707507?s=120\" width=\"60px\"\u003e\n\u003c/a\u003e\n\u003ca href=\"https://github.com/slashmo\"\u003e\n    \u003cimg src=\"https://avatars1.githubusercontent.com/u/16192401?s=120\" width=\"60px\"\u003e\n\u003c/a\u003e\n\u003ca href=\"https://github.com/idelfonsog2\"\u003e\n    \u003cimg src=\"https://avatars1.githubusercontent.com/u/7195235?s=120\" width=\"60px\"\u003e\n\u003c/a\u003e\n\u003ca href=\"https://github.com/rausnitz\"\u003e\n    \u003cimg src=\"https://avatars1.githubusercontent.com/u/6132143?s=120\" width=\"60px\"\u003e\n\u003c/a\u003e\n\u003ca href=\"https://github.com/florentmorin\"\u003e\n    \u003cimg src=\"https://avatars1.githubusercontent.com/u/1071783?s=120\" width=\"60px\"\u003e\n\u003c/a\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsoto-project%2Fsoto","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsoto-project%2Fsoto","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsoto-project%2Fsoto/lists"}