Skip to content

Kotlin

Configuration Example

[project]
name = "my-kotlin-app"
root = "."
languages = ["kotlin"]
[resolve.java]
module_name = "com.example.myapp"
[[layers]]
name = "domain"
paths = ["src/domain/**"]
dependency_mode = "opt-in"
allow = []
external_mode = "opt-out"
[[layers]]
name = "usecase"
paths = ["src/usecase/**"]
dependency_mode = "opt-in"
allow = ["domain"]
external_mode = "opt-out"
[[layers]]
name = "infrastructure"
paths = ["src/infrastructure/**"]
dependency_mode = "opt-in"
allow = ["domain"]
external_mode = "opt-in"
external_allow = ["kotlinx.coroutines"]

Difference from Java

Use languages = ["kotlin"], but import resolution shares the [resolve.java] section.

Import Classification

ImportClassification
import com.example.myapp.domain.UserInternal (starts with module_name)
import kotlinx.coroutines.launchExternal
import java.util.UUIDExternal (stdlib)

Gradle Deep Layout

For deep Gradle layouts, use **/layer/** globs:

[[layers]]
name = "domain"
paths = ["**/domain/**"] # matches src/main/kotlin/com/example/domain/ too