An app focused on a great Twitch chat experience.
- iOS and Android support.
- Multi-chat. Open multiple chat bubbles, and switch between them (only on Android.)
- Tablet- and foldable-optimized interface.
- Custom emotes. If the default emotes aren't enough for you, we support third-party emote sets!
- Slide to reply to any message, and see the context of the conversation.
- See your favorite channels' schedule -- past, present, and future, in a unified timeline.
chat-recording.mp4 |
- Install Android Studio;
- Open the project in the IDE.
- Install Xcode 16;
- Install Tuist;
- Move to the
app-iosdirectory, and runtuist generateto generate and open the Xcode project.
# Android
./gradlew :app-android:assembleDebug # Build debug APK
./gradlew :app-android:installDebug # Install on connected device
# Desktop (JVM)
./gradlew :app-desktop:run # Run desktop app
# iOS (requires macOS + Xcode + Tuist)
cd app-ios && tuist generate # Generate Xcode project, then build in Xcode./gradlew :shared:testDebugUnitTest # Run shared module unit tests (Android)
./gradlew :konsist-checks:test # Run architecture validation tests
./gradlew :shared:verifySqlDelightMigration # Validate SQLDelight migrationsUnit tests are located in shared/src/androidUnitTest/kotlin/.
Use Spotless with ktlint:
./gradlew spotlessCheck # Check formatting
./gradlew spotlessApply # Auto-formatAlways run spotlessApply before committing. CI enforces formatting on PRs.
This project is a Kotlin Multiplatform app targeting Android, iOS, and JVM desktop.
The common code (both logic and UI) is included in the shared module.
app-androidcontains the Android-specific code;app-desktopcontains the JVM desktop-specific code;app-ioscontains the iOS-specific code.
Platform-specific code is kept to an absolute minimum.
Code is organized by feature under fr.outadoc.justchatting.feature.*, with each feature split into:
- domain — Business logic, interfaces, use cases. No dependencies on other layers.
- presentation — ViewModels, UI state. Depends only on domain.
- data — Repositories, API clients, database. Depends only on domain.
commonMain— Cross-platform code (vast majority of logic and UI)androidMain,iosMain,desktopMain— Platform-specific implementationsskiaMain— Shared between iOS and Desktop (Skia renderer)appleMain— Shared Apple platform code
- Compose Multiplatform — Shared UI across all platforms
- Koin — Dependency injection. DI modules in
fr.outadoc.justchatting.di - SQLDelight — Database. Schema files in
shared/src/commonMain/sqldelight/ - Ktor — HTTP client and WebSocket connections
- kotlinx-serialization — JSON serialization
