
Compile-time generation of type-safe extension mappers between data classes, with automatic property matching, renaming, nested and collection mapping, enum conversion, custom converters, and reverse mappers.
Compile-time mapper generation for Kotlin Multiplatform, powered by KSP.
Kraft generates type-safe extension functions to map between data classes. No reflection, no runtime overhead — just clean, generated Kotlin code.
data class User(val id: Int, val name: String, val email: String)
data class UserDto(val id: Int, val name: String, val email: String)
@MapConfig(source = User::class, target = UserDto::class)
object UserMapper
// Generated: fun User.toUserDto(): UserDto
val dto = user.toUserDto()@MapField or @FieldMapping for cross-name mappingList<T> and Set<T> with nested element mapping@MapEnum with auto-matching and custom entry pairs@MapUsing for property-source or whole-source transformations@MapReverse generates the inverse mapper automatically@MapIgnore and @MapIgnoreField with directional control@MapConfig for mapping without modifying data classesMapperGeneratorProvider to plug in your own code generator// build.gradle.kts
plugins {
id("com.google.devtools.ksp") version "<ksp-version>"
}
kotlin {
sourceSets {
commonMain.dependencies {
implementation("com.blu3berry.kraft:kraft-annotations:<version>")
}
}
}
dependencies {
add("kspCommonMainMetadata", "com.blu3berry.kraft:kraft-ksp:<version>")
}// build.gradle.kts
plugins {
id("com.google.devtools.ksp") version "<ksp-version>"
}
dependencies {
implementation("com.blu3berry.kraft:kraft-annotations:<version>")
ksp("com.blu3berry.kraft:kraft-ksp:<version>")
}| Annotation | Purpose | Placement |
|---|---|---|
@MapConfig |
Standalone mapping config | On object |
@MapFrom |
Map from source class | On target data class |
@MapTo |
Map to target class | On source data class |
@MapField |
Rename a property | On property in @MapFrom/@MapTo class |
@MapNested |
|
On property in @MapFrom/@MapTo class |
@MapIgnore |
Skip a property | On property (must have default value) |
@MapUsing |
Custom converter function | On function in @MapConfig object |
@MapEnum |
Enum-to-enum mapping | On object |
@MapReverse |
Generate inverse mapper | On class or @MapConfig object |
@FieldMapping |
Config-level rename | In @MapConfig.fieldMappings
|
@NestedMapping |
|
In @MapConfig.nestedMappings
|
@MapIgnoreField |
Config-level ignore | In @MapConfig.ignoredMappings
|
Copyright Kraft Contributors
Licensed under the Apache License, Version 2.0
See LICENSE for the full text.
Compile-time mapper generation for Kotlin Multiplatform, powered by KSP.
Kraft generates type-safe extension functions to map between data classes. No reflection, no runtime overhead — just clean, generated Kotlin code.
data class User(val id: Int, val name: String, val email: String)
data class UserDto(val id: Int, val name: String, val email: String)
@MapConfig(source = User::class, target = UserDto::class)
object UserMapper
// Generated: fun User.toUserDto(): UserDto
val dto = user.toUserDto()@MapField or @FieldMapping for cross-name mappingList<T> and Set<T> with nested element mapping@MapEnum with auto-matching and custom entry pairs@MapUsing for property-source or whole-source transformations@MapReverse generates the inverse mapper automatically@MapIgnore and @MapIgnoreField with directional control@MapConfig for mapping without modifying data classesMapperGeneratorProvider to plug in your own code generator// build.gradle.kts
plugins {
id("com.google.devtools.ksp") version "<ksp-version>"
}
kotlin {
sourceSets {
commonMain.dependencies {
implementation("com.blu3berry.kraft:kraft-annotations:<version>")
}
}
}
dependencies {
add("kspCommonMainMetadata", "com.blu3berry.kraft:kraft-ksp:<version>")
}// build.gradle.kts
plugins {
id("com.google.devtools.ksp") version "<ksp-version>"
}
dependencies {
implementation("com.blu3berry.kraft:kraft-annotations:<version>")
ksp("com.blu3berry.kraft:kraft-ksp:<version>")
}| Annotation | Purpose | Placement |
|---|---|---|
@MapConfig |
Standalone mapping config | On object |
@MapFrom |
Map from source class | On target data class |
@MapTo |
Map to target class | On source data class |
@MapField |
Rename a property | On property in @MapFrom/@MapTo class |
@MapNested |
|
On property in @MapFrom/@MapTo class |
@MapIgnore |
Skip a property | On property (must have default value) |
@MapUsing |
Custom converter function | On function in @MapConfig object |
@MapEnum |
Enum-to-enum mapping | On object |
@MapReverse |
Generate inverse mapper | On class or @MapConfig object |
@FieldMapping |
Config-level rename | In @MapConfig.fieldMappings
|
@NestedMapping |
|
In @MapConfig.nestedMappings
|
@MapIgnoreField |
Config-level ignore | In @MapConfig.ignoredMappings
|
Copyright Kraft Contributors
Licensed under the Apache License, Version 2.0
See LICENSE for the full text.