Dependency Impact Report

KMP Impact Analyzer — Static dependency propagation analysis
com.arkivanov.decompose  2.1.4-compose-experimental 2.2.3
40
Impacted files
40/90 (44%)
90
Total files
10 direct · 30 transitive
3
Expect/actual pairs
3 detected · 0 affected
6
Impacted screens
6 surfaces explored
P

Pipeline Execution

Summary of the 5 analysis phases
1
Shadow Build
✓ Completed
2
Static Analysis
✓ 40 files
3
Dynamic Analysis
✓ 0 differences
4
Consolidation
✓ 6 screen(s)
5
Visualization
✓ CodeCharta
1

Shadow Build

BEFORE and AFTER copies of the project were created, modifying the dependency version
Before — libs.versions.toml
[versions]
agp = "8.5.0"
kotlin = "2.0.21"
activityCompose = "1.9.0"
compose = "1.6.10"
composeCompiler = "1.5.14"
coroutines = "1.8.0"
serialization = "1.7.0"
mviKotlin = "3.3.0"
decompose = "2.1.4-compose-experimental"
essenty = "1.2.0"
ktor = "2.3.10"
sqlDelight = "2.0.0"
koin = "3.5.6"
imageLoader = "1.8.0"
logbackClassic = "1.2.11"
kotlinWrappersBom = "1.0.0-pre.641"
touchlab = "2.0.5"
compileSdk = "34"
targetSdk = "34"
minSdk = "24"
appMajorVersion = "1"
appMinorVersion = "0"
appPatchVersion = "0"
appVersionCode = "1"

[libraries]
# Org.JetBrains.Kotlinx
kotlinx-coroutines-core = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-core", version.ref = "coroutines" }
kotlinx-serialization-json = { module = "org.jetbrains.kotlinx:kotlinx-serialization-json", version.ref = "serialization" }

# Org.JetBrains.KotlinWrappers
kotlin-wrappers-bom = { module = "org.jetbrains.kotlin-wrappers:kotlin-wrappers-bom", version.ref = "kotlinWrappersBom" }
kotlin-styled = { module = "org.jetbrains.kotlin-wrappers:kotlin-styled" } # Uses BOM

# Androidx.Activity
androidx-activity-compose = { module = "androidx.activity:activity-compose", version.ref = "activityCompose" }

# Io.Ktor
ktor-client-core = { module = "io.ktor:ktor-client-core", version.ref = "ktor" }
ktor-serialization-kotlinx-json = { module = "io.ktor:ktor-serialization-kotlinx-json", version.ref = "ktor" }
ktor-client-contentNegotiation = { module = "io.ktor:ktor-client-content-negotiation", version.ref = "ktor" }
ktor-client-logging = { module = "io.ktor:ktor-client-logging", version.ref = "ktor" }
ktor-client-android = { module = "io.ktor:ktor-client-android", version.ref = "ktor" }
ktor-client-darwin = { module = "io.ktor:ktor-client-darwin", version.ref = "ktor" }
ktor-client-java = { module = "io.ktor:ktor-client-java", version.ref = "ktor" }
ktor-client-js = { module = "io.ktor:ktor-client-js", version.ref = "ktor" }

# Logback
logback-classic = { module = "ch.qos.logback:logback-classic", version.ref = "logbackClassic" }

# CashApp.SQLDelight
sqldelight-gradle-plugin = { module = "app.cash.sqldelight:gradle-plugin", version.ref = "sqlDelight" } # This is a plugin, will also add to [plugins]
sqldelight-android-driver = { module = "app.cash.sqldelight:android-driver", version.ref = "sqlDelight" }
sqldelight-sqlite-driver = { module = "app.cash.sqldelight:sqlite-driver", version.ref = "sqlDelight" }
sqldelight-native-driver = { module = "app.cash.sqldelight:native-driver", version.ref = "sqlDelight" }
sqldelight-sqljs-driver = { module = "app.cash.sqldelight:sqljs-driver", version.ref = "sqlDelight" }
sqldelight-coroutines-extensions = { module = "app.cash.sqldelight:coroutines-extensions", version.ref = "sqlDelight" }
sqldelight-primitive-adapters = { module = "app.cash.sqldelight:primitive-adapters", version.ref = "sqlDelight" }

# Koin
koin-core = { module = "io.insert-koin:koin-core", version.ref = "koin" }
koin-test = { module = "io.insert-koin:koin-test", version.ref = "koin" }
koin-android = { module = "io.insert-koin:koin-android", version.ref = "koin" }

# ArkIvanov.MVIKotlin
mvikotlin = { module = "com.arkivanov.mvikotlin:mvikotlin", version.ref = "mviKotlin" }
mvikotlin-main = { module = "com.arkivanov.mvikotlin:mvikotlin-main", version.ref = "mviKotlin" }
mvikotlin-extensions-coroutines = { module = "com.arkivanov.mvikotlin:mvikotlin-extensions-coroutines", version.ref = "mviKotlin" }

# ArkIvanov.Decompose
decompose = { module = "com.arkivanov.decompose:decompose", version.ref = "decompose" }
decompose-extensions-compose = { module = "com.arkivanov.decompose:extensions-compose-jetbrains", version.ref = "decompose" }

# ArkIvanov.Essenty
essenty-lifecycle = { module = "com.arkivanov.essenty:lifecycle", version.ref = "essenty" }

# Github
imageLoader = { module = "io.github.qdsfdhvh:image-loader", version.ref = "imageLoader" }

# Touchlab
touchlab-stately-common = { module = "co.touchlab:stately-common", version.ref = "touchlab" }


[plugins]
sqldelight = { id = "app.cash.sqldelight", version.ref = "sqlDelight" }
kotlin-multiplatform = { id = "org.jetbrains.kotlin.multiplatform", version.ref = "kotlin" }
kotlin-android = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" }
kotlin-compose = { id = "org.jetbrains.kotlin.plugin.compose", version.ref = "kotlin" }
kotlin-serialization = { id = "org.jetbrains.kotlin.plugin.serialization", version.ref = "kotlin" }
android-application = { id = "com.android.application", version.ref = "agp" }
android-library = { id = "com.android.library", version.ref = "agp" }
jetbrains-compose = { id = "org.jetbrains.compose", version.ref = "compose" }
kotlin-jvm = { id = "org.jetbrains.kotlin.jvm", version.ref = "kotlin" }
kotlin-native-cocoapods = { id = "org.jetbrains.kotlin.native.cocoapods", version.ref = "kotlin" }
kotlin-parcelize = { id = "org.jetbrains.kotlin.plugin.parcelize", version.ref = "kotlin" }
After — libs.versions.toml
[versions]
agp = "8.5.0"
kotlin = "2.0.21"
activityCompose = "1.9.0"
compose = "1.6.10"
composeCompiler = "1.5.14"
coroutines = "1.8.0"
serialization = "1.7.0"
mviKotlin = "3.3.0"
decompose = "2.2.3"
essenty = "1.2.0"
ktor = "2.3.10"
sqlDelight = "2.0.0"
koin = "3.5.6"
imageLoader = "1.8.0"
logbackClassic = "1.2.11"
kotlinWrappersBom = "1.0.0-pre.641"
touchlab = "2.0.5"
compileSdk = "34"
targetSdk = "34"
minSdk = "24"
appMajorVersion = "1"
appMinorVersion = "0"
appPatchVersion = "0"
appVersionCode = "1"

[libraries]
# Org.JetBrains.Kotlinx
kotlinx-coroutines-core = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-core", version.ref = "coroutines" }
kotlinx-serialization-json = { module = "org.jetbrains.kotlinx:kotlinx-serialization-json", version.ref = "serialization" }

# Org.JetBrains.KotlinWrappers
kotlin-wrappers-bom = { module = "org.jetbrains.kotlin-wrappers:kotlin-wrappers-bom", version.ref = "kotlinWrappersBom" }
kotlin-styled = { module = "org.jetbrains.kotlin-wrappers:kotlin-styled" } # Uses BOM

# Androidx.Activity
androidx-activity-compose = { module = "androidx.activity:activity-compose", version.ref = "activityCompose" }

# Io.Ktor
ktor-client-core = { module = "io.ktor:ktor-client-core", version.ref = "ktor" }
ktor-serialization-kotlinx-json = { module = "io.ktor:ktor-serialization-kotlinx-json", version.ref = "ktor" }
ktor-client-contentNegotiation = { module = "io.ktor:ktor-client-content-negotiation", version.ref = "ktor" }
ktor-client-logging = { module = "io.ktor:ktor-client-logging", version.ref = "ktor" }
ktor-client-android = { module = "io.ktor:ktor-client-android", version.ref = "ktor" }
ktor-client-darwin = { module = "io.ktor:ktor-client-darwin", version.ref = "ktor" }
ktor-client-java = { module = "io.ktor:ktor-client-java", version.ref = "ktor" }
ktor-client-js = { module = "io.ktor:ktor-client-js", version.ref = "ktor" }

# Logback
logback-classic = { module = "ch.qos.logback:logback-classic", version.ref = "logbackClassic" }

# CashApp.SQLDelight
sqldelight-gradle-plugin = { module = "app.cash.sqldelight:gradle-plugin", version.ref = "sqlDelight" } # This is a plugin, will also add to [plugins]
sqldelight-android-driver = { module = "app.cash.sqldelight:android-driver", version.ref = "sqlDelight" }
sqldelight-sqlite-driver = { module = "app.cash.sqldelight:sqlite-driver", version.ref = "sqlDelight" }
sqldelight-native-driver = { module = "app.cash.sqldelight:native-driver", version.ref = "sqlDelight" }
sqldelight-sqljs-driver = { module = "app.cash.sqldelight:sqljs-driver", version.ref = "sqlDelight" }
sqldelight-coroutines-extensions = { module = "app.cash.sqldelight:coroutines-extensions", version.ref = "sqlDelight" }
sqldelight-primitive-adapters = { module = "app.cash.sqldelight:primitive-adapters", version.ref = "sqlDelight" }

# Koin
koin-core = { module = "io.insert-koin:koin-core", version.ref = "koin" }
koin-test = { module = "io.insert-koin:koin-test", version.ref = "koin" }
koin-android = { module = "io.insert-koin:koin-android", version.ref = "koin" }

# ArkIvanov.MVIKotlin
mvikotlin = { module = "com.arkivanov.mvikotlin:mvikotlin", version.ref = "mviKotlin" }
mvikotlin-main = { module = "com.arkivanov.mvikotlin:mvikotlin-main", version.ref = "mviKotlin" }
mvikotlin-extensions-coroutines = { module = "com.arkivanov.mvikotlin:mvikotlin-extensions-coroutines", version.ref = "mviKotlin" }

# ArkIvanov.Decompose
decompose = { module = "com.arkivanov.decompose:decompose", version.ref = "decompose" }
decompose-extensions-compose = { module = "com.arkivanov.decompose:extensions-compose-jetbrains", version.ref = "decompose" }

# ArkIvanov.Essenty
essenty-lifecycle = { module = "com.arkivanov.essenty:lifecycle", version.ref = "essenty" }

# Github
imageLoader = { module = "io.github.qdsfdhvh:image-loader", version.ref = "imageLoader" }

# Touchlab
touchlab-stately-common = { module = "co.touchlab:stately-common", version.ref = "touchlab" }


[plugins]
sqldelight = { id = "app.cash.sqldelight", version.ref = "sqlDelight" }
kotlin-multiplatform = { id = "org.jetbrains.kotlin.multiplatform", version.ref = "kotlin" }
kotlin-android = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" }
kotlin-compose = { id = "org.jetbrains.kotlin.plugin.compose", version.ref = "kotlin" }
kotlin-serialization = { id = "org.jetbrains.kotlin.plugin.serialization", version.ref = "kotlin" }
android-application = { id = "com.android.application", version.ref = "agp" }
android-library = { id = "com.android.library", version.ref = "agp" }
jetbrains-compose = { id = "org.jetbrains.compose", version.ref = "compose" }
kotlin-jvm = { id = "org.jetbrains.kotlin.jvm", version.ref = "kotlin" }
kotlin-native-cocoapods = { id = "org.jetbrains.kotlin.native.cocoapods", version.ref = "kotlin" }
kotlin-parcelize = { id = "org.jetbrains.kotlin.plugin.parcelize", version.ref = "kotlin" }
2

Static Analysis — Propagation Graph

How the change in com.arkivanov.decompose propagates through the source code
Click a box to highlight only the files reached in the next column. Scroll vertically when the columns are long.
DEPENDENCY DIRECT TRANSITIVE (dist 1: 19) TRANSITIVE (dist 2+: 11) DECOMPOSE2.1.4-compose-experimental → 2.2.3 imports of imports further hops /tmp/output/phase1/before/shared/src/commonMain/kotlin/com/mocoding/pokedex/ui/root/RootComponent.ktRootComponent.kt /tmp/output/phase1/before/shared/src/iosMain/kotlin/com/mocoding/pokedex/main.ios.ktmain.ios.kt /tmp/output/phase1/before/desktop/src/jvmMain/kotlin/Main.ktMain.kt /tmp/output/phase1/before/shared/src/commonMain/kotlin/com/mocoding/pokedex/ui/main/MainComponent.ktMainComponent.kt /tmp/output/phase1/before/shared/src/commonMain/kotlin/com/mocoding/pokedex/ui/pokedex/PokedexComponent.ktPokedexComponent.kt /tmp/output/phase1/before/shared/src/commonMain/kotlin/com/mocoding/pokedex/ui/details/DetailsComponent.ktDetailsComponent.kt /tmp/output/phase1/before/android/src/main/java/com/mocoding/pokedex/android/MainActivity.ktMainActivity.kt /tmp/output/phase1/before/shared/src/commonMain/kotlin/com/mocoding/pokedex/ui/favorite/FavoriteComponent.ktFavoriteComponent.kt /tmp/output/phase1/before/shared/src/commonMain/kotlin/com/mocoding/pokedex/ui/root/RootContent.ktRootContent.kt /tmp/output/phase1/before/shared/src/commonMain/kotlin/com/mocoding/pokedex/ui/comingsoon/ComingSoonComponent.ktComingSoonCompone….kt /tmp/output/phase1/before/shared/src/commonMain/kotlin/com/mocoding/pokedex/ui/details/components/DetailsContent.ktDetailsContent.kt /tmp/output/phase1/before/shared/src/commonMain/kotlin/com/mocoding/pokedex/ui/main/MainScreen.ktMainScreen.kt /tmp/output/phase1/before/shared/src/commonMain/kotlin/com/mocoding/pokedex/ui/main/components/MainContent.ktMainContent.kt /tmp/output/phase1/before/shared/src/commonMain/kotlin/com/mocoding/pokedex/ui/favorite/components/FavoriteContent.ktFavoriteContent.kt /tmp/output/phase1/before/shared/src/commonMain/kotlin/com/mocoding/pokedex/ui/pokedex/components/PokedexContent.ktPokedexContent.kt /tmp/output/phase1/before/shared/src/commonMain/kotlin/com/mocoding/pokedex/ui/details/store/DetailsStoreFactory.ktDetailsStoreFacto….kt /tmp/output/phase1/before/shared/src/commonMain/kotlin/com/mocoding/pokedex/ui/pokedex/store/PokedexStoreFactory.ktPokedexStoreFacto….kt /tmp/output/phase1/before/shared/src/commonMain/kotlin/com/mocoding/pokedex/ui/comingsoon/ComingSoonScreen.ktComingSoonScreen.kt /tmp/output/phase1/before/shared/src/commonMain/kotlin/com/mocoding/pokedex/ui/favorite/store/FavoriteStoreFactory.ktFavoriteStoreFact….kt /tmp/output/phase1/before/shared/src/commonMain/kotlin/com/mocoding/pokedex/ui/main/store/MainStoreFactory.ktMainStoreFactory.kt /tmp/output/phase1/before/shared/src/commonMain/kotlin/com/mocoding/pokedex/core/network/helper/ErrorHandler.ktErrorHandler.kt /tmp/output/phase1/before/shared/src/commonMain/kotlin/com/mocoding/pokedex/core/database/dao/PokemonInfoDao.ktPokemonInfoDao.kt /tmp/output/phase1/before/shared/src/androidMain/kotlin/com/mocoding/pokedex/ui/ContentView.ktContentView.kt /tmp/output/phase1/before/shared/src/desktopMain/kotlin/com.mocoding.pokedex/ui/ContentView.ktContentView.kt /tmp/output/phase1/before/shared/src/commonMain/kotlin/com/mocoding/pokedex/core/database/dao/PokemonDao.ktPokemonDao.kt /tmp/output/phase1/before/shared/src/commonMain/kotlin/com/mocoding/pokedex/ui/details/DetailsScreen.ktDetailsScreen.kt /tmp/output/phase1/before/shared/src/commonMain/kotlin/com/mocoding/pokedex/ui/favorite/FavoriteScreen.ktFavoriteScreen.kt /tmp/output/phase1/before/shared/src/commonMain/kotlin/com/mocoding/pokedex/ui/pokedex/PokedexScreen.ktPokedexScreen.kt /tmp/output/phase1/before/shared/src/iosMain/kotlin/com/mocoding/pokedex/ui/ContentView.ktContentView.kt /tmp/output/phase1/before/shared/src/commonMain/kotlin/com/mocoding/pokedex/ui/pokedex/components/PokemonItem.ktPokemonItem.kt /tmp/output/phase1/before/shared/src/commonMain/kotlin/com/mocoding/pokedex/ui/main/components/CategoryButton.ktCategoryButton.kt /tmp/output/phase1/before/shared/src/commonMain/kotlin/com/mocoding/pokedex/data/repository/PokemonRepositoryImpl.ktPokemonRepository….kt /tmp/output/phase1/before/shared/src/commonMain/kotlin/com/mocoding/pokedex/core/network/client/PokemonClient.ktPokemonClient.kt /tmp/output/phase1/before/shared/src/commonMain/kotlin/com/mocoding/pokedex/ui/main/state/CategoryState.ktCategoryState.kt /tmp/output/phase1/before/shared/src/commonMain/kotlin/com/mocoding/pokedex/ui/details/components/AbilityRow.ktAbilityRow.kt /tmp/output/phase1/before/shared/src/commonMain/kotlin/com/mocoding/pokedex/ui/utils/PokemonAbilityUtils.ktPokemonAbilityUti….kt /tmp/output/phase1/before/shared/src/commonMain/kotlin/com/mocoding/pokedex/core/di/AppModule.ktAppModule.kt /tmp/output/phase1/before/shared/src/commonMain/kotlin/com/mocoding/pokedex/core/database/di/DatabaseModule.ktDatabaseModule.kt /tmp/output/phase1/before/shared/src/commonMain/kotlin/com/mocoding/pokedex/core/network/di/NetworkModule.ktNetworkModule.kt /tmp/output/phase1/before/shared/src/commonMain/kotlin/com/mocoding/pokedex/data/di/DataModule.ktDataModule.kt
How to read this graph
  • The violet box is the bumped dependency.
  • Red boxes are files that directly import a symbol from the bumped library.
  • Amber boxes are files that depend transitively at distance 1 (they import a red file).
  • Orange boxes are files at distance 2+ (further transitive hops).
  • Click any box to dim the rest of the graph and highlight only the files reached in the next column.
  • Faint lines are real propagation edges captured during BFS; selected edges become darker when a box is active.
  • Dashed amber/orange guide lines show the general direction of propagation across columns.
Each box is a .kt file. Colour = relation to the bumped dependency. Scroll vertically when a column has many files; click a box to inspect its next-hop impact.
3

Dynamic Analysis — UI Exploration with DroidBot

Screen interaction flow with change-affected screens highlighted in red
Open DroidBot UTG full-screen
18
UTG nodes
12
Distinct UI surfaces
0
Behaviour diffs
6
Impacted screens (static)
Traceability — File → Screen
Each impacted file with its relation, distance to the change, metrics, and associated UI screen.
FileRelationDist.RLOCMCCCoverageScreen
MainActivity.kt Direct 0 33 2 Detekt 0% Main
Main.kt Direct 0 40 1 Heur. 0% Main
ComingSoonComponent.kt Direct 0 13 1 Heur.
DetailsComponent.kt Direct 0 34 1 Heur.
FavoriteComponent.kt Direct 0 33 1 Heur.
MainComponent.kt Direct 0 36 1 Heur.
PokedexComponent.kt Direct 0 36 1 Heur.
RootComponent.kt Direct 0 128 7 Heur.
RootContent.kt Direct 0 25 2 Heur.
main.ios.kt Direct 0 50 2 Heur.
ContentView.kt Transitive 1 20 1 Heur. ContentView
PokemonDao.kt Transitive 1 16 1 Heur.
PokemonInfoDao.kt Transitive 1 27 3 Heur.
ErrorHandler.kt Transitive 1 28 5 Heur.
ComingSoonScreen.kt Transitive 1 71 1 Heur. ComingSoon
DetailsScreen.kt Transitive 1 14 1 Heur. Details
DetailsContent.kt Transitive 1 187 6 Heur.
DetailsStoreFactory.kt Transitive 1 78 5 Heur.
FavoriteScreen.kt Transitive 1 14 1 Heur. Favorite
FavoriteContent.kt Transitive 1 93 5 Heur.
FavoriteStoreFactory.kt Transitive 1 57 3 Heur.
MainScreen.kt Transitive 1 148 4 Heur. Main
MainContent.kt Transitive 1 128 2 Heur.
MainStoreFactory.kt Transitive 1 39 3 Heur.
PokedexScreen.kt Transitive 1 14 1 Heur. Pokedex
PokedexContent.kt Transitive 1 93 3 Heur.
PokedexStoreFactory.kt Transitive 1 78 7 Heur.
ContentView.kt Transitive 1 20 1 Heur. ContentView
ContentView.kt Transitive 1 10 1 Heur. ContentView
DatabaseModule.kt Transitive 2 12 1 Heur.
PokemonClient.kt Transitive 2 38 1 Heur.
PokemonRepositoryImpl.kt Transitive 2 61 7 Heur.
CategoryState.kt Transitive 2 36 1 Heur.
PokemonItem.kt Transitive 2 87 1 Heur.
PokemonAbilityUtils.kt Transitive 2 25 3 Heur.
AppModule.kt Transitive 3 15 1 Heur.
NetworkModule.kt Transitive 3 11 1 Heur.
DataModule.kt Transitive 3 7 1 Heur.
AbilityRow.kt Transitive 3 26 1 Heur.
CategoryButton.kt Transitive 3 69 1 Heur.
5

CodeCharta Visualization — 3D Impact Map

Each file is a building: area represents lines of code, height represents complexity, and red color indicates impact
Open CodeCharta fullscreen
Area (size)
rloc — Real lines of code
Height
mcc — Cyclomatic complexity
Color
impact_level: grey none · amber transitive · red direct

Source-set Impact Sunburst

Interactive ring: source-set → package → file. Click any ring to zoom; click center to zoom out.
KMP Impact · com.arkivanov.decompose
2.1.4-compose-experimental → 2.2.3  ·  90 archivos
Impacto
Afectados
Directo 10
Transitivo 30
Total40
No afectados
Expect/Actual pairs 3
Total50
Escala
Directo
Transitivo dist. 1
Transitivo dist. 2+
Sin impacto
Expect/Actual (KMP)
Archivos directos
commonMain/
com/mocoding/pokedex/ui/comingsoon/ComingSoonComponent.kt
com/mocoding/pokedex/ui/details/DetailsComponent.kt
com/mocoding/pokedex/ui/favorite/FavoriteComponent.kt
com/mocoding/pokedex/ui/main/MainComponent.kt
com/mocoding/pokedex/ui/pokedex/PokedexComponent.kt
com/mocoding/pokedex/ui/root/RootComponent.kt
com/mocoding/pokedex/ui/root/RootContent.kt
iosMain/
com/mocoding/pokedex/main.ios.kt
jvmMain/
Main.kt
main/
java/com/mocoding/pokedex/android/MainActivity.kt
Expect / Actual
SqlDriverFactory
commonMain/com/mocoding/pokedex/core/database/SqlDriverFactory.kt expect
androidMain/com/mocoding/pokedex/core/database/AndroidSqlDriverFactory.kt actual
desktopMain/com.mocoding.pokedex/core/database/DesktopSqlDriverFactory.kt actual
iosMain/com/mocoding/pokedex/core/database/SqlDriverFactory.kt actual
HttpClientFactory
commonMain/com/mocoding/pokedex/core/network/HttpClientFactory.kt expect
androidMain/com/mocoding/pokedex/core/network/HttpClientFactory.kt actual
desktopMain/com.mocoding.pokedex/core/network/HttpClientFactory.kt actual
iosMain/com/mocoding/pokedex/core/network/HttpClientFactory.kt actual
ExpectClass
commonMain/ExpectClass.kt expect
commonMain/ActualAndroid.kt actual
100%
scroll zoom · drag pan · click ring focus
Propagation tree
Same hierarchy as the sunburst, flattened for reading.
100%
scroll zoom · drag pan
G

Transitive Dependency Graph (GitGraph)

SBOM-derived arc diagram showing every library and its dependents. Use the sidebar to filter or focus a library.
Open dependency graph fullscreen
Pan with click-drag · zoom with mouse wheel · the bumped library is ringed in yellow.