androidkotlinandroid-jetpack-composekotlin-multiplatformcompose-multiplatform

Missing CircularWavyProgressIndicator after updating to Compose Multiplatform 1.9.0-beta03


I recently updated my project to Compose Multiplatform 1.9.0-beta03 and Material3 1.9.0-beta03. After the update, I can no longer access:

These used to work fine before the upgrade.

Here’s my setup:

Compose Multiplatform plugin: 1.9.0-beta03

Material 3: 1.9.0-beta03

Kotlin: 2.2.10

AGP: 8.12.1

Other relevant dependencies: navigation-compose 2.9.0-beta05, adaptive 1.1.2, koin 4.1.0, etc.

I’ve attached my libs.versions.toml and build.gradle.kts files for reference.

libs.versions.toml

[versions]
adaptive = "1.1.2"
agp = "8.12.1"
android-compileSdk = "35"
android-minSdk = "24"
android-targetSdk = "35"
androidx-activity = "1.10.1"
androidx-lifecycle = "2.9.2"
composeHotReload = "1.0.0-beta05"
composeMultiplatformPlugin = "1.9.0-beta03"
grpcOkhttp = "1.75.0"
kotlin = "2.2.10"
kotlinx-coroutines = "1.10.2"
compottie = "2.0.0-rc04"
navigationCompose = "2.9.0-beta05"
kotlinSerializationJson = "1.9.0"
koinBom = "4.1.0"
kmpGrpc = "1.1.0"
jetbrainsKotlinJvm = "2.2.10"
ktor = "3.2.3"
logback = "1.5.18"
material3 = "1.9.0-alpha04"

[libraries]
adaptive = { module = "org.jetbrains.compose.material3.adaptive:adaptive", version.ref = "adaptive" }
compottie = { module = "io.github.alexzhirkevich:compottie", version.ref = "compottie" }
grpc-okhttp = { module = "io.grpc:grpc-okhttp", version.ref = "grpcOkhttp" }
kotlin-test = { module = "org.jetbrains.kotlin:kotlin-test", version.ref = "kotlin" }
androidx-activity-compose = { module = "androidx.activity:activity-compose", version.ref = "androidx-activity" }
androidx-lifecycle-viewmodel = { module = "org.jetbrains.androidx.lifecycle:lifecycle-viewmodel", version.ref = "androidx-lifecycle" }
androidx-lifecycle-runtimeCompose = { module = "org.jetbrains.androidx.lifecycle:lifecycle-runtime-compose", version.ref = "androidx-lifecycle" }
kotlinx-coroutines-core = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-core", version.ref = "kotlinx-coroutines" }
kotlinx-coroutinesSwing = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-swing", version.ref = "kotlinx-coroutines" }
kotlinx-serialization-json = { module = "org.jetbrains.kotlinx:kotlinx-serialization-json", version.ref = "kotlinSerializationJson" }
navigation-compose = { module = "org.jetbrains.androidx.navigation:navigation-compose", version.ref = "navigationCompose" }
material3 = { module = "org.jetbrains.compose.material3:material3", version.ref = "material3" }
koin-bom = { module = "io.insert-koin:koin-bom", version.ref = "koinBom" }
koin-core = { module = "io.insert-koin:koin-core" }
koin-core-coroutines = { module = "io.insert-koin:koin-core-coroutines" }
koin-compose = { module = "io.insert-koin:koin-compose" }
koin-compose-viewmodel = { module = "io.insert-koin:koin-compose-viewmodel" }
koin-compose-viewmodel-navigation = { module = "io.insert-koin:koin-compose-viewmodel-navigation" }
logback = { module = "ch.qos.logback:logback-classic", version.ref = "logback" }
ktor-serverCore = { module = "io.ktor:ktor-server-core-jvm", version.ref = "ktor" }
ktor-serverNetty = { module = "io.ktor:ktor-server-netty-jvm", version.ref = "ktor" }
ktor-serverTestHost = { module = "io.ktor:ktor-server-test-host-jvm", version.ref = "ktor" }

[plugins]
androidApplication = { id = "com.android.application", version.ref = "agp" }
androidLibrary = { id = "com.android.library", version.ref = "agp" }
composeHotReload = { id = "org.jetbrains.compose.hot-reload", version.ref = "composeHotReload" }
composeMultiplatform = { id = "org.jetbrains.compose", version.ref = "composeMultiplatformPlugin" }
composeCompiler = { id = "org.jetbrains.kotlin.plugin.compose", version.ref = "kotlin" }
kotlinMultiplatform = { id = "org.jetbrains.kotlin.multiplatform", version.ref = "kotlin" }
kotlinSerialization = { id = "org.jetbrains.kotlin.plugin.serialization", version.ref = "kotlin" }
kmpGrpcPlugin = { id = "io.github.timortel.kmpgrpc.plugin", version.ref = "kmpGrpc" }
jetbrainsKotlinJvm = { id = "org.jetbrains.kotlin.jvm", version.ref = "jetbrainsKotlinJvm" }
protobuf = { id = "com.google.protobuf", version = "0.9.5" }
ktor = { id = "io.ktor.plugin", version.ref = "ktor" }

build.gradle.kts

import org.jetbrains.kotlin.gradle.ExperimentalKotlinGradlePluginApi
import org.jetbrains.kotlin.gradle.dsl.JvmTarget
// Desktop and WASM imports commented out
//import org.jetbrains.compose.desktop.application.dsl.TargetFormat
//import org.jetbrains.kotlin.gradle.ExperimentalWasmDsl
//import org.jetbrains.kotlin.gradle.targets.js.webpack.KotlinWebpackConfig

plugins {
    alias(libs.plugins.kotlinMultiplatform)
    alias(libs.plugins.androidApplication)
    alias(libs.plugins.composeMultiplatform)
    alias(libs.plugins.composeCompiler)
    alias(libs.plugins.composeHotReload)
    alias(libs.plugins.kotlinSerialization)
    alias(libs.plugins.kmpGrpcPlugin)
}

kotlin {

    applyDefaultHierarchyTemplate()

    androidTarget {
        @OptIn(ExperimentalKotlinGradlePluginApi::class)
        compilerOptions {
            jvmTarget.set(JvmTarget.JVM_21)
        }
    }

    listOf(
        iosX64(),
        iosArm64(),
        iosSimulatorArm64()
    ).forEach { iosTarget ->
        iosTarget.binaries.framework {
            baseName = "ComposeApp"
            isStatic = true
        }
    }

    // Desktop target commented out
    //jvm("desktop")

    // WASM target commented out
    /*
    @OptIn(ExperimentalWasmDsl::class)
    wasmJs {
        outputModuleName.set("composeApp")
        browser {
            val rootDirPath = project.rootDir.path
            val projectDirPath = project.projectDir.path
            commonWebpackConfig {
                outputFileName = "composeApp.js"
                devServer = (devServer ?: KotlinWebpackConfig.DevServer()).apply {
                    static = (static ?: mutableListOf()).apply {
                        // Serve sources to debug inside browser
                        add(rootDirPath)
                        add(projectDirPath)
                    }
                }
            }
        }
        binaries.executable()
    }
    */

    sourceSets {
        // Desktop sourceSet commented out
        //val desktopMain by getting

        androidMain.dependencies {
            implementation(compose.preview)
            implementation(libs.koin.core.coroutines)
            implementation(libs.androidx.activity.compose)
            implementation(libs.grpc.okhttp)
        }
        commonMain.dependencies {
            implementation(libs.compottie)
            implementation(compose.runtime)
            implementation(compose.foundation)
            implementation(compose.material3)
            implementation(libs.adaptive)
            implementation(compose.materialIconsExtended)
            implementation(compose.ui)
            implementation(libs.kotlinx.serialization.json)
            implementation(libs.navigation.compose)
            implementation(libs.material3)
            implementation(compose.components.resources)
            implementation(compose.components.uiToolingPreview)
            implementation(libs.androidx.lifecycle.viewmodel)
            implementation(libs.androidx.lifecycle.runtimeCompose)
            implementation(project.dependencies.platform(libs.koin.bom))
            implementation(libs.koin.core)
            implementation(libs.koin.compose)
            implementation(libs.koin.compose.viewmodel)
            implementation(libs.koin.compose.viewmodel.navigation)
            api(libs.kotlinx.coroutines.core)
        }
        commonTest.dependencies {
            implementation(libs.kotlin.test)
        }
        // Desktop dependencies commented out
        /*
        desktopMain.dependencies {
            implementation(compose.desktop.currentOs)
            implementation(libs.kotlinx.coroutinesSwing)
        }
        */
    }
}

android {
    namespace = "abc.abc.abc"
    compileSdk = libs.versions.android.compileSdk.get().toInt()

    defaultConfig {
        applicationId = "abc.abc.abc"
        minSdk = libs.versions.android.minSdk.get().toInt()
        targetSdk = libs.versions.android.targetSdk.get().toInt()
        versionCode = 1
        versionName = "1.0"
    }
    packaging {
        resources {
            excludes += "/META-INF/{AL2.0,LGPL2.1}"
        }
    }
    buildTypes {
        getByName("release") {
            isMinifyEnabled = false
        }
    }
    compileOptions {
        sourceCompatibility = JavaVersion.VERSION_21
        targetCompatibility = JavaVersion.VERSION_21
    }
}

dependencies {
    debugImplementation(compose.uiTooling)
}

// Desktop compose configuration commented out
/*
compose.desktop {
    application {
        mainClass = "abc.abc.abc.MainKt"

        nativeDistributions {
            targetFormats(TargetFormat.Dmg, TargetFormat.Msi, TargetFormat.Deb)
            packageName = "abc.abc.abc"
            packageVersion = "1.0.0"
        }
    }
}
*/

kmpGrpc {
    common()
    android()
    native()
    // Desktop and JS targets commented out
    //jvm()
    //js()

    includeWellKnownTypes = true

    protoSourceFolders = project.files("../../protos")
}

Has anyone else run into this issue? Were these APIs removed/renamed in the new beta, or am I missing an additional dependency/import?


Solution

  • Yes, these were removed in the beta, see the changelog.

    All public APIs tagged with ExperimentalMaterial3ExpressiveApi or ExperimentalMaterial3ComponentOverrideApi have been removed, see Google Jetpack changelog. Please use the previous Material3 alpha version explicitly to continue enjoying these features:

    implementation("org.jetbrains.compose.material3:material3:1.9.0-alpha04")