Kotlin Multiplatform (KMP)

DivKit provides a library for using in Kotlin Multiplatform applications for both iOS and Android platforms. The library is published in Maven Central inside group com.yandex.divkit.multiplatform and versioned in accordance with the versions of the main DivKit library.

Usage

1) Gradle dependency

Add the library as a dependency of your shared module:

kotlin {
    sourceSets {
        commonMain.dependencies {
            implementation("com.yandex.divkit.multiplatform:divkit-multiplatform:<divkit-version>")
        }
    }
}

2) iOS: add the DivKitKMP CocoaPod

The iOS implementation relies on a small bridging pod DivKitKMP to correctly link Obj-C symbols. Add it to your iOS app Podfile and run pod install from the iOS app folder:

platform :ios, '13.0'
use_frameworks!

target 'YourApp' do
  pod 'DivKitKMP'

  # Other pods if needed
end

3) Render DivKit card in Kotlin multiplatform

You can create DivKit factory using function makeDivKitFactory and pass common DivKitDependencies in it from shared code. DivKitFactory is a main interface for interaction.

In common code:

val factory: DivKitFactory = makeDivKitFactory(
    dependencies = DivKitDependencies(
        actionHandler = object : ActionHandler {
            override fun handle(url: String) {
                // Handle actions (deeplink/URL)
            }
        },
        errorReporter = object : ErrorReporter {
            override fun report(cardId: String, message: String) {
                // Report parsing/rendering errors
            }
        }
    )
)

@Composable
fun DivScreen(cardId: String, json: String, modifier: Modifier = Modifier) {
    factory.DivView(cardId = cardId, jsonData = json, modifier = modifier)
}

fun setVariables() {
    factory.setGlobalVariables(
        mapOf(
            "user_name" to "Alex",
            "is_premium" to true
        )
    )
}

Also you can setup some platform-specific dependencies in platform-specific code. For example:

In Android part:

DivKitAndroidEnvironment.set(
    DivKitEnvironment(
        imageLoaderFactory = { ctx ->
            PicassoDivImageLoader(ctx)
        },
        lifecycleOwner = null
    )
)

Learn more

You can discuss topics of interest in the DivKit user community in Telegram: https://t.me/divkit_community_en.

DivKit Repository

Previous