Kotlin Serialization

Notes about serialization in Kotlin projects with KMP and Ktor.

Published: 5/15/2026

The serialization compiler plugin should be used in module that define @Serializable.

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,
)

TODO:

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
            }
        )
    }
}