{"id":15038001,"url":"https://github.com/touchlab/kampkit","last_synced_at":"2025-05-14T04:07:03.759Z","repository":{"id":39666070,"uuid":"227681864","full_name":"touchlab/KaMPKit","owner":"touchlab","description":"KaMP Kit by Touchlab. A collection of code \u0026 tools designed to get your mobile team started quickly w/Kotlin Multiplatform","archived":false,"fork":false,"pushed_at":"2025-04-30T18:26:54.000Z","size":6173,"stargazers_count":2287,"open_issues_count":7,"forks_count":204,"subscribers_count":65,"default_branch":"main","last_synced_at":"2025-04-30T19:38:47.130Z","etag":null,"topics":["kotlin","kotlin-multiplatform","kotlin-native"],"latest_commit_sha":null,"homepage":"https://touchlab.co/","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/touchlab.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","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,"zenodo":null}},"created_at":"2019-12-12T19:33:24.000Z","updated_at":"2025-04-30T11:46:27.000Z","dependencies_parsed_at":"2023-02-09T11:02:00.932Z","dependency_job_id":"a083118e-e449-4e92-aff1-e0aa970b4d75","html_url":"https://github.com/touchlab/KaMPKit","commit_stats":null,"previous_names":[],"tags_count":0,"template":true,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/touchlab%2FKaMPKit","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/touchlab%2FKaMPKit/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/touchlab%2FKaMPKit/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/touchlab%2FKaMPKit/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/touchlab","download_url":"https://codeload.github.com/touchlab/KaMPKit/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254069441,"owners_count":22009551,"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":["kotlin","kotlin-multiplatform","kotlin-native"],"created_at":"2024-09-24T20:36:47.284Z","updated_at":"2025-05-14T04:06:58.738Z","avatar_url":"https://github.com/touchlab.png","language":"Kotlin","funding_links":[],"categories":[],"sub_categories":[],"readme":"[![KaMP Kit Android](https://img.shields.io/github/actions/workflow/status/touchlab/KaMPKit/KaMPKit-Android.yml?branch=main\u0026logo=Android\u0026style=plastic)](https://github.com/touchlab/KaMPKit/actions/workflows/KaMPKit-Android.yml)\n[![KaMP Kit iOS](https://img.shields.io/github/actions/workflow/status/touchlab/KaMPKit/KaMPKit-iOS.yml?branch-main\u0026logo=iOS\u0026style=plastic)](https://github.com/touchlab/KaMPKit/actions/workflows/KaMPKit-iOS.yml)\n\n# KaMP Kit\n\n![KaMP Kit Image](kampkit.png)\n\n***Welcome to KaMP Kit!***\n\n## Intro\n\nKaMP Kit started in early 2020 with the goal of helping developers interested in Kotlin Multiplatform (aka KMP) get started\nquickly with a great set of libraries and patterns. At the time, there were not many sample apps and getting started\nwas not trivial. The KMP situation has improved considerably since then, and various barriers to entry have been\nremoved.\n\nWhereas KaMP Kit started with the goal of being a minimal sample, we now intend it to be less \"getting started\" and\nmore \"best practice model\". Watch this repo and follow [@TouchlabHQ](https://twitter.com/TouchlabHQ) for updates!\n\n### 2023 Update\n\nWe updated `KaMPKit` to make sure of Touchlab's new [SKIE](https://skie.touchlab.co/) tool. SKIE allowed use to remove a lot of boilerplate code related to `ViewModel` sharing, and also we can now use Kotlin sealed classes as Swift enums in iOS code. Take a look at our detailed [migration case study](https://touchlabpro.touchlab.dev/touchlab/training/skie-architecture/migrating-kampkit-to-skie)\n\n\u003e ## Subscribe!\n\u003e\n\u003e We build solutions that get teams started smoothly with Kotlin Multiplatform and ensure their success in production. Join our community to learn how your peers are adopting KMP.\n [Sign up here](https://touchlab.co/?s=shownewsletter)!\n\n## Getting Help\n\nKaMP Kit support can be found in the Kotlin Community Slack, [request access here](http://slack.kotlinlang.org/). Post in the [#touchlab-tools](https://kotlinlang.slack.com/archives/CTJB58X7X) channel.\n\nFor direct assistance, please [contact Touchlab](https://go.touchlab.co/contactkamp) to discuss support options.\n\n## About\n\n### Goal\n\nThe goal of KaMP Kit is to facilitate your evaluation of KMP. It is a collection of code and\ntools designed to get you started quickly. It's also a showcase of Touchlab's typical choices for architecture,\nlibraries, and other best practices.\n\nThe KMP ecosystem has generated a lot of excitement, and has evolved very rapidly. As a result, there's a lot of old or\nconflicting documentation, blog posts, tutorials, etc. We, Touchlab, have worked with several teams looking at KMP, and have found that the **primary** stumbling block is simply getting started.\n\nKaMP Kit is designed to get you past that primary stumbling block. You should be able to set up your development environment, clone the repo, and have a running sample app very quickly. From there, you can focus on what you want to build.\n\n#### *Very Important Message!!!*\n\nThis kit exists because the info you may find from Google about KMP is likely to be outdated or conflicting with the config here. It is highly recommended that you reach out directly if you run into issues.\n\n### Audience\n\nWe (Touchlab) are focused primarily on using KMP for native mobile development. As a result, this kit is primarily targeted at native mobile developers (Android or iOS), as well as engineering managers for native mobile teams. You should have little-to-no experience with KMP, although some of the information after setup may be useful if you do have KMP experience.\n\n## What's Included?\n\n1. The Starter App - A native mobile KMP app with a small functional feature set.\n2. Educational Resources - Introductory information on KMP and Kotlin/Native.\n3. Integration Information - If you're integrating shared code into an existing application, guides to assist with that effort.\n\n## What's *Not* Included?\n\nComprehensive guides, advanced tutorials, or generally support for fixing anything not included in the starter app. The goal is to have a solid starting point from which you can create something meaningful for evaluating KMP. We're intentionally limiting the scope to keep focus.\n\n# The Starter App\n\nThe central part of the \"Kit\" is the starter app. It includes a set of libraries that we use in our apps that provide for much of the architectural needs of a native mobile application. We've also included a simple set of features you can use as a reference when adding your features.\n\n## 1) Dev Environment and Build Setup\n\nYou will need the following:\n\n- JVM 17\n- Android SDK and the latest stable Android Studio (2023.3+) or IntelliJ(2024.1+)\n- Mac with Xcode 15+ for the iOS build\n\nFor a more detailed guide targeted at iOS developers, see [DETAILED_DEV_SETUP](docs/DETAILED_DEV_SETUP.md).\n\n## 2) Clone and Build\n\nSee [APP_BUILD](docs/APP_BUILD.md) for detailed build instructions. By the end of that doc you should be able to build and run both Android and iOS apps.\n\n---\n\n## Sanity Check\n\nAt this point, you should be able to build Android and iOS apps. **If you cannot build, you need to get help.** This sample app is configured to run out of the box, so if it's not working, you have something wrong with your build setup or config. Please [reach out to us](CONTACT_US.md) so we can improve either the config or troubleshooting docs, and/or the Kotlin Slack group mentioned above.\n\n---\n\n## 3) Walk Through App\n\nTake a walk through the app's code and libraries. Make changes, recompile. See how it works.\n\n[GENERAL_ARCHITECTURE](docs/GENERAL_ARCHITECTURE.md)\n\n## 4) Background Education\n\nIf the app is building, it's a good time to take a break and get some background information.\n\n### KMP Intro\n\nIt's important to understand not just how to set up the platform, but to get a better perspective on what the tech can do and why we think it'll be very successful. KMP is distinct from other code sharing and \"cross platform\" systems, and understanding those distinctions is useful.\n\n[Longer intro to KaMP Kit](docs/WHAT_AND_WHY.md) - Original version of this doc's intro. Cut because it was pretty long.\n\n[Intro to Kotlin Multiplatform](https://vimeo.com/371428809) - General intro to KMP from Oredev in Nov 2019. Good overall summary of the platform.\n\n### \"Selling\" KMP\n\nKaMPKit can help you demonstrate to management and other stakeholders the value of sharing code with KMP. Check out these resources for more advice on pitching KMP to your team:\n\n[Kotlin Multiplatform Mobile for Teams](https://www.youtube.com/watch?v=-tJvCOfJesk\u0026t=2145s)\n\n[Building a Business Case for KMP](https://touchlab.co/building-business-case-kotlin-multiplatform/)\n\n[7 ways to convince your engineering manager to pilot Kotlin Multiplatform](https://touchlab.co/7-ways-convince-engineering-manager-pilot-kotlin-multiplatform/)\n\n### Xcode Debugging\n\nFor information on how to debug Kotlin in Xcode, check out the [Debugging Kotlin In Xcode](docs/DEBUGGING_KOTLIN_IN_XCODE.md) doc.\n\n## 5) Integrating 'shared' With Existing Apps\n\nAs part of your evaluation, you'll need to decide if you're going to integrate KMP into existing apps. Some teams feel integrating with their production apps is a better demonstration of KMP's viability. While KMP's interop is great, relative to other technologies, **integrating *anything* into a production app build process can be a difficult task**. Once integrated, development is generally smooth, but modifying production build systems can be a time consuming task.\n\n[Adopting Kotlin Multiplatform In Brownfield Applications](https://www.youtube.com/watch?v=rF-w_jL0qsI)\n\n### Android\n\nThe Android side is somewhat more straightforward. Android development is Kotlin-first nowadays, and the library can be integrated as just another module library. We'll be updating soon with a general Android integration doc. In the meantime, the simplest method would be to copy the shared module into your standard Android build, and use the `app` module as a reference for dependency resolution.\n\n### iOS\n\nThe iOS integration process is relatively new and has been iterating fast. Be prepared to spend more time with config related issues when integrating with a production build.\n\nYou can integrate with Cocoapods, or by directly including the Xcode framework. If you are an Android developer without extensive iOS build experience, be aware that this is a risky option. Production build systems, for any ecosystem, tend to be complex. You'll almost certainly need to recruit somebody with experience maintaining your iOS build.\n\nSee [IOS_PROJ_INTEGRATION.md](docs/IOS_PROJ_INTEGRATION.md) for iOS integration information.\n\nIf you are attempting to integrate your KMP project with a production iOS application, please let us know what issues you run into and reach out with questions if stuck. This is an ongoing area of improvement for the KMP platform and we'd like to help make this as smooth as possible.\n\n---\n\n## Troubleshooting\n\n[TROUBLESHOOTING](docs/TROUBLESHOOTING.md) - We'll be growing this file over time, with your help. Please make sure\nto document any issues you run into and [let us know](CONTACT_US.md). \n\n## More To Come!\n\nKaMP Kit is just the beginning. Our hope is that after KaMP Kit you’ll have a better sense of what a possible KMP implementation might look like.\n\n---\n\n### About Touchlab\n\nTouchlab is a mobile-focused development agency based in NYC. We have been working on Android since the beginning, and have worked on a wide range of mobile and hardware projects for the past decade. Over the past few years, we have invested significantly on R\u0026D for code sharing technologies. We believe strongly in KMP's future and have made the Kotlin multiplatform the focus of our business.\n\n### About The Kit\n\nWe talked to a few teams early on who got to do a \"hack week\" with KMP. A common story was, if they didn't abandon the project altogether, they didn't have anything running till the week was half over. Even then, picking libraries and architecture ate the rest of the time. Inevitably the result was, \"KMP isn't ready\". We know that once you're past the setup phase, KMP is really amazing tech. This Kit exists so you're evaluating KMP on Monday afternoon, not Thursday.\n\n### What We Can Do For You\n\nWe have made KMP the focus of Touchlab. We had possibly the first KMP* app published in the iOS App Store, and have extensive experience in building libraries and the Kotlin platform, including contributions to Kotlin/Native itself. We can establish and accelerate your adoption of shared Kotlin code. See [touchlab.co](https://touchlab.co) for more info.\n\n\u003e ## Subscribe!\n\u003e\n\u003e We build solutions that get teams started smoothly with Kotlin Multiplatform and ensure their success in production. Join our community to learn how your peers are adopting KMP.\n [Sign up here](https://go.touchlab.co/newsletter)!\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftouchlab%2Fkampkit","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftouchlab%2Fkampkit","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftouchlab%2Fkampkit/lists"}