Kotlin Serialization
Notes about serialization in Kotlin projects with KMP and Ktor.
Published: 5/15/2026The serialization compiler plugin should be used in module that define @Serializable.
Scenario 1: KMP Library#
Only requires specification of one library, which will transitively provide org.jetbrains.kotlinx:kotlinx-serialization-core.
Note: io.ktor:ktor-serialization-kotlinx-json would provide this transitively, but better to keep module dependencies clean.
File: ./gradle/libs.versions.toml
[libraries]
kotlinx-serialization-json = { module = "org.jetbrains.kotlinx:kotlinx-serialization-json", version.ref = "kotlinxSerialization" }
[plugins]
kotlinSerialization = { id = "org.jetbrains.kotlin.plugin.serialization", version.ref = "kotlin" }
File: ./projectname/build.gradle.kts
plugins {
alias(libs.plugins.kotlinSerialization)
}
kotlin
sourceSets {
commonMain.dependencies {
api(libs.kotlinx.serialization.json)
}
}
}
Example: Usage
package az.core
import kotlinx.serialization.Serializable
@Serializable
data class Message(
val text: String,
)
Scenario 2: KMP Apps#
TODO:
Scenario 3: Ktor Server#
This requires content negotiation and the ktor serialization library, which transitively provides org.jetbrains.kotlinx:kotlinx-serialization-json and ...-core.
File: ./gradle/libs.versions.toml
[libraries]
ktor-serialization-kotlinx-json = { module = "io.ktor:ktor-serialization-kotlinx-json", version.ref = "ktor" }
ktor-server-content-negotiation = { module = "io.ktor:ktor-server-content-negotiation", version.ref = "ktor" }
[plugins]
kotlinSerialization = { id = "org.jetbrains.kotlin.plugin.serialization", version.ref = "kotlin" }
File ./projectname/build.gradle.kts
plugins {
alias(libs.plugins.kotlinSerialization)
}
dependencies {
implementation(libs.ktor.serialization.kotlinx.json)
implementation(libs.ktor.server.content.negotiation)
}
Example: Usage
package az.server
import io.ktor.server.application.Application
import io.ktor.server.application.install
import io.ktor.server.plugins.contentnegotiation.*
import io.ktor.serialization.kotlinx.json.*
import kotlinx.serialization.json.Json
fun Application.configureSerialization() {
install(ContentNegotiation) {
println("SERIALIZATION INSTALLED")
json(
Json {
ignoreUnknownKeys = true
prettyPrint = true
}
)
}
}