Adding dependencies on multiplatform libraries
Every program requires a set of libraries to operate successfully. A Kotlin Multiplatform project can depend on multiplatform libraries that work for all target platforms, platform-specific libraries, and other multiplatform projects.
To add a dependency on a library, update your build.gradle(.kts)
file in the directory of your project containing shared code. Set a dependency of the required type (for example, implementation
) in the dependencies {}
block:
kotlin {
sourceSets {
commonMain.dependencies {
implementation("com.example:my-library:1.0") // library shared for all source sets
}
}
}
kotlin {
sourceSets {
commonMain {
dependencies {
implementation 'com.example:my-library:1.0'
}
}
}
}
Alternatively, you can set dependencies at the top level.
A dependency on a standard library (stdlib
) in each source set is added automatically. The version of the standard library is the same as the version of the kotlin-multiplatform
plugin.
For platform-specific source sets, the corresponding platform-specific variant of the library is used, while a common standard library is added to the rest. The Kotlin Gradle plugin will select the appropriate JVM standard library depending on the compilerOptions.jvmTarget
compiler option of your Gradle build script.
Learn how to change the default behavior.
For multiplatform tests, the kotlin.test
API is available. When you create a multiplatform project, you can add test dependencies to all the source sets by using a single dependency in commonTest
:
kotlin {
sourceSets {
commonTest.dependencies {
implementation(kotlin("test")) // Brings all the platform dependencies automatically
}
}
}
kotlin {
sourceSets {
commonTest {
dependencies {
implementation kotlin("test") // Brings all the platform dependencies automatically
}
}
}
}
If you use a multiplatform library and need to depend on the shared code, set the dependency only once in the shared source set. Use the library base artifact name, such as kotlinx-coroutines-core
:
kotlin {
sourceSets {
commonMain.dependencies {
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.10.1")
}
}
}
kotlin {
sourceSets {
commonMain {
dependencies {
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.10.1'
}
}
}
}
If you need a kotlinx library for a platform-specific dependency, you can still use library's base artifact name in the corresponding platform source set:
kotlin {
sourceSets {
jvmMain.dependencies {
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.10.1")
}
}
}
kotlin {
sourceSets {
jvmMain {
dependencies {
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.10.1'
}
}
}
}
You can add dependencies on libraries that have adopted Kotlin Multiplatform technology, such as SQLDelight. The authors of these libraries usually provide guides for adding their dependencies to your project.
tip
Look for Kotlin Multiplatform libraries on the JetBrains' search platform.
If you want to use a library from all source sets, you can add it only to the common source set. The Kotlin Multiplatform Mobile plugin will automatically add the corresponding parts to any other source sets.
warning
You cannot set dependencies on platform-specific libraries in the common source set.
kotlin {
sourceSets {
commonMain.dependencies {
implementation("io.ktor:ktor-client-core:3.1.1")
}
androidMain.dependencies {
// dependency to a platform part of ktor-client will be added automatically
}
}
}
kotlin {
sourceSets {
commonMain {
dependencies {
implementation 'io.ktor:ktor-client-core:3.1.1'
}
}
androidMain {
dependencies {
// dependency to platform part of ktor-client will be added automatically
}
}
}
}
If you want to use a multiplatform library just for specific source sets, you can add it exclusively to them. The specified library declarations will then be available only in those source sets.
note
Use a common library name in such cases, not a platform-specific one. Like with SQLDelight in the example below, use
native-driver
, notnative-driver-iosx64
. Find the exact name in the library's documentation.
kotlin {
sourceSets {
commonMain.dependencies {
// kotlinx.coroutines will be available in all source sets
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.10.1")
}
androidMain.dependencies {
}
iosMain.dependencies {
// SQLDelight will be available only in the iOS source set, but not in Android or common
implementation("com.squareup.sqldelight:native-driver:2.0.2")
}
}
}
kotlin {
sourceSets {
commonMain {
dependencies {
// kotlinx.coroutines will be available in all source sets
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.10.1'
}
}
androidMain {
dependencies {}
}
iosMain {
dependencies {
// SQLDelight will be available only in the iOS source set, but not in Android or common
implementation 'com.squareup.sqldelight:native-driver:2.0.2'
}
}
}
}
You can connect one multiplatform project to another as a dependency. To do this, simply add a project dependency to the source set that needs it. If you want to use a dependency in all source sets, add it to the common one. In this case, other source sets will get their versions automatically.
kotlin {
sourceSets {
commonMain.dependencies {
implementation(project(":some-other-multiplatform-module"))
}
androidMain.dependencies {
// platform part of :some-other-multiplatform-module will be added automatically
}
}
}
kotlin {
sourceSets {
commonMain {
dependencies {
implementation project(':some-other-multiplatform-module')
}
}
androidMain {
dependencies {
// platform part of :some-other-multiplatform-module will be added automatically
}
}
}
}
Check out other resources on adding dependencies in multiplatform projects and learn more about: