Skip to main content

Migration Guide

Migrating to the Umbrella Module

If you're currently importing individual modules, you can simplify by switching to the umbrella module.

Before

commonMain.dependencies {
implementation("com.github.wahidabd.miru-sdk:core:<version>")
implementation("com.github.wahidabd.miru-sdk:network:<version>")
implementation("com.github.wahidabd.miru-sdk:ui-state:<version>")
implementation("com.github.wahidabd.miru-sdk:ui-components:<version>")
implementation("com.github.wahidabd.miru-sdk:navigation:<version>")
implementation("com.github.wahidabd.miru-sdk:di:<version>")
implementation("com.github.wahidabd.miru-sdk:firebase:<version>")
implementation("com.github.wahidabd.miru-sdk:auth:<version>")
implementation("com.github.wahidabd.miru-sdk:persistent:<version>")
}

After

commonMain.dependencies {
implementation("com.github.wahidabd.miru-sdk:miru-sdk:<version>")
}

The umbrella module uses api() dependencies, so all sub-modules are transitively available.

note

Third-party libraries used by sub-modules (like Koin, Ktor, Coil) are declared as implementation — not api(). If your app code directly uses these libraries, keep those dependencies in your app's build.gradle.kts.

Adopting ViewModel Helpers

From manual Resource handling to collectResource

Before:

class MyViewModel(...) : BaseViewModel<MyState, MyEvent>(MyState()) {

private val _data = MutableStateFlow<Resource<List<Item>>>(Resource.Loading())
val data = _data.asStateFlow()

fun load() {
viewModelScope.launch {
_data.value = Resource.Loading()
_data.value = useCase()
}
}
}

After:

fun load() = collectResource(_data) { useCase() }

From when-blocks to MiruResourceView

Before:

when (val res = resource) {
is Resource.Loading -> MiruFullScreenLoading()
is Resource.Error -> MiruErrorView(
message = res.exception.message ?: "Error",
onRetry = { viewModel.load() }
)
is Resource.Success -> {
LazyColumn {
items(res.data) { ItemCard(it) }
}
}
}

After:

MiruResourceView(resource = resource, onRetry = { viewModel.load() }) { data ->
LazyColumn {
items(data) { ItemCard(it) }
}
}