{"id":30019837,"url":"https://github.com/veupathdb/lib-s34k","last_synced_at":"2026-05-15T12:04:30.082Z","repository":{"id":40424706,"uuid":"481392847","full_name":"VEuPathDB/lib-s34k","owner":"VEuPathDB","description":"S3 for Kotlin","archived":false,"fork":false,"pushed_at":"2024-02-05T19:39:21.000Z","size":3767,"stargazers_count":0,"open_issues_count":8,"forks_count":0,"subscribers_count":20,"default_branch":"main","last_synced_at":"2025-08-06T09:50:43.343Z","etag":null,"topics":["aws","kotlin","library","s3"],"latest_commit_sha":null,"homepage":"","language":"Kotlin","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/VEuPathDB.png","metadata":{"files":{"readme":"readme.adoc","changelog":null,"contributing":null,"funding":null,"license":null,"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}},"created_at":"2022-04-13T22:31:40.000Z","updated_at":"2022-04-13T22:40:19.000Z","dependencies_parsed_at":"2024-02-05T20:36:34.970Z","dependency_job_id":"1e01e4ba-dd13-46cd-ad08-d5623652cfab","html_url":"https://github.com/VEuPathDB/lib-s34k","commit_stats":null,"previous_names":[],"tags_count":14,"template":false,"template_full_name":null,"purl":"pkg:github/VEuPathDB/lib-s34k","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/VEuPathDB%2Flib-s34k","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/VEuPathDB%2Flib-s34k/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/VEuPathDB%2Flib-s34k/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/VEuPathDB%2Flib-s34k/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/VEuPathDB","download_url":"https://codeload.github.com/VEuPathDB/lib-s34k/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/VEuPathDB%2Flib-s34k/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33066133,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-15T11:35:32.926Z","status":"ssl_error","status_checked_at":"2026-05-15T11:35:31.362Z","response_time":103,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"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","kotlin","library","s3"],"created_at":"2025-08-06T01:21:43.808Z","updated_at":"2026-05-15T12:04:30.077Z","avatar_url":"https://github.com/VEuPathDB.png","language":"Kotlin","funding_links":[],"categories":[],"sub_categories":[],"readme":"= S3 for Kotlin\n:source-highlighter: highlightjs\n\nimage:https://img.shields.io/badge/jvm-1.8-blue[title=\"Compatible with JVM 1.8\"]\nimage:https://img.shields.io/github/v/release/veupathdb/lib-s34k[title=\"Version\"]\nimage:https://img.shields.io/badge/docs-javadoc-brightgreen[link=\"https://veupathdb.github.io/lib-s34k/javadoc\"]\nimage:https://img.shields.io/badge/docs-dokka-brightgreen[link=\"https://veupathdb.github.io/lib-s34k/dokka\"]\n\n////\nTODO: Region should only be optional at the client level and in params, buckets\n      and objects have a region attached always.\n\nTODO: should the tags field on BucketPutParams be moved to BPTagPutParams? Yes\n\nTODO: Object put retention\nTODO: Object put legal hold\nTODO: Object put user meta\nTODO: object put SSE\n\nTODO: Version IDs\n\nTODO: ObjectWriteOperation `tags` field should be moved down to subtypes as tags\n      are not always set.\n\nTODO: Bucket.exists method?\n\nTODO: enable/disable legal hold\n\nTODO: retention periods\n\nTODO: get all tags params\n\nTODO: param configuration functions (such as `callback(action: () -\u003e Unit)` that\n      create a more dsl like vibe\n////\n\n== Usage\n\nS34K defines the base API for a generalized abstraction layer over S3 API clients and SDKs treating the target S3 store\nas a remote filesystem.\n\nThis project and repository simply defines a standard API and does not provide any functionality on its own.\n\nUsage of this API is done through specific implementations (such as\nhttps://github.com/VEuPathDB/lib-s34k-minio[S34K-Minio]).\n\n.*Adding to project*:\n[source, kotlin]\n----\n    implementation(\"org.veupathdb.lib.s3:s34k:0.11.0\")\n----\n\n=== Examples\n\n.Getting an `S3Client` instance\n[source, kotlin]\n----\nfun main() {\n  val client = S3Api.newClient(S3Config(\n    url       = \"my-s3-host\",\n    accessKey = System.getenv(\"S3_ACCESS_KEY\"),\n    secretKey = System.getenv(\"S3_SECRET_KEY\"),\n  ))\n}\n----\n\n.Upserting a bucket\n[source, kotlin]\n----\nfun main() {\n  val client = S3Api.newClient(...)\n\n  // Simple call\n  val bucket1 = client.buckets.createIfNotExists(\"my-bucket-1\")\n\n  // Customized call\n  val bucket2 = client.buckets.createIfNotExists {\n    bucketName = \"my-bucket-2\"\n    headers.add(\"x-my-custom-header\", \"some value\")\n    tags.add(\"some-tag\", \"some tag value\")\n  }\n}\n----\n\n.Uploading a file\n[source, kotlin]\n----\nfun main() {\n  val client = S3Api.newClient(...)\n  val bucket = client.getBucket(\"my-bucket\")\n\n  // Simple call\n  bucket.objects.upload(\"my/object/key\", File(\"/path/to/some/local/file\"))\n\n  // Customized call\n  bucket.objects.upload {\n    path      = \"my/object/key2\"\n    localFile = File(\"/path/to/some/file\")\n    partSize  = 26_214_400 // 25MiB\n    tags.add(\n      \"foo\"  to \"bar\",\n      \"fizz\" to \"buzz\",\n    )\n  }\n}\n----\n\n\n== Operations\n\nThe following operations are currently supported as of `v0.4.0`\n\n=== Bucket\n\nBucket operations are accessible through the `buckets` property on the `S3Client` type.\n\n.*Bucket Operations*:\n* Create\n* Delete\n* Delete recursive\n* Exists Test\n* List buckets\n\nBucket tag operations are accessible through the `tags` property on the `S3Bucket` type.\n\n.*Bucket Tag Operations*:\n* Delete tags (all)\n* Delete tags (targeted)\n* Get tags\n* Put tags\n\n\n\n=== Object\n\nObject operations are accessible through the `objects` property on the `S3Bucket` type.\n\n.*Object Operations*:\n* Bucket contains object\n* Count objects in bucket\n* Count 'directories' in bucket\n* Delete Object\n* Delete Objects (targeted)\n* Download\n* Exists test\n* List all objects\n* List prefixed objects\n* Open (stream over contents)\n* Put Object\n* Remove 'directory'\n* Stat\n* Touch object\n* Upload object\n\nObject tag operations are accessible through the `tags` property on the `S3Object` type.\n\n.*Object Tag Operations*:\n* Delete Tags (all)\n* Delete Tags (targeted)\n* Get Tags\n* Put Tags\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fveupathdb%2Flib-s34k","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fveupathdb%2Flib-s34k","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fveupathdb%2Flib-s34k/lists"}