{"id":4906,"date":"2026-09-04T00:51:04","date_gmt":"2026-09-04T03:51:04","guid":{"rendered":"https:\/\/tucumandevelopers.com\/index.php\/2026\/09\/04\/kotlin-toolchain-0-12-multiplatform-library-publishing-wasm-apps-and-more\/"},"modified":"2026-09-04T00:51:04","modified_gmt":"2026-09-04T03:51:04","slug":"kotlin-toolchain-0-12-multiplatform-library-publishing-wasm-apps-and-more","status":"publish","type":"post","link":"https:\/\/tucumandevelopers.com\/index.php\/2026\/09\/04\/kotlin-toolchain-0-12-multiplatform-library-publishing-wasm-apps-and-more\/","title":{"rendered":"Kotlin Toolchain 0.12: Multiplatform Library Publishing, Wasm Apps, and More"},"content":{"rendered":"<div>\n<div>\n<section data-clarity-region=\"article\">\n<div>\n<p><a href=\"\/kotlin\/category\/kotlin\/\">Kotlin<\/a> <a href=\"\/kotlin\/category\/multiplatform\/\">Multiplatform<\/a> <a href=\"\/kotlin\/category\/releases\/\">Releases<\/a> <a href=\"\/kotlin\/category\/toolchain\/\">Toolchain<\/a><\/p>\n<h2 id=\"major-updates\">Kotlin Toolchain 0.12: Multiplatform Library Publishing, Wasm Apps, and More<\/h2>\n<p>Kotlin Toolchain 0.12.0 is out. This release brings some long-awaited features: multiplatform libraries publication, a preview of Wasm application support, Compose Hot Reload from the command line, and more.&nbsp;<\/p>\n<p>Read on for the details, and check the <a href=\"https:\/\/github.com\/JetBrains\/kotlin-toolchain\/releases\/tag\/v0.12.0\" target=\"_blank\" rel=\"noopener\">release notes<\/a> for the full list of changes and bug fixes.<\/p>\n<p>Additionally, <a href=\"http:\/\/klibs.io\/\" target=\"_blank\" rel=\"noopener\">klibs.io<\/a> now uses the Kotlin Toolchain in production. A real backend and not a sample, it\u2019s built on JDK 21, Spring Boot 4 (with Spring AI), PostgreSQL, and OpenSearch. We\u2019ve converted nine convention plugins to Kotlin Toolchain templates, and two Gradle plugins with no built-in equivalent: Jib and Git Properties, which we\u2019ve implemented as local Kotlin Toolchain plugins. Check out the <a href=\"https:\/\/github.com\/JetBrains\/klibs-io\" target=\"_blank\" rel=\"noopener\">sources<\/a> yourself.<\/p>\n<p><em>To get support for Kotlin Toolchain\u2019s latest features, use <\/em><a href=\"https:\/\/www.jetbrains.com\/idea\/\" target=\"_blank\" rel=\"noopener\"><em>IntelliJ IDEA 2026.2.1<\/em><\/a><em> (or newer). Make sure the latest version of the <\/em><a href=\"https:\/\/plugins.jetbrains.com\/plugin\/31850-kotlin-toolchain\" target=\"_blank\" rel=\"noopener\"><em>Kotlin Toolchain plugin<\/em><\/a><em> is installed.&nbsp;<\/em><\/p>\n<p><a href=\"https:\/\/kotl.in\/zbd4nw\" target=\"_blank\" rel=\"noopener\"><i><\/i>Try the Kotlin Toolchain<\/a><\/p>\n<h2>Kotlin Multiplatform libraries publication<\/h2>\n<p>Library publishing arrived in preview in 0.11, but only for JVM libraries. Starting with 0.12, multiplatform libraries work too, with exactly the same configuration:<\/p>\n<pre data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">product: type: lib platforms: [jvm, android, iosArm64, iosSimulatorArm64, wasmJs] settings: publishing: enabled: true group: org.example version: 1.0.0<\/pre>\n<p>The Kotlin Toolchain publishes everything your users need to depend on your library from any of its targets: the common API, one artifact per platform, the sources, and the module publication metadata that lets build tools pick the right pieces automatically.<\/p>\n<p>Cinterop bindings are supported as well. They are published both commonized and per platform, so your users get the same C API you compiled against without setting up interop themselves. The result is consumable from Gradle projects like any other multiplatform library.<\/p>\n<p>For more details, see the <a href=\"https:\/\/kotlin-toolchain.org\/latest\/user-guide\/publishing\/\" target=\"_blank\" rel=\"noopener\">documentation<\/a>.<\/p>\n<p>Note: Resources of Compose Multiplatform libraries are not part of the publication yet. Follow <a href=\"https:\/\/youtrack.jetbrains.com\/issue\/KTC-5698\/Support-publication-of-composeResources-as-a-part-of-KMP-library-publication\" target=\"_blank\" rel=\"noopener\">KTC-5698<\/a> for progress.<\/p>\n<h3>Better compliance with Maven Central quotas<\/h3>\n<p>Because of the new quotas on Maven Central publications that <a href=\"https:\/\/central.sonatype.org\/publish\/maven-central-publishing-limits\/\" target=\"_blank\" rel=\"noopener\">Sonatype will soon enforce<\/a>, we made a few notable changes to reduce the number of files published by default:<\/p>\n<ul>\n<li>Checksums of signature files (<code>.asc.sha1<\/code>) are not necessary and are no longer published.<\/li>\n<li>Only the <code>.md5<\/code> and <code>.sha1<\/code> checksums are published by default now. If you need to continue publishing the <code>.sha256<\/code> and <code>.sha512<\/code> checksums, use <code>settings.publishing.checksums: [md5, sha1, sha256, sha512]<\/code>.<\/li>\n<\/ul>\n<h2>Wasm application support<\/h2>\n<p><code>wasm-js\/app<\/code> modules can now be built into a ready-to-use web application.<\/p>\n<figure><\/figure>\n<p>Among the supported features are:<\/p>\n<ul>\n<li>Running Wasm apps with the <code>kotlin run<\/code> command.<\/li>\n<li>Customizing <code>index.html<\/code> and other resources.&nbsp;<\/li>\n<li>Fetching transitive npm dependencies from Kotlin Multiplatform libraries.<\/li>\n<\/ul>\n<p>More information on working with Wasm web applications is available in <a href=\"https:\/\/kotlin-toolchain.org\/dev\/user-guide\/product-types\/wasm-js-app\/\" target=\"_blank\" rel=\"noopener\">the documentation<\/a>.<\/p>\n<h2>Terminal UI improvements<\/h2>\n<p>We are actively working to make the output of the <code>kotlin<\/code> command less verbose and more user-friendly.&nbsp;<\/p>\n<h3>Diagnostics<\/h3>\n<p>For example, here are some of the recent diagnostics improvements:<\/p>\n<figure><\/figure>\n<h3>Tests in the status widget<\/h3>\n<p>Running tests are now visible in the status widget under the respective tasks and their suites. There are also short test execution statistics visible during the run.<\/p>\n<figure><video autoplay=\"\" controls=\"\" loop=\"\" muted=\"\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2026\/09\/Running-tests.mov\"><\/video><\/figure>\n<p>There are more things to iron out, but we\u2019ll get there.<\/p>\n<h2>IDE improvements<\/h2>\n<h3>Compose preview support<\/h3>\n<p>Android modules and <code>kmp\/lib<\/code> modules that have Android as one of their targets now support the Compose preview feature, powered by the <code>androidx.compose.ui.tooling.preview.Preview<\/code> annotation and the Android plugin.<\/p>\n<figure><video autoplay=\"\" controls=\"\" loop=\"\" muted=\"\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2026\/09\/KTC-Android-Compose-Preview.mov\"><\/video><\/figure>\n<h3>Better support for Compose resources<\/h3>\n<p>The IDE now correctly recognizes Compose resources, updates <code>Res<\/code> classes on the fly, provides navigation, completion, and refactorings that update both XMLs and your code.<\/p>\n<figure><\/figure>\n<h3>Android tooling improvements<\/h3>\n<p>Adding to the Compose preview support mentioned above, we have also brought support for more of the Android features you are accustomed to, such as:<\/p>\n<ul>\n<li>Android Lint&nbsp;<\/li>\n<li>Live Edit<\/li>\n<li>Layout Inspector<\/li>\n<li>Resources (<code>R<\/code> class) navigation and completion<\/li>\n<\/ul>\n<h3>iOS improvements<\/h3>\n<p>Starting with IntelliJ IDEA 2026.2.1, the experience of working with iOS applications should be closer to what you\u2019re used to in Gradle projects.<\/p>\n<p>The run configuration now lets you pick a device, configure Xcode options, and choose a debug\/release configuration mode.<\/p>\n<figure><\/figure>\n<p>We\u2019ve also fixed a few issues with Kotlin\/Swift interoperability, which should be more stable now.<\/p>\n<h3>Inlay hints with coordinates of catalog dependencies<\/h3>\n<p>Catalog dependencies in module files and templates now have an inlay hint next to them displaying coordinates that each entry points to.<\/p>\n<figure><\/figure>\n<h2>Better Compose Hot Reload support<\/h2>\n<p>We now properly support Compose Hot Reload <strong>from the command line<\/strong> using the <code>kotlin run --compose-hot-reload-mode<\/code> command.<\/p>\n<h3>General improvements<\/h3>\n<ul>\n<li>The very first reload is now much faster and the build should consume fewer resources.<\/li>\n<li>The <em>Restart the application<\/em> action from the <em>DevTools<\/em> menu is now supported.<\/li>\n<\/ul>\n<h3>Compose Hot Reload MCP<\/h3>\n<div>\n<p>We now support an MCP server for agents to interact with applications running with Compose Hot Reload.<\/p>\n<p>To get started, add the following snippet in your <code>mcp.json<\/code>:<\/p>\n<\/div>\n<pre data-enlighter-language=\"json\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">{ \"mcpServers\": { \"Compose Hot Reload\": { \"command\": \".\/kotlin\", \"args\": [ \"compose-hot-reload-mcp-server\" ] } } }<\/pre>\n<p>With this, agents can interact with, reload, restart, and view window snapshots, and dump the tree of composables. Read more about these capabilities <a href=\"https:\/\/github.com\/JetBrains\/compose-hot-reload#mcp-server-for-ai-agents\" target=\"_blank\" rel=\"noopener\">here<\/a>.<\/p>\n<h2>Other improvements<\/h2>\n<h3>New recommended local dependency format using the <code>\/\/<\/code> prefix<\/h3>\n<p>Previously, the only way to define local module dependencies was to use relative paths starting with the <code>.<\/code> (dot) symbol. This approach had several problems. For example, moving a module from one directory level to another required changing all the dependency paths, such as from<code>..\/..\/foo<\/code> to <code>..\/foo<\/code>. And having a multitude of <code>..\/<\/code> in deeply nested directory structures generally made paths hard to read.<\/p>\n<p>The new recommended way to define local module dependencies is to use project-root-relative paths starting with the <code>\/\/<\/code> prefix. You might be familiar with this syntax from tools like Bazel. The <code>\/\/<\/code> prefix represents the project root directory and can be used not only in the <code>dependencies<\/code> block but in any place that expects a path as well, for example, <code>apply<\/code>.<\/p>\n<p>Before:<\/p>\n<figure><\/figure>\n<p>After:<\/p>\n<figure><\/figure>\n<p>The old relative-paths approach still works for now.<\/p>\n<p>This is a step toward allowing multiple modules with the same directory name.<\/p>\n<h2>Raised minimum JDK and Kotlin versions<\/h2>\n<p>Until now, the minimum JDK version supported by the Kotlin Toolchain was not clearly documented anywhere, and the build would just fail in different places if you used a JDK that was too old. There is now a clear diagnostic and a clear minimum: <strong>only JDK 17 and higher are supported<\/strong> to compile your code. You can still use <code>settings.jvm.release<\/code> to set a lower target if your code should be runnable on lower JREs.&nbsp;<\/p>\n<p>The minimum Kotlin compiler version was raised from 2.1.10 to 2.2.20. This allows simplifying our code, and is in line with the <a href=\"https:\/\/blog.jetbrains.com\/kotlin\/2026\/05\/security-support-policy-for-the-kotlin-standard-library\/\">new security support policy<\/a> for the Kotlin standard library.&nbsp;<\/p>\n<h2>Updated default versions<\/h2>\n<p>We\u2019ve also updated some of the default versions for built-in toolchains and frameworks:<\/p>\n<ul>\n<li>Kotlin 2.4.10<\/li>\n<li>JDK 25<\/li>\n<li>JUnit Platform 6.1.3<\/li>\n<li>KSP 2.3.11<\/li>\n<li>Ktor 3.5.2<\/li>\n<li>Spring Boot 4.1.0<\/li>\n<li>DataFrame 1.0.0-rc01<\/li>\n<li>Kotlinx.rpc 0.10.3<\/li>\n<\/ul>\n<h2>Try Kotlin Toolchain 0.12.0<\/h2>\n<p>To get started with the Kotlin Toolchain, check out our <a href=\"https:\/\/kotl.in\/zbd4nw\" data-type=\"link\" data-id=\"https:\/\/kotl.in\/zbd4nw\" target=\"_blank\" rel=\"noopener\"><em>Getting started<\/em><\/a> guide. Take a look at some examples, follow the tutorial, or read the comprehensive user guide, depending on your learning style.<\/p>\n<p><a href=\"https:\/\/kotl.in\/zbd4nw\" target=\"_blank\" rel=\"noopener\"><i><\/i>Try the Kotlin Toolchain<\/a><\/p>\n<p>To update an existing project, use the <code>kotlin update<\/code> command.<\/p>\n<h2>Share your feedback<\/h2>\n<p>The Kotlin Toolchain is still in Alpha and under active development. You can provide feedback about your experience by joining the discussion in the <a href=\"https:\/\/slack-chats.kotlinlang.org\/c\/kotlin-toolchain\" target=\"_blank\" rel=\"noopener\">#kotlin-toolchain Slack channel<\/a> (get invite: <a href=\"https:\/\/kotl.in\/slack\" target=\"_blank\" rel=\"noopener\">https:\/\/kotl.in\/slack<\/a>) or by sharing your suggestions and ideas in a <a href=\"https:\/\/youtrack.jetbrains.com\/issues\/KTC\" target=\"_blank\" rel=\"noopener\">YouTrack issue<\/a>. Your input and use cases help shape the future of the Kotlin Toolchain!<\/p>\n<\/p><\/div>\n<p> <a href=\"#\"><\/a> <\/section>\n<div>\n<p><h2>Discover more<\/h2>\n<\/p><\/div>\n<\/p><\/div>\n<\/div>\n<\/div>\n<\/div>\n<p>Fuente: <a href=\"https:\/\/blog.jetbrains.com\/kotlin\/2026\/09\/kotlin-toolchain-0-12-multiplatform-library-publishing-wasm-apps-and-more\/\">Art\u00edculo original<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Kotlin Multiplatform Releases Toolchain Kotlin Toolchain 0.12: Multiplatform Library Publishing, Wasm Apps, and More Kotlin Toolchain 0.12.0 is out. This release brings some long-awaited features: multiplatform libraries publication, a preview of Wasm application support, Compose Hot Reload from the command line, and more.&nbsp; Read on for the details, and check the release notes for the [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":4905,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2},"webixso_pending_account_ids":""},"categories":[46],"tags":[],"class_list":["post-4906","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-jetbrain"],"jetpack_publicize_connections":[],"_links":{"self":[{"href":"https:\/\/tucumandevelopers.com\/index.php\/wp-json\/wp\/v2\/posts\/4906","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/tucumandevelopers.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/tucumandevelopers.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/tucumandevelopers.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/tucumandevelopers.com\/index.php\/wp-json\/wp\/v2\/comments?post=4906"}],"version-history":[{"count":0,"href":"https:\/\/tucumandevelopers.com\/index.php\/wp-json\/wp\/v2\/posts\/4906\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/tucumandevelopers.com\/index.php\/wp-json\/wp\/v2\/media\/4905"}],"wp:attachment":[{"href":"https:\/\/tucumandevelopers.com\/index.php\/wp-json\/wp\/v2\/media?parent=4906"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/tucumandevelopers.com\/index.php\/wp-json\/wp\/v2\/categories?post=4906"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/tucumandevelopers.com\/index.php\/wp-json\/wp\/v2\/tags?post=4906"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}