agentsclimarketplace

Kora project dependencies

Skill kora-projects/kora-skills/plugins/kora-v1/skills/kora-project-dependencies

Agent Skills for Kora Framework — compile-time DI for Java/Kotlin backend development.

Install
npx -y skills add kora-projects/kora-skills --skill kora-project-dependencies

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

One thing to look at

  • 1 stars1 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.

What its author says it does

Copied from the file, not written here

Catalog of Kora Framework Gradle artifacts plus a project generator. Covers the kora-parent BOM, annotation processors (Java annotation-processors) and KSP (Kotlin symbol-processors), the koraBom configuration with extendsFrom, real module artifact names (http-server-undertow, http-client-ok, database-jdbc, kafka, micrometer-module, opentelemetry-tracing-exporter-grpc, resilient-kora, cache-caffeine, validation-module, s3-client-aws), externally versioned deps (JDBC drivers, Testcontainers), and which versions the BOM owns. Use when wiring a build.gradle / build.gradle.kts, choosing Kora modules, fixing "dependency not found" or transitive version conflicts, or scaffolding a new service. Not for writing DI/HTTP/repository code.

SKILL.md

17.4 KB, ~4.6k tokens by cl100k_base, as published. Nobody here has run it

Kora Project Dependencies — Module Catalog

BOM: ru.tinkoff.kora:kora-parent (pin the version once; every Kora artifact inherits it) Java: 21+ (examples build on JDK 21) | Kotlin: 1.9.25 | KSP: 1.9.25-1.0.20 | Gradle: 9+

Critical: Always import the kora-parent BOM. It aligns every Kora module to one version and pins transitive libraries (Jackson, OkHttp, Undertow, Micrometer, OpenTelemetry, HikariCP, Kafka client, gRPC, Caffeine, Resilience4j). Never put a version on a ru.tinkoff.kora:* artifact — the BOM does it.

Read this first when:

  • Selecting which Kora modules to include in a build
  • Setting up the BOM and the koraBom configuration in build.gradle / build.gradle.kts
  • Configuring annotation processors (Java) or KSP (Kotlin)
  • Resolving "Required dependency not found" or transitive version conflicts
  • Scaffolding a new project (see Project Generator below)

NOT when: writing DI code (→ kora-di-compile), HTTP controllers (→ kora-http-server), repositories (→ kora-database-jdbc), or Kafka handlers (→ kora-kafka-consumer).


Quick Start — BOM Setup

Pin the BOM version in gradle.properties and reference it via $koraVersion.

gradle.properties

koraVersion=1.2.17

Java (build.gradle)

The koraBom configuration must feed annotationProcessor, compileOnly, implementation (and api/testImplementation/testAnnotationProcessor if used) via extendsFrom, otherwise the BOM does not apply to the processor classpath.

plugins {
    id "java"
    id "application"
}

java {
    toolchain {
        languageVersion = JavaLanguageVersion.of(21)
        vendor = JvmVendorSpec.ADOPTIUM
    }
}

configurations {
    koraBom
    annotationProcessor.extendsFrom(koraBom)
    compileOnly.extendsFrom(koraBom)
    implementation.extendsFrom(koraBom)
    api.extendsFrom(koraBom)
    testImplementation.extendsFrom(koraBom)
    testAnnotationProcessor.extendsFrom(koraBom)
}

dependencies {
    koraBom platform("ru.tinkoff.kora:kora-parent:$koraVersion")
    annotationProcessor "ru.tinkoff.kora:annotation-processors"

    implementation "ru.tinkoff.kora:http-server-undertow"
    implementation "ru.tinkoff.kora:json-module"
    implementation "ru.tinkoff.kora:config-hocon"
    implementation "ru.tinkoff.kora:logging-logback"

    testImplementation "ru.tinkoff.kora:test-junit5"
}

Kotlin (build.gradle.kts)

Kotlin uses the KSP plugin and the symbol-processors artifact instead of annotationProcessor.

plugins {
    application
    kotlin("jvm") version "1.9.25"
    id("com.google.devtools.ksp") version "1.9.25-1.0.20"
}

val koraBom: Configuration by configurations.creating
configurations {
    ksp.get().extendsFrom(koraBom)
    compileOnly.get().extendsFrom(koraBom)
    api.get().extendsFrom(koraBom)
    implementation.get().extendsFrom(koraBom)
}

val koraVersion: String by project
dependencies {
    koraBom(platform("ru.tinkoff.kora:kora-parent:$koraVersion"))
    ksp("ru.tinkoff.kora:symbol-processors")

    implementation("ru.tinkoff.kora:http-server-undertow")
    implementation("ru.tinkoff.kora:json-module")
    implementation("ru.tinkoff.kora:config-hocon")
    implementation("ru.tinkoff.kora:logging-logback")

    testImplementation("ru.tinkoff.kora:test-junit5")
}

kotlin {
    jvmToolchain {
        languageVersion.set(JavaLanguageVersion.of(21))
        vendor.set(JvmVendorSpec.ADOPTIUM)
    }
}

Depth: references/bom-usage-reference.md, references/annotation-processors-reference.md


Project Generator

scripts/generate_project.py scaffolds a compile-ready project (build script, @KoraApp, HOCON config, sample controller/repository/Kafka handlers) for a chosen set of modules.

# List available module keys
python scripts/generate_project.py --list-modules

# Java REST API + PostgreSQL
python scripts/generate_project.py \
  --name my-service --package com.example --lang java \
  --modules http-server,jdbc-postgres,metrics

# Kotlin Kafka service
python scripts/generate_project.py \
  --name kafka-service --package com.example --lang kotlin \
  --modules kafka,metrics

The generator emits real Kora APIs only: @KoraApp from ru.tinkoff.kora.common, @HttpController + @HttpRoute, @Repository + extends JdbcRepository, @KafkaListener/@KafkaPublisher, and a httpServer { ... } / db { ... } HOCON config.

Details: scripts/generate_project.py


Core Modules (almost every service)

ArtifactModule interfacePurpose
ru.tinkoff.kora:config-hoconHoconConfigModuleHOCON config (or config-yamlYamlConfigModule)
ru.tinkoff.kora:json-moduleJsonModuleJSON (de)serialization for DTOs, HTTP, Kafka
ru.tinkoff.kora:logging-logbackLogbackModuleSLF4J via Logback
ru.tinkoff.kora:annotation-processorsJava annotation processor (mandatory, Java)
ru.tinkoff.kora:symbol-processorsKSP symbol processor (mandatory, Kotlin)

Depth: references/core-modules-reference.md


Module Catalog

Artifact names below are the real ones verified against the Kora docs and example apps. Note the group is ru.tinkoff.kora except for experimental modules (S3, Camunda), which use ru.tinkoff.kora.experimental.

HTTP

ArtifactModule interfaceNotes
http-server-undertowUndertowHttpServerModuleUndertow-backed HTTP server
http-client-okOkHttpClientModuleOkHttp transport
http-client-asyncAsyncHttpClientModuleAsync (Netty) transport
http-client-jdkJdkHttpClientModuleJDK HttpClient transport

HTTP-server/client auth (BasicAuth, Bearer, API key) ships inside these artifacts as BasicAuthModule, BearerAuthModule, ApiKeyAuthModule. Authorization is configured in code, not via a separate auth artifact.

Skills: kora-http-server, kora-http-client

Database

ArtifactModule interfaceNotes
database-jdbcJdbcDatabaseModuleJDBC repositories (recommended path)
database-cassandraCassandraDatabaseModuleCassandra CQL
database-flywayFlywayJdbcDatabaseModuleFlyway SQL migrations
database-liquibaseLiquibaseJdbcDatabaseModuleLiquibase SQL migrations
database-r2dbcR2DBC (not recommended; prefer JDBC)
database-vertxVert.x SQL (not recommended; prefer JDBC)

JDBC drivers are not in the BOM — version them yourself (see Externally Versioned Dependencies).

Skills: kora-database-jdbc, kora-database-cassandra, kora-database-migration

Messaging (Kafka)

ArtifactModule interfaceNotes
kafkaKafkaModuleProducers (@KafkaPublisher) and consumers (@KafkaListener)

There is a single kafka artifact — there are no separate kafka-producer/kafka-consumer artifacts.

Skills: kora-kafka-producer, kora-kafka-consumer

Telemetry

ArtifactModule interfaceNotes
micrometer-moduleMetricsModuleMicrometer metrics; Prometheus scrape served on the private HTTP port
opentelemetry-tracing-exporter-grpcOpentelemetryGrpcExporterModuleOTLP/gRPC trace exporter
opentelemetry-tracing-exporter-httpOpentelemetryHttpExporterModuleOTLP/HTTP trace exporter

Probes (ProbesModule, readiness/liveness on the private port) and metrics both require an HTTP server module. There is no standalone probes artifact in the BOM; probes come with the HTTP server.

Skills: kora-telemetry-metrics, kora-telemetry-tracing, kora-telemetry-logging

gRPC

ArtifactModule interface
grpc-serverGrpcServerModule
grpc-clientGrpcClientModule

Skills: kora-grpc-server, kora-grpc-client

OpenAPI

ArtifactModule interfaceNotes
openapi-generatorOpenAPI codegen (Gradle plugin org.openapi.generator, generatorName = "kora")
openapi-managementOpenApiManagementModuleSwagger UI / RapiDoc, spec publishing

Skills: kora-openapi-generator-server, kora-openapi-generator-client, kora-openapi-management

AOP

ArtifactModule interfaceAnnotations
resilient-koraResilientModule@Retry, @CircuitBreaker, @Timeout, @Fallback
cache-caffeineCaffeineCacheModule@Cacheable, @CachePut, @CacheInvalidate (in-memory)
cache-redisRedisCacheModulesame annotations over Lettuce/Redis
scheduling-jdkSchedulingJdkModule@ScheduleAtFixedRate, @ScheduleWithCron
scheduling-quartzQuartzModuleQuartz-backed cron
validation-moduleValidationModule@Valid, @Validate (JSR-380-style)

The @Log / @Mdc logging aspect lives in the logging modules (logging-logback/logging-common), not a separate AOP artifact.

Skills: kora-aop-resilient, kora-aop-caching, kora-aop-scheduling-jdk, kora-aop-scheduling-quartz, kora-aop-validation, kora-aop-logging

Other

ArtifactModule interfaceNotes
ru.tinkoff.kora.experimental:s3-client-awsAwsS3ClientModuleS3 over AWS SDK (@S3.Client)
ru.tinkoff.kora.experimental:s3-client-minioMinioS3ClientModuleS3 over MinIO
ru.tinkoff.kora.experimental:camunda-engine-bpmnCamundaEngineBpmnModuleCamunda 7 embedded BPMN
ru.tinkoff.kora.experimental:camunda-zeebe-workerCamunda8WorkerModuleCamunda 8 Zeebe worker
soap-clientSoapClientModuleSOAP client

MapStruct integration (MapStructModule) uses the upstream org.mapstruct:mapstruct + org.mapstruct:mapstruct-processor artifacts plus the Kora annotation processor; there is no ru.tinkoff.kora:mapper-mapstruct artifact. GraalVM native image is a build-plugin concern (org.graalvm.buildtools.native), not a Kora artifact.

Skill: kora-mapstruct

Testing

ArtifactPurpose
test-junit5@KoraAppTest JUnit 5 extension (component tests)

Black-box / E2E tests use test-junit5 together with Testcontainers — there is no separate test-blackbox artifact.

Skills: kora-testing-junit-java, kora-testing-junit-kotlin, kora-testing-blackbox


Externally Versioned Dependencies (not in the BOM)

These are not Kora artifacts; pin their versions explicitly.

dependencies {
    // JDBC drivers
    implementation "org.postgresql:postgresql:42.7.7"
    runtimeOnly    "com.mysql:mysql-connector-j:8.3.0"

    // Testing
    testImplementation "ru.tinkoff.kora:test-junit5"
    testImplementation "org.testcontainers:junit-jupiter:1.21.4"
    testImplementation "io.goodforgod:testcontainers-extensions-postgres:0.13.1"
    testImplementation "org.mockito:mockito-core:5.14.2"   // Java mocks
    testImplementation "io.mockk:mockk:1.13.13"            // Kotlin mocks
}

Versions the BOM Owns (do not override)

LibraryPurpose
JacksonJSON (de)serialization (json-module)
OkHttpHTTP client transport (http-client-ok)
UndertowHTTP server (http-server-undertow)
MicrometerMetrics (micrometer-module)
OpenTelemetryTracing exporters
LogbackSLF4J logging (logging-logback)
HikariCPJDBC connection pool (database-jdbc)
Kafka clientMessaging (kafka)
gRPCgRPC modules
CaffeineIn-memory cache (cache-caffeine)
Resilience4jResilience (resilient-kora)
// WRONG — fights the BOM, can break Kora at runtime
implementation "com.fasterxml.jackson.core:jackson-databind:2.16.0"

// RIGHT — let the BOM pin Jackson
implementation "ru.tinkoff.kora:json-module"

If you truly must change a transitive version, use resolutionStrategy { force "..." } rather than declaring a raw version.


Typical Combinations

REST API (HTTP server + JSON + metrics)

dependencies {
    koraBom platform("ru.tinkoff.kora:kora-parent:$koraVersion")
    annotationProcessor "ru.tinkoff.kora:annotation-processors"

    implementation "ru.tinkoff.kora:http-server-undertow"
    implementation "ru.tinkoff.kora:json-module"
    implementation "ru.tinkoff.kora:micrometer-module"
    implementation "ru.tinkoff.kora:logging-logback"
    implementation "ru.tinkoff.kora:config-hocon"
}

JDBC service (PostgreSQL + Flyway)

dependencies {
    koraBom platform("ru.tinkoff.kora:kora-parent:$koraVersion")
    annotationProcessor "ru.tinkoff.kora:annotation-processors"

    implementation "ru.tinkoff.kora:database-jdbc"
    implementation "ru.tinkoff.kora:database-flyway"
    implementation "org.postgresql:postgresql:42.7.7"

    implementation "ru.tinkoff.kora:logging-logback"
    implementation "ru.tinkoff.kora:config-hocon"

    testImplementation "ru.tinkoff.kora:test-junit5"
    testImplementation "io.goodforgod:testcontainers-extensions-postgres:0.13.1"
}

Kafka service (JSON)

dependencies {
    koraBom platform("ru.tinkoff.kora:kora-parent:$koraVersion")
    annotationProcessor "ru.tinkoff.kora:annotation-processors"

    implementation "ru.tinkoff.kora:kafka"
    implementation "ru.tinkoff.kora:json-module"

    implementation "ru.tinkoff.kora:logging-logback"
    implementation "ru.tinkoff.kora:config-hocon"
}

Full multi-module example: assets/build.gradle-full.template


Common Pitfalls

SymptomCauseFix
"Required dependency not found" for a generated implProcessor not on the classpathAdd annotation-processors (Java) or symbol-processors (Kotlin); ensure koraBom is extendsFrom the processor configuration
Generated *ComponentImpl/*RepositoryImpl missingProcessor never ran./gradlew clean classes — annotation processors run before normal compile
Version conflict on Jackson/OkHttp/UndertowA raw version was declaredRemove the explicit version; let the BOM own it (or use resolutionStrategy.force)
Module not picked up at runtimeArtifact added but interface not extendedextends/implement the matching *Module on the @KoraApp interface
Wrong artifact name (e.g. http-client-okhttp, resilient, validation)Guessed nameUse the verified names: http-client-ok, resilient-kora, validation-module
KSP fails after Kotlin upgradeKSP/Kotlin mismatchKSP version must match the Kotlin version (e.g. 1.9.25-1.0.20)

References

DocumentDescription
references/bom-usage-reference.mdBOM setup, koraBom configuration, multi-module, version verification
references/annotation-processors-reference.mdJava annotation processors + Kotlin KSP setup, generated-code locations
references/core-modules-reference.mdCore modules (config, JSON, logging) and a minimal @KoraApp
references/compatibility-matrix.mdJava / Kotlin / KSP / Gradle compatibility

See Also

What ships with it: 20 files

93.0 KB alongside SKILL.md, 2 of them executable

evals/

scripts/

Gives 0 of the 12 instructions most project setup skills give in ~4.6k tokens

Counted across 999 of the 1,637 authors here whose files we hold, read 2026-08-07

  • Ask one question at a timein 29 of 999, across 28 files
  • Detect the package manager from lockfilesin 28 of 999, across 9 files
  • Present findings to the userin 26 of 999, across 5 files
  • Explore current repo statein 24 of 999, across 3 files
  • Update the agent skills block in place if it existsin 24 of 999, across 3 files
  • Install husky lint-staged and prettierin 23 of 999, across 4 files
  • Create the lintstagedrc filein 22 of 999, across 3 files
  • Commit all changed filesin 22 of 999, across 3 files
  • Run lint-staged to verify it worksin 22 of 999, across 3 files
  • Create the husky pre-commit filein 21 of 999, across 2 files
  • Create a prettierrc file if missingin 21 of 999, across 2 files
  • Initialize huskyin 21 of 999, across 2 files

Said here and by no other author read

  • Import the kora-parent BOM
  • Pin the BOM version in gradle.properties
  • Make koraBom feed annotationProcessor via extendsFrom
  • Use annotation-processors for Java
  • Use symbol-processors for Kotlin
  • Version externally versioned dependencies explicitly

Grouped from the skills themselves: near-identical wordings counted once, and counted by distinct author, so one author publishing three of these counts once. Length counted with cl100k_base; the agent that loads this file may tokenize it differently.

Keep looking

Skills are one crate of 326,984. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.