> AI agents: this is one page from PostHog's docs. Full index of Markdown docs for LLMs: https://posthog.com/llms.txt

# Kotlin Multiplatform Product Analytics installation - Docs

Copy page

# Kotlin Multiplatform Product Analytics installation - Docs

1.  1

    ## Install the dependency

    Required

    Add the PostHog KMP SDK to your shared module's `commonMain` source set:

    shared/build.gradle.kts

    PostHog AI

    ```kotlin
    kotlin {
        sourceSets {
            commonMain.dependencies {
                implementation("com.posthog:posthog-kmp:0.+")
            }
        }
    }
    ```

    `0.+` resolves to the latest `0.x` release. The SDK is a pre-release, so the API can change between minor versions – pin an exact version from [Maven Central](https://central.sonatype.com/artifact/com.posthog/posthog-kmp) if you would rather upgrade deliberately. Kotlin/Wasm support requires `0.2.0` or higher.

2.  2

    ## Configure PostHog

    Required

    Call `PostHog.setup()` once, early in your app's lifecycle. The config is shared across every target – only the `PostHogContext` differs per platform.

    ## Tab

    Android needs the `Application` instance, so set PostHog up from your `Application` class – not from an Activity, whose `onCreate` re-runs on every recreation (for example, on rotation):

    MyApplication.kt

    PostHog AI

    ```kotlin
    import android.app.Application
    import com.posthog.kmp.PostHog
    import com.posthog.kmp.PostHogConfig
    import com.posthog.kmp.PostHogContext
    class MyApplication : Application() {
        override fun onCreate() {
            super.onCreate()
            PostHog.setup(
                config = PostHogConfig(
                    apiKey = "<ph_project_token>",
                    host = "https://us.i.posthog.com",
                ),
                context = PostHogContext(this),
            )
        }
    }
    ```

    Register the class in your `AndroidManifest.xml`:

    android/src/main/AndroidManifest.xml

    PostHog AI

    ```xml
    <application android:name=".MyApplication" ...>
    ```

    ## Tab

    On iOS, use the no-argument `PostHogContext()`:

    MainViewController.kt

    PostHog AI

    ```kotlin
    import com.posthog.kmp.PostHog
    import com.posthog.kmp.PostHogConfig
    import com.posthog.kmp.PostHogContext
    fun MainViewController() = ComposeUIViewController {
        LaunchedEffect(Unit) {
            PostHog.setup(
                config = PostHogConfig(
                    apiKey = "<ph_project_token>",
                    host = "https://us.i.posthog.com",
                ),
                context = PostHogContext(),
            )
        }
        App()
    }
    ```

    ## Tab

    On the web (Kotlin/JS and Kotlin/Wasm), use the no-argument `PostHogContext()`:

    main.kt

    PostHog AI

    ```kotlin
    import com.posthog.kmp.PostHog
    import com.posthog.kmp.PostHogConfig
    import com.posthog.kmp.PostHogContext
    fun main() {
        PostHog.setup(
            config = PostHogConfig(
                apiKey = "<ph_project_token>",
                host = "https://us.i.posthog.com",
            ),
            context = PostHogContext(),
        )
    }
    ```

    ## Tab

    On the JVM – for example, a Compose Multiplatform desktop app – use the no-argument `PostHogContext()`:

    main.kt

    PostHog AI

    ```kotlin
    import com.posthog.kmp.PostHog
    import com.posthog.kmp.PostHogConfig
    import com.posthog.kmp.PostHogContext
    fun main() = application {
        PostHog.setup(
            config = PostHogConfig(
                apiKey = "<ph_project_token>",
                host = "https://us.i.posthog.com",
            ),
            context = PostHogContext(),
        )
        // ...
    }
    ```

3.  3

    ## Send events

    Recommended

    Once installed, PostHog automatically captures app lifecycle events on Android and iOS. Send an event manually from shared code to test your integration:

    Kotlin

    PostHog AI

    ```kotlin
    import com.posthog.kmp.PostHog
    PostHog.capture(
        event = "button_clicked",
        properties = mapOf(
            "button_name" to "signup"
        )
    )
    ```

4.  4

    ## Next steps

    Recommended

    Now that you're capturing events, continue with the resources below to learn what else Product Analytics enables within the PostHog platform.

    | Resource | Description |
    | --- | --- |
    | [Capturing events](/docs/product-analytics/capture-events.md) | Learn how to capture custom events beyond autocapture |
    | [Identifying users](/docs/product-analytics/identify.md) | Associate events with specific users |
    | [Creating insights](/docs/product-analytics/insights.md) | Build trends, funnels, and retention charts |
    | [Group analytics](/docs/product-analytics/group-analytics.md) | Track events at the company or account level |

### Still have questions?

Ask PostHog AI

### Was this page useful?

HelpfulCould be better