{"id":17149338,"url":"https://github.com/louiscad/completekotlin","last_synced_at":"2025-04-06T16:15:48.303Z","repository":{"id":38287998,"uuid":"370341696","full_name":"LouisCAD/CompleteKotlin","owner":"LouisCAD","description":"Gradle Plugin to enable auto-completion and symbol resolution for all Kotlin/Native platforms.","archived":false,"fork":false,"pushed_at":"2024-09-22T12:14:37.000Z","size":291,"stargazers_count":316,"open_issues_count":7,"forks_count":8,"subscribers_count":9,"default_branch":"main","last_synced_at":"2025-03-27T21:11:09.084Z","etag":null,"topics":["kmm","kotlin","kotlin-ios","kotlin-macos","kotlin-multiplatform","kotlin-multiplatform-mobile","kotlin-native","kotlin-tvos","kotlin-watchos"],"latest_commit_sha":null,"homepage":"","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/LouisCAD.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","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},"funding":{"github":["LouisCAD"],"patreon":null,"open_collective":null,"ko_fi":null,"tidelift":null,"community_bridge":null,"liberapay":null,"issuehunt":null,"otechie":null,"custom":null}},"created_at":"2021-05-24T12:18:55.000Z","updated_at":"2025-03-05T11:04:39.000Z","dependencies_parsed_at":"2024-01-16T23:30:33.232Z","dependency_job_id":"bcd311fa-691f-437e-a790-ee1052da7cc3","html_url":"https://github.com/LouisCAD/CompleteKotlin","commit_stats":{"total_commits":23,"total_committers":1,"mean_commits":23.0,"dds":0.0,"last_synced_commit":"af2a6f6e01bf27acbaf5b7f4e234dfd0948c640e"},"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/LouisCAD%2FCompleteKotlin","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/LouisCAD%2FCompleteKotlin/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/LouisCAD%2FCompleteKotlin/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/LouisCAD%2FCompleteKotlin/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/LouisCAD","download_url":"https://codeload.github.com/LouisCAD/CompleteKotlin/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247509238,"owners_count":20950232,"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":["kmm","kotlin","kotlin-ios","kotlin-macos","kotlin-multiplatform","kotlin-multiplatform-mobile","kotlin-native","kotlin-tvos","kotlin-watchos"],"created_at":"2024-10-14T21:32:55.630Z","updated_at":"2025-04-06T16:15:48.276Z","avatar_url":"https://github.com/LouisCAD.png","language":"Kotlin","funding_links":["https://github.com/sponsors/LouisCAD"],"categories":[],"sub_categories":[],"readme":"# CompleteKotlin\n\nGradle Plugin to enable auto-completion and symbol resolution for all Kotlin/Native platforms.\n\n## What this plugin provides\n\nThis zero-configuration required Gradle plugin will allow you to comfortably write Kotlin code for all the supported\ntargets.\n\nBefore, you had only autocompletion and symbol resolution for native APIs from your host Operating System.\nWith CompleteKotlin, you get it for everything, regardless of your host OS:\n\nYour host OS becomes irrelevant to writing and reading code:\n\n- That means writing and reading iOS, iPadOS, watchOS, tvOS, and macOS code, **without macOS**.\n- That also means writing and reading Linux MIPS code, **without Linux**.\n- Finally, that means writing and reading Windows code, **without Windows**.\n\n![](docs/you_dont_need_macos_to_make_native_apps.jpg)\n\nEnjoy developing native mobile apps, native desktop apps, and maybe even embedded systems on MIPS.\n\nCompleteKotlin doesn't care about [traffic lights](https://www.google.com/search?q=macos+traffic+lights),\n[roadblocks](https://www.google.com/search?q=windows+defender), or even [penguins](https://www.google.com/search?q=tux),\nit'll just see if any platform's definitions for Kotlin are missing and will make it… complete.\n\n_It also doesn't care about droids because there's nothing incomplete there 😉._\n\n## How to set up\n\nAdding it to a Kotlin Multiplatform project is one copy/pasting, one button click,\nand a bit, or a lot of waiting, depending on your connection and your computer performance:\n\n### Step 1: Add the plugin\n\nTake the `build.gradle(.kts)` file located at the root of your Kotlin Multiplatform project,\nand add the following at the top of the file:\n\n```kts\nplugins {\n    id(\"com.louiscad.complete-kotlin\") version \"1.1.0\"\n}\n```\n\nThat will apply CompleteKotlin to all Kotlin multiplatform modules.\n\nIf you're using [refreshVersions](https://github.com/jmfayard/refreshVersions) and don't want to miss any update,\nyou can omit the version in the snippet above, and add the following in your `versions.properties` file instead:\n\n```properties\nplugin.com.louiscad.complete-kotlin=1.1.0\n```\n\n### Step 2: Click and wait\n\nThen, make a Gradle sync/reload in the IDE with the best internet connection you have around, and once it's done,\nthat's it! You now have complete Kotlin!\n\n### Step 3: Enjoy the exploration 👩🏿‍💻👩🏽‍💻👨🏾‍💻🧑🏼‍💻\n\nNow, you can explore the APIs from whichever platform you want, without switching computers or VMs. 😎\n\n**Important note:** CompleteKotlin enables API discovery (autocompletion and symbol resolution in the IDE),\nbut it **will not enable you to compile**, say a Windows app on a Mac, or an iOS app on Linux. Learn more in the FAQ below.\n\n## The motivation behind this project\n\n### Collaborating with non macOS users\n\nI found out that I like doing pair-programming remotely with folks from anywhere on the planet on open source projects.\nHowever, some projects involve platform exclusive APIs, which might mismatch with the person I want to pair with.\n\nSame story for asynchronous collaboration. Having someone on Linux or Windows seeing red code in the IDE,\nwith unresolved references everywhere, just because it's using some Darwin or iOS APIs is not a good developer experience.\n\nPeople might not use macOS for financial reasons, by choice, or because installing macOS on their machine is a bit hard,\nor kinda illegal in some countries (but not in EU at least, you can do whatever with **your** hardware so long you're\nnot violating other laws, and that you're not selling said hardware loaded with restricted intellectual property).\n\nI believe these reasons should not prevent people from collaborating. Diversity often leads to better results for an\never diverse world, and everyone on almost the exact same computer doesn't sound like diversity.\n\n### World economics, talent spread and mobile platform local markets\n\nWhen your rent is less than 3% of what it'd be in San Francisco, you don't start a project or startup by buying Macs for all the developers.\nYoung folks in these parts of the world are no less smart than other ones, so why limit ourselves?\n\nThe most profitable markets have a share of iOS users that can rarely be ignored.\nI thought it'd be great that people get similar opportunities with similar effort, regardless of their local economy,\nso I hope this is helping and will make a positive, long-lasting impact.\n\n### Kotlin/Everywhere, because it's good stuff\n\nKotlin might not be perfect, but it's most likely the best designed and run high-level programming language IMHO, and it can be fun in a good way. It makes it easier to avoid bugs, including concurrency issues, so it makes sense to promote leveraging it across platforms, for the benefit of developers and their end users, humans, cats, dogs, monkeys, you name it.\n\n### Curiosity of what YOU will do with it \n\nFeel free to tell your stories enabled by this project in GitHub discussions, or to tell me about them on Twitter DM, Kotlin's Slack or email, I'll be happy to know about it! 😊\n\n## Who made this\n\nThe code: Louis CAD, pair-programming with Waqas Ahmed, remotely, using pop.com\n\n## Credits\n\nPair-programming:\n- [Waqas Ahmed](https://github.com/waah42), Germany\n\nPre-release testing, and screenshots:\n- [Rachid Insa](https://github.com/theshid), Ghana (Windows 10, 8GB of RAM, 5400rpm HDD 😬, xMbps connection 😬)\n- [Jean-Michel Fayard](https://github.com/jmfayard), France (Chrome OS \\[Debian\\], 4GB of RAM 😬)\n- [Romain Bouchaud](https://github.com/RomainBouchaud), France (Windows 10)\n\n## Do you love it?\n\nWe hope you do!\n\nIf you want to support this project, and future Kotlin related projects from Louis CAD and friends, here are 3 things you can do:\n1. Star this project 🙏\n2. Say thanks [on Twitter](https://twitter.com/Louis_CAD) and spread the word 😊📢\n3. Get your company, or yourself, to [help me get past 50 monthly sponsors](https://github.com/sponsors/LouisCAD) ❤️💜 \n\n## FAQ\n\n### Where does it work?\n\n- Linux x64 (arm64 not tested yet, might not work, please open an issue if you use it)\n- Windows x64\n- macOS\n\n### How to create a KMM project without the macOS exclusive KMM plugin?\n\nWith IntelliJ IDEA (including the Community Edition), you can create a Kotlin Mobile app or library project.\n\nYou can later on open it in Android Studio, to get the latest and greatest on the Android side, while still sharing code and writing iOS specific code comfortably.\n\n### How to compile my app, if CompleteKotlin cannot help for that?\n\nYou need use the required host OS for compilation when you need to compile, but you don't need it when writing the code.\n\nThat required OS can run in a VM (Virtual Machine), on a shared machine of your team or from a **trustworthy** friend, or on machine in \"the cloud\", be it a CI (Continuous Integration) service, or an infrastructure service.\n\n_If you had a particularly great experience with a CI service for native apps developers, feel free to let me know and tell me how your experience was great. I'll consider adding the name here._\n\n### How reliable is CompleteKotlin?\n\nWe're quite confident about its reliability.\n\nWe tested it on multiple 1.4 and 1.5 Kotlin releases and pre-releases, but had to give up exhaustiveness to save time, bandwidth.\nSo far, we tested it on macOS, Windows and Chrome OS (essentially Linux), with zero issue, apart that some people tolerate very slow computers! Well, I used to do as well…\n\n### Could a Kotlin release break this plugin?\n\nAlmost guaranteed to never happen.\n\nKotlin is developed in the open, and folks at JetBrains that maintain and improve Kotlin would not want to make Kotlin less complete!\n\nIf there's any change arriving into Kotlin that would affect this plugin, or that, who knows,\nwould enable CompleteKotlin to be even more complete, if it's possible, I'm going to be aware, and I'll address it and release a new version, most likely ahead of time, so you should never have to choose between upgrading Kotlin and keeping Kotlin complete.\n\n### How does it work?\n\nYou can start exploring the code in IntelliJ IDEA starting from [the CompleteKotlin.kt file](plugin/src/main/kotlin/com/louiscad/complete_kotlin/CompleteKotlinPlugin.kt), at the time of writing this, it's less than 1000 Kotlin lines overall.\n\nIn a nutshell, it downloads files that contain platform klibs intended for other OSes, and puts them in the right directories. It only downloads the missing ones, so it will have no effect on macOS if you don't use Windows (aka. mingw) or Linux MIPS targets for example.\n\nThese platform klibs notably contain all platform APIs as Kotlin symbols that the IDE will recognize.\n\n### I've seen you are pair-programming with folks from the community, can I join?\n\nYes, just reach out via Twitter DM, Kotlin Slack or something, we'll work it out.\n\n### License of the project?\n\nMIT\n\nNo usage restrictions or liabilities, but please, be a responsible and nice human being, even when thinking and writing code 😉\n\n#### What about exclusivity to things?\n\nUnless it's designed to avoid true abuse, it's often a bad idea, at least, bad outcomes overall IMHO.\n\n#### Do you like macOS?\n\nYes\n\n#### Do you like Chrome OS?\n\nYes\n\n#### Do you like Linux?\n\nYes\n\n#### Do you like Windows?\n\nHum… yes. Also, WSL2 is quite cool for developers IMHO.\n\n#### Do you like Fuchsia?\n\n🔮 looks like I might…\n\n###### Do you like Apple?\n\nDepends. I like kiwis and pears too to name a few.\n\n#### Is that all?\n\nYes, I think the FAQ is quite complete now. 🥁\n\nHowever, if there's any question you want to see here, feel free to ask in the GitHub Discussions of this project.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flouiscad%2Fcompletekotlin","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flouiscad%2Fcompletekotlin","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flouiscad%2Fcompletekotlin/lists"}