Serialization
Serialization is the process of converting data used by an application to a format that can be transferred over a network, or stored in a database or a file. Deserialization is the opposite process of converting external data back into a runtime object. Together, they are essential to most applications that exchange data with third parties.
Some data serialization formats, such as JSON and Protocol Buffers, are particularly common. These formats are language-neutral and platform-neutral, so you can use them to exchange data between systems written in any modern language. Kotlin provides this functionality through the kotlinx.serialization libraries, which support multiple platforms and data formats.
If you're new to serialization in Kotlin, we recommend starting with the Get Started with Serialization tutorial. It walks you through setting up Kotlin serialization in your project and shows you how to serialize and deserialize your first class.
Kotlin serialization libraries
Kotlin serialization offers support for all platforms, including JVM, JavaScript, and Native. You can use the same dependency declaration regardless of the target platform.
Kotlin serialization supports various serialization formats, such as JSON, CBOR, and Protocol buffers through different serialization format libraries. These libraries build on the kotlinx-serialization-core library. For the complete list of supported serialization formats, see Supported serialization formats.
All kotlinx.serialization format libraries are part of the org.jetbrains.kotlinx: group, with names starting with kotlinx-serialization- and suffixes that reflect the serialization format. For example:
org.jetbrains.kotlinx:kotlinx-serialization-jsonprovides JSON serialization.org.jetbrains.kotlinx:kotlinx-serialization-cborprovides CBOR serialization.
The kotlinx.serialization libraries follow their own versioning, independent of Kotlin. You can find the latest release versions on GitHub.
Supported serialization formats
The kotlinx.serialization project provides libraries for various serialization formats:
Format | Artifact ID | Platform | Status |
|---|---|---|---|
All supported platforms | Stable | ||
JVM only | Experimental | ||
All supported platforms | Experimental | ||
All supported platforms | Experimental | ||
All supported platforms | Experimental |
All serialization format libraries, except for the JSON serialization library (kotlinx-serialization-json), are Experimental. Their APIs might change at any time. For more details about JSON serialization, see JSON serialization overview.
There are also community-maintained libraries that support more serialization formats, such as YAML or Apache Avro.
You can find out more about alternative and custom experimental serialization formats in Custom serialization formats.
Supported serialization types
Kotlin serialization supports a variety of built-in types, including all primitive types and most composite types from the Kotlin standard library like the List type. For more information, see Serialize built-in types.
Additionally, classes annotated with @Serializable are fully supported for serialization, enabling the conversion of class instances to and from formats like JSON. For more information, see Serialize classes.
What's next
Learn the basics of Kotlin serialization in the Get started with serialization tutorial.
See how the Kotlin serialization processes primitives, collections, and other built-in types
Explore more complex JSON serialization scenarios in the JSON serialization overview.
Dive into Serialize classes to learn how to serialize classes and modify the default behavior of the
@Serializableannotation.Learn how to obtain generated serializers, create custom serializers, and apply serializers in Create and use serializers.
See how to serialize different types through a shared base type in Serialize polymorphic classes.
Learn how to create custom formats in Custom serialization formats.
Explore experimental serialization formats such as CBOR and ProtoBuf.