https://github.com/outadoc/just-chatting
An app focused on a great Twitch chat experience.
https://github.com/outadoc/just-chatting
android compose-multiplatform ios kotlin kotlin-multiplatform twitch
Last synced: 2 months ago
JSON representation
An app focused on a great Twitch chat experience.
- Host: GitHub
- URL: https://github.com/outadoc/just-chatting
- Owner: outadoc
- License: agpl-3.0
- Created: 2022-06-02T11:14:46.000Z (about 4 years ago)
- Default Branch: main
- Last Pushed: 2026-01-21T21:06:52.000Z (5 months ago)
- Last Synced: 2026-01-22T05:12:36.819Z (5 months ago)
- Topics: android, compose-multiplatform, ios, kotlin, kotlin-multiplatform, twitch
- Language: Kotlin
- Homepage: https://just-chatting.app/
- Size: 22.5 MB
- Stars: 15
- Watchers: 1
- Forks: 1
- Open Issues: 5
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Just Chatting
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.
https://github.com/user-attachments/assets/0f107cee-6294-4fbf-aa15-5466b57a548f

## Project setup
### Android
1. Install [Android Studio](https://developer.android.com/studio/install);
2. Open the project in the IDE.
### iOS
1. Install Xcode 16;
2. Install [Tuist](https://docs.tuist.io/guides/quick-start/install-tuist);
3. Move to the `app-ios` directory, and run `tuist generate` to generate and open the Xcode project.
## Build the project locally
```bash
# 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
```
## ABI
Shared modules contain ABI files to precisely control what's exposed publicly to their consumers.
They can be found in the modules' `abi/` directory.
```bash
./gradlew :shared:updateKotlinAbi # Generate ABI files
./gradlew :shared:checkKotlinAbi # Check ABI compatibility
̀```
## Testing
```bash
./gradlew :shared:testDebugUnitTest # Run shared module unit tests (Android)
./gradlew :konsist-checks:test # Run architecture validation tests
./gradlew :shared:verifySqlDelightMigration # Validate SQLDelight migrations
```
Unit tests are located in `shared/src/androidUnitTest/kotlin/`.
## Code Formatting
Use **Spotless** with ktlint:
```bash
./gradlew spotlessCheck # Check formatting
./gradlew spotlessApply # Auto-format
```
Always run `spotlessApply` before committing. CI enforces formatting on PRs.
## Architecture
This project is a Kotlin Multiplatform app targeting Android, iOS, and JVM desktop.
The common business logic is included in the `shared` module, and common UI code in `shared-ui`.
Then, by platform:
- `app-android` contains the Android-specific code;
- `app-desktop` contains the JVM desktop-specific code;
- `app-ios` contains the iOS-specific code.
Platform-specific code is kept to an absolute minimum.
### Layers (Clean Architecture, enforced by Konsist)
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.
### Source Sets (shared module)
- `commonMain` — Cross-platform code (vast majority of logic and UI)
- `androidMain`, `iosMain`, `desktopMain` — Platform-specific implementations
- `skiaMain` — Shared between iOS and Desktop (Skia renderer)
- `appleMain` — Shared Apple platform code
## Main dependencies
- **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