diff --git a/settings.gradle.kts b/settings.gradle.kts
index 03bcb2d8d..fcdc2d240 100644
--- a/settings.gradle.kts
+++ b/settings.gradle.kts
@@ -83,6 +83,7 @@ include(
":demos:sandbox-appyx-navigation:web",
":ksp:mutable-ui-processor",
":utils:customisations",
+ ":utils:interop-coroutines",
":utils:interop-ribs",
":utils:interop-rx2",
":utils:interop-rx3",
diff --git a/utils/interop-coroutines/build.gradle.kts b/utils/interop-coroutines/build.gradle.kts
new file mode 100644
index 000000000..913380acf
--- /dev/null
+++ b/utils/interop-coroutines/build.gradle.kts
@@ -0,0 +1,55 @@
+plugins {
+ id("com.bumble.appyx.multiplatform")
+ id("com.android.library")
+ id("appyx-publish-multiplatform")
+}
+
+appyx {
+ androidNamespace.set("com.bumble.appyx.utils.interop.coroutines")
+}
+
+kotlin {
+ androidTarget {
+ publishLibraryVariants("release")
+ }
+ jvm("desktop") {
+ compilations.all {
+ kotlinOptions.jvmTarget = libs.versions.jvmTarget.get()
+ }
+ }
+ js(IR) {
+ // Adding moduleName as a workaround for this issue: https://youtrack.jetbrains.com/issue/KT-51942
+ moduleName = "appyx-utils-coroutines"
+ browser()
+ }
+
+ iosX64()
+ iosArm64()
+ iosSimulatorArm64()
+
+ sourceSets {
+ val commonMain by getting {
+ dependencies {
+ api(project(":appyx-navigation:appyx-navigation"))
+ }
+ }
+ val commonTest by getting {
+ dependencies {
+ implementation(kotlin("test"))
+ implementation(libs.kotlin.coroutines.test)
+ }
+ }
+ val androidMain by getting
+ val desktopMain by getting
+ val jsMain by getting
+ val iosX64Main by getting
+ val iosArm64Main by getting
+ val iosSimulatorArm64Main by getting
+ val iosMain by creating {
+ dependsOn(commonMain)
+ iosX64Main.dependsOn(this)
+ iosArm64Main.dependsOn(this)
+ iosSimulatorArm64Main.dependsOn(this)
+ }
+ }
+}
diff --git a/utils/interop-coroutines/lint-baseline.xml b/utils/interop-coroutines/lint-baseline.xml
new file mode 100644
index 000000000..27ab162a6
--- /dev/null
+++ b/utils/interop-coroutines/lint-baseline.xml
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/utils/interop-coroutines/src/commonMain/kotlin/com/bumble/appyx/utils/interop/coroutines/connectable/Connectable.kt b/utils/interop-coroutines/src/commonMain/kotlin/com/bumble/appyx/utils/interop/coroutines/connectable/Connectable.kt
new file mode 100644
index 000000000..b375305cc
--- /dev/null
+++ b/utils/interop-coroutines/src/commonMain/kotlin/com/bumble/appyx/utils/interop/coroutines/connectable/Connectable.kt
@@ -0,0 +1,8 @@
+package com.bumble.appyx.utils.interop.coroutines.connectable
+
+import kotlinx.coroutines.flow.MutableSharedFlow
+
+interface Connectable {
+ val input: MutableSharedFlow
+ val output: MutableSharedFlow