1*57b5a4a6SAndroid Build Coastguard Worker# Kotlin multiplatform / multi-format reflectionless serialization 2*57b5a4a6SAndroid Build Coastguard Worker 3*57b5a4a6SAndroid Build Coastguard Worker[](https://kotlinlang.org/docs/components-stability.html) 4*57b5a4a6SAndroid Build Coastguard Worker[](https://confluence.jetbrains.com/display/ALL/JetBrains+on+GitHub) 5*57b5a4a6SAndroid Build Coastguard Worker[](http://www.apache.org/licenses/LICENSE-2.0) 6*57b5a4a6SAndroid Build Coastguard Worker[](https://teamcity.jetbrains.com/viewType.html?buildTypeId=KotlinTools_KotlinxSerialization_Ko&guest=1) 7*57b5a4a6SAndroid Build Coastguard Worker[](http://kotlinlang.org) 8*57b5a4a6SAndroid Build Coastguard Worker[](https://central.sonatype.com/artifact/org.jetbrains.kotlinx/kotlinx-serialization-core/1.6.3) 9*57b5a4a6SAndroid Build Coastguard Worker[](https://kotlinlang.org/api/kotlinx.serialization/) 10*57b5a4a6SAndroid Build Coastguard Worker[](https://kotlinlang.slack.com/messages/serialization/) 11*57b5a4a6SAndroid Build Coastguard Worker 12*57b5a4a6SAndroid Build Coastguard WorkerKotlin serialization consists of a compiler plugin, that generates visitor code for serializable classes, 13*57b5a4a6SAndroid Build Coastguard Worker runtime library with core serialization API and support libraries with various serialization formats. 14*57b5a4a6SAndroid Build Coastguard Worker 15*57b5a4a6SAndroid Build Coastguard Worker* Supports Kotlin classes marked as `@Serializable` and standard collections. 16*57b5a4a6SAndroid Build Coastguard Worker* Provides [JSON](formats/README.md#JSON), [Protobuf](formats/README.md#ProtoBuf), [CBOR](formats/README.md#CBOR), [Hocon](formats/README.md#HOCON) and [Properties](formats/README.md#properties) formats. 17*57b5a4a6SAndroid Build Coastguard Worker* Complete multiplatform support: JVM, JS and Native. 18*57b5a4a6SAndroid Build Coastguard Worker 19*57b5a4a6SAndroid Build Coastguard Worker## Table of contents 20*57b5a4a6SAndroid Build Coastguard Worker 21*57b5a4a6SAndroid Build Coastguard Worker<!--- TOC --> 22*57b5a4a6SAndroid Build Coastguard Worker 23*57b5a4a6SAndroid Build Coastguard Worker* [Introduction and references](#introduction-and-references) 24*57b5a4a6SAndroid Build Coastguard Worker* [Setup](#setup) 25*57b5a4a6SAndroid Build Coastguard Worker * [Gradle](#gradle) 26*57b5a4a6SAndroid Build Coastguard Worker * [1) Setting up the serialization plugin](#1-setting-up-the-serialization-plugin) 27*57b5a4a6SAndroid Build Coastguard Worker * [2) Dependency on the JSON library](#2-dependency-on-the-json-library) 28*57b5a4a6SAndroid Build Coastguard Worker * [Android](#android) 29*57b5a4a6SAndroid Build Coastguard Worker * [Multiplatform (Common, JS, Native)](#multiplatform-common-js-native) 30*57b5a4a6SAndroid Build Coastguard Worker * [Maven](#maven) 31*57b5a4a6SAndroid Build Coastguard Worker * [Bazel](#bazel) 32*57b5a4a6SAndroid Build Coastguard Worker 33*57b5a4a6SAndroid Build Coastguard Worker<!--- END --> 34*57b5a4a6SAndroid Build Coastguard Worker 35*57b5a4a6SAndroid Build Coastguard Worker* **Additional links** 36*57b5a4a6SAndroid Build Coastguard Worker * [Kotlin Serialization Guide](docs/serialization-guide.md) 37*57b5a4a6SAndroid Build Coastguard Worker * [Full API reference](https://kotlinlang.org/api/kotlinx.serialization/) 38*57b5a4a6SAndroid Build Coastguard Worker * [Submitting issues and PRs](CONTRIBUTING.md) 39*57b5a4a6SAndroid Build Coastguard Worker * [Building this library](docs/building.md) 40*57b5a4a6SAndroid Build Coastguard Worker 41*57b5a4a6SAndroid Build Coastguard Worker## Introduction and references 42*57b5a4a6SAndroid Build Coastguard Worker 43*57b5a4a6SAndroid Build Coastguard WorkerHere is a small example. 44*57b5a4a6SAndroid Build Coastguard Worker 45*57b5a4a6SAndroid Build Coastguard Worker```kotlin 46*57b5a4a6SAndroid Build Coastguard Workerimport kotlinx.serialization.* 47*57b5a4a6SAndroid Build Coastguard Workerimport kotlinx.serialization.json.* 48*57b5a4a6SAndroid Build Coastguard Worker 49*57b5a4a6SAndroid Build Coastguard Worker@Serializable 50*57b5a4a6SAndroid Build Coastguard Workerdata class Project(val name: String, val language: String) 51*57b5a4a6SAndroid Build Coastguard Worker 52*57b5a4a6SAndroid Build Coastguard Workerfun main() { 53*57b5a4a6SAndroid Build Coastguard Worker // Serializing objects 54*57b5a4a6SAndroid Build Coastguard Worker val data = Project("kotlinx.serialization", "Kotlin") 55*57b5a4a6SAndroid Build Coastguard Worker val string = Json.encodeToString(data) 56*57b5a4a6SAndroid Build Coastguard Worker println(string) // {"name":"kotlinx.serialization","language":"Kotlin"} 57*57b5a4a6SAndroid Build Coastguard Worker // Deserializing back into objects 58*57b5a4a6SAndroid Build Coastguard Worker val obj = Json.decodeFromString<Project>(string) 59*57b5a4a6SAndroid Build Coastguard Worker println(obj) // Project(name=kotlinx.serialization, language=Kotlin) 60*57b5a4a6SAndroid Build Coastguard Worker} 61*57b5a4a6SAndroid Build Coastguard Worker``` 62*57b5a4a6SAndroid Build Coastguard Worker 63*57b5a4a6SAndroid Build Coastguard Worker> You can get the full code [here](guide/example/example-readme-01.kt). 64*57b5a4a6SAndroid Build Coastguard Worker 65*57b5a4a6SAndroid Build Coastguard Worker<!--- TEST_NAME ReadmeTest --> 66*57b5a4a6SAndroid Build Coastguard Worker 67*57b5a4a6SAndroid Build Coastguard Worker<!--- TEST 68*57b5a4a6SAndroid Build Coastguard Worker{"name":"kotlinx.serialization","language":"Kotlin"} 69*57b5a4a6SAndroid Build Coastguard WorkerProject(name=kotlinx.serialization, language=Kotlin) 70*57b5a4a6SAndroid Build Coastguard Worker--> 71*57b5a4a6SAndroid Build Coastguard Worker 72*57b5a4a6SAndroid Build Coastguard Worker**Read the [Kotlin Serialization Guide](docs/serialization-guide.md) for all details.** 73*57b5a4a6SAndroid Build Coastguard Worker 74*57b5a4a6SAndroid Build Coastguard WorkerYou can find auto-generated documentation website on [kotlinlang.org](https://kotlinlang.org/api/kotlinx.serialization/). 75*57b5a4a6SAndroid Build Coastguard Worker 76*57b5a4a6SAndroid Build Coastguard Worker## Setup 77*57b5a4a6SAndroid Build Coastguard Worker 78*57b5a4a6SAndroid Build Coastguard Worker[New versions](https://plugins.gradle.org/plugin/org.jetbrains.kotlin.plugin.serialization) of the serialization plugin are released in tandem with each new Kotlin compiler version. 79*57b5a4a6SAndroid Build Coastguard Worker 80*57b5a4a6SAndroid Build Coastguard WorkerUsing Kotlin Serialization requires Kotlin compiler `1.4.0` or higher. 81*57b5a4a6SAndroid Build Coastguard WorkerMake sure you have the corresponding Kotlin plugin installed in the IDE, no additional plugins for IDE are required. 82*57b5a4a6SAndroid Build Coastguard Worker 83*57b5a4a6SAndroid Build Coastguard Worker### Gradle 84*57b5a4a6SAndroid Build Coastguard Worker 85*57b5a4a6SAndroid Build Coastguard WorkerTo set up kotlinx.serialization, you have to do two things: 86*57b5a4a6SAndroid Build Coastguard Worker1) Add the **[serialization plugin](#1-setting-up-the-serialization-plugin)**. 87*57b5a4a6SAndroid Build Coastguard Worker2) Add the **[serialization library dependency](#2-dependency-on-the-json-library)**. 88*57b5a4a6SAndroid Build Coastguard Worker 89*57b5a4a6SAndroid Build Coastguard Worker#### 1) Setting up the serialization plugin 90*57b5a4a6SAndroid Build Coastguard Worker 91*57b5a4a6SAndroid Build Coastguard WorkerYou can set up the serialization plugin with the Kotlin plugin using the 92*57b5a4a6SAndroid Build Coastguard Worker[Gradle plugins DSL](https://docs.gradle.org/current/userguide/plugins.html#sec:plugins_block): 93*57b5a4a6SAndroid Build Coastguard Worker 94*57b5a4a6SAndroid Build Coastguard WorkerKotlin DSL: 95*57b5a4a6SAndroid Build Coastguard Worker 96*57b5a4a6SAndroid Build Coastguard Worker```kotlin 97*57b5a4a6SAndroid Build Coastguard Workerplugins { 98*57b5a4a6SAndroid Build Coastguard Worker kotlin("jvm") version "1.9.22" // or kotlin("multiplatform") or any other kotlin plugin 99*57b5a4a6SAndroid Build Coastguard Worker kotlin("plugin.serialization") version "1.9.22" 100*57b5a4a6SAndroid Build Coastguard Worker} 101*57b5a4a6SAndroid Build Coastguard Worker``` 102*57b5a4a6SAndroid Build Coastguard Worker 103*57b5a4a6SAndroid Build Coastguard WorkerGroovy DSL: 104*57b5a4a6SAndroid Build Coastguard Worker 105*57b5a4a6SAndroid Build Coastguard Worker```gradle 106*57b5a4a6SAndroid Build Coastguard Workerplugins { 107*57b5a4a6SAndroid Build Coastguard Worker id 'org.jetbrains.kotlin.multiplatform' version '1.9.22' 108*57b5a4a6SAndroid Build Coastguard Worker id 'org.jetbrains.kotlin.plugin.serialization' version '1.9.22' 109*57b5a4a6SAndroid Build Coastguard Worker} 110*57b5a4a6SAndroid Build Coastguard Worker``` 111*57b5a4a6SAndroid Build Coastguard Worker 112*57b5a4a6SAndroid Build Coastguard Worker> Kotlin versions before 1.4.0 are not supported by the stable release of Kotlin serialization. 113*57b5a4a6SAndroid Build Coastguard Worker 114*57b5a4a6SAndroid Build Coastguard Worker<details> 115*57b5a4a6SAndroid Build Coastguard Worker <summary>Using <code>apply plugin</code> (the old way)</summary> 116*57b5a4a6SAndroid Build Coastguard Worker 117*57b5a4a6SAndroid Build Coastguard WorkerFirst, you have to add the serialization plugin to your classpath as the other [compiler plugins](https://kotlinlang.org/docs/reference/compiler-plugins.html): 118*57b5a4a6SAndroid Build Coastguard Worker 119*57b5a4a6SAndroid Build Coastguard WorkerKotlin DSL: 120*57b5a4a6SAndroid Build Coastguard Worker 121*57b5a4a6SAndroid Build Coastguard Worker```kotlin 122*57b5a4a6SAndroid Build Coastguard Workerbuildscript { 123*57b5a4a6SAndroid Build Coastguard Worker repositories { mavenCentral() } 124*57b5a4a6SAndroid Build Coastguard Worker 125*57b5a4a6SAndroid Build Coastguard Worker dependencies { 126*57b5a4a6SAndroid Build Coastguard Worker val kotlinVersion = "1.9.22" 127*57b5a4a6SAndroid Build Coastguard Worker classpath(kotlin("gradle-plugin", version = kotlinVersion)) 128*57b5a4a6SAndroid Build Coastguard Worker classpath(kotlin("serialization", version = kotlinVersion)) 129*57b5a4a6SAndroid Build Coastguard Worker } 130*57b5a4a6SAndroid Build Coastguard Worker} 131*57b5a4a6SAndroid Build Coastguard Worker``` 132*57b5a4a6SAndroid Build Coastguard Worker 133*57b5a4a6SAndroid Build Coastguard WorkerGroovy DSL: 134*57b5a4a6SAndroid Build Coastguard Worker 135*57b5a4a6SAndroid Build Coastguard Worker```gradle 136*57b5a4a6SAndroid Build Coastguard Workerbuildscript { 137*57b5a4a6SAndroid Build Coastguard Worker ext.kotlin_version = '1.9.22' 138*57b5a4a6SAndroid Build Coastguard Worker repositories { mavenCentral() } 139*57b5a4a6SAndroid Build Coastguard Worker 140*57b5a4a6SAndroid Build Coastguard Worker dependencies { 141*57b5a4a6SAndroid Build Coastguard Worker classpath "org.jetbrains.kotlin:kotlin-serialization:$kotlin_version" 142*57b5a4a6SAndroid Build Coastguard Worker } 143*57b5a4a6SAndroid Build Coastguard Worker} 144*57b5a4a6SAndroid Build Coastguard Worker``` 145*57b5a4a6SAndroid Build Coastguard Worker 146*57b5a4a6SAndroid Build Coastguard WorkerThen you can `apply plugin` (example in Groovy): 147*57b5a4a6SAndroid Build Coastguard Worker 148*57b5a4a6SAndroid Build Coastguard Worker```gradle 149*57b5a4a6SAndroid Build Coastguard Workerapply plugin: 'kotlin' // or 'kotlin-multiplatform' for multiplatform projects 150*57b5a4a6SAndroid Build Coastguard Workerapply plugin: 'kotlinx-serialization' 151*57b5a4a6SAndroid Build Coastguard Worker``` 152*57b5a4a6SAndroid Build Coastguard Worker</details> 153*57b5a4a6SAndroid Build Coastguard Worker 154*57b5a4a6SAndroid Build Coastguard Worker#### 2) Dependency on the JSON library 155*57b5a4a6SAndroid Build Coastguard Worker 156*57b5a4a6SAndroid Build Coastguard WorkerAfter setting up the plugin, you have to add a dependency on the serialization library. 157*57b5a4a6SAndroid Build Coastguard WorkerNote that while the plugin has version the same as the compiler one, runtime library has different coordinates, repository and versioning. 158*57b5a4a6SAndroid Build Coastguard Worker 159*57b5a4a6SAndroid Build Coastguard WorkerKotlin DSL: 160*57b5a4a6SAndroid Build Coastguard Worker 161*57b5a4a6SAndroid Build Coastguard Worker```kotlin 162*57b5a4a6SAndroid Build Coastguard Workerrepositories { 163*57b5a4a6SAndroid Build Coastguard Worker mavenCentral() 164*57b5a4a6SAndroid Build Coastguard Worker} 165*57b5a4a6SAndroid Build Coastguard Worker 166*57b5a4a6SAndroid Build Coastguard Workerdependencies { 167*57b5a4a6SAndroid Build Coastguard Worker implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.6.3") 168*57b5a4a6SAndroid Build Coastguard Worker} 169*57b5a4a6SAndroid Build Coastguard Worker``` 170*57b5a4a6SAndroid Build Coastguard Worker 171*57b5a4a6SAndroid Build Coastguard WorkerGroovy DSL: 172*57b5a4a6SAndroid Build Coastguard Worker 173*57b5a4a6SAndroid Build Coastguard Worker```gradle 174*57b5a4a6SAndroid Build Coastguard Workerrepositories { 175*57b5a4a6SAndroid Build Coastguard Worker mavenCentral() 176*57b5a4a6SAndroid Build Coastguard Worker} 177*57b5a4a6SAndroid Build Coastguard Worker 178*57b5a4a6SAndroid Build Coastguard Workerdependencies { 179*57b5a4a6SAndroid Build Coastguard Worker implementation "org.jetbrains.kotlinx:kotlinx-serialization-json:1.6.3" 180*57b5a4a6SAndroid Build Coastguard Worker} 181*57b5a4a6SAndroid Build Coastguard Worker``` 182*57b5a4a6SAndroid Build Coastguard Worker 183*57b5a4a6SAndroid Build Coastguard Worker>We also provide `kotlinx-serialization-core` artifact that contains all serialization API but does not have a bundled serialization format with it 184*57b5a4a6SAndroid Build Coastguard Worker 185*57b5a4a6SAndroid Build Coastguard Worker### Android 186*57b5a4a6SAndroid Build Coastguard Worker 187*57b5a4a6SAndroid Build Coastguard WorkerBy default, proguard rules are supplied with the library. 188*57b5a4a6SAndroid Build Coastguard Worker[These rules](rules/common.pro) keep serializers for _all_ serializable classes that are retained after shrinking, 189*57b5a4a6SAndroid Build Coastguard Workerso you don't need additional setup. 190*57b5a4a6SAndroid Build Coastguard Worker 191*57b5a4a6SAndroid Build Coastguard Worker**However, these rules do not affect serializable classes if they have named companion objects.** 192*57b5a4a6SAndroid Build Coastguard Worker 193*57b5a4a6SAndroid Build Coastguard WorkerIf you want to serialize classes with named companion objects, you need to add and edit rules below to your `proguard-rules.pro` configuration. 194*57b5a4a6SAndroid Build Coastguard Worker 195*57b5a4a6SAndroid Build Coastguard WorkerNote that the rules for R8 differ depending on the [compatibility mode](https://r8.googlesource.com/r8/+/refs/heads/master/compatibility-faq.md) used. 196*57b5a4a6SAndroid Build Coastguard Worker 197*57b5a4a6SAndroid Build Coastguard Worker<details> 198*57b5a4a6SAndroid Build Coastguard Worker<summary>Example of named companion rules for ProGuard and R8 compatibility mode</summary> 199*57b5a4a6SAndroid Build Coastguard Worker 200*57b5a4a6SAndroid Build Coastguard Worker```proguard 201*57b5a4a6SAndroid Build Coastguard Worker# Serializer for classes with named companion objects are retrieved using `getDeclaredClasses`. 202*57b5a4a6SAndroid Build Coastguard Worker# If you have any, replace classes with those containing named companion objects. 203*57b5a4a6SAndroid Build Coastguard Worker-keepattributes InnerClasses # Needed for `getDeclaredClasses`. 204*57b5a4a6SAndroid Build Coastguard Worker 205*57b5a4a6SAndroid Build Coastguard Worker-if @kotlinx.serialization.Serializable class 206*57b5a4a6SAndroid Build Coastguard Workercom.example.myapplication.HasNamedCompanion, # <-- List serializable classes with named companions. 207*57b5a4a6SAndroid Build Coastguard Workercom.example.myapplication.HasNamedCompanion2 208*57b5a4a6SAndroid Build Coastguard Worker{ 209*57b5a4a6SAndroid Build Coastguard Worker static **$* *; 210*57b5a4a6SAndroid Build Coastguard Worker} 211*57b5a4a6SAndroid Build Coastguard Worker-keepnames class <1>$$serializer { # -keepnames suffices; class is kept when serializer() is kept. 212*57b5a4a6SAndroid Build Coastguard Worker static <1>$$serializer INSTANCE; 213*57b5a4a6SAndroid Build Coastguard Worker} 214*57b5a4a6SAndroid Build Coastguard Worker``` 215*57b5a4a6SAndroid Build Coastguard Worker</details> 216*57b5a4a6SAndroid Build Coastguard Worker 217*57b5a4a6SAndroid Build Coastguard Worker 218*57b5a4a6SAndroid Build Coastguard Worker<details> 219*57b5a4a6SAndroid Build Coastguard Worker<summary>Example of named companion rules for R8 full mode</summary> 220*57b5a4a6SAndroid Build Coastguard Worker 221*57b5a4a6SAndroid Build Coastguard Worker```proguard 222*57b5a4a6SAndroid Build Coastguard Worker# Serializer for classes with named companion objects are retrieved using `getDeclaredClasses`. 223*57b5a4a6SAndroid Build Coastguard Worker# If you have any, replace classes with those containing named companion objects. 224*57b5a4a6SAndroid Build Coastguard Worker-keepattributes InnerClasses # Needed for `getDeclaredClasses`. 225*57b5a4a6SAndroid Build Coastguard Worker 226*57b5a4a6SAndroid Build Coastguard Worker-if @kotlinx.serialization.Serializable class 227*57b5a4a6SAndroid Build Coastguard Workercom.example.myapplication.HasNamedCompanion, # <-- List serializable classes with named companions. 228*57b5a4a6SAndroid Build Coastguard Workercom.example.myapplication.HasNamedCompanion2 229*57b5a4a6SAndroid Build Coastguard Worker{ 230*57b5a4a6SAndroid Build Coastguard Worker static **$* *; 231*57b5a4a6SAndroid Build Coastguard Worker} 232*57b5a4a6SAndroid Build Coastguard Worker-keepnames class <1>$$serializer { # -keepnames suffices; class is kept when serializer() is kept. 233*57b5a4a6SAndroid Build Coastguard Worker static <1>$$serializer INSTANCE; 234*57b5a4a6SAndroid Build Coastguard Worker} 235*57b5a4a6SAndroid Build Coastguard Worker 236*57b5a4a6SAndroid Build Coastguard Worker# Keep both serializer and serializable classes to save the attribute InnerClasses 237*57b5a4a6SAndroid Build Coastguard Worker-keepclasseswithmembers, allowshrinking, allowobfuscation, allowaccessmodification class 238*57b5a4a6SAndroid Build Coastguard Workercom.example.myapplication.HasNamedCompanion, # <-- List serializable classes with named companions. 239*57b5a4a6SAndroid Build Coastguard Workercom.example.myapplication.HasNamedCompanion2 240*57b5a4a6SAndroid Build Coastguard Worker{ 241*57b5a4a6SAndroid Build Coastguard Worker *; 242*57b5a4a6SAndroid Build Coastguard Worker} 243*57b5a4a6SAndroid Build Coastguard Worker``` 244*57b5a4a6SAndroid Build Coastguard Worker</details> 245*57b5a4a6SAndroid Build Coastguard Worker 246*57b5a4a6SAndroid Build Coastguard WorkerIn case you want to exclude serializable classes that are used, but never serialized at runtime, 247*57b5a4a6SAndroid Build Coastguard Workeryou will need to write custom rules with narrower [class specifications](https://www.guardsquare.com/manual/configuration/usage). 248*57b5a4a6SAndroid Build Coastguard Worker 249*57b5a4a6SAndroid Build Coastguard Worker### Multiplatform (Common, JS, Native) 250*57b5a4a6SAndroid Build Coastguard Worker 251*57b5a4a6SAndroid Build Coastguard WorkerMost of the modules are also available for Kotlin/JS and Kotlin/Native. 252*57b5a4a6SAndroid Build Coastguard WorkerYou can add dependency to the required module right to the common source set: 253*57b5a4a6SAndroid Build Coastguard Worker```gradle 254*57b5a4a6SAndroid Build Coastguard WorkercommonMain { 255*57b5a4a6SAndroid Build Coastguard Worker dependencies { 256*57b5a4a6SAndroid Build Coastguard Worker // Works as common dependency as well as the platform one 257*57b5a4a6SAndroid Build Coastguard Worker implementation "org.jetbrains.kotlinx:kotlinx-serialization-json:$serialization_version" 258*57b5a4a6SAndroid Build Coastguard Worker } 259*57b5a4a6SAndroid Build Coastguard Worker} 260*57b5a4a6SAndroid Build Coastguard Worker``` 261*57b5a4a6SAndroid Build Coastguard WorkerThe same artifact coordinates can be used to depend on platform-specific artifact in platform-specific source-set. 262*57b5a4a6SAndroid Build Coastguard Worker 263*57b5a4a6SAndroid Build Coastguard Worker### Maven 264*57b5a4a6SAndroid Build Coastguard Worker 265*57b5a4a6SAndroid Build Coastguard WorkerEnsure the proper version of Kotlin and serialization version: 266*57b5a4a6SAndroid Build Coastguard Worker 267*57b5a4a6SAndroid Build Coastguard Worker```xml 268*57b5a4a6SAndroid Build Coastguard Worker<properties> 269*57b5a4a6SAndroid Build Coastguard Worker <kotlin.version>1.9.22</kotlin.version> 270*57b5a4a6SAndroid Build Coastguard Worker <serialization.version>1.6.3</serialization.version> 271*57b5a4a6SAndroid Build Coastguard Worker</properties> 272*57b5a4a6SAndroid Build Coastguard Worker``` 273*57b5a4a6SAndroid Build Coastguard Worker 274*57b5a4a6SAndroid Build Coastguard WorkerAdd serialization plugin to Kotlin compiler plugin: 275*57b5a4a6SAndroid Build Coastguard Worker 276*57b5a4a6SAndroid Build Coastguard Worker```xml 277*57b5a4a6SAndroid Build Coastguard Worker<build> 278*57b5a4a6SAndroid Build Coastguard Worker <plugins> 279*57b5a4a6SAndroid Build Coastguard Worker <plugin> 280*57b5a4a6SAndroid Build Coastguard Worker <groupId>org.jetbrains.kotlin</groupId> 281*57b5a4a6SAndroid Build Coastguard Worker <artifactId>kotlin-maven-plugin</artifactId> 282*57b5a4a6SAndroid Build Coastguard Worker <version>${kotlin.version}</version> 283*57b5a4a6SAndroid Build Coastguard Worker <executions> 284*57b5a4a6SAndroid Build Coastguard Worker <execution> 285*57b5a4a6SAndroid Build Coastguard Worker <id>compile</id> 286*57b5a4a6SAndroid Build Coastguard Worker <phase>compile</phase> 287*57b5a4a6SAndroid Build Coastguard Worker <goals> 288*57b5a4a6SAndroid Build Coastguard Worker <goal>compile</goal> 289*57b5a4a6SAndroid Build Coastguard Worker </goals> 290*57b5a4a6SAndroid Build Coastguard Worker </execution> 291*57b5a4a6SAndroid Build Coastguard Worker </executions> 292*57b5a4a6SAndroid Build Coastguard Worker <configuration> 293*57b5a4a6SAndroid Build Coastguard Worker <compilerPlugins> 294*57b5a4a6SAndroid Build Coastguard Worker <plugin>kotlinx-serialization</plugin> 295*57b5a4a6SAndroid Build Coastguard Worker </compilerPlugins> 296*57b5a4a6SAndroid Build Coastguard Worker </configuration> 297*57b5a4a6SAndroid Build Coastguard Worker <dependencies> 298*57b5a4a6SAndroid Build Coastguard Worker <dependency> 299*57b5a4a6SAndroid Build Coastguard Worker <groupId>org.jetbrains.kotlin</groupId> 300*57b5a4a6SAndroid Build Coastguard Worker <artifactId>kotlin-maven-serialization</artifactId> 301*57b5a4a6SAndroid Build Coastguard Worker <version>${kotlin.version}</version> 302*57b5a4a6SAndroid Build Coastguard Worker </dependency> 303*57b5a4a6SAndroid Build Coastguard Worker </dependencies> 304*57b5a4a6SAndroid Build Coastguard Worker </plugin> 305*57b5a4a6SAndroid Build Coastguard Worker </plugins> 306*57b5a4a6SAndroid Build Coastguard Worker</build> 307*57b5a4a6SAndroid Build Coastguard Worker``` 308*57b5a4a6SAndroid Build Coastguard Worker 309*57b5a4a6SAndroid Build Coastguard WorkerAdd dependency on serialization runtime library: 310*57b5a4a6SAndroid Build Coastguard Worker 311*57b5a4a6SAndroid Build Coastguard Worker```xml 312*57b5a4a6SAndroid Build Coastguard Worker<dependency> 313*57b5a4a6SAndroid Build Coastguard Worker <groupId>org.jetbrains.kotlinx</groupId> 314*57b5a4a6SAndroid Build Coastguard Worker <artifactId>kotlinx-serialization-json</artifactId> 315*57b5a4a6SAndroid Build Coastguard Worker <version>${serialization.version}</version> 316*57b5a4a6SAndroid Build Coastguard Worker</dependency> 317*57b5a4a6SAndroid Build Coastguard Worker``` 318*57b5a4a6SAndroid Build Coastguard Worker 319*57b5a4a6SAndroid Build Coastguard Worker### Bazel 320*57b5a4a6SAndroid Build Coastguard Worker 321*57b5a4a6SAndroid Build Coastguard WorkerTo setup the Kotlin compiler plugin for Bazel, follow [the 322*57b5a4a6SAndroid Build Coastguard Workerexample](https://github.com/bazelbuild/rules_kotlin/tree/master/examples/plugin/src/serialization) 323*57b5a4a6SAndroid Build Coastguard Workerfrom the `rules_kotlin` repository. 324