How aapunain/kmp works
This is a Kotlin Multiplatform sample app that displays items from a shared Compose UI, with a shared domain/data/network stack and a Ktor server exposing the same items endpoint. The principal flow is platform launch → shared app and items screen → domain use case and repository → remote data source → HTTP API, with results mapped for presentation. The README also documents Android, iOS, Web, Desktop, and Server targets. Several intermediate implementations are represented by their tree paths; their exact call wiring was not sampled, so uncertain edges are omitted.
Main entry points: ItemsRemoteDataSource.kt Items remote source · ItemsViewModel.kt Items view model · App.kt Shared app · Application.kt Ktor server
Components 24
Platform hosts
- Android host
app/androidApp/src/main/kotlin/com/self/kmp/MainActivity.kt - iOS host
app/shared/src/iosMain/kotlin/com/self/kmp/MainViewController.kt - Desktop host
app/desktopApp/src/main/kotlin/com/self/kmp/main.kt - Web host
app/webApp/src/webMain/kotlin/com/self/kmp/main.kt - Shared app
app/shared/src/commonMain/kotlin/com/self/kmp/App.kt
Presentation
- Items screen
presentation/src/commonMain/kotlin/com/self/kmp/presentation/items/ItemsScreen.kt - Items view model
presentation/src/commonMain/kotlin/com/self/kmp/presentation/items/ItemsViewModel.kt - UI state
presentation/src/commonMain/kotlin/com/self/kmp/presentation/items/ItemsUiState.kt - UI intents
presentation/src/commonMain/kotlin/com/self/kmp/presentation/items/ItemsIntent.kt - Error messages
presentation/src/commonMain/kotlin/com/self/kmp/presentation/items/AppErrorMessages.kt
Domain and data
- Get items
core/domain/src/commonMain/kotlin/com/self/kmp/domain/items/usecase/GetItemsUseCase.kt - Items repository port
core/domain/src/commonMain/kotlin/com/self/kmp/domain/items/repository/ItemsRepository.kt - Items repository
core/data/src/commonMain/kotlin/com/self/kmp/data/items/repository/ItemsRepositoryImpl.kt - Item mapper
core/data/src/commonMain/kotlin/com/self/kmp/data/items/mapper/ItemMapper.kt - API error mapper
core/data/src/commonMain/kotlin/com/self/kmp/data/common/ApiErrorMapper.kt
Network and contract
- Items remote source
core/network/src/commonMain/kotlin/com/self/kmp/network/items/datasource/ItemsRemoteDataSource.kt - HTTP client
core/network/src/commonMain/kotlin/com/self/kmp/network/core/HttpClientFactory.kt - Safe API calls
core/network/src/commonMain/kotlin/com/self/kmp/network/core/SafeApiCall.kt - API routes
contract/src/commonMain/kotlin/com/self/kmp/contract/ApiRoutes.kt - Items response DTO
contract/src/commonMain/kotlin/com/self/kmp/contract/items/ItemsResponseDto.kt
Server
- Ktor server
server/src/main/kotlin/com/self/kmp/Application.kt - Root greeting
server/src/main/kotlin/com/self/kmp/Greetings.kt
Other components
- App user
- Items API
Connections 27
- App user → Android host: launches
- App user → iOS host: launches
- App user → Desktop host: launches
- App user → Web host: launches
- Android host → Shared app: opens
- iOS host → Shared app: opens
- Desktop host → Shared app: opens
- Web host → Shared app: opens
- Shared app → Items screen: renders
- Items screen → Items view model: uses
- Items view model → UI state: updates
- Items view model → UI intents: handles
- Items view model → Error messages: formats errors
- Items view model → Get items: requests items
- Get items → Items repository port: requests items
- Items repository → Items remote source: fetches items
- Items repository → Item mapper: maps records
- Items repository → API error mapper: maps errors
- Items remote source → HTTP client: uses client
- Items remote source → Safe API calls: wraps requests
- Items remote source → API routes: builds request
- Items remote source → Items response DTO: decodes response
- Items API → Items remote source: serves request
- Ktor server → API routes: registers route
- Ktor server → Items response DTO: responds with
- Ktor server → Root greeting: uses greeting
- Items API → Ktor server: handles request