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 adding the Kotlin serialization library to 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 core kotlinx.serialization library. For the complete list of supported serialization formats, see Supported serialization formats.
All Kotlin 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
kotlinx.serialization includes serialization format libraries for various 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 experimental serialization formats in Alternative and custom 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 library 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.
Explore experimental serialization formats, including CBOR, ProtoBuf, and Properties, and learn how to create custom formats in Alternative and custom formats.