# Kotlin port Idiomatic Kotlin codegen target for Spring-Boot-Kotlin consumers on Exposed + Flyway. The Kotlin port is a **codegen tier built on top of the Java port** — the loader, OMDB persistence engine, render engine, Maven plugin, and conformance runners are all Java; Kotlin emits idiomatic Kotlin (`data class`, Exposed `Table` objects, extension-fn relationship helpers, Spring `@Configuration` wiring) via KotlinPoet. Two modules: - **`metaobjects-codegen-kotlin`** — 14 KotlinPoet-based generators. - **`metaobjects-metadata-ktx`** — thin Kotlin facade over the Java loader + render engine for idiomatic Kotlin runtime use. ## Install ```xml com.metaobjects metaobjects-metadata ${metaobjects.version} com.metaobjects metaobjects-metadata-ktx ${metaobjects.version} com.metaobjects metaobjects-render ${metaobjects.version} org.jetbrains.exposed exposed-core ${exposed.version} com.fasterxml.jackson.core jackson-databind ${jackson.version} com.fasterxml.jackson.module jackson-module-kotlin ${jackson.version} com.fasterxml.jackson.datatype jackson-datatype-jsr310 ${jackson.version} org.jetbrains.kotlinx kotlinx-serialization-json ${kotlinx-serialization.version} ``` ## Configure The 14 generators registered in `codegen-kotlin` (`GeneratorRegistry.kt`): | Generator | Output | Per | |---|---|---| | `KotlinEntityGenerator` | `.kt` — Kotlin `data class` (Jackson-compatible; no `@Serializable`) | every `object.entity`, `object.value`, and `object.projection` | | `KotlinExposedTableGenerator` | `Table.kt` — Exposed `Table` object with PK + FK + `@storage` columns | entities with `source.rdb` | | `KotlinRelationsGenerator` | `Relations.kt` — extension fns for `cardinality=many` query helpers | entities with to-many relationships | | `KotlinRepositoryGenerator` | `RepositoryBase.kt` — persistence repository base (row-mapper + CRUD + patch) | writable entities (`source.rdb @kind="table"`) | | `KotlinFilterAllowlistGenerator` | `FilterAllowlist.kt` — FR-009 filter allowlist (filterable field names + allowed ops per field) | writable entities (`source.rdb @kind="table"`) | | `KotlinPayloadGenerator` | `