{"id":19431905,"url":"https://github.com/cmdjulian/kirc","last_synced_at":"2026-04-07T16:04:31.612Z","repository":{"id":64362295,"uuid":"524628199","full_name":"cmdjulian/kirc","owner":"cmdjulian","description":"Sync / Coroutines / Reactive Container Registry Client written in Kotlin ready for GraalVM 🐋","archived":false,"fork":false,"pushed_at":"2026-04-01T19:39:48.000Z","size":2366,"stargazers_count":12,"open_issues_count":13,"forks_count":1,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-04-02T07:22:56.328Z","etag":null,"topics":["coroutines","docker","fuel","java","jvm","kotlin","oci","projectreactor","reactive","registry"],"latest_commit_sha":null,"homepage":"https://github.com/opencontainers/distribution-spec/blob/main/spec.md#pull","language":"Kotlin","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/cmdjulian.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","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,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2022-08-14T09:38:52.000Z","updated_at":"2026-03-26T13:35:20.000Z","dependencies_parsed_at":"2026-01-17T19:07:22.122Z","dependency_job_id":null,"html_url":"https://github.com/cmdjulian/kirc","commit_stats":null,"previous_names":[],"tags_count":37,"template":false,"template_full_name":null,"purl":"pkg:github/cmdjulian/kirc","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cmdjulian%2Fkirc","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cmdjulian%2Fkirc/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cmdjulian%2Fkirc/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cmdjulian%2Fkirc/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/cmdjulian","download_url":"https://codeload.github.com/cmdjulian/kirc/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cmdjulian%2Fkirc/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31518682,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-07T03:10:19.677Z","status":"ssl_error","status_checked_at":"2026-04-07T03:10:13.982Z","response_time":105,"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":["coroutines","docker","fuel","java","jvm","kotlin","oci","projectreactor","reactive","registry"],"created_at":"2024-11-10T14:32:51.589Z","updated_at":"2026-04-07T16:04:31.577Z","avatar_url":"https://github.com/cmdjulian.png","language":"Kotlin","funding_links":[],"categories":[],"sub_categories":[],"readme":"[![](https://jitpack.io/v/cmdjulian/kirc.svg)](https://jitpack.io/#cmdjulian/kirc)\n\n# kirc - (k)container image registry client\n\n![kirc](./logo.png)\n\nKotlin client utilizing CoRoutines and Fuel to interact with the Container Registry API V2.\nIt supports all the read operations from the spec and can not only handle docker format but also oci.\nThe library is compatible with GraalVM and does already include the required reflection configs.\n\n## Overview\n\nA client can be obtained by the factory pattern from `{MODULE}ContainerImageClientFactory`.\nAfter initializing the client, we can also pin it to a specific container image (repository and reference like Tag or\nDigest) and make it an `ContainerImageClient` with the `.toImageClient()` function. This client is then used to interact\nwith a specific Image and provides some Image specific functions like the compressed size.\n\nThe library throws a dedicated error type to report back on exceptions for the different calls. It wraps a specific\ninstance of `RegistryClientException` for all errors. These errors are than divided into\n\n1. a more general `ClientErrorException` like if a manifest was tried to be retrieved but didn't exist\n   (`ClientErrorException.NotFoundException`)\n2. network related errors (`NetworkError`) like HostNotFound or SSL related errors\n3. unexpected errors (`UnknownError`)\n\nAs an authentication schema, JWT auth and BasicAuth are supported. Currently, there are no plans to implement\ncertificate\nbased authentication.\n\nThe Registry communication can be done using either `HTTP` or `HTTPS`. The library is also able to use a proxy for the\ncommunication.\n\n## Functionality\n\n### Implemented\n\n- ping\n- list images\n- list tags\n- retrieve blob\n- exists manifest\n- retrieve manifest\n- delete manifest\n- download image\n- inspect image\n\n### Missing\n\n- manifest attachments, such as attestations and other non-manifest data are currently not supported and are ignored\n\n## Modules\n\nThe lib is published in three different flavors. All of them are based up on kotlins coroutines. All modules\ntransitively include the [suspending module](#suspending).\n\n### Blocking\n\nThis module provides as the main entry point as `BlockingClientFactory`. All requests are blocking the current Thread.\n\n\u003cdetails\u003e\n\u003csummary\u003eGradle\u003c/summary\u003e\n\n```groovy\nrepositories {\n    maven { url 'https://jitpack.io' }\n}\n\n\ndependencies {\n    implementation 'com.github.cmdjulian.kirc:blocking:{VERSION}'\n}\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003eGradle Kts\u003c/summary\u003e\n\n```kotlin\nrepositories {\n    maven(url = \"https://jitpack.io\")\n}\n\n\ndependencies {\n    implementation(\"com.github.cmdjulian.kirc:blocking:{VERSION}\")\n}\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003eMaven\u003c/summary\u003e\n\n```xml\n\n\u003cproject xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n         xsi:schemaLocation=\"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd\"\u003e\n\n    ...\n\n    \u003crepositories\u003e\n        \u003crepository\u003e\n            \u003cid\u003ejitpack.io\u003c/id\u003e\n            \u003curl\u003ehttps://jitpack.io\u003c/url\u003e\n        \u003c/repository\u003e\n    \u003c/repositories\u003e\n\n    ...\n\n    \u003cdependencies\u003e\n        \u003cdependency\u003e\n            \u003cgroupId\u003ecom.github.cmdjulian.kirc\u003c/groupId\u003e\n            \u003cartifactId\u003eblocking\u003c/artifactId\u003e\n            \u003cversion\u003e{VERSION}\u003c/version\u003e\n        \u003c/dependency\u003e\n    \u003c/dependencies\u003e\n\u003c/project\u003e\n```\n\n\u003c/details\u003e\n\n### Reactive\n\nThis module provides as the main entry point as `ReactiveClientFactory`. It uses the kotlin extension functions to\nreturn project reactor types.\n\n\u003cdetails\u003e\n\u003csummary\u003eGradle\u003c/summary\u003e\n\n```groovy\nrepositories {\n    maven { url 'https://jitpack.io' }\n}\n\n\ndependencies {\n    implementation 'com.github.cmdjulian.kirc:reactive:{VERSION}'\n}\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003eGradle Kts\u003c/summary\u003e\n\n```kotlin\nrepositories {\n    maven(url = \"https://jitpack.io\")\n}\n\n\ndependencies {\n    implementation(\"com.github.cmdjulian.kirc:reactive:{VERSION}\")\n}\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003eMaven\u003c/summary\u003e\n\n```xml\n\n\u003cproject xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n         xsi:schemaLocation=\"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd\"\u003e\n\n    ...\n\n    \u003crepositories\u003e\n        \u003crepository\u003e\n            \u003cid\u003ejitpack.io\u003c/id\u003e\n            \u003curl\u003ehttps://jitpack.io\u003c/url\u003e\n        \u003c/repository\u003e\n    \u003c/repositories\u003e\n\n    ...\n\n    \u003cdependencies\u003e\n        \u003cdependency\u003e\n            \u003cgroupId\u003ecom.github.cmdjulian.kirc\u003c/groupId\u003e\n            \u003cartifactId\u003ereactive\u003c/artifactId\u003e\n            \u003cversion\u003e{VERSION}\u003c/version\u003e\n        \u003c/dependency\u003e\n    \u003c/dependencies\u003e\n\u003c/project\u003e\n```\n\n\u003c/details\u003e\n\n### Suspending\n\nThis module provides as the main entry point as `SuspendingClientFactory`. It uses the kotlin coroutines to do the\nrequests.\n\n\u003cdetails\u003e\n\u003csummary\u003eGradle\u003c/summary\u003e\n\n```groovy\nrepositories {\n    maven { url 'https://jitpack.io' }\n}\n\n\ndependencies {\n    implementation 'com.github.cmdjulian.kirc:suspending:{VERSION}'\n}\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003eGradle Kts\u003c/summary\u003e\n\n```kotlin\nrepositories {\n    maven(url = \"https://jitpack.io\")\n}\n\n\ndependencies {\n    implementation(\"com.github.cmdjulian.kirc:suspending:{VERSION}\")\n}\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003eMaven\u003c/summary\u003e\n\n```xml\n\n\u003cproject xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n         xsi:schemaLocation=\"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd\"\u003e\n\n    ...\n\n    \u003crepositories\u003e\n        \u003crepository\u003e\n            \u003cid\u003ejitpack.io\u003c/id\u003e\n            \u003curl\u003ehttps://jitpack.io\u003c/url\u003e\n        \u003c/repository\u003e\n    \u003c/repositories\u003e\n\n    ...\n\n    \u003cdependencies\u003e\n        \u003cdependency\u003e\n            \u003cgroupId\u003ecom.github.cmdjulian.kirc\u003c/groupId\u003e\n            \u003cartifactId\u003esuspending\u003c/artifactId\u003e\n            \u003cversion\u003e{VERSION}\u003c/version\u003e\n        \u003c/dependency\u003e\n    \u003c/dependencies\u003e\n\u003c/project\u003e\n```\n\n\u003c/details\u003e\n\n### Image\n\nThis module is transitively included from all the above modules. It's main purpose is to provide the components to parse\ncontainer image names. It's mainly packaged in its own module to be included without any of the aforementioned modules.\n\n\u003cdetails\u003e\n\u003csummary\u003eGradle\u003c/summary\u003e\n\n```groovy\nrepositories {\n    maven { url 'https://jitpack.io' }\n}\n\n\ndependencies {\n    implementation 'com.github.cmdjulian.kirc:image:{VERSION}'\n}\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003eGradle Kts\u003c/summary\u003e\n\n```kotlin\nrepositories {\n    maven(url = \"https://jitpack.io\")\n}\n\n\ndependencies {\n    implementation(\"com.github.cmdjulian.kirc:image:{VERSION}\")\n}\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003eMaven\u003c/summary\u003e\n\n```xml\n\n\u003cproject xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n         xsi:schemaLocation=\"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd\"\u003e\n\n    ...\n\n    \u003crepositories\u003e\n        \u003crepository\u003e\n            \u003cid\u003ejitpack.io\u003c/id\u003e\n            \u003curl\u003ehttps://jitpack.io\u003c/url\u003e\n        \u003c/repository\u003e\n    \u003c/repositories\u003e\n\n    ...\n\n    \u003cdependencies\u003e\n        \u003cdependency\u003e\n            \u003cgroupId\u003ecom.github.cmdjulian.kirc\u003c/groupId\u003e\n            \u003cartifactId\u003eimage\u003c/artifactId\u003e\n            \u003cversion\u003e{VERSION}\u003c/version\u003e\n        \u003c/dependency\u003e\n    \u003c/dependencies\u003e\n\u003c/project\u003e\n```\n\n\u003c/details\u003e","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcmdjulian%2Fkirc","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcmdjulian%2Fkirc","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcmdjulian%2Fkirc/lists"}