{"id":23914277,"url":"https://github.com/vladleesi/factastic","last_synced_at":"2025-10-23T22:59:36.717Z","repository":{"id":183882257,"uuid":"650873664","full_name":"vladleesi/factastic","owner":"vladleesi","description":"Useless facts every day! Here's an example of a multiplatform app with shared UI and network logic built with Kotlin Multiplatform and Compose Multiplatform for Android, iOS and Desktop.","archived":false,"fork":false,"pushed_at":"2023-08-06T23:11:35.000Z","size":98,"stargazers_count":6,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-04-11T15:59:20.580Z","etag":null,"topics":["android","compose-multiplatform","desktop","desktop-app","desktop-application","ios","kotlin","kotlin-android","kotlin-coroutines","kotlin-flow","kotlin-ios","kotlin-multiplatform","kotlin-multiplatform-mobile","kotlin-serialization","ktor","ktor-client","macos-app"],"latest_commit_sha":null,"homepage":"https://dev.to/vladleesi/write-once-run-everywhere-building-with-kmm-and-compose-multiplatform-3kh9","language":"Kotlin","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/vladleesi.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"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":"2023-06-08T02:06:55.000Z","updated_at":"2025-01-01T08:48:04.000Z","dependencies_parsed_at":"2025-01-05T10:26:01.525Z","dependency_job_id":null,"html_url":"https://github.com/vladleesi/factastic","commit_stats":null,"previous_names":["vladleesi/factastic"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/vladleesi/factastic","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vladleesi%2Ffactastic","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vladleesi%2Ffactastic/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vladleesi%2Ffactastic/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vladleesi%2Ffactastic/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/vladleesi","download_url":"https://codeload.github.com/vladleesi/factastic/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vladleesi%2Ffactastic/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":280706836,"owners_count":26376991,"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","status":"online","status_checked_at":"2025-10-23T02:00:06.710Z","response_time":142,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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-multiplatform","desktop","desktop-app","desktop-application","ios","kotlin","kotlin-android","kotlin-coroutines","kotlin-flow","kotlin-ios","kotlin-multiplatform","kotlin-multiplatform-mobile","kotlin-serialization","ktor","ktor-client","macos-app"],"created_at":"2025-01-05T10:12:06.573Z","updated_at":"2025-10-23T22:59:36.699Z","avatar_url":"https://github.com/vladleesi.png","language":"Kotlin","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Factastic\n\nUseless facts every day!\n\nHere's an example of a multiplatform app with shared UI and network logic built with [Kotlin Multiplatform Mobile](https://kotlinlang.org/docs/multiplatform-mobile-getting-started.html) and [Compose Multiplatform](https://www.jetbrains.com/lp/compose-multiplatform/) for Android, iOS and Desktop.\n\n| Android (Dark theme) | iOS (Light theme) |\n| ----------- | ----------- |\n| ![Android (Dark theme)](https://github.com/vladleesi/factastic/assets/30999008/481b667f-e985-4b85-a570-ed9adcd79492) | ![iOS (Light theme)](https://github.com/vladleesi/factastic/assets/30999008/f054dfdf-d85b-47ed-b6f0-1b616dafc20e) |\n\n| Desktop |\n| ------- |\n| ![Screen Recording 2023-08-06 at 5 02 11 PM (1)](https://github.com/vladleesi/factastic/assets/30999008/f7a6dd74-9ad2-45e1-9e3b-af56f866d780) |\n\n### Stack\n- [Kotlin Multiplatform Mobile](https://kotlinlang.org/docs/multiplatform-mobile-getting-started.html)\n- [Compose Multiplatform](https://www.jetbrains.com/lp/compose-multiplatform/)\n- [Kotlin Coroutines](https://kotlinlang.org/docs/coroutines-overview.html)\n- [Kotlin Serialization](https://kotlinlang.org/docs/serialization.html)\n- [Ktor](https://ktor.io/docs/getting-started-ktor-client.html)\n- [Napier](https://github.com/AAkira/Napier)\n\n### Project Structure\nThe project follows the Kotlin Multiplatform structure, allowing code sharing between Android and iOS platforms. Here's a brief overview of the project structure:\n\n- `shared`: Contains shared Kotlin code that is used by both Android and iOS.\n- `androidApp`: Contains the Android-specific code, including activities, UI components, and Android-specific dependencies.\n- `iosApp`: Contains the iOS-specific code, including view controllers, SwiftUI views, and iOS-specific dependencies.\n- `desktop`: Contains the desktop-specific code for the Kotlin Multiplatform project, targeting desktop platforms such as Windows, macOS, and Linux.\n\n### Build\n#### Android:\n1. Open `androidApp` folder from [Android Studio](https://developer.android.com/studio)\n2. Click Run\n\n#### iOS:\n1. Open `iosApp/iosApp.xcodeproj` folder from [Xcode](https://developer.apple.com/xcode/resources/)\n2. Click Run\n\n#### Desktop: \n1. Open the project from [Android Studio](https://developer.android.com/studio)\n2. Execute the command `./gradle :desktop:run` to run the desktop module.\n\u003e Since [IntelliJ IDEA](https://www.jetbrains.com/idea/) currently does not support Gradle versions above 7.4.0, follow these steps to address the issue:\n\u003e 1. In the gradle.properties file, temporarily change the Gradle plugin version to 7.4.0.\n\u003e 2. In the settings.gradle.kts file, disable the inclusion of (\":androidApp\").\n\n### Licence\nThis project is licensed under the [MIT License](LICENSE).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvladleesi%2Ffactastic","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fvladleesi%2Ffactastic","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvladleesi%2Ffactastic/lists"}