{"id":18160459,"url":"https://github.com/joreilly/bikeshare","last_synced_at":"2025-05-15T08:06:45.496Z","repository":{"id":37050362,"uuid":"222286745","full_name":"joreilly/BikeShare","owner":"joreilly","description":"SwiftUI, Jetpack Compose, Compose for Desktop and Compose for Web based Kotlin Multiplatform project (using CityBikes API http://api.citybik.es/v2/). Uses Room for local persistence","archived":false,"fork":false,"pushed_at":"2025-03-26T19:36:13.000Z","size":8759,"stargazers_count":747,"open_issues_count":13,"forks_count":58,"subscribers_count":16,"default_branch":"main","last_synced_at":"2025-04-07T03:12:28.896Z","etag":null,"topics":["android","citybikes-api","ios","jetpack-compose","jetpack-room","kotlin","kotlin-coroutines","kotlin-inject","kotlin-multiplatform","kotlin-multiplatform-mobile","kotlin-native","kotlinx-serialization","ktor","mvvm","swift","swiftui","viewmodel","wasm"],"latest_commit_sha":null,"homepage":"","language":"Jupyter Notebook","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/joreilly.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":"2019-11-17T17:37:23.000Z","updated_at":"2025-04-03T23:37:40.000Z","dependencies_parsed_at":"2023-10-14T19:44:54.977Z","dependency_job_id":"1012524d-ce16-45cb-a881-36d9af782ecf","html_url":"https://github.com/joreilly/BikeShare","commit_stats":{"total_commits":295,"total_committers":3,"mean_commits":98.33333333333333,"dds":"0.11186440677966103","last_synced_commit":"9467dc41d55858b86266cd964baecc1373a04711"},"previous_names":[],"tags_count":0,"template":true,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/joreilly%2FBikeShare","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/joreilly%2FBikeShare/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/joreilly%2FBikeShare/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/joreilly%2FBikeShare/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/joreilly","download_url":"https://codeload.github.com/joreilly/BikeShare/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248870978,"owners_count":21175130,"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","citybikes-api","ios","jetpack-compose","jetpack-room","kotlin","kotlin-coroutines","kotlin-inject","kotlin-multiplatform","kotlin-multiplatform-mobile","kotlin-native","kotlinx-serialization","ktor","mvvm","swift","swiftui","viewmodel","wasm"],"created_at":"2024-11-02T08:08:20.814Z","updated_at":"2025-04-14T11:27:37.976Z","avatar_url":"https://github.com/joreilly.png","language":"Jupyter Notebook","readme":"# BikeShare\n\n![kotlin-version](https://img.shields.io/badge/kotlin-2.1.0-blue?logo=kotlin)\n\nJetpack Compose and SwiftUI based Kotlin Multiplatform sample project (based on [CityBikes API](http://api.citybik.es/v2/)).\n\nRunning on\n* iOS (SwiftUI)\n* Android (Jetpack Compose)\n* Desktop (Compose for Desktop)\n* Web (Wasm based Compose for Web)\n* Swift Executable Package\n\nRelated posts:\n* [Using SwiftUI and Compose to develop App Widgets on iOS and Android](https://johnoreilly.dev/posts/ios-android-widget-kmp/)\n* [Bridging the gap between Swift 5.5 concurrency and Kotlin Coroutines with KMP-NativeCoroutines](https://johnoreilly.dev/posts/kmp-native-coroutines/)\n* [Creating a Swift command line app that consumes Kotlin Multiplatform code - Part 2](https://johnoreilly.dev/posts/swift-command-line-kotlin-multiplatform-part2/)\n* [Using kotlin-inject in a Kotlin/Compose Multiplatform project](https://johnoreilly.dev/posts/kotlin-inject-kmp/)\n\n\n\n\u003cimg width=\"668\" alt=\"Screenshot 2022-12-24 at 15 16 22\" src=\"https://user-images.githubusercontent.com/6302/209442335-862ecb89-8b22-454c-b7a8-d10dcd4deeda.png\"\u003e\n\n![BikeShare Screenshot](/art/screenshot_ios_swiftui.png?raw=true )\n\n\u003cimg width=\"1426\" alt=\"Screenshot 2023-12-02 at 15 01 25\" src=\"https://github.com/joreilly/BikeShare/assets/6302/3e3092cd-261f-49a9-a0b3-bb6631a9d119\"\u003e\n\n\u003cimg width=\"1293\" alt=\"Screenshot 2023-12-02 at 14 10 34\" src=\"https://github.com/joreilly/BikeShare/assets/6302/db821735-a8eb-4865-8723-4a6bb2de1f9f\"\u003e\n\n\n\n### Building\n\nNeed to use at least Android Studio Arctic Fox to build/run the Android client. \n\nRequires Xcode 13.2 or later (due to use of new Swift 5.5 concurrency APIs). When opening iOS project remember to open `.xcworkspace` file (and not `.xcodeproj` one)\n\n### Compose for Desktop client\n\nThis client is available in `compose-desktop` module. Note that you need to use appropriate version of JVM when running (works for example with Java 11)\n\nNote that this makes use of https://github.com/Shusshu/android-flags for flag images shown.\n\n\n## Full set of Kotlin Multiplatform/Compose/SwiftUI samples\n\n*  PeopleInSpace (https://github.com/joreilly/PeopleInSpace)\n*  GalwayBus (https://github.com/joreilly/GalwayBus)\n*  Confetti (https://github.com/joreilly/Confetti)\n*  BikeShare (https://github.com/joreilly/BikeShare)\n*  FantasyPremierLeague (https://github.com/joreilly/FantasyPremierLeague)\n*  ClimateTrace (https://github.com/joreilly/ClimateTraceKMP)\n*  GeminiKMP (https://github.com/joreilly/GeminiKMP)\n*  MortyComposeKMM (https://github.com/joreilly/MortyComposeKMM)\n*  StarWars (https://github.com/joreilly/StarWars)\n*  WordMasterKMP (https://github.com/joreilly/WordMasterKMP)\n*  Chip-8 (https://github.com/joreilly/chip-8)\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjoreilly%2Fbikeshare","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjoreilly%2Fbikeshare","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjoreilly%2Fbikeshare/lists"}