{"id":567546,"date":"2025-05-19T16:38:18","date_gmt":"2025-05-19T15:38:18","guid":{"rendered":"https:\/\/blog.jetbrains.com\/?post_type=kotlin&#038;p=567546"},"modified":"2025-05-20T09:54:01","modified_gmt":"2025-05-20T08:54:01","slug":"kotlin-multiplatform-tooling-now-in-intellij-idea-and-android-studio","status":"publish","type":"kotlin","link":"https:\/\/blog.jetbrains.com\/en\/kotlin\/2025\/05\/kotlin-multiplatform-tooling-now-in-intellij-idea-and-android-studio","title":{"rendered":"Kotlin Multiplatform Tooling: Now in IntelliJ IDEA and Android Studio"},"content":{"rendered":"\n<p>We recently outlined our <a href=\"https:\/\/blog.jetbrains.com\/kotlin\/2025\/02\/kotlin-multiplatform-tooling-shifting-gears\/\">plans for the future of Kotlin Multiplatform tooling.<\/a> Today, we\u2019re putting those plans into action with the Beta release of the <a href=\"https:\/\/plugins.jetbrains.com\/plugin\/14936-kotlin-multiplatform\" target=\"_blank\" rel=\"noopener\">new KMP plugin<\/a> for your favorite IDEs \u2013 IntelliJ IDEA and Android Studio. This plugin simplifies every part of the KMP experience, from project setup to cross-platform development and Compose UI previews.<\/p>\n\n\n\n<p align=\"center\"><a class=\"ek-link jb-download-button\" title=\"Try the KMP Plugin\" href=\"https:\/\/plugins.jetbrains.com\/plugin\/14936-kotlin-multiplatform\" target=\"_blank\" rel=\"noopener\">Try the KMP Plugin<\/a><\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Integrated <\/strong><strong><em>New Project<\/em><\/strong> <strong>wizard<\/strong><\/h2>\n\n\n\n<p>With the plugin installed, you can create new KMP projects directly in the IDE.<\/p>\n\n\n\n<p>The wizard supports all target combinations of Android, iOS, desktop, web, and server. You can also choose between a native UI or a shared UI with <a href=\"https:\/\/www.jetbrains.com\/compose-multiplatform\/\" target=\"_blank\" rel=\"noopener\">Compose Multiplatform<\/a>.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full is-resized\"><img decoding=\"async\" loading=\"lazy\" width=\"1600\" height=\"1469\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2025\/05\/new-project-wizard.png\" alt=\"\" class=\"wp-image-568466\" style=\"aspect-ratio:1.0891763104152485;width:652px;height:auto\"\/><\/figure><\/div>\n\n\n<h2 class=\"wp-block-heading\"><strong>Preflight checks<\/strong><\/h2>\n\n\n\n<p>When you open a project, the plugin runs environment checks automatically. It verifies your OS, Java setup, Android SDK, Xcode installation, and Gradle configuration. If anything\u2019s missing or outdated, you\u2019ll get recommendations on how to fix it.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full is-resized\"><img decoding=\"async\" loading=\"lazy\" width=\"1258\" height=\"814\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2025\/05\/preflight-checks.png\" alt=\"\" class=\"wp-image-568477\" style=\"aspect-ratio:1.5454545454545454;width:432px;height:auto\"\/><\/figure><\/div>\n\n\n<h2 class=\"wp-block-heading\"><strong>Ready to run<\/strong><\/h2>\n\n\n\n<p>After indexing, the plugin automatically generates run configurations for all platforms available in your project \u2013 Android, iOS, web, desktop, and server.&nbsp;<\/p>\n\n\n\n<p>For iOS and Android, you can select simulators or emulators, or set up a physical device with the plugin\u2019s guidance.<\/p>\n\n\n\n<p class=\"has-text-align-left\"><\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full is-resized\"><img decoding=\"async\" loading=\"lazy\" width=\"727\" height=\"445\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2025\/05\/run-configs.png\" alt=\"\" class=\"wp-image-568488\" style=\"aspect-ratio:1.6337078651685393;width:454px;height:auto\"\/><\/figure><\/div>\n\n\n<h2 class=\"wp-block-heading\"><strong>Cross-language support<\/strong><\/h2>\n\n\n\n<p>For projects with both Kotlin and Swift, the plugin enables cross-language navigation, syntax highlighting, quick documentation, and debugging in your IDE.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img decoding=\"async\" loading=\"lazy\" width=\"1491\" height=\"825\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2025\/05\/cross-language-support.png\" alt=\"\" class=\"wp-image-568499\"\/><\/figure><\/div>\n\n\n<p>Debugging support for iOS is already available in Android Studio and IntelliJ IDEA Ultimate, and support in IntelliJ IDEA Community Edition is coming later.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Compose Multiplatform support<\/strong><\/h2>\n\n\n\n<p><a href=\"https:\/\/blog.jetbrains.com\/kotlin\/2025\/05\/compose-multiplatform-1-8-0-released-compose-multiplatform-for-ios-is-stable-and-production-ready\/\">Compose Multiplatform for iOS recently became Stable<\/a>, allowing you to confidently build beautiful shared UIs for production use across iOS, Android, and desktop.&nbsp;<\/p>\n\n\n\n<p>Compose Multiplatform code is fully supported in the IDE, with features like autocompletion, navigation, refactorings, and resource support. Thanks to UI previews that are available even from common code, you can preview components directly in the IDE without deploying your app.<\/p>\n\n\n\n<p class=\"has-text-align-left\"><\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img decoding=\"async\" loading=\"lazy\" width=\"1600\" height=\"1215\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2025\/05\/compose-previews.png\" alt=\"\" class=\"wp-image-568510\"\/><\/figure><\/div>\n\n\n<h2 class=\"wp-block-heading\"><strong>Compose Hot Reload<\/strong><\/h2>\n\n\n\n<p>We know that fast iteration is key when building UIs. With <a href=\"https:\/\/github.com\/JetBrains\/compose-hot-reload?tab=readme-ov-file#-compose-hot-reload\" target=\"_blank\" rel=\"noopener\">Compose Hot Reload<\/a>, you can instantly see UI changes without restarting your app or losing its state.&nbsp;<\/p>\n\n\n\n<p>Compose Hot Reload runs on the desktop JVM target, but even if your project is focused on mobile, you can add a desktop target just for development purposes.<\/p>\n\n\n\n<p>As you modify your Compose code \u2013 adjusting layouts, styles, or logic \u2013 Hot Reload detects changes and applies them live to your running app. It\u2019s not limited to small tweaks \u2013 you can change method signatures, remove existing code, and even create new classes. Your app retains its state, including the current screen and user input.<\/p>\n\n\n\n<p>You can safely use Hot Reload for production apps, as it only affects development builds. To get started, add the Compose Hot Reload Gradle plugin to your project \u2013 see the <a href=\"https:\/\/www.jetbrains.com\/help\/kotlin-multiplatform-dev\/compose-hot-reload.html\" target=\"_blank\" rel=\"noopener\">documentation<\/a> for setup details.<\/p>\n\n\n\n<figure class=\"wp-block-video aligncenter\"><video controls src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2025\/05\/Screen-Recording-2025-05-06-at-17.34.06.mov\"><\/video><\/figure>\n\n\n\n<p align=\"center\"><a class=\"ek-link jb-download-button\" title=\"Try Compose Hot Reload\" href=\"https:\/\/www.jetbrains.com\/help\/kotlin-multiplatform-dev\/compose-hot-reload.html\" target=\"_blank\" rel=\"noopener\">Try Compose Hot Reload<\/a><\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>How to install the KMP plugin<\/strong><\/h2>\n\n\n\n<p>The Kotlin Multiplatform plugin is available via <a href=\"https:\/\/plugins.jetbrains.com\/plugin\/14936-kotlin-multiplatform\" target=\"_blank\" rel=\"noopener\">JetBrains Marketplace<\/a> for IntelliJ IDEA 2025.1.1.1 and Android Studio Narwhal 2025.1.1. It only supports macOS for now, but Windows and Linux support is coming soon.&nbsp;<\/p>\n\n\n\n<p>Note that you need to explicitly enable <a href=\"https:\/\/kotlinlang.org\/docs\/releases.html#ide-support\" target=\"_blank\" rel=\"noopener\">K2 mode<\/a>. To do this, go to <em>Settings | Languages &amp; Frameworks | Kotlin<\/em><strong> <\/strong>and select the<strong> <\/strong><em>Enable K2 mode<\/em> checkbox<strong>.<\/strong><\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>What\u2019s next for Kotlin Multiplatform tooling<\/strong><\/h2>\n\n\n\n<p>The KMP plugin is currently in Beta. It is ready for production use and already provides a solid foundation for Kotlin Multiplatform development.<\/p>\n\n\n\n<p>We are actively working to expand its capabilities, polish the experience, and address <a href=\"https:\/\/www.jetbrains.com\/help\/kotlin-multiplatform-dev\/multiplatform-plugin-releases.html#0.9\" target=\"_blank\" rel=\"noopener\">known limitations<\/a>. Your feedback is crucial to help us refine the tooling further. Our initial focus is on mobile development, with desktop and web improvements coming next.<\/p>\n\n\n\n<p>We plan to stabilize the KMP plugin later this year, expand operating system support, and introduce new features based on your feedback.<\/p>\n\n\n\n<p>Upcoming tooling improvements include:<\/p>\n\n\n\n<ul>\n<li><strong>Windows and Linux support<\/strong><strong><br><\/strong>You\u2019ll be able to use the KMP plugin on Windows and Linux. Running iOS applications will remain macOS-specific.<s><br><\/s><\/li>\n\n\n\n<li><strong>Advanced IDE support for Swift<\/strong><strong><br><\/strong>The current plugin version already supports basic code completion and editing for Swift code. More advanced features, such as finding usages and type hierarchy navigation, are still planned.<br><\/li>\n\n\n\n<li><strong>Easier KMP module creation<\/strong><strong><br><\/strong>You\u2019ll be able to create new Kotlin Multiplatform modules using the integrated KMP wizard.<br><\/li>\n\n\n\n<li><strong>Improved tooling support for web and desktop platforms<\/strong><strong><br><\/strong>After stabilizing mobile platform support, we will focus on improving tooling for desktop and web development, aiming for a smoother, unified multiplatform experience.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Share your feedback<\/h2>\n\n\n\n<p>We\u2019d love to hear your feedback! Please share it in the <a href=\"https:\/\/kotlinlang.slack.com\/archives\/C3PQML5NU\" target=\"_blank\" rel=\"noopener\">#multiplatform channel<\/a> on the Kotlinlang Slack (<a href=\"https:\/\/surveys.jetbrains.com\/s3\/kotlin-slack-sign-up\" target=\"_blank\" rel=\"noopener\">get an invite<\/a>). If you encounter any issues, please report them through <a href=\"https:\/\/youtrack.jetbrains.com\/issues\/KMT\" target=\"_blank\" rel=\"noopener\">our issue tracker<\/a>.<\/p>\n\n\n\n<p align=\"center\"><a class=\"ek-link jb-download-button\" title=\"Try the KMP Plugin\" href=\"https:\/\/plugins.jetbrains.com\/plugin\/14936-kotlin-multiplatform\" target=\"_blank\" rel=\"noopener\">Try the KMP Plugin<\/a><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Read more<\/h2>\n\n\n\n<ul>\n<li><a href=\"https:\/\/www.jetbrains.com\/help\/kotlin-multiplatform-dev\/get-started.html\" target=\"_blank\" rel=\"noopener\">Get started with Kotlin Multiplatform<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/blog.jetbrains.com\/kotlin\/2025\/05\/compose-multiplatform-1-8-0-released-compose-multiplatform-for-ios-is-stable-and-production-ready\/\">Compose Multiplatform for iOS Is Stable and Production-Ready<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/blog.jetbrains.com\/kotlin\/2025\/05\/present-and-future-kotlin-for-web\/\">Present and Future of Kotlin for Web<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/blog.jetbrains.com\/kotlin\/2025\/02\/kotlin-multiplatform-tooling-shifting-gears\/\">Kotlin Multiplatform Tooling \u2013 Shifting Gears<\/a><\/li>\n<\/ul>\n","protected":false},"author":1076,"featured_media":567804,"comment_status":"closed","ping_status":"closed","template":"","categories":[956],"tags":[],"cross-post-tag":[],"acf":[],"_links":{"self":[{"href":"https:\/\/blog.jetbrains.com\/en\/wp-json\/wp\/v2\/kotlin\/567546"}],"collection":[{"href":"https:\/\/blog.jetbrains.com\/en\/wp-json\/wp\/v2\/kotlin"}],"about":[{"href":"https:\/\/blog.jetbrains.com\/en\/wp-json\/wp\/v2\/types\/kotlin"}],"author":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/en\/wp-json\/wp\/v2\/users\/1076"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/en\/wp-json\/wp\/v2\/comments?post=567546"}],"version-history":[{"count":9,"href":"https:\/\/blog.jetbrains.com\/en\/wp-json\/wp\/v2\/kotlin\/567546\/revisions"}],"predecessor-version":[{"id":568521,"href":"https:\/\/blog.jetbrains.com\/en\/wp-json\/wp\/v2\/kotlin\/567546\/revisions\/568521"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/en\/wp-json\/wp\/v2\/media\/567804"}],"wp:attachment":[{"href":"https:\/\/blog.jetbrains.com\/en\/wp-json\/wp\/v2\/media?parent=567546"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/en\/wp-json\/wp\/v2\/categories?post=567546"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/en\/wp-json\/wp\/v2\/tags?post=567546"},{"taxonomy":"cross-post-tag","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/en\/wp-json\/wp\/v2\/cross-post-tag?post=567546"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}