{"id":17968675,"url":"https://github.com/alexvanyo/composelife","last_synced_at":"2025-04-05T08:09:23.791Z","repository":{"id":36996669,"uuid":"375146193","full_name":"alexvanyo/composelife","owner":"alexvanyo","description":"A Game of Life simulator Android app and watchface built with Jetpack Compose","archived":false,"fork":false,"pushed_at":"2024-10-29T11:19:16.000Z","size":57238,"stargazers_count":137,"open_issues_count":39,"forks_count":11,"subscribers_count":5,"default_branch":"main","last_synced_at":"2024-10-29T16:41:04.277Z","etag":null,"topics":["android","compose","compose-multiplatform","game-of-life","jetpack-compose","kotlin","kotlin-multiplatform","testing","ui"],"latest_commit_sha":null,"homepage":"","language":"Kotlin","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/alexvanyo.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2021-06-08T21:08:53.000Z","updated_at":"2024-10-29T08:20:14.000Z","dependencies_parsed_at":"2024-11-06T01:36:20.975Z","dependency_job_id":null,"html_url":"https://github.com/alexvanyo/composelife","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alexvanyo%2Fcomposelife","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alexvanyo%2Fcomposelife/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alexvanyo%2Fcomposelife/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alexvanyo%2Fcomposelife/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/alexvanyo","download_url":"https://codeload.github.com/alexvanyo/composelife/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247305935,"owners_count":20917208,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["android","compose","compose-multiplatform","game-of-life","jetpack-compose","kotlin","kotlin-multiplatform","testing","ui"],"created_at":"2024-10-29T14:41:14.112Z","updated_at":"2025-04-05T08:09:23.768Z","avatar_url":"https://github.com/alexvanyo.png","language":"Kotlin","funding_links":[],"categories":[],"sub_categories":[],"readme":"![CI][ci_badge]\n[![codecov][codecov_badge]][codecov_project]\n\n![Icon][icon]\n\n# ComposeLife\n\n**This is not an official Google product**\n\nComposeLife is a\nwork-in-progress [Game of Life][wikipedia_gameoflife] simulator\nmultiplatform app.\n\nThis project is a personal sandbox of sorts, experimenting with the latest libraries and tools.\nThese include:\n\n- Written in [Kotlin][kotlin]\n- UI written in [Jetpack Compose][jetpack_compose]\n  - Mobile Android app and desktop app for exploring Game of Life patterns.\n  - Watchface for Wear OS with configuration\n  - Custom [adaptive navigation library][navigation]\n- [Dependency injection][dependency-injection] using [kotlin-inject][kotlin_inject],\n  [kotlin-inject-anvil][kotlin_inject_anvil] and [context parameters][context_parameters]\n- [AGSL][agsl], [OpenGL](https://developer.android.com/develop/ui/views/graphics/opengl/about-opengl) and [SKSL][sksl] rendering\n- Fully functional CI system with GitHub Actions with:\n    - Comprehensive automated tests\n      - Hierarchical KMP tests shared across platforms\n      - Shared [Robolectric][robolectric] and instrumentation tests\n      - Minified instrumentation tests with the help of [Keeper][keeper], memory leak checking with\n        [LeakCanary][leakcanary])\n      - Screenshot tests with [Roborazzi][roborazzi] with automatic updates on CI\n      - Code coverage with [JaCoCo][jacoco] (reporting done with [Codecov][codecov])\n    - Linting, with android/lint and [detekt][detekt] with automatic updates on CI\n    - Automatic dependency updates with [Renovate][renovate]\n    - Automatic [baseline profile][baseline_profiles] generation\n\n## Setup\n\nRequirements:\n- Android Studio Narwhal 2025.1.1\n- JDK 21+\n\nClone the project, and build! (no API keys or other setup necessary)\n\n## Runnable Modules\n\n[app][app] contains the mobile app simulator for running, editing, and exploring Game of Life\npatterns.\n\n[desktop-app][desktop-app] contains the desktop app simulator for running, editing, and exploring Game of Life\npatterns.\n\n[wear][wear] contains a Game of Life watchface, with a stable pattern displaying the time with a\nsurrounding random soup potentially destroying it while the watchface is active.\n\n![Round Watchface][watchface]\n\n## License\n\n```\nCopyright 2022 The Android Open Source Project\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    https://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n```\n\n[//]: # (website links)\n\n[agsl]: https://developer.android.com/develop/ui/views/graphics/agsl\n[baseline_profiles]: https://developer.android.com/topic/performance/baselineprofiles\n[ci_badge]: https://github.com/alexvanyo/composelife/actions/workflows/ci.yml/badge.svg\n[codecov]: https://about.codecov.io/\n[codecov_badge]: https://codecov.io/gh/alexvanyo/composelife/branch/main/graph/badge.svg?token=z7yP8Z8xqC\n[codecov_project]: https://codecov.io/gh/alexvanyo/composelife\n[context_parameters]: https://github.com/Kotlin/KEEP/blob/master/proposals/context-parameters.md\n[detekt]: https://detekt.dev/\n[icon]: app/src/androidMain/ic_launcher-playstore.png\n[jacoco]: https://github.com/jacoco/jacoco\n[jetpack_compose]: https://developer.android.com/jetpack/compose\n[keeper]: https://slackhq.github.io/keeper/\n[kotlin]: https://kotlinlang.org/\n[kotlin_inject]: https://github.com/evant/kotlin-inject\n[kotlin_inject_anvil]: https://github.com/amzn/kotlin-inject-anvil\n[leakcanary]: https://square.github.io/leakcanary/\n[opengl]: https://developer.android.com/develop/ui/views/graphics/opengl/about-opengl\n[renovate]: https://docs.renovatebot.com/\n[robolectric]: https://robolectric.org/\n[roborazzi]: https://github.com/takahirom/roborazzi/\n[sksl]: https://skia.org/docs/user/sksl/\n[wikipedia_gameoflife]: https://en.wikipedia.org/wiki/Conway%27s_Game_of_Life\n\n[//]: # (relative links)\n\n[app]: app\n[desktop-app]: desktop-app\n[dependency-injection]: docs/di.md\n[icon]: app/src/androidMain/ic_launcher-playstore.png\n[navigation]: docs/navigation.md\n[watchface]: resources-wear/src/androidMain/res/drawable-nodpi/watchface_round.png\n[wear]: wear\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falexvanyo%2Fcomposelife","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Falexvanyo%2Fcomposelife","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falexvanyo%2Fcomposelife/lists"}