{"id":18021579,"url":"https://github.com/ilyagulya/todoappdecomposemvikotlin","last_synced_at":"2025-10-13T01:31:18.346Z","repository":{"id":187659822,"uuid":"677327106","full_name":"IlyaGulya/TodoAppDecomposeMviKotlin","owner":"IlyaGulya","description":"Todo app sample using Compose Multiplatform, MVIKotlin, Decompose","archived":false,"fork":false,"pushed_at":"2024-07-30T03:01:09.000Z","size":902,"stargazers_count":93,"open_issues_count":1,"forks_count":3,"subscribers_count":5,"default_branch":"master","last_synced_at":"2025-01-22T11:07:29.009Z","etag":null,"topics":["compose-multiplatform","decompose","kotlin-multiplatform","mvikotlin"],"latest_commit_sha":null,"homepage":"","language":"Kotlin","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/IlyaGulya.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"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":"2023-08-11T09:43:15.000Z","updated_at":"2025-01-14T00:46:03.000Z","dependencies_parsed_at":"2023-08-11T16:40:08.229Z","dependency_job_id":"83b61e36-5bdd-4801-b2d0-393606afca92","html_url":"https://github.com/IlyaGulya/TodoAppDecomposeMviKotlin","commit_stats":null,"previous_names":["ilyagulya/todoappdecomposemvikotlin"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/IlyaGulya%2FTodoAppDecomposeMviKotlin","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/IlyaGulya%2FTodoAppDecomposeMviKotlin/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/IlyaGulya%2FTodoAppDecomposeMviKotlin/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/IlyaGulya%2FTodoAppDecomposeMviKotlin/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/IlyaGulya","download_url":"https://codeload.github.com/IlyaGulya/TodoAppDecomposeMviKotlin/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":236288801,"owners_count":19124909,"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":["compose-multiplatform","decompose","kotlin-multiplatform","mvikotlin"],"created_at":"2024-10-30T06:10:28.205Z","updated_at":"2025-10-13T01:31:12.947Z","avatar_url":"https://github.com/IlyaGulya.png","language":"Kotlin","funding_links":[],"categories":[],"sub_categories":[],"readme":"An example of Kotlin Multiplatform todo app with shared Android/Desktop Compose UI and SwiftUI (not\nCompose) iOS.\n\nPreviously this code was located in [JetBrains/compose-multiplatform] repository.\n\nBut it was deleted\nin [this commit](https://github.com/JetBrains/compose-multiplatform/commit/563575a866c09c283ba9998e3ab44888e8a00779)\n\nI've copied it to a separate repo and maintaining it here now.\n\nThis example supports the following targets:\n\n- `Android` (Compose)\n- `Desktop/JVM` (Compose)\n- `Web/JavaScript` (Compose)\n- `iOS` (Both SwiftUI and Compose)\n\nLibraries used:\n\n- Compose Multiplatform - shared UI\n- [Decompose](https://github.com/arkivanov/Decompose) - navigation and lifecycle\n- [MVIKotlin](https://github.com/arkivanov/MVIKotlin) - presentation and business logic\n- [Reaktive](https://github.com/badoo/Reaktive) - background processing and data transformation\n- [SQLDelight](https://github.com/cashapp/sqldelight) - data storage\n\nThere are multiple modules:\n\n- `:common:utils` - just some useful helpers\n- `:common:database` - SQLDelight database definition\n- `:common:main` - displays a list of todo items and a text field\n- `:common:edit` - accepts an item id and allows editing\n- `:common:root` - navigates between `main` and `edit` screens\n- `:common:compose-ui` - Shared Compose UI for Android and Desktop\n- `:android` - Android application\n- `:desktop` - Desktop application\n- `:web` - Web browser application + Compose HTML Library\n- `:ios-compose-umbrella` - iOS Umbrella module with UI in Compose Multiplatform. Used in\n  ios-compose application\n- `ios` - iOS SwiftUI Xcode project\n- `ios-compose` - iOS Compose Multiplatform Xcode project\n\nThe root module is integrated into Android, Desktop and iOS (non-Compose) apps.\n\nFeatures:\n\n- 99% of the code is shared: data, business logic, presentation, navigation and UI\n- View state is preserved when navigating between screens, Android configuration change, etc.\n- Model-View-Intent (aka MVI) architectural pattern\n- Pluggable UI - Compose UI for Android, Desktop and Web, SwiftUI (not Compose) for iOS\n\n### Running desktop application\n\n* To run, launch command: `./gradlew :desktop:run`\n* Or choose **desktop** configuration in IDE and run it.  \n  ![desktop-run-configuration.png](screenshots/desktop-run-configuration.png)\n\n#### Building native desktop distribution\n\n```\n./gradlew :desktop:packageDistributionForCurrentOS\n# outputs are written to desktop/build/compose/binaries\n```\n\n### Running Android application\n\nOpen project in Intellij IDEA or Android Studio and run \"android\" configuration.\n\n### Running Web browser application\n\n* To run, launch command: `./gradlew :web:jsBrowserDevelopmentRun`\n* Or choose **browser** configuration in IDE and run it.  \n  ![browser-run-configuration.png](screenshots/browser-run-configuration.png)\n\n### Running iOS SwiftUI application\n\nOpen and build the Xcode project located in `ios` folder.\n\n### Running iOS Compose Multiplatform application\n\nOpen and build the Xcode project located in `ios-compose` folder.\n\n![Desktop](screenshots/todo.png)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Filyagulya%2Ftodoappdecomposemvikotlin","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Filyagulya%2Ftodoappdecomposemvikotlin","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Filyagulya%2Ftodoappdecomposemvikotlin/lists"}