agentsclimarketplace

Kora project dependencies

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

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.From its SKILL.md

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.

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-yaml → YamlConfigModule)
ru.tinkoff.kora:json-moduleJsonModuleJSON (de)serialization for DTOs, HTTP, Kafka
ru.tinkoff.kora:logging-logbackLogbackModuleSLF4J via Logback
ru.tinkoff.kora:annotation-processors—Java annotation processor (mandatory, Java)
ru.tinkoff.kora:symbol-processors—KSP 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-r2dbc—R2DBC (not recommended; prefer JDBC)
database-vertx—Vert.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-generator—OpenAPI 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/

Keep looking

Skills are one crate of 325,949. 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.