This is a Kotlin Multiplatform (KMP) project that implements Conway's Game of Life. It serves as a personal sandbox for experimenting with modern libraries and tools.
- Platforms: The project targets Android (
app), Wear OS (wear), and Desktop (desktop-app). - Language: All code is written in Kotlin.
- UI: The user interface is built entirely with Jetpack Compose.
- Build System: The project uses Gradle with the Kotlin DSL (
.gradle.ktsfiles). - Architecture: This is a multi-module project. Functionality is separated into layers like
data,database,algorithm, and UI modules (ui-mobile,ui-wear, etc.). - Dependency Injection: The project uses
metrofor dependency injection. - Rendering: The project uses advanced rendering techniques including AGSL, OpenGL, and SKSL.
When adding or modifying code, please adhere to the following conventions, which are enforced by CI using detekt.
- File Headers: All new
.ktfiles must begin with the Apache 2.0 license header. Use the content fromconfig/license.template. - Formatting:
- Standard Kotlin style guidelines apply.
- Trailing commas are required on multi-line parameter lists and declaration sites.
- Maximum line length is 120 characters.
- Logging: Use the
Kermitlogging library via theloggingmodule. Do not useandroid.util.Log. - Forbidden Comments: Do not use
FIXME:orSTOPSHIP:. - Dependencies: Avoid introducing new external dependencies unless absolutely necessary. The project uses Renovate for automated dependency updates.
- Framework: Use
kotlin.testfor all unit and integration tests. Do not use JUnit APIs directly (org.junit.*,org.junit.jupiter.*). - Screenshot Tests: The project uses Roborazzi for screenshot testing.
- Test Location: Tests are organized hierarchically to be shared across platforms wherever possible. Place new tests in the appropriate source set (e.g.,
commonTest,androidUnitTest,desktopTest).
- Requirements: JDK 25+ and Android Studio Narwhal 2025.1.1 or newer.
- Build: To check the entire project, run
./gradlew check. - Run: The primary runnable modules are:
app: The Android mobile application.desktop-app: The JVM desktop application.wear: The Wear OS watch face.