
Runtime debugging tool recording end-to-end journeys (UI→ViewModel→UseCase→Repository→Network→Database), visual timeline in an in-app inspector, evidence-based diagnostics, redacted export and zero-cost release twin.
Runtime debugging for Kotlin Multiplatform apps.
See the whole journey of an operation, not just its HTTP calls.
JourneyScope records what happens between a tap and the resulting UI state: UI → ViewModel → UseCase → Repository → Network → Database → UI state. It shows the timeline in an in-app Compose inspector, explains slow or failing steps with evidence, and exports redacted reports you can safely share.
devscope-core-noop twin for release builds.Flow, StateFlow and SharedFlow tracingJourneyScope is release (0.2.0)
Then add the modules you need:
repositories {
mavenLocal()
google()
mavenCentral()
}
dependencies {
debugImplementation("dev.chayaphon.journeyscope:devscope-core:0.2.0")
releaseImplementation("dev.chayaphon.journeyscope:devscope-core-noop:0.2.0") // Chucker style; see docs/release.md
debugImplementation("dev.chayaphon.journeyscope:devscope-android:0.2.0") // Android: inspector via notification, no UI code
debugImplementation("dev.chayaphon.journeyscope:devscope-ui-compose:0.2.0") // iOS / embedding the Inspector yourself
// Optional adapters, each with a -noop twin for release
debugImplementation("dev.chayaphon.journeyscope:devscope-network-ktor:0.2.0")
releaseImplementation("dev.chayaphon.journeyscope:devscope-network-ktor-noop:0.2.0")
debugImplementation("dev.chayaphon.journeyscope:devscope-flow:0.2.0")
releaseImplementation("dev.chayaphon.journeyscope:devscope-flow-noop:0.2.0")
}Requires Android minSdk 26, JDK 17, and Xcode 26+ for iOS. See publishing and release safety for keeping debug tooling out of release builds.
Configure once, debug builds only:
JourneyScope.configure(JourneyScopeConfig.debugOnly(isDebuggable = BuildConfig.DEBUG))Wrap the operation you want to see:
JourneyScope.withJourney("Add to Cart") {
traceSuspend("AddToCartUseCase", SpanCategory.USE_CASE) { repository.add(item) }
}Add adapters where the work happens:
val client = HttpClient { install(JourneyScopeNetwork) } // Ktor
val okHttp = OkHttpClient.Builder().addInterceptor(JourneyScopeInterceptor()).build()Open the inspector: on Android with devscope-android tap the JourneyScope notification, nothing else to write. To embed it yourself:
JourneyScopeInspector(onClose = { showInspector = false })The full walkthrough is in Getting started.
Let your coding agent do the installation, configuration and instrumentation. Point it at the playbook and name the flow you want traced:
Set up JourneyScope in this app following https://raw.githubusercontent.com/mandanai/devscope-compose/main/ai/setup-playbook.md and trace the checkout flow.
The instructions, decision rules and guardrails live in ai/, indexed for agents in llms.txt. Install the skill for Claude Code, Codex CLI or Gemini CLI with scripts/install-skill.sh --agent all (see ai/README.md).
| Module | Purpose | Android | iOS |
|---|---|---|---|
devscope-core |
Tracing engine | ✅ | ✅ |
devscope-core-noop |
Release twin of the core facade | ✅ | ✅ |
devscope-flow-noop, devscope-navigation-noop, devscope-network-ktor-noop, devscope-database-sqldelight-noop
|
Release twins of the adapters | ✅ | ✅ |
devscope-ui-compose |
Compose Multiplatform Inspector | ✅ | ✅ |
devscope-network-ktor |
Ktor client plugin | ✅ | ✅ |
devscope-network-okhttp |
OkHttp interceptor | ✅ | — |
devscope-flow |
Flow, StateFlow and coroutine tracing | ✅ | ✅ |
devscope-navigation |
Navigation tracing | ✅ | ✅ |
devscope-database-sqldelight |
SQLDelight tracing | ✅ | ✅ |
devscope-diagnostics |
Evidence-based diagnostics | ✅ | ✅ |
devscope-export |
Redacted export, import, persistence | ✅ | ✅ |
iOS targets are iosArm64 and iosSimulatorArm64.
An "Add to Cart" app exercises every module.
./gradlew :samples:androidApp:installDebugFor iOS, open samples/iosApp/iosApp.xcodeproj in Xcode 26+ and run. See development and the sample walkthrough.
Browse the documentation site or the files below.
Guides Getting started · Android · iOS · Instrumentation · Diagnostics · Export
Reference Architecture · Modules · API · Performance · Privacy and security
Project Publishing · Release safety · Release readiness · Changelog
Contributions are welcome. Read CONTRIBUTING.md and the Code of Conduct first.
Build and verify locally:
./gradlew spotlessCheck detekt checkKotlinAbi
./gradlew testAndroidHostTestReport vulnerabilities privately; see SECURITY.md and privacy and security. Do not open public issues for them.
Licensed under the Apache License, Version 2.0. See LICENSE for the full text.
Runtime debugging for Kotlin Multiplatform apps.
See the whole journey of an operation, not just its HTTP calls.
JourneyScope records what happens between a tap and the resulting UI state: UI → ViewModel → UseCase → Repository → Network → Database → UI state. It shows the timeline in an in-app Compose inspector, explains slow or failing steps with evidence, and exports redacted reports you can safely share.
devscope-core-noop twin for release builds.Flow, StateFlow and SharedFlow tracingJourneyScope is release (0.2.0)
Then add the modules you need:
repositories {
mavenLocal()
google()
mavenCentral()
}
dependencies {
debugImplementation("dev.chayaphon.journeyscope:devscope-core:0.2.0")
releaseImplementation("dev.chayaphon.journeyscope:devscope-core-noop:0.2.0") // Chucker style; see docs/release.md
debugImplementation("dev.chayaphon.journeyscope:devscope-android:0.2.0") // Android: inspector via notification, no UI code
debugImplementation("dev.chayaphon.journeyscope:devscope-ui-compose:0.2.0") // iOS / embedding the Inspector yourself
// Optional adapters, each with a -noop twin for release
debugImplementation("dev.chayaphon.journeyscope:devscope-network-ktor:0.2.0")
releaseImplementation("dev.chayaphon.journeyscope:devscope-network-ktor-noop:0.2.0")
debugImplementation("dev.chayaphon.journeyscope:devscope-flow:0.2.0")
releaseImplementation("dev.chayaphon.journeyscope:devscope-flow-noop:0.2.0")
}Requires Android minSdk 26, JDK 17, and Xcode 26+ for iOS. See publishing and release safety for keeping debug tooling out of release builds.
Configure once, debug builds only:
JourneyScope.configure(JourneyScopeConfig.debugOnly(isDebuggable = BuildConfig.DEBUG))Wrap the operation you want to see:
JourneyScope.withJourney("Add to Cart") {
traceSuspend("AddToCartUseCase", SpanCategory.USE_CASE) { repository.add(item) }
}Add adapters where the work happens:
val client = HttpClient { install(JourneyScopeNetwork) } // Ktor
val okHttp = OkHttpClient.Builder().addInterceptor(JourneyScopeInterceptor()).build()Open the inspector: on Android with devscope-android tap the JourneyScope notification, nothing else to write. To embed it yourself:
JourneyScopeInspector(onClose = { showInspector = false })The full walkthrough is in Getting started.
Let your coding agent do the installation, configuration and instrumentation. Point it at the playbook and name the flow you want traced:
Set up JourneyScope in this app following https://raw.githubusercontent.com/mandanai/devscope-compose/main/ai/setup-playbook.md and trace the checkout flow.
The instructions, decision rules and guardrails live in ai/, indexed for agents in llms.txt. Install the skill for Claude Code, Codex CLI or Gemini CLI with scripts/install-skill.sh --agent all (see ai/README.md).
| Module | Purpose | Android | iOS |
|---|---|---|---|
devscope-core |
Tracing engine | ✅ | ✅ |
devscope-core-noop |
Release twin of the core facade | ✅ | ✅ |
devscope-flow-noop, devscope-navigation-noop, devscope-network-ktor-noop, devscope-database-sqldelight-noop
|
Release twins of the adapters | ✅ | ✅ |
devscope-ui-compose |
Compose Multiplatform Inspector | ✅ | ✅ |
devscope-network-ktor |
Ktor client plugin | ✅ | ✅ |
devscope-network-okhttp |
OkHttp interceptor | ✅ | — |
devscope-flow |
Flow, StateFlow and coroutine tracing | ✅ | ✅ |
devscope-navigation |
Navigation tracing | ✅ | ✅ |
devscope-database-sqldelight |
SQLDelight tracing | ✅ | ✅ |
devscope-diagnostics |
Evidence-based diagnostics | ✅ | ✅ |
devscope-export |
Redacted export, import, persistence | ✅ | ✅ |
iOS targets are iosArm64 and iosSimulatorArm64.
An "Add to Cart" app exercises every module.
./gradlew :samples:androidApp:installDebugFor iOS, open samples/iosApp/iosApp.xcodeproj in Xcode 26+ and run. See development and the sample walkthrough.
Browse the documentation site or the files below.
Guides Getting started · Android · iOS · Instrumentation · Diagnostics · Export
Reference Architecture · Modules · API · Performance · Privacy and security
Project Publishing · Release safety · Release readiness · Changelog
Contributions are welcome. Read CONTRIBUTING.md and the Code of Conduct first.
Build and verify locally:
./gradlew spotlessCheck detekt checkKotlinAbi
./gradlew testAndroidHostTestReport vulnerabilities privately; see SECURITY.md and privacy and security. Do not open public issues for them.
Licensed under the Apache License, Version 2.0. See LICENSE for the full text.