{"id":26553578,"url":"https://github.com/encalmo/scala-aws-client","last_synced_at":"2026-04-30T08:39:43.299Z","repository":{"id":283146948,"uuid":"942244554","full_name":"encalmo/scala-aws-client","owner":"encalmo","description":"This Scala library wraps selected parts of the AWS SDK for Java 2.x to offer simpler, scala-idiomatic API.","archived":false,"fork":false,"pushed_at":"2025-03-18T19:01:15.000Z","size":152,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-03-18T20:22:33.735Z","etag":null,"topics":["aws-client","scala","scala3"],"latest_commit_sha":null,"homepage":"https://encalmo.github.io/scala-aws-client/","language":"Scala","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/encalmo.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2025-03-03T20:02:05.000Z","updated_at":"2025-03-18T19:01:51.000Z","dependencies_parsed_at":"2025-03-18T20:22:39.079Z","dependency_job_id":null,"html_url":"https://github.com/encalmo/scala-aws-client","commit_stats":null,"previous_names":["encalmo/scala-aws-client"],"tags_count":6,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/encalmo%2Fscala-aws-client","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/encalmo%2Fscala-aws-client/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/encalmo%2Fscala-aws-client/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/encalmo%2Fscala-aws-client/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/encalmo","download_url":"https://codeload.github.com/encalmo/scala-aws-client/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":244933867,"owners_count":20534452,"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-client","scala","scala3"],"created_at":"2025-03-22T09:24:28.466Z","updated_at":"2026-04-30T08:39:43.294Z","avatar_url":"https://github.com/encalmo.png","language":"Scala","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003ca href=\"https://github.com/encalmo/scala-aws-client\"\u003e![GitHub](https://img.shields.io/badge/github-%23121011.svg?style=for-the-badge\u0026logo=github\u0026logoColor=white)\u003c/a\u003e \u003ca href=\"https://central.sonatype.com/artifact/org.encalmo/scala-aws-client_3\" target=\"_blank\"\u003e![Maven Central Version](https://img.shields.io/maven-central/v/org.encalmo/scala-aws-client_3?style=for-the-badge)\u003c/a\u003e \u003ca href=\"https://encalmo.github.io/scala-aws-client/scaladoc/org/encalmo/aws.html\" target=\"_blank\"\u003e\u003cimg alt=\"Scaladoc\" src=\"https://img.shields.io/badge/docs-scaladoc-red?style=for-the-badge\"\u003e\u003c/a\u003e\n\n# scala-aws-client\n\nThis Scala library wraps selected parts of the [AWS SDK for Java 2.x](https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/home.html) to offer simpler, scala-idiomatic API.\n\n## Table of contents\n\n- [Services](#services)\n- [Usage](#usage)\n- [Dependencies](#dependencies)\n- [Working with DynamoDB](#working-with-dynamodb)\n   - [Using AwsDynamoDbApi](#using-awsdynamodbapi)\n   - [Using DynamoDbTable trait](#using-dynamodbtable-trait)\n   - [Using DynamoDbTableWithSortKey trait](#using-dynamodbtablewithsortkey-trait)\n\n## Services\n\n- IAM\n- DynamoDB\n- ApiGateway\n- SQS\n- Lambda\n- S3\n- SecretsManager\n- STS\n- KMS\n\n## Usage\n\nUse with SBT\n\n    libraryDependencies += \"org.encalmo\" %% \"scala-aws-client\" % \"0.9.8\"\n\nor with SCALA-CLI\n\n    //\u003e using dep org.encalmo::scala-aws-client:0.9.8\n\n## Dependencies\n\n   - [Scala](https://www.scala-lang.org) \u003e= 3.6.3\n   - [Scala **toolkit** 0.7.0](https://github.com/scala/toolkit)\n   - org.slf4j [**slf4j-nop** 2.0.17](https://central.sonatype.com/artifact/org.slf4j/slf4j-nop)\n   - software.amazon.awssdk [**bom** 2.31.6](https://central.sonatype.com/artifact/software.amazon.awssdk/bom) | [**iam** 2.31.6](https://central.sonatype.com/artifact/software.amazon.awssdk/iam) | [**sts** 2.31.6](https://central.sonatype.com/artifact/software.amazon.awssdk/sts) | [**sso** 2.31.6](https://central.sonatype.com/artifact/software.amazon.awssdk/sso) | [**ssooidc** 2.31.6](https://central.sonatype.com/artifact/software.amazon.awssdk/ssooidc) | [**dynamodb** 2.31.6](https://central.sonatype.com/artifact/software.amazon.awssdk/dynamodb) | [**sqs** 2.31.6](https://central.sonatype.com/artifact/software.amazon.awssdk/sqs) | [**secretsmanager** 2.31.6](https://central.sonatype.com/artifact/software.amazon.awssdk/secretsmanager) | [**kms** 2.31.6](https://central.sonatype.com/artifact/software.amazon.awssdk/kms) | [**s3** 2.31.6](https://central.sonatype.com/artifact/software.amazon.awssdk/s3) | [**lambda** 2.31.6](https://central.sonatype.com/artifact/software.amazon.awssdk/lambda) | [**apigateway** 2.31.6](https://central.sonatype.com/artifact/software.amazon.awssdk/apigateway) | [**apigatewayv2** 2.31.6](https://central.sonatype.com/artifact/software.amazon.awssdk/apigatewayv2) | [**url-connection-client** 2.31.6](https://central.sonatype.com/artifact/software.amazon.awssdk/url-connection-client)\n\n## Working with DynamoDB\n\n### Using AwsDynamoDbApi\n\n```scala\n  import org.encalmo.aws.AwsClient\n  import org.encalmo.aws.AwsDynamoDbApi.*\n  import org.encalmo.aws.AwsDynamoDbApi.given\n  import org.encalmo.models.{CUID2, Amount}\n\n  val id = CUID2.randomCUID2()\n\n  AwsClient.maybe {\n    putItemInTable(\n      tableName = \"items\",\n      item = DynamoDbItem(\n        \"item_id\" -\u003e id,\n        \"status\" -\u003e \"fine\",\n        \"price\" -\u003e 12345,\n        \"is_for_sale\" -\u003e true\n      )\n    )\n  }\n\n  val item3 = AwsClient.optionally {\n    getItemFromTable(\"items\", (\"item_id\" -\u003e id))\n  }\n```\n\n### Using DynamoDbTable trait\n\n```scala\n    import org.encalmo.aws.DynamoDbTable\n    import org.encalmo.aws.AwsDynamoDbApi.{*,given}\n    import org.encalmo.models.{CUID2, Amount}\n\n    given DynamoDbEnvironment = DefaultDynamoDbEnvironment\n    given ErrorContext = DefaultErrorContext\n\n    case class Item(\n      item_id: CUID2,\n      price: Amount,\n      `is-for-sale`: Boolean,\n      description: Option[String] = None\n  )\n\n    object Items extends DynamoDbTable[CUID2](\"item_id\") {\n      override inline def baseTableName: String = \"items\"\n    }\n\n    val id = CUID2.randomCUID2()\n\n    val item = Item(\n      item_id = id,\n      price = Amount(1234),\n      is_for_sale = false\n    )\n\n    Items.setItem(item)\n    val item2 = Items.getItemAsClass[Item](id)\n    assert(item2.isDefined)\n\n    Items.getItem(id)\n    Items.setItemProperties(id, \"is_for_sale\" -\u003e true, \"price\" -\u003e Amount(1234))\n    Items.setItemProperties(id, \"description\" -\u003e \"some old crap\")\n    Items.getItem(id)\n    Items.removeItem(id)\n```\n\n### Using DynamoDbTableWithSortKey trait\n\n```scala\n    import org.encalmo.aws.DynamoDbTable\n    import org.encalmo.aws.AwsDynamoDbApi.{*,given}\n    import org.encalmo.models.{CUID2, Amount}\n\n    object OrdersTable extends DynamoDbTableWithSortKey[String, Long](\"order_id\", \"createdAt\") {\n      override inline def baseTableName: String = \"orders\"\n    }\n\n    given DynamoDbEnvironment = DefaultDynamoDbEnvironment\n    given ErrorContext = DefaultErrorContext\n\n    val id = CUID2.randomCUID2()\n    val createdAt = Instant.now().getEpochSecond()\n\n    assert(OrdersTable.getItemOrError(id, createdAt).isLeft)\n    OrdersTable.setItemProperties(id, createdAt, \"status\" -\u003e \"submitted\")\n    assert(OrdersTable.getItemOrError(id, createdAt).isRight)\n    OrdersTable.removeItemProperty(id, createdAt, \"status\")\n    assert(OrdersTable.getItemOrError(id, createdAt).isRight)\n    OrdersTable.removeItem(id, createdAt)\n    assert(OrdersTable.getItemOrError(id, createdAt).isLeft)\n```\n\n\n## Project content\n\n```\n├── .github\n│   └── workflows\n│       ├── pages.yaml\n│       ├── release.yaml\n│       └── test.yaml\n│\n├── .gitignore\n├── .scalafix.conf\n├── .scalafmt.conf\n├── AwsApiGatewayApi.scala\n├── AwsApiGatewayV2Api.scala\n├── AwsClient.scala\n├── AwsClient.test.scala\n├── AwsClientStatefulStub.scala\n├── AwsClientStatefulStub.test.scala\n├── AwsClientStatelessStub.scala\n├── AwsClientStatelessStub.test.scala\n├── AwsDynamoDbApi.scala\n├── AwsDynamoDbApi.test.scala\n├── AwsIamApi.scala\n├── AwsKmsApi.scala\n├── AwsKmsApi.test.scala\n├── AwsLambdaApi.scala\n├── AwsLambdaApi.test.scala\n├── AwsS3Api.scala\n├── AwsSecretsManagerApi.scala\n├── AwsSqsApi.scala\n├── AwsStsApi.scala\n├── AwsStsApi.test.scala\n├── DynamoDbEnvironment.scala\n├── DynamoDbTable.scala\n├── DynamoDbTable.test.scala\n├── DynamoDbTableWithSortKey.scala\n├── DynamoDbTableWithSortKey.test.scala\n├── ErrorContext.scala\n├── LICENSE\n├── Macros.scala\n├── Macros.test.scala\n├── project.scala\n├── README.md\n├── test.sh\n├── TestSuite.test.scala\n└── Utils.scala\n```","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fencalmo%2Fscala-aws-client","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fencalmo%2Fscala-aws-client","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fencalmo%2Fscala-aws-client/lists"}