<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	 xmlns:media="http://search.yahoo.com/mrss/" >

<channel>
	<title>Kotlin : A concise multiplatform language developed by JetBrains | The JetBrains Blog</title>
	<atom:link href="https://blog.jetbrains.com/kotlin/feed/" rel="self" type="application/rss+xml" />
	<link>https://blog.jetbrains.com</link>
	<description>Developer Tools for Professionals and Teams</description>
	<lastBuildDate>Thu, 04 Jun 2026 09:32:24 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	

<image>
	<url>https://blog.jetbrains.com/wp-content/uploads/2024/01/cropped-mstile-310x310-1-32x32.png</url>
	<title>Kotlin : A concise multiplatform language developed by JetBrains | The JetBrains Blog</title>
	<link>https://blog.jetbrains.com</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Kotlin 2.4.0 Released</title>
		<link>https://blog.jetbrains.com/kotlin/2026/06/kotlin-2-4-0-released/</link>
		
		<dc:creator><![CDATA[Sarah Haggarty]]></dc:creator>
		<pubDate>Wed, 03 Jun 2026 10:14:55 +0000</pubDate>
		<featuredImage>https://blog.jetbrains.com/wp-content/uploads/2026/06/KT-releases-BlogSocialShare-1280x720-1.png</featuredImage>		<category><![CDATA[releases]]></category>
		<guid isPermaLink="false">https://blog.jetbrains.com/?post_type=kotlin&#038;p=711421</guid>

					<description><![CDATA[The Kotlin 2.4.0 release is out! Here are the main highlights: For the complete list of changes, refer to What&#8217;s new in Kotlin 2.4.0 or the release notes on GitHub. How to install Kotlin 2.4.0 The latest version of Kotlin is included in the latest versions of IntelliJ IDEA and Android Studio. To update to [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>The Kotlin 2.4.0 release is out! Here are the main highlights:</p>



<ul>
<li><strong>Language</strong>: Stable context parameters, explicit backing fields, and multiple features for annotation use-site targets.</li>



<li><strong>Standard library</strong>: Stabilized support for the UUID API and support for checking sorted order.</li>



<li><strong>Kotlin/JVM</strong>: Support for Java 26 and annotations in metadata enabled by default.</li>



<li><strong>Kotlin/Native</strong>: Support for Swift packages as dependencies, updates on Swift export, and the CMS GC enabled by default.</li>



<li><strong>Kotlin/Wasm</strong>: Incremental compilation enabled by default and support for WebAssembly Component Model.</li>



<li><strong>Kotlin/JS</strong>: Support for value class export and ES2015 features in JS code inlining.</li>



<li><strong>Gradle</strong>: Compatibility with Gradle 9.5.0.</li>



<li><strong>Maven</strong>: Automatic alignment between Java and JVM target versions.</li>



<li><strong>Kotlin compiler</strong>: More consistent inline function behavior during <code>.klib</code> compilation.</li>
</ul>



<p></p>



<p>For the complete list of changes, refer to <a href="https://kotlinlang.org/docs/whatsnew24.html" data-type="link" data-id="https://kotlinlang.org/docs/whatsnew24.html" target="_blank" rel="noopener">What&#8217;s new in Kotlin 2.4.0</a> or the <a href="https://github.com/JetBrains/kotlin/releases/tag/v2.4.0" target="_blank" rel="noopener">release notes on GitHub.</a></p>



<h2 class="wp-block-heading">How to install Kotlin 2.4.0</h2>



<p>The latest version of Kotlin is included in the latest versions of <a href="https://www.jetbrains.com/idea/download/" target="_blank" rel="noopener">IntelliJ IDEA</a> and <a href="https://developer.android.com/studio" target="_blank" rel="noopener">Android Studio</a>.</p>



<p>To update to the new Kotlin version, <a href="https://kotlinlang.org/docs/releases.html#update-to-a-new-kotlin-version" target="_blank" rel="noopener">change the Kotlin version</a> to 2.4.0 in your build scripts.</p>



<p>If you need the command-line compiler, download it from the <a href="https://github.com/JetBrains/kotlin/releases/tag/v2.4.0" data-type="link" data-id="https://github.com/JetBrains/kotlin/releases/tag/v2.3.0" target="_blank" rel="noopener">GitHub release page</a>.</p>



<p><strong>If you run into any problems:</strong></p>



<ul>
<li>Find help on <a href="https://app.slack.com/client/T09229ZC6" target="_blank" rel="noopener">Slack</a> (<a href="https://surveys.jetbrains.com/s3/kotlin-slack-sign-up" target="_blank" rel="noopener">get an invite</a>).</li>



<li>Report issues to our issue tracker, <a href="https://youtrack.jetbrains.com/issues/KT" target="_blank" rel="noopener">YouTrack</a>.</li>
</ul>



<div style="background-color: #f1f6fe; margin-bottom: 2px; padding: 5px; margin-right: 0%; text-align: left; min-height: px;">
<p>Stay up to date with the latest Kotlin features! Subscribe to receive Kotlin updates by filling out the form at the bottom of this post. &#x2b07;&#xfe0f;</p>
</div>



<h2 class="wp-block-heading">Top issue reporters from YouTrack</h2>



<p><a href="https://youtrack.jetbrains.com/issues/?q=project:KT,%20KTIJ%20created:%202025-12-16%20..%20*%20created%20by:%20gamalik" target="_blank" rel="noopener">Andreas Malik</a> (21 issues),<a href="https://youtrack.jetbrains.com/issues/?q=project:KT,%20KTIJ%20created:%202025-12-16%20..%20*%20created%20by:%20rnett" target="_blank" rel="noopener"> Ryan Nett</a> (20 issues),<a href="https://youtrack.jetbrains.com/issues/?q=project:KT,%20KTIJ%20created:%202025-12-16%20..%20*%20created%20by:%20dramaix" target="_blank" rel="noopener"> Julien Dramaix</a> (18 issues),<a href="https://youtrack.jetbrains.com/issues/?q=project:KT,%20KTIJ%20created:%202025-12-16%20..%20*%20created%20by:%20kyay10" target="_blank" rel="noopener"> Youssef Shoaib</a> (17 issues),<a href="https://youtrack.jetbrains.com/issues/?q=project:KT,%20KTIJ%20created:%202025-12-16%20..%20*%20created%20by:%20jsjeon" target="_blank" rel="noopener"> Jinseong Jeon</a> (14 issues),<a href="https://youtrack.jetbrains.com/issues/?q=project:KT,%20KTIJ%20created:%202025-12-16%20..%20*%20created%20by:%20ZacSweers" target="_blank" rel="noopener"> Zac Sweers</a> (11 issues),<a href="https://youtrack.jetbrains.com/issues/?q=project:KT,%20KTIJ%20created:%202025-12-16%20..%20*%20created%20by:%20clovisai" target="_blank" rel="noopener"> Ivan Canet</a> (10 issues),<a href="https://youtrack.jetbrains.com/issues/?q=project:KT,%20KTIJ%20created:%202025-12-16%20..%20*%20created%20by:%20joseefort" target="_blank" rel="noopener"> Jose Enrique Estremadoyro Fort</a> (9 issues),<a href="https://youtrack.jetbrains.com/issues/?q=project:KT,%20KTIJ%20created:%202025-12-16%20..%20*%20created%20by:%20l.wasylkowski" target="_blank" rel="noopener"> Łukasz Wasylkowski</a> (8 issues),<a href="https://youtrack.jetbrains.com/issues/?q=project:KT,%20KTIJ%20created:%202025-12-16%20..%20*%20created%20by:%20Caleb_Brandt" target="_blank" rel="noopener"> calebbrandt77</a> (8 issues),<a href="https://youtrack.jetbrains.com/issues/?q=project:KT,%20KTIJ%20created:%202025-12-16%20..%20*%20created%20by:%20lppedd" target="_blank" rel="noopener"> Edoardo Luppi</a> (8 issues),<a href="https://youtrack.jetbrains.com/issues/?q=project:KT,%20KTIJ%20created:%202025-12-16%20..%20*%20created%20by:%20vadim.shabanov" target="_blank" rel="noopener"> Vadim Shabanov</a> (7 issues),<a href="https://youtrack.jetbrains.com/issues/?q=project:KT,%20KTIJ%20created:%202025-12-16%20..%20*%20created%20by:%20azefsw" target="_blank" rel="noopener"> Asapha</a> (6 issues),<a href="https://youtrack.jetbrains.com/issues/?q=project:KT,%20KTIJ%20created:%202025-12-16%20..%20*%20created%20by:%20louis.cad" target="_blank" rel="noopener"> Louis CAD</a> (6 issues),<a href="https://youtrack.jetbrains.com/issues/?q=project:KT,%20KTIJ%20created:%202025-12-16%20..%20*%20created%20by:%20vanniktech" target="_blank" rel="noopener"> Niklas Baudy</a> (6 issues),<a href="https://youtrack.jetbrains.com/issues/?q=project:KT,%20KTIJ%20created:%202025-12-16%20..%20*%20created%20by:%20rickclephas" target="_blank" rel="noopener"> Rick Clephas</a> (6 issues),<a href="https://youtrack.jetbrains.com/issues/?q=project:KT,%20KTIJ%20created:%202025-12-16%20..%20*%20created%20by:%20rlnt" target="_blank" rel="noopener"> rlnt</a> (5 issues),<a href="https://youtrack.jetbrains.com/issues/?q=project:KT,%20KTIJ%20created:%202025-12-16%20..%20*%20created%20by:%20marczeugs" target="_blank" rel="noopener"> marc</a> (5 issues),<a href="https://youtrack.jetbrains.com/issues/?q=project:KT,%20KTIJ%20created:%202025-12-16%20..%20*%20created%20by:%20Turansky" target="_blank" rel="noopener"> Victor Turansky</a> (5 issues), and<a href="https://youtrack.jetbrains.com/issues/?q=project:KT,%20KTIJ%20created:%202025-12-16%20..%20*%20created%20by:%20dlatt" target="_blank" rel="noopener"> Dirk Lattermann</a> (5 issues).</p>



<h2 class="wp-block-heading">External contributors</h2>



<p>We&#8217;d like to thank all of our contributors whose pull requests were included in this release:</p>



<p><a href="https://github.com/AndreyBozhko" target="_blank" rel="noopener">AndreyBozhko</a>, <a href="https://github.com/ArseniySukhanov" target="_blank" rel="noopener">ArseniySukhanov</a>, <a href="https://github.com/bennyhuo" target="_blank" rel="noopener">bennyhuo</a>, <a href="https://github.com/BraisGabin" target="_blank" rel="noopener">BraisGabin</a>, <a href="https://github.com/dmaclach" target="_blank" rel="noopener">dmaclach</a>, <a href="https://github.com/kralliv" target="_blank" rel="noopener">kralliv</a>, <a href="https://github.com/loadkrnis" target="_blank" rel="noopener">loadkrnis</a>, <a href="https://github.com/migmacdev" target="_blank" rel="noopener">migmacdev</a>, <a href="https://github.com/NeonMika" target="_blank" rel="noopener">NeonMika</a>, <a href="https://github.com/nyksans" target="_blank" rel="noopener">nyksans</a>, <a href="https://github.com/oscarArismendi" target="_blank" rel="noopener">oscarArismendi</a>, <a href="https://github.com/rickclephas" target="_blank" rel="noopener">rickclephas</a>, <a href="https://github.com/stefanhaustein" target="_blank" rel="noopener">stefanhaustein</a>, <a href="https://github.com/Stream29" target="_blank" rel="noopener">Stream29</a>, <a href="https://github.com/tcmulcahy" target="_blank" rel="noopener">tcmulcahy</a>, and <a href="https://github.com/ZacSweers" target="_blank" rel="noopener">ZacSweers</a>.</p>



<h2 class="wp-block-heading">Special thanks to our EAP Champions</h2>



<ul>
<li><a href="https://x.com/noraltavir" target="_blank">Alexander Nozik</a></li>



<li><a href="https://x.com/andy_lamax" data-type="link" data-id="https://x.com/andy_lamax" target="_blank">Anderson Lameck</a></li>



<li><a href="https://github.com/BoD" target="_blank" rel="noopener">Benoit Lubek</a></li>



<li><a href="https://github.com/JesusMcCloud" target="_blank" rel="noopener">Bernd Prünster</a></li>



<li><a href="https://github.com/HagamosVideojuegos" target="_blank" rel="noopener">David Lopez</a></li>



<li><a href="https://github.com/dayanruben" target="_blank" rel="noopener">Dayan Ruben</a></li>



<li><a href="https://github.com/molikuner" target="_blank" rel="noopener">Florian Schreiber</a></li>



<li><a href="https://ivan.canet.dev/" target="_blank" rel="noopener">Ivan Canet</a></li>



<li><a href="https://jakewharton.com/" target="_blank" rel="noopener">Jake Wharton</a></li>



<li><a href="https://www.linkedin.com/in/johannessvensson/" target="_blank" rel="noopener">Johannes Svensson</a></li>



<li><a href="https://www.linkedin.com/in/lukasz-wasylkowski/" target="_blank" rel="noopener">Łukasz Wasylkowski</a></li>



<li><a href="https://github.com/MohamedRejeb" target="_blank" rel="noopener">Mohamed Rejeb</a></li>



<li><a href="https://github.com/Zordid" target="_blank" rel="noopener">Olaf Gottschalk</a></li>



<li><a href="https://github.com/rickclephas" target="_blank" rel="noopener">Rick Clephas</a></li>



<li><a href="https://github.com/msotho" target="_blank" rel="noopener">Sechaba Mofokeng</a></li>



<li><a href="https://github.com/seregamorph" target="_blank" rel="noopener">Sergey Chernov</a></li>



<li><a href="https://sterlingalbury.com/" target="_blank" rel="noopener">Sterling Albury</a></li>



<li><a href="https://github.com/ychescale9" target="_blank" rel="noopener">Yang</a></li>



<li><a href="https://www.linkedin.com/in/yuri-geronimus/" target="_blank" rel="noopener">Yuri Geronimus</a></li>



<li><a href="https://bsky.app/profile/zacsweers.dev" target="_blank" rel="noopener">Zac Sweers</a></li>
</ul>



<h2 class="wp-block-heading">Further reading</h2>



<ul>
<li><a href="https://kotlinlang.org/docs/whatsnew24.html" target="_blank" rel="noopener">What&#8217;s new in Kotlin 2.4.0 documentation</a></li>



<li><a href="https://kotlinlang.org/docs/compatibility-guide-24.html" target="_blank" rel="noopener">Kotlin 2.4.0 compatibility guide</a></li>



<li><a href="https://blog.jetbrains.com/kotlin/2022/11/eap-champions/">Kotlin EAP Champions</a></li>
</ul>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Koog 1.0 Is Out: Stable Core, Better Interop, and Multiplatform Observability</title>
		<link>https://blog.jetbrains.com/ai/2026/05/koog-1-0-is-out-stable-core-better-interop-and-multiplatform-observability/</link>
		
		<dc:creator><![CDATA[Alyona Chernyaeva]]></dc:creator>
		<pubDate>Wed, 27 May 2026 08:53:10 +0000</pubDate>
		<featuredImage>https://blog.jetbrains.com/wp-content/uploads/2026/05/KG-social-BlogFeatured-1280x720-1-1.png</featuredImage>		<product ><![CDATA[kotlin]]></product>
		<category><![CDATA[ai]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[kotlin]]></category>
		<guid isPermaLink="false">https://blog.jetbrains.com/?post_type=ai&#038;p=709557</guid>

					<description><![CDATA[Last week at the KotlinConf 2026 keynote (watch the recording here), we announced Koog 1.0. Koog is JetBrains’ open-source framework for building AI agents in Kotlin and Java. It provides the core building blocks for agentic applications: tools, workflows, persistence, memory, observability, and integrations with existing JVM and Kotlin Multiplatform projects. We introduced Koog at [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>Last week at the KotlinConf 2026 keynote (watch the recording <a href="http://youtube.com/watch?v=MmwBJbzWbV0" target="_blank" rel="noreferrer noopener">here</a>), we announced <strong>Koog 1.0</strong>.</p>



<p><a href="https://www.jetbrains.com/koog/" target="_blank" data-type="link" data-id="https://www.jetbrains.com/koog/" rel="noreferrer noopener">Koog</a> is JetBrains’ open-source framework for building AI agents in Kotlin and Java. It provides the core building blocks for agentic applications: tools, workflows, persistence, memory, observability, and integrations with existing JVM and Kotlin Multiplatform projects.</p>



<p>We introduced Koog at KotlinConf last year. Since then, the framework has evolved through community feedback, internal use, and several public releases. Koog 1.0 is the next step: a more stable foundation for building reliable enterprise-ready agents.</p>



<h2 class="wp-block-heading"><strong>What’s new in Koog 1.0</strong></h2>



<p>The biggest change in 1.0 is a strict commitment to stability. To give you a solid foundation for production, we guarantee no breaking changes for stable modules for at least one year.</p>



<p>This release also brings several major improvements across the framework:</p>



<ul>
<li>Local Android AI: New provider integrations, featuring support for running LiteRT models locally on Android devices.</li>



<li>A redesigned Java interop layer with a cleaner and more consistent API.</li>



<li>Decoupled HTTP transport, which makes it easier to integrate Koog into existing infrastructure and use different HTTP clients.</li>



<li>OpenTelemetry support across Koog targets, including Kotlin Multiplatform environments.</li>



<li>Improved persistence and memory support for long-running agents.</li>



<li>Anthropic prompt caching support to help reduce latency and token costs for repeated prompts.</li>
</ul>



<p>Koog 1.0 also includes many fixes, API cleanups, and migration improvements that prepare the framework for a more stable long-term evolution. For the full list of changes, see the <a href="https://github.com/JetBrains/koog/releases" target="_blank" data-type="link" data-id="https://github.com/JetBrains/koog/releases" rel="noreferrer noopener">Koog 1.0 release notes</a>.</p>



<h2 class="wp-block-heading"><strong>Try Koog 1.0</strong></h2>



<p>Koog 1.0 marks the framework’s move to a stable core API.</p>



<p>If you’re building agents that need tools, structured workflows, persistence, memory, observability, or integration with existing Kotlin and JVM applications, this release gives you a sturdier foundation to build on.</p>



<p>Explore the docs, update your dependencies, and start with the stable core modules. Add Beta modules only where you need functionality that is still evolving.</p>



<h2 class="wp-block-heading"><strong>Thank you</strong></h2>



<p>We’d like to thank everyone who tried Koog, submitted issues, shared feedback, and contributed to the project over the past year. Koog 1.0 reflects a lot of that input, and we’re excited to keep building it with the community.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>KotlinConf’26 Keynote Highlights: Advances in Language Design, Tooling, AI-Driven Workflows, and Multiplatform Development</title>
		<link>https://blog.jetbrains.com/kotlin/2026/05/kotlinconf26-keynote-highlights/</link>
		
		<dc:creator><![CDATA[Daria Voronina]]></dc:creator>
		<pubDate>Thu, 21 May 2026 10:19:41 +0000</pubDate>
		<featuredImage>https://blog.jetbrains.com/wp-content/uploads/2026/05/Blog-Featured-1280x720-1-2.png</featuredImage>		<category><![CDATA[news]]></category>
		<category><![CDATA[kotlinconf]]></category>
		<guid isPermaLink="false">https://blog.jetbrains.com/?post_type=kotlin&#038;p=708494</guid>

					<description><![CDATA[Kotlin turns 15 this year, and it really is everywhere. It powers systems behind everyday moments, such as tapping to pay, buying commuter rail tickets, using in-flight entertainment, and even filing tax returns online. As AI continues to reshape how software gets built, Kotlin’s growing real-world impact reflects the importance of languages and tools that [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>Kotlin turns 15 this year, and it really is everywhere. It powers systems behind everyday moments, such as tapping to pay, buying commuter rail tickets, using in-flight entertainment, and even filing tax returns online. As AI continues to reshape how software gets built, Kotlin’s growing real-world impact reflects the importance of languages and tools that help teams manage complexity, express ideas clearly, and build reliable systems with confidence.</p>



<p>At KotlinConf’26, the JetBrains team and industry partners shared how Kotlin continues to evolve for developers at every scale. The keynote highlighted advances in language design, tooling, AI-driven workflows, and multiplatform development – all aimed at improving the Kotlin development experience for building modern applications everywhere.</p>



<figure class="wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe title="Keynote | KotlinConf ’26" src="https://www.youtube.com/embed/MmwBJbzWbV0?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
</div><figcaption class="wp-element-caption"><br><strong>KotlinConf ’26</strong> | <strong>Opening Keynote</strong></figcaption></figure>



<h2 class="wp-block-heading">Evolving Kotlin</h2>



<p>As AI-driven development raises the level of abstraction, trust in the programming language is more important than ever. Kotlin Lead Language Designer Michail Zarečenskij mentioned that with Kotlin, the team aims to provide that trust at every level. Ergonomics and safety are principles that guide the language at its very core.</p>



<p>Michail previewed <strong>Kotlin 2.4.0</strong> – the next step in Kotlin’s evolution toward safer and more ergonomic code. Among the features being stabilized are <strong>context parameters</strong>, designed to make APIs more expressive and focused on core logic, and <strong>explicit backing fields</strong>, which simplify common backing property patterns while reducing boilerplate and improving safety.</p>



<p>The presentation also covered several experimental language features, including multi-field value classes for modeling domain-specific data such as money or colors. Key aspects of value classes include:</p>



<ul>
<li>The compiler automatically generates functions like <code>equals()</code>, <code>hashCode()</code>, and <code>toString()</code>.</li>



<li>Value classes use safer name-based destructuring by default.</li>



<li>Value classes have no identity semantics – they are fully defined by their properties.</li>
</ul>



<p></p>



<figure class="wp-block-image size-full"><img style="width:100% !important; height:auto !important; max-width:100% !important;" decoding="async" fetchpriority="high" src="https://blog.jetbrains.com/wp-content/uploads/2026/05/Value-classes.png" alt="Kotlin value classes" class="wp-image-708704"/></figure>



<p>These changes are designed to make working with data safer, more expressive, and more efficient over time.</p>



<p>The presentation also highlighted future plans, such as locality as a first-class language concept, and rich errors, a new approach to representing and handling recoverable failures.</p>



<h2 class="wp-block-heading">Kotlin ecosystem</h2>



<p>Tooling has been part of Kotlin’s story from the beginning. As Kotlin expands into new workflows, including agents and integrations, the ecosystem continues to apply the same core principles of ergonomics and safety. The goal is to ensure a consistent development experience with any editor, build tool, or agentic framework.</p>



<p>One of the major announcements was the <strong>Kotlin Toolchain</strong> – a unified entry point into the Kotlin ecosystem. Available through a single command, Kotlin Toolchain brings together everything from creating, building, running, and testing applications to formatting code, generating documentation, and integrating with agents.</p>



<figure class="wp-block-image size-full"><img style="width:100% !important; height:auto !important; max-width:100% !important;" decoding="async" src="https://blog.jetbrains.com/wp-content/uploads/2026/05/Kotlin-Toolchain.png" alt="Kotlin Toolchain" class="wp-image-708726"/></figure>



<p>Starting today, you can already use Kotlin Toolchain in your JVM and multiplatform projects to build, run, and test your apps, with Amper now serving as the core part of the Kotlin Toolchain. In the future, Kotlin Toolchain will expand with LSP integrations, AI skills, native dependency provisioning, and much more. As always, JetBrains is also bringing deep IDE integrations for the best possible out-of-the-box experience.</p>



<figure class="wp-block-image size-full"><img style="width:100% !important; height:auto !important; max-width:100% !important;" decoding="async" loading="lazy" src="https://blog.jetbrains.com/wp-content/uploads/2026/05/Toolchain.png" alt="" class="wp-image-708911"/></figure>



<p>The presentation also introduced the <strong>Kotlin Documentation Model</strong>, a core part of Kotlin that represents machine-readable documentation in the form of a <code>kdoc.jar</code>. This specified, backward-compatible format will be published alongside libraries and consumed by IDEs, web tools like Dokka, and AI agents.</p>



<p>Another major announcement was the promotion of the <strong>Kotlin Language Server to Alpha</strong>. Backed by the full power of the IntelliJ engine, LSP provides a more consistent experience across diagnostics, code completion, and tooling support. The official Kotlin extension for Visual Studio Code is now also available on the Visual Studio Marketplace.</p>



<figure class="wp-block-image size-full"><img style="width:100% !important; height:auto !important; max-width:100% !important;" decoding="async" loading="lazy" src="https://blog.jetbrains.com/wp-content/uploads/2026/05/Kotlin-LSP.png" alt="Kotlin Language Server (Alpha)" class="wp-image-708737"/></figure>



<p align="center"><a class="ek-link jb-download-button" href="https://blog.jetbrains.com/kotlin/2026/05/official-kotlin-support-for-visual-studio-code-is-now-available-in-alpha/" target="_blank" rel="noopener"><i class="download-icon"></i>Learn more</a></p>



<p>As part of Kotlin Foundation’s efforts, JetBrains and Meta have started the process of standardizing <code>ktfmt</code> and making it a core part of Kotlin.</p>



<p>The team also announced ongoing collaboration with the open-source community to bring first-class Kotlin support to official Bazel <code>rules_kotlin</code>, making it easier to use Kotlin in large-scale codebases with thousands of modules.</p>



<h2 class="wp-block-heading">Kotlin at Google</h2>



<p>Google has been using Kotlin in production for over a decade, and 92% of professional Android developers now use Kotlin for Android applications.</p>



<figure class="wp-block-image size-full"><img style="width:100% !important; height:auto !important; max-width:100% !important;" decoding="async" loading="lazy" src="https://blog.jetbrains.com/wp-content/uploads/2026/05/Developers-at-Google.png" alt="92% of professional Android developers now use Kotlin for Android applications" class="wp-image-708748"/></figure>



<p>The keynote also highlighted Google’s ongoing collaboration with JetBrains on the K2 compiler. Since launching stable K2 support in Android Studio, the Google team has seen near-universal adoption. In Kotlin Symbol Processing, Kotlin&#8217;s solution to Java annotation processes, which Google built and maintains, a 17% reduction in execution time for complex builds was achieved. In R8, Android’s whole-program optimization tool, the team has been able to add a new optimization to remove reflection use from logs in the coroutines library, and this has shown 50% improvement on Compose performance benchmarks.</p>



<h2 class="wp-block-heading">AI tooling for Kotlin</h2>



<p>The keynote also focused on the next generation of AI tools for Kotlin development. We want you to be able to use any agent directly inside JetBrains IDEs. To support these efforts, JetBrains is co-leading the development of an open standard, the <strong>Agent Client Protocol (ACP)</strong>, which specifies how IDEs and coding agents communicate. You can read more about it in our dedicated blog post: <a href="https://blog.jetbrains.com/ai/2026/04/our-2026-direction-ai-and-classic-workflows-in-jetbrains-ides/" target="_blank" rel="noreferrer noopener"><em>Our 2026 Direction: AI and Classic Workflows in JetBrains IDEs</em></a>.</p>



<figure class="wp-block-image size-full"><img style="width:100% !important; height:auto !important; max-width:100% !important;" decoding="async" loading="lazy" src="https://blog.jetbrains.com/wp-content/uploads/2026/05/ACP.png" alt="Agent Client Protocol (ACP), which specifies how IDEs and coding agents communicate" class="wp-image-708838"/></figure>



<h3 class="wp-block-heading">Junie</h3>



<p><a href="https://www.jetbrains.com/junie/" target="_blank" rel="noreferrer noopener">Junie</a>, JetBrains’ coding agent, is deeply integrated with JetBrains IDEs, and even the Junie CLI version can connect to the IDE to get full project context. Junie also works with different LLM providers, allowing you to choose the best model for a specific task. While Junie already works in Kotlin projects, it now also includes dedicated Android support.&nbsp;</p>



<figure class="wp-block-image size-full"><img style="width:100% !important; height:auto !important; max-width:100% !important;" decoding="async" loading="lazy" src="https://blog.jetbrains.com/wp-content/uploads/2026/05/Screenshot-2026-05-21-at-9.01.46-AM.png" alt="Junie, JetBrains’ coding agent, deeply integrated with JetBrains IDEs" class="wp-image-708849"/></figure>



<h3 class="wp-block-heading">JetBrains Air</h3>



<p>As developers are becoming more productive with agents, the keynote also explored how to scale agent-based development workflows. <a href="https://air.dev/" target="_blank" rel="noreferrer noopener">JetBrains Air</a> is an agentic development environment for working effectively with multiple agents.</p>



<figure class="wp-block-image size-full"><img style="width:100% !important; height:auto !important; max-width:100% !important;" decoding="async" loading="lazy" src="https://blog.jetbrains.com/wp-content/uploads/2026/05/Air.png" alt="JetBrains Air, an agentic development environment for working effectively with multiple agents" class="wp-image-708860"/></figure>



<p>OpenAI Codex, Claude Agent, Gemini CLI, and Junie can execute independent task loops without conflicting with one another. You can start agents in separate Git worktrees or Docker containers, and to share progress with your entire team, you&#8217;ll soon be able to use cloud agents and even start and guide them directly from the browser.</p>



<figure class="wp-block-image size-full"><img style="width:100% !important; height:auto !important; max-width:100% !important;" decoding="async" loading="lazy" src="https://blog.jetbrains.com/wp-content/uploads/2026/05/Air_2.png" alt="JetBrains Air: OpenAI Codex, Claude Agent, Gemini CLI, and Junie can execute independent task loops without conflicting with one another" class="wp-image-708871"/></figure>



<h3 class="wp-block-heading">Anthropic and JetBrains</h3>



<p>Christian Ryan, who leads applied AI engineering at Anthropic in Europe, joined the keynote to highlight the growing collaboration between Anthropic and JetBrains across AI tooling, libraries, and developer workflows. When Anthropic built their official JVM SDK, they used Kotlin, which allowed them to create the SDK in an ergonomic, concise, null-safe language. The collaboration also includes the official <a href="https://github.com/modelcontextprotocol/kotlin-sdk" target="_blank" rel="noopener">Kotlin MCP SDK</a>.</p>



<p>On the tooling side, Claude is now native in IntelliJ IDEA and Android Studio. Claude is also a first-party model in Junie and JetBrains Air. For CLI users, there&#8217;s a plugin for Claude Code that integrates JetBrains’ official Kotlin LSP for deeper project understanding.</p>



<figure class="wp-block-image size-full"><img style="width:100% !important; height:auto !important; max-width:100% !important;" decoding="async" loading="lazy" src="https://blog.jetbrains.com/wp-content/uploads/2026/05/Anthropic-1.png" alt="Anthropic and JetBrains: a deep partnership" class="wp-image-709065"/></figure>



<p>A new Kotlin SWE-bench based on 110 real engineering tasks from Kotlin repositories was introduced during the keynote. Using identical prompts and agent configurations, Claude Code with Opus 4.7 achieved the highest resolution rate at 86.4%.</p>



<figure class="wp-block-image size-full"><img style="width:100% !important; height:auto !important; max-width:100% !important;" decoding="async" loading="lazy" src="https://blog.jetbrains.com/wp-content/uploads/2026/05/Anthropic-Benchmarks-1.png" alt="Claude Code: Kotlin SWE-Bench" class="wp-image-709076"/></figure>



<h3 class="wp-block-heading">Koog 1.0</h3>



<p>Vadim Briliantov, Technical Lead and author of Koog, continued the keynote with a talk about the Kotlin AI agent framework that allows you to build fault-tolerant, scalable, and enterprise-ready AI agents in fully idiomatic Kotlin. Vadim announced the stable release of Koog 1.0, a major milestone for production-ready agent development in Kotlin across backend, mobile, and multiplatform applications.</p>



<figure class="wp-block-image size-full"><img style="width:100% !important; height:auto !important; max-width:100% !important;" decoding="async" loading="lazy" src="https://blog.jetbrains.com/wp-content/uploads/2026/05/Koog-1.0.png" alt="Koog 1.0" class="wp-image-708759"/></figure>



<p>The presentation focused on Koog’s approach to building reliable AI systems through type-safe workflow DSLs, persistence and recovery for long-running agents, and deep integrations with existing Kotlin ecosystems, including Spring AI, Ktor, and observability tooling. One of the featured case studies came from Mercedes-Benz, whose team uses Koog to build vehicle maintenance support agents with structured workflows and carefully controlled execution logic. <a href="https://www.mercedes-benz.io/blog/2025-11-14-the-guardrails-your-llm-needs-reliable-agent-based-systems" target="_blank" data-type="link" data-id="https://www.mercedes-benz.io/blog/2025-11-14-the-guardrails-your-llm-needs-reliable-agent-based-systems" rel="noreferrer noopener">Read the full case study</a>.</p>



<figure class="wp-block-image size-full"><img style="width:100% !important; height:auto !important; max-width:100% !important;" decoding="async" loading="lazy" src="https://blog.jetbrains.com/wp-content/uploads/2026/05/Koog-Case-Study.png" alt="Koog case study: Mercedes-Benz" class="wp-image-708770"/></figure>



<p>Vadim also showcased multiplatform support and on-device AI capabilities on Android using Google’s Gemma models, reinforcing Kotlin’s growing position as a unified language for building modern AI-powered applications – from backend services to mobile experiences – all in Kotlin.</p>



<p align="center"><a class="ek-link jb-download-button" href="https://github.com/JetBrains/koog" target="_blank" rel="noopener"><i class="download-icon"></i>View on GitHub</a></p>



<h2 class="wp-block-heading">Kotlin for backend development</h2>



<p>The keynote continued with updates on Kotlin for backend development, including new capabilities across Ktor, <code>kotlinx-rpc</code>, and Exposed. The team showcased Koog integration for building AI-powered services with Ktor, experimental first-party gRPC support in <code>kotlinx-rpc</code>, and the stable release of Exposed, which introduces vector types for AI-powered similarity search alongside a new Gradle plugin for simplified migration script generation. A new <a href="https://github.com/JetBrains/Exposed/tree/main/.claude/skills/migrate-to-1.0" target="_blank" rel="noreferrer noopener">agent skill</a> is also available to help developers migrate existing projects to Exposed 1.0.</p>



<p>Beyond tooling, the presentation focused on Kotlin’s growing adoption in enterprise and compliance-driven environments, where reliability and long-term support are critical.</p>



<figure class="wp-block-image size-full"><img style="width:100% !important; height:auto !important; max-width:100% !important;" decoding="async" loading="lazy" src="https://blog.jetbrains.com/wp-content/uploads/2026/05/Backend-Logo.png" alt="Adoption of Kotlin for backend development" class="wp-image-708792"/></figure>



<p>Starting with Kotlin 2.4, the <strong>Kotlin standard library will include an 18-month security support policy</strong>, with security fixes backported to all release lines within an active support window.</p>



<p align="center"><a class="ek-link jb-download-button" href="https://blog.jetbrains.com/kotlin/2026/05/security-support-policy-for-the-kotlin-standard-library/" target="_blank" rel="noopener"><i class="download-icon"></i>Explore more</a></p>



<p>The keynote also highlighted Kotlin’s productivity benefits for backend teams, referencing data <a href="https://blog.jetbrains.com/kotlin/2026/05/built-for-productivity-what-the-data-shows-about-kotlin/" target="_blank" data-type="link" data-id="https://blog.jetbrains.com/kotlin/2026/05/built-for-productivity-what-the-data-shows-about-kotlin/" rel="noreferrer noopener">showing 15–20% faster development cycles</a> as projects grow in complexity.&nbsp;</p>



<figure class="wp-block-image size-full"><img style="width:100% !important; height:auto !important; max-width:100% !important;" decoding="async" loading="lazy" src="https://blog.jetbrains.com/wp-content/uploads/2026/05/Productivity.png" alt="Kotlin’s productivity benefits for backend teams: 15–20% faster development cycles" class="wp-image-708781"/></figure>



<p>The presentation emphasized Kotlin’s deep integration with the JVM ecosystem through ongoing collaboration with Spring, improved Kotlin representation in Spring and JUnit documentation, updates to the <code>kotlin-maven-plugin</code> and Maven onboarding experience, improved coroutine support in Micrometer, and continued stabilization of the Lombok compiler plugin for mixed Kotlin-Java projects.</p>



<h2 class="wp-block-heading">Kotlin Multiplatform</h2>



<p>Kotlin Multiplatform continues to see rapid adoption, with the number of top apps using KMP more than doubling over the past year. Companies such as PayPal, Booking.com, Sony, and Duolingo are <a href="https://kotlinlang.org/case-studies/?type=multiplatform" target="_blank" rel="noreferrer noopener">already using it in production</a>, and more teams are adopting Compose Multiplatform to share UI across platforms.&nbsp;</p>



<p>For example, Sony uses KMP in their Sound Connect app for headphones to work with platform APIs like sensors and background processing while sharing the UI through Compose Multiplatform. Across Kotlin Multiplatform case studies overall, applications built with KMP now serve hundreds of millions of users daily.</p>



<figure class="wp-block-image size-full"><img style="width:100% !important; height:auto !important; max-width:100% !important;" decoding="async" loading="lazy" src="https://blog.jetbrains.com/wp-content/uploads/2026/05/KMP-logos.png" alt="Kotlin Multiplatform (KMP) adoption in companies" class="wp-image-708803"/></figure>



<p>Getting started with KMP is now easier with the <a href="https://plugins.jetbrains.com/plugin/14936-kotlin-multiplatform/" target="_blank" rel="noreferrer noopener">KMP IDE plugin</a> available on all operating systems for both IntelliJ IDEA and Android Studio. The plugin offers everything you need to build great KMP apps with convenient run configurations, tools for working with Compose code, integrations with Swift and cross-language features, and AGP 9.0 support.</p>



<p>You can also create new projects right in the IDE with the KMP project wizard, which now uses our <a href="https://blog.jetbrains.com/kotlin/2026/05/new-kmp-default-structure/" target="_blank" rel="noreferrer noopener">new default structure</a>, where each module has a single clear responsibility.</p>



<p>We are working to enhance the iOS development experience, notably through <a href="https://kotlinlang.org/docs/native-swift-export.html" target="_blank" rel="noreferrer noopener">Swift Export</a> features that make calling Kotlin from Swift more natural. In Kotlin 2.4, Swift Export is officially moving to Alpha. We also introduced <a href="https://kotlinlang.org/docs/multiplatform/multiplatform-spm-import.html" target="_blank" rel="noreferrer noopener">SPM import,</a> which lets you add dependencies on Objective-C-compatible code using Swift Package Manager and call into those APIs directly from Kotlin code.</p>



<p>Kotlin/Native has seen significant performance improvements over the last year. Measured on the Google Docs codebase, build times are now 25% faster while using less than half the RAM during builds compared to a year ago.</p>



<figure class="wp-block-image size-full"><img style="width:100% !important; height:auto !important; max-width:100% !important;" decoding="async" loading="lazy" src="https://blog.jetbrains.com/wp-content/uploads/2026/05/KotlinNative.png" alt="Kotlin/Native performance from Kotlin 2.2 to 2.4" class="wp-image-708814"/></figure>



<h3 class="wp-block-heading">Compose Multiplatform</h3>



<p>Compose Multiplatform is fully stable and production-ready on mobile and desktop. The web platform also reached Beta status in September 2025, marking another major step forward for multiplatform UI development. For all these platforms, the team continues to bring you the latest improvements and APIs from Jetpack Compose. One of the biggest highlights over the past year is the new Navigation 3 library, a flexible, Compose-first solution that gives you full control over your back stack – and it&#8217;s already stable for multiplatform use.</p>



<p>On iOS, new interop APIs now make it possible to combine native <a href="https://kotlinlang.org/docs/multiplatform/ios-liquid-glass.html" target="_blank" data-type="link" data-id="https://kotlinlang.org/docs/multiplatform/ios-liquid-glass.html" rel="noreferrer noopener">Liquid Glass components with Compose UI</a>, allowing native views to dynamically interact with Compose content underneath.</p>



<p>Beyond the framework itself, the Kotlin Multiplatform ecosystem continues to expand rapidly. There are now more than 3,500 community libraries listed on <a href="http://klibs.io" target="_blank" rel="noreferrer noopener">klibs.io</a>, giving you a growing set of tools and integrations for building multiplatform applications across mobile, desktop, backend, and web.</p>



<figure class="wp-block-image size-full"><img style="width:100% !important; height:auto !important; max-width:100% !important;" decoding="async" loading="lazy" src="https://blog.jetbrains.com/wp-content/uploads/2026/05/Klibs.png" alt="The growing Kotlin Multiplatform (KMP) ecosystem. Libraries indexed by klibs.io" class="wp-image-708825"/></figure>



<h2 class="wp-block-heading">Conclusion&nbsp;</h2>



<p>KotlinConf’26 highlighted how Kotlin continues to evolve beyond a programming language into a complete ecosystem for backend, mobile, web, AI, and multiplatform development. From language and tooling improvements to growing industry adoption, the announcements reflected the shared goal of helping developers build modern software with greater clarity, safety, and productivity.</p>
]]></content:encoded>
					
		
		
		                    <language>
                        <code><![CDATA[zh-hans]]></code>
                        <url>https://blog.jetbrains.com/zh-hans/kotlin/2026/05/kotlinconf26-keynote-highlights/</url>
                    </language>
                	</item>
		<item>
		<title>Introducing a Security Support Policy for the Kotlin Standard Library</title>
		<link>https://blog.jetbrains.com/kotlin/2026/05/security-support-policy-for-the-kotlin-standard-library/</link>
		
		<dc:creator><![CDATA[Anton Yalyshev]]></dc:creator>
		<pubDate>Thu, 21 May 2026 10:19:19 +0000</pubDate>
		<featuredImage>https://blog.jetbrains.com/wp-content/uploads/2026/05/KT-social-BlogFeatured-1280x720-1-5.png</featuredImage>		<category><![CDATA[news]]></category>
		<category><![CDATA[kotlin-libraries]]></category>
		<category><![CDATA[server-side]]></category>
		<guid isPermaLink="false">https://blog.jetbrains.com/?post_type=kotlin&#038;p=708703</guid>

					<description><![CDATA[Upgrade rhythms vary significantly among Kotlin’s user base. Some teams update whenever a new release lands without a second thought. On the other hand, a team inside a regulated organization moves on a multi-quarter cycle and treats every dependency as something that has to be reviewed, approved, and then frozen in production for a while. [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>Upgrade rhythms vary significantly among Kotlin’s user base. Some teams update whenever a new release lands without a second thought. On the other hand, a team inside a regulated organization moves on a multi-quarter cycle and treats every dependency as something that has to be reviewed, approved, and then frozen in production for a while.</p>



<p>Among all of these audiences, Kotlin&#8217;s adoption on the JVM keeps growing. Around half of Kotlin developers today write server-side applications, including in segments like <a href="https://yurigeronimus.medium.com/kotlin-in-payment-gateways-and-fintech-a-strategic-fit-for-2026-architectures-f049a01059f9" target="_blank" rel="noopener">payment infrastructure</a> and <a href="https://medium.com/ing-blog/kotlin-adoption-inside-ing-5-years-later-df6421b14dc4" target="_blank" rel="noopener">banking</a>, where some teams have been running Kotlin in production for years. A large portion of teams in segments like these work in environments where every production dependency goes through a formal security review.</p>



<p>In environments like these, platform teams run into a deceptively simple question: <em>“Which Kotlin versions are supported?”</em> Until today, we didn&#8217;t have a clean answer. This post introduces one.</p>



<h2 class="wp-block-heading"><strong>Growing adoption means stronger compatibility and security guarantees</strong></h2>



<p>As more code depends on Kotlin, the language becomes more useful – and more constrained. People building on it expect that what they wrote yesterday will keep working tomorrow, that changes will be predictable, and that the team behind Kotlin will treat compatibility as a deliberate choice rather than an afterthought.</p>



<p>A few aspects of Kotlin already work this way. Source-level language stability means code written today keeps compiling on new releases. A documented deprecation cycle replaces silent breaking changes, so anything we remove is announced, and developers are given time to adapt. <a href="https://kotlinfoundation.org/language-committee-guidelines/" target="_blank" rel="noopener">The Language Committee</a> is the formal body that approves significant changes to the language. And the standard library carries its own backward-compatibility contract for public APIs across versions.</p>



<p>These commitments grew naturally as Kotlin became a load-bearing part of large codebases. Each one was added when it became clear we owed our users that guarantee.</p>



<p>But one key thing has been missing from that list, namely an answer to the question, <em>“How long is a Kotlin release supported for security fixes?”</em> For most teams, the gap is invisible. But there are organizations whose dependency reviews depend on the answer – and for them, this gap is everything.</p>



<h2 class="wp-block-heading"><strong>Why the lack of a support policy was a problem</strong></h2>



<p>Kotlin&#8217;s release model is built around a steady cadence of stable releases. The latest stable release, whether it’s a language or tooling release, is the recommended baseline. Bug fixes and language development flow forward into the next release rather than backward through patches. For most teams, this works out perfectly – upgrading is straightforward, and there is little need to think about &#8220;support&#8221; as a separate concept.</p>



<p>For organizations that need a documented support signal, the consequences are concrete:</p>



<ul>
<li>Compliance teams cannot list Kotlin as a supported dependency in their standard process, because there is no formal end-of-support date to record.</li>



<li>Each new Kotlin version in production triggers an individual security review instead of inheriting a documented support status.</li>



<li>Procurement and vendor assessment frameworks ask for supplier documentation that doesn’t exist in this form.</li>



<li>In the event of platform freezes, the absence of a policy means “upgrade immediately or lose support”. This approach doesn’t fit the way organizations like this actually manage dependencies.</li>
</ul>



<p>Kotlin&#8217;s user base continues to grow, and that growth includes environments where the absence of a documented answer carries real cost. Addressing that absence is the next step.</p>



<h2 class="wp-block-heading"><strong>Introducing a security support policy for Kotlin</strong></h2>



<ul>
<li>Each Kotlin release line (e.g., 2.4.x) is supported for security fixes for <strong>18 months</strong> from the release date of its .0 version.</li>



<li>Security fixes are <strong>backported to all release lines within an active support window</strong> and released as the latest patch in each line.</li>



<li>Scope: the JVM kotlin-stdlib runtime artifact.</li>
</ul>



<p></p>



<p><em>Why the JVM standard library specifically?</em> The concern this policy primarily addresses is code running in production on the JVM – the runtime component every JVM Kotlin application links against and ships to its servers. That&#8217;s the layer compliance and security review processes focus on when assessing dependency freshness, and that&#8217;s where documented support actually unblocks decisions. Compile-time tooling – the compiler, Gradle and Maven plugins – sit in build infrastructure, not in the production runtime, and are governed differently. This policy targets exactly where the support is needed.</p>



<p><em>How patches are released.</em> When a security issue is found and fixed, the fix is first added to a release based on the latest Kotlin release line and is then backported to every other release line still in support. Patches go out as the next patch release in each affected line – for example, if 2.4.20 is the current stable release in the 2.4 release line, the next patch release is 2.4.21. Each release line keeps its own version numbering, so a team that has qualified 2.4 for production can stay on 2.4 to receive the fix, without crossing into a new release line.</p>



<p><em>Releases ship together.</em> Each security patch is a full Kotlin release – it goes through the standard release pipeline and ships the complete set of artifacts. You update one Kotlin version in your build and get the patched standard library. Patches for all affected supported lines are published simultaneously.</p>



<p><em>CVE and advisory.</em> Security issues are assigned CVE identifiers where applicable and published on the JetBrains Fixed Security Issues page through the established JetBrains Security advisory process.</p>



<p>The policy applies to Kotlin lines released from launch onward (2.4 and later). Earlier lines remain on the previous model and are not retroactively covered.</p>



<p>The current list of supported release lines, their end-of-support dates, and the latest patch version in each line is maintained on a dedicated <a href="https://kotl.in/stdlib-security" target="_blank" rel="noopener">support page on kotlinlang.org</a>. That page is the canonical reference for which versions are currently supported.</p>



<h2 class="wp-block-heading"><strong>How a release line evolves</strong></h2>



<p>The policy is easier to follow if you watch one release line evolve from the first release (.0) until the end of support. Below is an example of what this looks like for 2.4 (with an approximate timeline; the exact dates do not matter for this example).</p>



<ol>
<li>2.4.0 ships. The 2.4 line enters its 18-month security support window.</li>



<li>A <strong>security report</strong> comes in shortly after release. The <strong>security fix</strong> is added to the release line and is shipped as 2.4.10. (Note: the x.x.10 slot follows the established Kotlin convention for the first bug fix on x.x.0.)</li>



<li>Months later, 2.4.20 ships as the next regular release in the 2.4 line. It includes all prior security fixes.</li>



<li>A new <strong>security report</strong> comes in after 2.4.20. The <strong>security fix</strong> goes out as 2.4.21. The latest patch in the 2.4 line is now 2.4.21 – the version supported teams should be on.</li>



<li>2.5.0 ships, opening its own 18-month window. The 2.4 line is still in support; both lines now receive security backports.</li>



<li>2.6.0 ships, opening the 2.6 line. By this point, 2.5 has had its own regular cycle and is on 2.5.20; 2.4 is still in support at 2.4.21. A new <strong>security issue</strong> is reported and confirmed. The fix is added to the latest stable release&nbsp; as 2.6.10, and is simultaneously backported to the still-supported 2.5 and 2.4 lines as 2.5.21 and 2.4.22 – all three releases on the same day.</li>



<li>The 2.4 line reaches the end of support 18 months after 2.4.0. Security fixes stop for that line.</li>
</ol>



<p>Two practical takeaways: first, you can stay on the release line you&#8217;ve qualified for production and still receive security fixes – you do not need to skip releases. Second, when a fix is published, it becomes available on all supported lines at the same time. There is no &#8220;the latest line is patched, your older line will get it eventually&#8221; gap.</p>



<h2 class="wp-block-heading"><strong>What is not changing</strong></h2>



<ul>
<li>Kotlin&#8217;s release process is unchanged. Bug fixes, language and library features, and performance improvements continue to ship in new releases the way they always have. Older still-supported lines receive only security backports.</li>



<li>Each new Kotlin release is still the recommended baseline for new projects. The security support window exists for organizations that need to stay on a specific minor line for compliance reasons – we still do not recommend delaying upgrades.</li>
</ul>



<h2 class="wp-block-heading"><strong>FAQ and where to go next</strong></h2>



<p><strong>Q: What counts as a security fix under this policy?</strong> A: Issues with confirmed security impact – vulnerabilities of the kind tracked by CVE, where the documented and correct use of an API leads to security impact. Application-level misuse and issues caused by passing unvalidated user input into stdlib APIs are not covered.</p>



<p><strong>Q: Will I have to upgrade to get a security fix?</strong> A: Only within your release line. The fix is shipped as the next patch in that line – for example, 2.4.20 → 2.4.21. You do not need to jump to a newer release to receive it.</p>



<p><strong>Q: Where do I see which lines are currently supported?</strong> A: The dedicated support page on kotlinlang.org. You can find the link below.</p>



<p><strong>Q: My team uses libraries that depend on a different standard library version. Does that matter?</strong> A: Yes. Only one version of kotlin-stdlib ends up on the classpath after dependency resolution, and which specific version that is depends on your build tool. Gradle&#8217;s default resolution picks the highest version requested among all your direct and transitive dependencies – so if a transitive dependency pulls in a newer standard library, that newer version is the one running, not the patched one you set in your build. Maven uses &#8220;nearest wins&#8221; by default. In either case, pin the resolved standard library explicitly (via a BOM, version constraints, or strict-version rules) to make sure the patched version you want is the one that runs.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p><em>Where to go next:</em></p>



<ul>
<li>Support page (current supported lines, end-of-support dates, latest patches): <a href="https://kotl.in/stdlib-security" target="_blank" rel="noopener">kotl.in/stdlib-security</a></li>



<li>Security policy: <a href="http://kotlinlang.org/docs/security.html" data-type="link" data-id="kotlinlang.org/docs/security.html" target="_blank" rel="noopener">kotlinlang.org/docs/security.html</a></li>
</ul>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Official Kotlin Support for Visual Studio Code Is Now Available in Alpha</title>
		<link>https://blog.jetbrains.com/kotlin/2026/05/official-kotlin-support-for-visual-studio-code-is-now-available-in-alpha/</link>
		
		<dc:creator><![CDATA[Alyona Chernyaeva]]></dc:creator>
		<pubDate>Thu, 21 May 2026 10:19:16 +0000</pubDate>
		<featuredImage>https://blog.jetbrains.com/wp-content/uploads/2026/05/KT-social-BlogFeatured-1280x720-1-8.png</featuredImage>		<guid isPermaLink="false">https://blog.jetbrains.com/?post_type=kotlin&#038;p=708198</guid>

					<description><![CDATA[Today at KotlinConf 2026, we announced the Alpha release of the official Kotlin extension for Visual Studio Code. IntelliJ IDEA and Android Studio remain the most complete environments for Kotlin development. But not every Kotlin developer uses either IDE – some prefer VS Code. Kotlin by JetBrains is an extension for those developers, providing official [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>Today at KotlinConf 2026, we announced the Alpha release of the <a href="https://marketplace.visualstudio.com/items?itemName=JetBrains.kotlin-server" target="_blank" data-type="link" data-id="https://marketplace.visualstudio.com/items?itemName=JetBrains.kotlin-server" rel="noreferrer noopener">official Kotlin extension for Visual Studio Code</a>.</p>



<p>IntelliJ IDEA and Android Studio remain the most complete environments for Kotlin development. But not every Kotlin developer uses either IDE – some prefer VS Code. Kotlin by JetBrains is an extension for those developers, providing official Kotlin language support in VS Code, powered by the Kotlin Language Server, and offering core features for reading, writing, and navigating Kotlin code.</p>


    <div class="buttons">
        <div class="buttons__row">
                                                <a href="https://marketplace.visualstudio.com/items?itemName=JetBrains.kotlin-server" class="btn" target="_blank" rel="noopener">Install Kotlin by JetBrains for VS Code</a>
                                                    </div>
    </div>







<h2 class="wp-block-heading">What you get</h2>



<p>The Kotlin by JetBrains extension connects VS Code to the <a href="https://github.com/Kotlin/kotlin-lsp" target="_blank" rel="noreferrer noopener">Kotlin Language Server</a> built on <a href="https://github.com/JetBrains/intellij-community" target="_blank" rel="noreferrer noopener">IntelliJ IDEA</a>’s code-insight infrastructure and the <a href="https://github.com/JetBrains/intellij-community/tree/master/plugins/kotlin" target="_blank" rel="noreferrer noopener">Kotlin plugin</a> implementation.</p>



<p>In practice, this means Kotlin-aware features in VS Code are backed by the same foundation we use for Kotlin support in IntelliJ IDEA. The Alpha release includes core editor support such as code completion, diagnostics, navigation, quick-fixes, formatting, and project import.</p>



<p>For the full list of supported features, see the <a href="https://marketplace.visualstudio.com/items?itemName=JetBrains.kotlin-server" target="_blank" rel="noreferrer noopener">Kotlin by JetBrains</a> extension page on the VS Marketplace.</p>



<p>To get started, install the extension from the Visual Studio Marketplace, open a Kotlin project, and start coding.</p>



<h2 class="wp-block-heading"><strong>Part of a broader Kotlin tooling effort</strong></h2>



<p>This release is part of our ongoing work to support Kotlin developers across different tools and workflows.</p>



<p>Earlier this year, we introduced the <a href="https://blog.jetbrains.com/kotlin/2026/02/java-to-kotlin-conversion-comes-to-visual-studio-code/" target="_blank" rel="noreferrer noopener">Java to Kotlin Converter extension for VS Code</a>, which helps developers convert Java files to Kotlin without leaving their editor. Kotlin by JetBrains continues that effort by bringing language-aware Kotlin editing support to VS Code.</p>



<p>Developers using other editors that support the Language Server Protocol can also try the <a href="https://github.com/Kotlin/kotlin-lsp" target="_blank" rel="noreferrer noopener">Kotlin Language Server</a>, but setup is manual and requires an editor with pull-based diagnostics support.</p>



<h2 class="wp-block-heading"><strong>Help shape Kotlin support in VS Code</strong></h2>



<p>This is an Alpha release, so your feedback is especially important at this stage. Try it in your own projects and let us know what works well, what breaks, and what’s missing from your workflow.</p>



<p>Please report any issues or share your feedback in our <a href="https://github.com/Kotlin/kotlin-lsp/issues/new" target="_blank" rel="noreferrer noopener">GitHub repository</a>.</p>


    <div class="buttons">
        <div class="buttons__row">
                                                <a href="https://marketplace.visualstudio.com/items?itemName=JetBrains.kotlin-server" class="btn" target="_blank" rel="noopener">Install Kotlin by JetBrains for VS Code</a>
                                                    </div>
    </div>




]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Built for Productivity: What the Data Finally Shows About Kotlin</title>
		<link>https://blog.jetbrains.com/kotlin/2026/05/built-for-productivity-what-the-data-shows-about-kotlin/</link>
		
		<dc:creator><![CDATA[Alina Dolgikh]]></dc:creator>
		<pubDate>Wed, 20 May 2026 20:44:25 +0000</pubDate>
		<featuredImage>https://blog.jetbrains.com/wp-content/uploads/2026/05/KT-social-BlogFeatured-1280x720-1-6.png</featuredImage>		<category><![CDATA[news]]></category>
		<category><![CDATA[kotlin]]></category>
		<category><![CDATA[productivity]]></category>
		<guid isPermaLink="false">https://blog.jetbrains.com/?post_type=kotlin&#038;p=708621</guid>

					<description><![CDATA[Years of productivity-focused design are now visible in the data. Pragmatism has been central to Kotlin&#8217;s design from day one. The language prioritizes the developer&#8217;s convenience and productivity over academic purity or feature ambition. Developers describe working in Kotlin in a fairly consistent way: more time spent on what you&#8217;re trying to build, less time [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p><em>Years of productivity-focused design are now visible in the data.</em></p>



<p>Pragmatism has been central to Kotlin&#8217;s design from day one. The language prioritizes the developer&#8217;s convenience and productivity over academic purity or feature ambition.</p>



<p>Developers describe working in Kotlin in a fairly consistent way: more time spent on what you&#8217;re trying to build, less time on ceremony. There are fewer rituals to satisfy the compiler, and less boilerplate to write before getting to the part that matters. For years, the interesting question was whether that effect would also be visible at scale.</p>



<p>Now there is data. A recent JetBrains Research study measured the wall-clock cycle from first edit to push across roughly 28 million examples. On comparable work, Kotlin developers spent about 15%–20% less time than developers working in Java.</p>



<p>That gap matters even more right now, as more code is written by AI agents and developers spend more of their time reading, reviewing, and verifying code. We’ll come back to this at the end.</p>



<h2 class="wp-block-heading"><strong>Productivity by design: A short history</strong></h2>



<p>Pragmatism becomes concrete when you look at the features it produces. Here are five examples from more than a decade of language and ecosystem design decisions.</p>



<h3 class="wp-block-heading"><strong>Data classes</strong></h3>



<p>Some patterns repeat in every codebase. Value objects, DTOs, message envelopes, and configuration records – Kotlin captures these shapes in a single declaration.</p>



<pre class="EnlighterJSRAW" data-enlighter-language="kotlin" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">data class User(val id: Long, val name: String, val email: String)</pre>



<p>There&#8217;s one line, value-like behavior, and minimal boilerplate<em>.</em> You get equality, hashing, structural destructuring, toString(), and a copy() constructor automatically. Adding a field doesn&#8217;t mean rewriting six methods by hand.</p>



<h3 class="wp-block-heading"><strong>Null safety</strong></h3>



<p>Kotlin’s type system tracks whether a value can be absent, and the compiler refuses to let you ignore the question. A whole category of runtime failures becomes compile-time feedback.</p>



<pre class="EnlighterJSRAW" data-enlighter-language="kotlin" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">val length: Int = user?.profile?.email?.length ?: 0</pre>



<p>A nullable chain is expressed in one line, and the compiler verifies every step<em>.</em> Missing values surface at compile time, not later in production.</p>



<h3 class="wp-block-heading"><strong>The small wins</strong></h3>



<p>A handful of features quietly remove friction at every call site. <em>Smart casts</em> eliminate redundant typing once a type check has already happened. <em>Named arguments with defaults</em> make configuration readable without builder ceremony. <em>Trailing lambdas</em> turn block-based APIs into something that reads like ordinary control flow.</p>



<p>Each one is small. Together, they shape what a typical function looks like:</p>



<pre class="EnlighterJSRAW" data-enlighter-language="kotlin" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">fun createUser(
    name: String,
    role: Role = Role.MEMBER,
    email: String? = null,
) = transaction {                       // trailing lambda
    val user = Users.insert(name, role, email)
    if (email != null) {                // smart cast: email is now String
        sendWelcome(email.lowercase())
    }
    user
}

createUser(name = "Anton", role = Role.ADMIN)   // named args + default
</pre>



<p><em>Three features compound into one short, readable function.</em></p>



<h3 class="wp-block-heading"><strong>Coroutines and structured concurrency</strong></h3>



<p>Async work in Kotlin reads like ordinary code. suspend functions look sequential but execute concurrently, and structured concurrency ties every async operation to the scope that started it – so nothing escapes and runs in the background unnoticed.</p>



<h3 class="wp-block-heading"><strong>DSLs as a first-class idiom</strong></h3>



<p>Productivity didn&#8217;t stop at the language. The same syntactic decisions – trailing lambdas, extension functions, type-safe builders – also enable a culture of IDE-aware DSLs across the ecosystem: Gradle build scripts, Compose UI, Ktor routing, Exposed SQL, and HTML and JSON builders. Each is a configuration surface the compiler understands as native code, not a separate format to memorize.&nbsp;</p>



<p>None of these is an isolated win. Each is the product of the same commitment to pragmatism. The rest of this post examines what that commitment looks like in aggregate.</p>



<h2 class="wp-block-heading"><strong>The question stories couldn&#8217;t answer</strong></h2>



<p>Developers have described Kotlin this way for years: <em>less ceremony and more time on the actual work</em>. But description is not measurement. Whether the same effect would also show up in numbers, at a scale where one team&#8217;s opinion doesn&#8217;t dominate, is a different question.</p>



<p>Stories don&#8217;t scale, and self-reporting has known biases, including the obvious one: People who choose Kotlin want that choice to be justified. A quieter bias is that developers who tried Kotlin briefly and then went back may never be sampled. That&#8217;s the gap a study can close.</p>



<h2 class="wp-block-heading"><strong>What the study found</strong></h2>



<p>In a <a href="https://blog.jetbrains.com/research/2026/03/comparative-analysis-of-development-cycle-speed-in-java-and-kotlin/">recent study</a>, the JetBrains Research team analyzed telemetry from IntelliJ IDEA Ultimate over a 20-month window, from November 2023 to June 2025, covering roughly 320,000 developers and 28 million development cycles. A cycle in this study is the wall-clock time from the first edit of a source file after a push to the next push on that file.</p>



<p>For small tasks (about ten minutes of editing), Kotlin cycles were on average about 15.7% shorter than Java cycles. For medium tasks (around half an hour), they were about 20.3% shorter. For large tasks (one and a half to two hours), they were about 15.1% shorter. In absolute terms, that&#8217;s a minute or two off a short fix, five to seven minutes off a medium one, and 15–20 minutes off a long one – repeated many times across a workday and a quarter. The same pattern held across task sizes and throughout the 20-month window.</p>



<p>The obvious questions are fair. Aren&#8217;t Kotlin and Java projects different sizes? Aren&#8217;t the developers at different experience levels? Aren&#8217;t some Kotlin teams just newer or better resourced than the Java ones they&#8217;re being compared to?</p>



<p>Significant effort went into ruling these factors out. The study compared the same developers before and after their migration from Java to Kotlin, against developers who stayed on Java over the same period – a longitudinal design that isolates the language change from team or project differences. Work was bucketed by task size, so the comparison did not pit a one-line tweak against a feature build. JDK version was used as a proxy for engineering culture, with the comparison run both with and without that control. The pattern held.</p>



<p>The full methodology – the longitudinal design, the controls, the validity checks, and the boundaries of what the study can and can&#8217;t claim – is in the <a href="https://blog.jetbrains.com/research/2026/03/comparative-analysis-of-development-cycle-speed-in-java-and-kotlin/">JetBrains Research post</a>. Everything from here on is how we, on the Kotlin side, read those results.</p>



<h2 class="wp-block-heading"><strong>The bigger finding: Kotlin projects don&#8217;t slow down</strong></h2>



<p>A 15%–20% gap on individual tasks is real, but it isn&#8217;t the headline. The larger finding is in the trajectory. Looking at how the same kind of work changes shape over the lifetime of a project, the data tells a different story than the point-in-time numbers do.</p>



<p>In the study sample, Java projects slowed down over the 20-month window. Cycles became 9%–17% longer as codebases grew – across small, medium, and large tasks. The same pattern shows up in independent slices of the data: The longer a Java project ages, the more time the same kind of work takes. Kotlin projects barely showed that slowdown. Some Kotlin migrants even improved over the same period, working faster on comparable tasks at the end of the window than at the start.</p>



<p>This lines up with what we have heard for years from the maintainability side of the conversation: <strong><br></strong><strong><em>Kotlin code is easier to maintain. You can come back six months later and still understand what you wrote.</em></strong>&nbsp;</p>



<p><br>Until now, those reports lived alongside the productivity reports as separate observations. They increasingly look like the same finding from two angles.</p>



<p>Here is our reading of why this happens – explicitly ours, not a conclusion the study set out to prove. Kotlin code expresses intent more clearly than the equivalent Java code does. Types carry more information. Idioms are more uniform across teams and over time. Less of the work is encoded in patterns that the next reader has to reconstruct.&nbsp;</p>



<p>If that&#8217;s the right interpretation, the trajectory result makes sense. A codebase that stays readable doesn&#8217;t accumulate the kind of friction that slowly turns a 10-minute change into a 15-minute one. The difference may not be noticeable on day one. But at scale, the compounding effect is undeniable!</p>



<h2 class="wp-block-heading"><strong>What this means in the age of AI</strong></h2>



<p>As AI-assisted authoring and agentic workflows become more common, developers are spending more time reviewing, integrating, rejecting, and adjusting code than writing it themselves. Even on teams that haven&#8217;t adopted agents wholesale, this shift is changing the distribution of daily activities. More of the developer’s job is deciding whether that code belongs.</p>



<p>Two well-established facts sit side by side. First, developers spend most of their time reading code rather than writing it. The 80/20 estimate is industry folklore for a reason – it shows up in studies, in retrospectives, in any honest accounting of how a workday is spent. Second, on comparable work, Kotlin developers move through their cycles meaningfully faster than Java developers do.</p>



<p>The reasonable interpretation is that the time saved is reading time. Reading is where most of the time goes, and Kotlin appears to make that faster.</p>



<p>In agentic workflows, this is more important. Code review of an AI-generated change is reading. Verifying that a proposed implementation does what it claims is reading. Integrating it into an existing system is reading. Rejecting a bad suggestion starts with reading. The proportion of a developer&#8217;s week spent typing has been falling for two decades, and it’s plummeting now. Time spent reading and understanding is doing the opposite.</p>



<p>Languages that let you read faster – and trust what you read – are far more compelling for modern software development.</p>



<p>Kotlin also carries more static guarantees out of the box. Non-nullability is enforced at the type level. Type narrowing happens automatically once you&#8217;ve checked a type. Sealed hierarchies plus exhaustive when expressions can answer <em>“Did the agent miss a case?”</em> questions at compile time. The same features that make Kotlin code faster to read also make it faster to verify mechanically, by the compiler before review, and by the human reviewer thereafter.</p>



<p>That kind of safety really pays off when you didn&#8217;t write the code yourself.</p>



<p>The productivity edge in the data was real before AI, and how software development is changing could make that edge more important than ever. The day-one gap, the trajectory advantage, and the agentic workflow case all point in the same direction.</p>



<h2 class="wp-block-heading"><strong>Takeaway</strong></h2>



<p><strong><em>For developers:</em></strong> The team conversation that&#8217;s been running on intuition for years now has numbers behind it. The next time the question comes up about whether Kotlin actually pays off for a Java team, you can ground your answer in concrete data.</p>



<p><strong><em>For technical leaders:</em></strong> The quantitative case for a new JVM service is now visible. The smaller day-one effect and the larger trajectory effect both work in your favor. The second matters most for anything you expect to maintain beyond a year.</p>



<p>Pragmatism produced a language whose payoff compounds with time – and matters more, not less, as the developer&#8217;s role evolves.</p>



<p><strong>Links:</strong></p>



<ul>
<li><a href="https://blog.jetbrains.com/research/2026/03/comparative-analysis-of-development-cycle-speed-in-java-and-kotlin/">JetBrains Research post</a> – full methodology and caveats</li>



<li><a href="https://kotlinlang.org/server-side/" target="_blank" rel="noopener">Kotlin for backend</a> – frameworks, deployment, and migration paths</li>



<li><a href="https://play.kotlinlang.org/" target="_blank" rel="noopener">Try Kotlin online</a> – Kotlin Playground</li>
</ul>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>A New Default Project Structure for Kotlin Multiplatform</title>
		<link>https://blog.jetbrains.com/kotlin/2026/05/new-kmp-default-structure/</link>
		
		<dc:creator><![CDATA[Márton Braun]]></dc:creator>
		<pubDate>Fri, 15 May 2026 14:20:57 +0000</pubDate>
		<featuredImage>https://blog.jetbrains.com/wp-content/uploads/2026/05/KT-social-BlogFeatured-1280x720-1-3.png</featuredImage>		<category><![CDATA[kotlin]]></category>
		<category><![CDATA[multiplatform]]></category>
		<guid isPermaLink="false">https://blog.jetbrains.com/?post_type=kotlin&#038;p=706181</guid>

					<description><![CDATA[We are updating the default project structure for Kotlin Multiplatform projects to give modules clearer responsibilities, better align with conventions used by other build systems and frameworks, and reflect the changes in Android Gradle Plugin 9.0. You’ll see this project structure in newly created projects generated by our tools, in the official documentation, and in [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>We are updating the default project structure for Kotlin Multiplatform projects to give modules clearer responsibilities, better align with conventions used by other build systems and frameworks, and reflect the <a href="https://blog.jetbrains.com/kotlin/2026/01/update-your-projects-for-agp9/">changes in Android Gradle Plugin 9.0</a>.</p>



<p>You’ll see this project structure in newly created projects generated by our tools, in the official documentation, and in samples for Kotlin Multiplatform.</p>



<figure class="wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe loading="lazy" title="A New Default Project Structure for Kotlin Multiplatform" src="https://www.youtube.com/embed/Atvl0l7fm1Y?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
</div></figure>



<p>These changes are already live in the KMP wizard, both in your IDE (with the <a href="https://plugins.jetbrains.com/plugin/14936-kotlin-multiplatform" target="_blank" rel="noopener">Kotlin Multiplatform plugin</a> installed) and on <a href="http://kmp.jetbrains.com" target="_blank" rel="noopener">kmp.jetbrains.com</a>. We’re also working on updating our sample projects and other learning materials to match this new structure. You can already check out <a href="https://github.com/JetBrains/kotlinconf-app/" target="_blank" rel="noopener">kotlinconf-app</a>, <a href="https://github.com/Kotlin/KMP-App-Template" target="_blank" rel="noopener">KMP-App-Template</a>, or <a href="https://github.com/Kotlin/kmp-production-sample" target="_blank" rel="noopener">RSS Reader</a> as a reference.</p>



<blockquote class="wp-block-quote">
<p>To get support for AGP 9.0 in IntelliJ IDEA, update to 2026.1.2 or newer, and use the latest version of the <a href="https://plugins.jetbrains.com/plugin/22989-android" target="_blank" rel="noopener">Android plugin</a>.</p>
</blockquote>



<p>This post explains the changes that we’re making, why we’re changing the structure, and how you can update existing projects.</p>



<h2 class="wp-block-heading">What’s changing</h2>



<p>With our previous structure, most projects had a single <code>composeApp</code> Gradle module that contained a Kotlin Multiplatform library and also acted as an application for one or more platforms, containing their entry points and other related configuration.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img decoding="async" loading="lazy" src="https://blog.jetbrains.com/wp-content/uploads/2026/05/image8.png" alt="" class="wp-image-706244" style="width:300px; width:100% !important; height:auto !important; max-width:100% !important;"/></figure></div>


<p>In the <em>Project</em> view, this looked like:</p>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img decoding="async" loading="lazy" src="https://blog.jetbrains.com/wp-content/uploads/2026/05/image1-1.png" alt="" class="wp-image-706255" style="aspect-ratio:0.8938992042440318;width:500px; width:100% !important; height:auto !important; max-width:100% !important;"/></figure></div>


<p>Our new default structure has a <code>shared</code> module with a single, clear responsibility: It’s a Kotlin Multiplatform library containing the shared code. Then, for each platform where you want to build a runnable application on top of the shared library code, you’ll have separate application modules such as <code>androidApp</code>, <code>desktopApp</code>, and <code>webApp</code>.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img decoding="async" loading="lazy" src="https://blog.jetbrains.com/wp-content/uploads/2026/05/image6-1.png" alt="" class="wp-image-706266" style="width:900px; width:100% !important; height:auto !important; max-width:100% !important;"/></figure></div>


<p>The new structure looks like this in the <em>Project</em> view:</p>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img decoding="async" loading="lazy" src="https://blog.jetbrains.com/wp-content/uploads/2026/05/image10.png" alt="" class="wp-image-706299" style="width:300px; width:100% !important; height:auto !important; max-width:100% !important;"/></figure></div>


<h2 class="wp-block-heading">Why we’re making changes</h2>



<p>The <code>composeApp</code> module in the old structure had several different responsibilities. As a result, it contained a lot of configuration, including platform-specific packaging details for all platforms. This could make it difficult to tell which parts were setting up a Kotlin Multiplatform library and which parts were setting up the applications themselves.</p>



<p>If you chose <em>not</em> to share UI on a client platform (for example, to use SwiftUI for your iOS application), the old structure included an additional <code>shared</code> module besides <code>composeApp</code>. This was a significant change to the module structure, but it only happened in certain configurations.</p>



<p>There was also asymmetry when it came to iOS apps. Because they require an Xcode project that consumes the shared code, iOS applications were already in a separate <code>iosApp</code> folder, while the rest of the applications built on the shared code were all co-located in <code>composeApp</code>.</p>



<p>Android Gradle Plugin 9.0 <a href="https://blog.jetbrains.com/kotlin/2026/01/update-your-projects-for-agp9/">requires</a> the entry point of the Android application to be in a separate module from the shared code, as it no longer supports applying the Android application Gradle plugin in a multiplatform module.</p>



<p>Finally, we previously had a different structure for Gradle-based and <a href="https://amper.org/" target="_blank" rel="noopener">Amper</a>-based projects. While Gradle supports multiple applications configured in a single module, Amper allows only one product per module, so Amper-based projects already used separate modules for each application.</p>



<h2 class="wp-block-heading">Goals of the new structure</h2>



<p>Based on the points above, we created the new structure with these goals in mind:</p>



<ul>
<li>Providing an initial setup for projects where each module has a <strong>clear responsibility and single purpose</strong>. It should always be clear where a given piece of code or build configuration should be placed in the project.</li>



<li><strong>Keeping the structure as consistent as possible</strong> across the different configurations that the wizard allows: different sets of target platforms, having a server application or not, and choosing native or shared UI for clients.</li>



<li>Making it <strong>easy to modularize</strong> the project further, to go from a single multiplatform module to several ones as desired.</li>
</ul>



<h2 class="wp-block-heading">Adapting to other configurations</h2>



<p>The examples above show the new project structure for a Compose Multiplatform application that shares its UI across Android, iOS, desktop, and web platforms. In other configurations, the structure will adapt as required, with minimal changes.</p>



<h3 class="wp-block-heading">Configurations with native UI</h3>



<p>Kotlin Multiplatform supports using native UI on top of shared Kotlin code. For example, you can choose to use SwiftUI for your iOS app while using Compose Multiplatform for other platforms. In this case, you’ll write shared business logic code that’s used by all platforms, and shared UI code that’s only used by certain platforms.</p>



<p>In this configuration, the new structure will have two shared modules instead of one: <code>sharedLogic</code> and <code>sharedUI</code>. While <code>sharedLogic</code> is consumed by all applications and doesn’t have Compose dependencies, <code>sharedUI</code> is only consumed by those that use Compose Multiplatform for their UI.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img decoding="async" loading="lazy" src="https://blog.jetbrains.com/wp-content/uploads/2026/05/image9-1.png" alt="" class="wp-image-706288" style="width:300px; width:100% !important; height:auto !important; max-width:100% !important;"/></figure></div>


<p>It’s still easy to decide which module to write your shared code in: If all your platforms will use it, including those with native UI implementations, it should go in <code>sharedLogic</code>. If only platforms using Compose Multiplatform need that code, it should go in <code>sharedUI</code>.</p>



<h3 class="wp-block-heading">Configurations with a server included</h3>



<p>For projects that also target server-side Kotlin, the new structure adds a <code>server</code> module and moves all client-side modules into a nested <code>app</code> folder. An additional <code>core</code> module in the project root lets you share code between server-side and client-side code, such as models and validation logic.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img decoding="async" loading="lazy" src="https://blog.jetbrains.com/wp-content/uploads/2026/05/image11.png" alt="" class="wp-image-706310" style="width:350px; width:100% !important; height:auto !important; max-width:100% !important;"/></figure></div>


<h2 class="wp-block-heading">Updating existing projects</h2>



<p>While we’re changing the default structure for newly created projects, existing projects aren’t required to adopt the same exact structure. If you want to migrate an existing project to match this new default structure, you can use the <a href="https://kotlinlang.org/docs/multiplatform/multiplatform-project-recommended-structure.html" target="_blank" rel="noopener">migration guide</a>, which shows you how to introduce new modules for each entry point.</p>



<p>Note that the changes related to Android Gradle Plugin 9.0, however, <em>are</em> mandatory for all existing multiplatform projects that target Android. You can learn more about these changes and how to update your projects in <a href="https://blog.jetbrains.com/kotlin/2026/01/update-your-projects-for-agp9/">this blog post</a>.</p>



<blockquote class="wp-block-quote">
<p>To get support for AGP 9.0 in IntelliJ IDEA, update to 2026.1.2 or newer, and use the latest version of the <a href="https://plugins.jetbrains.com/plugin/22989-android" target="_blank" rel="noopener">Android plugin</a>.</p>
</blockquote>



<h2 class="wp-block-heading">Get started with KMP today</h2>



<p>To create a new project with the updated structure, go to <a href="http://kmp.new" target="_blank" rel="noopener">kmp.new</a> or use the Kotlin Multiplatform wizard in your IDE (available in both IntelliJ IDEA and Android Studio with the <a href="https://plugins.jetbrains.com/plugin/14936-kotlin-multiplatform" target="_blank" rel="noopener">Kotlin Multiplatform plugin</a> installed).</p>



<p>If you’re looking for examples of the new structure in action, take a look at <a href="https://github.com/JetBrains/kotlinconf-app/" target="_blank" rel="noopener">kotlinconf-app</a>, <a href="https://github.com/Kotlin/KMP-App-Template" target="_blank" rel="noopener">KMP-App-Template</a>, or <a href="https://github.com/Kotlin/kmp-production-sample" target="_blank" rel="noopener">RSS Reader</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Help Shape the Future of Kotlin in the Age of AI</title>
		<link>https://blog.jetbrains.com/kotlin/2026/05/help-shape-the-future-of-kotlin-in-the-age-of-ai/</link>
		
		<dc:creator><![CDATA[Ekaterina Volodko]]></dc:creator>
		<pubDate>Fri, 15 May 2026 13:07:36 +0000</pubDate>
		<featuredImage>https://blog.jetbrains.com/wp-content/uploads/2026/05/KT-social-BlogSocialShare-1280x720-1-6.png</featuredImage>		<category><![CDATA[news]]></category>
		<guid isPermaLink="false">https://blog.jetbrains.com/?post_type=kotlin&#038;p=707381</guid>

					<description><![CDATA[AI is rapidly changing the way developers write, review, learn, and maintain code. Code completion, AI chat assistants, autonomous coding agents, and other tools are giving rise to new workflows almost every month. But one important question remains: How well do these tools actually work with Kotlin? We want to better understand how Kotlin developers [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>AI is rapidly changing the way developers write, review, learn, and maintain code. Code completion, AI chat assistants, autonomous coding agents, and other tools are giving rise to new workflows almost every month.</p>



<p>But one important question remains:</p>



<h2 class="wp-block-heading">How well do these tools actually work with Kotlin?</h2>



<p>We want to better understand how Kotlin developers use AI today, what works well, where the friction points are, and what opportunities lie ahead. That’s why we’re launching a short community survey focused on <strong>AI-assisted development with Kotlin</strong>.</p>



<h2 class="wp-block-heading">Share your perspective</h2>



<p>AI is already reshaping software development. By participating, you can help ensure that the Kotlin community’s real experiences, expectations, and needs are part of that conversation.</p>



<p>Complete the survey to have the chance to win a prize of your choice:</p>



<ul>
<li>USD 50 Amazon Gift Card</li>



<li>Six-month JetBrains All Products Pack subscription</li>
</ul>



<div class="buttons">
        <div class="buttons__row">
            <a class="ek-link jb-download-button" title="Take the survey" href="https://surveys.jetbrains.com/s3/AI-Kotlin-1" target="_blank" rel="noopener" data-test="blog-article-cta" data-cl="true">Take the survey</a>
         </div>
</div>



<p>We’re looking forward to hearing your thoughts.</p>



<h2 class="wp-block-heading">Taking part in KotlinConf 2026?</h2>



<p>If you’re attending KotlinConf 2026, make sure to visit the registration counter after completing the survey to chat with our team and receive a small thank-you gift.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Compose Multiplatform 1.11.0 Is Now Available</title>
		<link>https://blog.jetbrains.com/kotlin/2026/05/compose-multiplatform-1-11-0/</link>
		
		<dc:creator><![CDATA[Elvira Mustafina]]></dc:creator>
		<pubDate>Fri, 15 May 2026 12:50:18 +0000</pubDate>
		<featuredImage>https://blog.jetbrains.com/wp-content/uploads/2026/05/CMP-releases-BlogFeatured-1280x720-1.png</featuredImage>		<category><![CDATA[multiplatform]]></category>
		<category><![CDATA[releases]]></category>
		<category><![CDATA[compose-multiplatform]]></category>
		<guid isPermaLink="false">https://blog.jetbrains.com/?post_type=kotlin&#038;p=707417</guid>

					<description><![CDATA[A new release of Compose Multiplatform has landed, with improvements to the iOS and web experience and a refreshed approach to UI testing. Read on for the highlights, or for the complete list of changes, check out the What’s New. Get Started with Compose Multiplatform Native text input on iOS If you&#8217;ve wanted text fields [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>A new release of Compose Multiplatform has landed, with improvements to the iOS and web experience and a refreshed approach to UI testing. Read on for the highlights, or for the complete list of changes, check out the <a href="https://kotlinlang.org/docs/multiplatform/whats-new-compose-111.html" target="_blank" rel="noopener">What’s New</a>.</p>



<p align="center"><a class="ek-link jb-download-button" href="https://kotlinlang.org/docs/multiplatform/compose-multiplatform-create-first-app.html" target="_blank" rel="noopener"><i class="download-icon"></i>Get Started with Compose Multiplatform</a></p>



<h2 class="wp-block-heading">Native text input on iOS</h2>



<p>If you&#8217;ve wanted text fields in your Compose iOS app to feel a little more native, this one&#8217;s for you. Compose Multiplatform 1.11.0 introduces an experimental native text input implementation built on top of <code>UIView</code>.</p>



<p>This makes caret movement more precise, offers native gestures and selection handles, and provides the familiar system context menu – including <code>Autofill</code>, <code>Translate</code>, and <code>Search</code>. The existing text input remains the stable, cross-platform choice, but if you want the most native feel on iOS, you can now opt in.</p>



<figure class="wp-block-image size-full is-resized"><img decoding="async" loading="lazy" src="https://blog.jetbrains.com/wp-content/uploads/2026/05/WithFrame-Simulator-Screenshot-iPhone-17-Pro-2026-05-13-at-01.14.33.png" alt="Native text input on iOS" class="wp-image-707462" style="width:300px; width:100% !important; height:auto !important; max-width:100% !important;"/></figure>



<p>Another iOS improvement: <a href="https://kotlinlang.org/docs/multiplatform/whats-new-compose-180.html#opt-in-concurrent-rendering" data-type="link" data-id="https://kotlinlang.org/docs/multiplatform/whats-new-compose-180.html#opt-in-concurrent-rendering" target="_blank" rel="noopener">Concurrent rendering</a>, introduced as an opt-in feature in version 1.8.0, is now enabled by default. Rendering tasks are now offloaded to a dedicated render thread out of the box, so your apps get the performance benefits without any extra configuration.</p>



<h2 class="wp-block-heading">Compose UI testing, v2</h2>



<p>Testing on non-Android targets gets an upgrade with support for the <a href="https://developer.android.com/develop/ui/compose/testing/migrate-v2" target="_blank" rel="noopener">v2 <code>ComposeUiTest</code> APIs</a>. The default dispatcher is now <code>StandardTestDispatcher</code>, so coroutines run in the order in which they&#8217;re queued. This makes tests more predictable and brings them closer to production behavior.</p>



<p>The v2 APIs also accept an <code>effectContext</code> parameter for passing a custom coroutine context into your compositions – useful for things like overriding the motion duration scale or supplying your own test dispatcher:</p>



<pre class="kotlin-code" data-highlight-only="true" theme="idea" indent="4" style="visibility: hidden; padding: 36px 0;">
@OptIn(ExperimentalTestApi::class)
@Test
fun myTest() = runComposeUiTest(
    effectContext = motionDurationScale + StandardTestDispatcher()
) {
    setContent {
        MyComposable()
    }
    // assertions
}
</pre>



<p>The previous APIs (<code>runComposeUiTest</code>, <code>runSkikoComposeUiTest</code>, and <code>runDesktopComposeUiTest</code>) are now deprecated in favor of their v2 counterparts.</p>



<h2 class="wp-block-heading">Smoother scrolling on web targets</h2>



<p>Scrolling performance on Compose web has been trailing that of native targets for a while. With 1.11.0, touch processing has been substantially reworked, and scrolling in Compose web apps now feels much closer to what you get on other platforms.</p>



<p>You can see it in action in the latest <a href="https://jetbrains.github.io/kotlinconf-app/" target="_blank" rel="noopener">web version of the KotlinConf App</a>. For all the gritty details, as well as demos and the list of fixes, head over to <a href="https://youtrack.jetbrains.com/issue/CMP-9727" target="_blank" rel="noopener">CMP-9727</a>.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p>That&#8217;s the overview of 1.11.0. Update your dependencies, try out the new APIs, and let us know what you think. For everything that didn&#8217;t make it into this post, check out the <a href="https://github.com/JetBrains/compose-multiplatform/releases/tag/v1.11.0" target="_blank" rel="noopener">full release notes</a> or <a href="https://kotlinlang.org/docs/multiplatform/whats-new-compose-111.html" target="_blank" rel="noopener">What’s New</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>The Road to Name-Based Destructuring</title>
		<link>https://blog.jetbrains.com/kotlin/2026/05/the-road-to-name-based-destructuring/</link>
		
		<dc:creator><![CDATA[Viliam Sedliak]]></dc:creator>
		<pubDate>Wed, 13 May 2026 08:52:35 +0000</pubDate>
		<featuredImage>https://blog.jetbrains.com/wp-content/uploads/2026/05/KT-social-BlogFeatured-1280x720-1-4.png</featuredImage>		<category><![CDATA[news]]></category>
		<category><![CDATA[tutorials]]></category>
		<category><![CDATA[compiler]]></category>
		<category><![CDATA[kotlin]]></category>
		<category><![CDATA[tutorial]]></category>
		<guid isPermaLink="false">https://blog.jetbrains.com/?post_type=kotlin&#038;p=706759</guid>

					<description><![CDATA[TL;DR New “val inside parentheses” syntax is being introduced to allow for name-based destructuring. Additionally, new syntax with square brackets is being introduced for positional destructuring. Both are currently Experimental (enabled using the -Xname-based-destructuring=only-syntax compiler argument) and will become Stable in a future release. In the distant future, the behavior of the “val outside parentheses” [&#8230;]]]></description>
										<content:encoded><![CDATA[
<div style="background: #f7f3ff;padding: 20px 24px;margin: 24px 0;border-radius: 8px">
  <h2 style="margin-top: 0">TL;DR</h2>
  <ul style="margin-bottom: 0">
    <li>
      New “val inside parentheses” syntax is being introduced to allow for name-based destructuring. Additionally, new syntax with square brackets is being introduced for positional destructuring.
      <ul>
        <li>
          Both are currently Experimental (enabled using the <code>-Xname-based-destructuring=only-syntax</code> compiler argument) and will become Stable in a future release.
        </li>
      </ul>
    </li>
    <li>
      In the distant future, the behavior of the “val outside parentheses” syntax for destructuring will change from being position-based to name-based.
      <ul>
        <li>
          There will be a long migration period before the default changes, and tooling is already in place to help with migration.
        </li>
        <li>
          You can already make the switch to the new behavior (<code>-Xname-based-destructuring=complete</code>), but note its Experimental status.
        </li>
      </ul>
    </li>
    <li>
      The compiler ships with migration helpers that will be enabled by default for a few versions, and it will be some time before the new behavior becomes the default.
      <ul>
        <li>
          You can enable these helpers now by using <code>-Xname-based-destructuring=name-mismatch</code>.
        </li>
      </ul>
    </li>
  </ul>
</div>



<p>Kotlin is changing, with names set to become central in destructuring. In the future, <code>val (name, age) = person</code> will extract the <code>name</code> and <code>age</code> properties from the <code>person</code> value, regardless of the way and order in which they were defined. This marks a change from the current approach to destructuring, in which the position is the key element. This blog post explains the reasoning behind this change, the migration strategy, and how Kotlin&#8217;s tooling supports it.</p>



<h2 class="wp-block-heading">Why destructure by name instead of position?</h2>



<p><a href="https://kotlinlang.org/docs/destructuring-declarations.html" target="_blank" rel="noreferrer noopener">Destructuring</a> is most commonly used to access properties from data classes. For example, we can define a <code>Person</code> class as follows:</p>



<pre class="EnlighterJSRAW" data-enlighter-language="kotlin" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">data class Person(val name: String, val age: Int)</pre>



<p>Then we can extract several of the primary properties in a single go. This is what we call <strong>destructuring</strong> the value into its components.</p>



<pre class="EnlighterJSRAW" data-enlighter-language="kotlin" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">fun isValidPerson(p: Person) {
  val (name, age) = p
  return name.isNotEmpty() &amp;&amp; age >= 0
}</pre>



<p>Currently, destructuring is done by position. The variables we introduce in a destructuring declaration often follow the names of the properties in the data class, but there&#8217;s no such requirement in the language.</p>



<pre class="EnlighterJSRAW" data-enlighter-language="kotlin" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">// this is exactly the same function as above
fun isValidPerson(p: Person) {
  val (foo, bar) = p
  return foo.isNotEmpty() &amp;&amp; bar >= 0
}</pre>



<p>This <strong>lack of connection</strong> can cause problems, as it is very easy to inadvertently swap the order of two properties. This mistake may be caught later because of non-matching types, but it appears far from the actual origin.<br><br>The way in which components relate to primary properties also <strong>hinders refactoring</strong>. For example, we cannot move the <code>age</code> property to be computed and still retain the nice data class syntax. Imagine we make the following change:</p>



<pre class="EnlighterJSRAW" data-enlighter-language="kotlin" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">data class Person(val name: String, val birthdate: Date) {
  val age = (Date.now() - birthdate).years
}</pre>



<p>Now every destructuring declaration suddenly changes from <code>age</code> to <code>birthdate</code>! To be clear, source compatibility is still possible, but you need to do a lot more work.</p>



<p>The current approach to destructuring is also at <strong>odds with abstraction</strong>. If we turned Person into an interface, previous instances of destructuring would no longer be valid. We could work around this by introducing our own component functions, but this is usually seen as advanced. As a result, most interfaces do not provide such facilities.</p>



<pre class="EnlighterJSRAW" data-enlighter-language="kotlin" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">interface Person {
  val name: String
  val age: Int

  operator fun component1(): String = name
  operator fun component2(): Int    = age
}</pre>



<p>These problems go away if destructuring depends on <strong>names instead of positions</strong>. It doesn&#8217;t matter if you rearrange the order, change a computed property into a primary one or vice versa, or define a property in a class, interface, or object. The property’s name is a stable characteristic, which means that the source does not require any changes.</p>



<h2 class="wp-block-heading">The new syntax</h2>



<p><em>You can enable the new syntax by passing <code>-Xname-based-destructuring=only-syntax</code> as a </em><a href="https://kotlinlang.org/docs/whatsnew2320.html#name-based-destructuring" target="_blank" rel="noreferrer noopener"><em>compiler argument</em></a><em>.</em></p>



<p>Without further ado, let&#8217;s look at the <strong>new syntax</strong>, which uses names for destructuring. Instead of a single val outside of the parentheses, you use val for each property <strong>inside</strong> the parentheses.</p>



<pre class="EnlighterJSRAW" data-enlighter-language="kotlin" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">fun isValidPerson(p: Person): Boolean {
  (val name, val age) = p
  return name.isNotEmpty() &amp;&amp; age >= 0
}</pre>



<p>As expected, the order in which we write <code>val name</code> and <code>val age</code> in the example above doesn’t matter. This new syntax also supports <strong>renaming</strong> for cases in which the new variable you want to define is not the same as the property you want to access.</p>



<pre class="EnlighterJSRAW" data-enlighter-language="kotlin" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">fun isValidPerson(p: Person): Boolean {
  (val age, val theName = name) = p
  return theName.isNotEmpty() &amp;&amp; age >= 0
}</pre>



<p>Destructuring based on position is still important for a few use cases. Pairs and triples, for example, don&#8217;t have names for their components at a conceptual level, and there&#8217;s no intention to require littering code that uses them with <code>first</code> and <code>second</code>. Position-based destructuring can also be used for collections, and in that case, there are no available properties. The new syntax for position-based destructuring uses square brackets – mirroring the syntax of upcoming collection literals. You can choose whether to put <code>val</code> inside or outside the brackets.</p>



<pre class="EnlighterJSRAW" data-enlighter-language="kotlin" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">fun isZero(point: Pair&lt;Int, Int>): Boolean {
  val [x, y] = point      // one way
  [val x, val y] = point  // or another
  return x == 0 &amp;&amp; y == 0
}</pre>



<p>All of this new syntax is available anywhere you can destructure, including lambda expressions and loops.</p>



<pre class="EnlighterJSRAW" data-enlighter-language="kotlin" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">// suggested new syntax for iterating through a map
for ([key, value] in map) {
  // work with each entry
}

person?.let { (val name, val years = age) -> "$name is $years years old" }</pre>



<p>To reiterate: This is all <strong>new</strong> syntax. As of version 2.3.20, the compiler knows what it means, and we intend to keep this syntax once the feature reaches Stable status.</p>



<h2 class="wp-block-heading">Repurposing parentheses</h2>



<p><em>At some point in the future, we intend for all destructuring using parentheses to be name-based. You can actually experience this future now by using the <code>-Xname-based-destructuring=complete</code> compiler argument.</em></p>



<p>If you already have a project, though, making the switch could have a major impact. The most visible issue would be if destructuring stops working, and the code needs to be updated. A more dangerous one would be destructuring declarations that remain valid but change the meaning.<br><br>For that reason, the compiler ships a migration helper under the <code>-Xname-based-destructuring=name-mismatch</code> compiler argument. When enabled, the compiler gives a warning in cases where the behavior is inconsistent between position-based and name-based destructuring or where the code won&#8217;t be accepted once destructuring with parentheses is no longer positional.</p>



<pre class="EnlighterJSRAW" data-enlighter-language="kotlin" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">// accepted by both with the same behavior 
val (name, age) = person

// warning: accepted by both, but the behavior changes
val (age, name) = person

// warning: accepted only by position-based destructuring
val (personName, personAge) = person
// the IDE suggests potential fixes
// - renaming: (val personName = name, val personAge = age) = person
// - square brackets: val [personName, personAge] = person</pre>



<h2 class="wp-block-heading">The future</h2>



<p>As hinted in this post, there will be ample time to migrate to the new name-based destructuring. Our current timeline looks as follows:</p>



<ul>
<li>As of version 2.3.20, name-based destructuring is Experimental, meaning that you need a special compiler argument to use it.
<ul>
<li>Support in IntelliJ IDEA may be lacking, especially for migration.<br></li>
</ul>
</li>



<li>With version 2.5.0 (at the end of 2026), the feature will become Stable.
<ul>
<li>The new syntax will be available without additional configuration.</li>



<li>The compiler will start reporting migration hints, and IntelliJ IDEA will include inspections and quick-fixes to help with the process.</li>



<li>This stage roughly corresponds to <code>name-mismatch</code> in compiler arguments, although we may make some adjustments to reporting depending on user feedback.<br></li>
</ul>
</li>



<li>By version 2.7.0 (at the end of 2027), destructuring with parentheses will be name-based.
<ul>
<li>You can migrate to this stage earlier by using <code>complete</code> in compiler arguments.<br></li>
</ul>
</li>
</ul>



<p>This is a big change, and we don&#8217;t want to rush it. If at any point during 2027 it becomes clear that the ecosystem is not ready, we may postpone the change until another major version.</p>



<p>At <strong>no</strong> <strong>point are we</strong> <strong>deprecating</strong> the generation of component functions for <strong>data classes</strong>. Data classes will still generate the same bytecode – name-based destructuring is a feature for use sites. However, we plan to introduce multi-field value classes without component functions. That means that destructuring for value classes will only be name-based.</p>



<h2 class="wp-block-heading">References</h2>



<ul>
<li><a href="https://kotlinlang.org/docs/whatsnew2320.html#name-based-destructuring" target="_blank" rel="noreferrer noopener">Release notes for Kotlin 2.3.20</a>, the first version to offer name-based destructuring.</li>



<li><a href="https://github.com/Kotlin/KEEP/blob/main/proposals/KEEP-0438-name-based-destructuring.md" target="_blank" rel="noreferrer noopener">Design document</a> (KEEP) for the feature and corresponding <a href="https://github.com/Kotlin/KEEP/discussions/438" target="_blank" rel="noreferrer noopener">public discussion</a>.</li>
</ul>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Kotlin Ecosystem Mentorship Program: Results and Winners</title>
		<link>https://blog.jetbrains.com/kotlin/2026/05/kotlin-ecosystem-mentorship-program/</link>
		
		<dc:creator><![CDATA[Ksenia Shneyveys]]></dc:creator>
		<pubDate>Thu, 07 May 2026 14:45:45 +0000</pubDate>
		<featuredImage>https://blog.jetbrains.com/wp-content/uploads/2026/05/KT-social-BlogFeatured-1280x720-1-2.png</featuredImage>		<category><![CDATA[education]]></category>
		<category><![CDATA[news]]></category>
		<category><![CDATA[kotlin-foundation]]></category>
		<category><![CDATA[open-source]]></category>
		<guid isPermaLink="false">https://blog.jetbrains.com/?post_type=kotlin&#038;p=705949</guid>

					<description><![CDATA[In the Kotlin Ecosystem Mentorship Program pilot, mentors and mentees worked together on real Kotlin open-source projects to make their first meaningful community contribution. Four pairs successfully completed the two-month program, and one eligible pair was randomly selected in the prize drawing to receive the grand prize – a trip to KotlinConf 2026 in Munich! [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>In the <a href="https://blog.jetbrains.com/kotlin/2026/02/kotlin-ecosystem-mentorship/" target="_blank" rel="noreferrer noopener">Kotlin Ecosystem Mentorship Program</a> pilot, mentors and mentees worked together on real Kotlin open-source projects to make their first meaningful community contribution. Four pairs successfully completed the two-month program, and one eligible pair was randomly selected in the prize drawing to receive the grand prize – a trip to KotlinConf 2026 in Munich!</p>



<p>Congratulations to the winners:</p>



<ul>
<li>Mentor: Ruslan (<a href="https://github.com/yet300" target="_blank" rel="noreferrer noopener">yet300</a>)</li>



<li>Mentee: Clare Kinery (<a href="https://github.com/kinerycl" target="_blank" rel="noreferrer noopener">kinerycl</a>)</li>



<li>Project: <a href="https://github.com/permissionlesstech/bitchat-android" target="_blank" rel="noreferrer noopener">bitchat-android</a></li>
</ul>



<div class="buttons">
        <div class="buttons__row">
            <a class="ek-link jb-download-button" title="Join the KEMP Slack channel" href="https://slack-chats.kotlinlang.org/c/kotlin-ecosystem-mentorship-program" target="_blank" rel="noopener" data-test="blog-article-cta" data-cl="true">Join the KEMP Slack channel</a>
         </div>
</div>



<p>Ruslan’s and Clare’s collaboration focused on the Android client of BitChat, where Clare contributed UI and UX improvements that brought the Android experience closer to platform conventions and enhanced overall polish and accessibility.</p>



<p>Clare submitted and merged two pull requests: <a href="https://github.com/permissionlesstech/bitchat-android/pull/680" target="_blank" rel="noreferrer noopener">PR #680</a> and <a href="https://github.com/permissionlesstech/bitchat-android/pull/682" target="_blank" rel="noreferrer noopener">PR #682</a>. Her work improved BitChat’s voice note styling, camera and audio controls, dark/light theme support, visual hierarchy, and press interaction feedback.</p>



<p>Ruslan shared that Clare adapted quickly to the codebase and was able to work independently after the initial alignment. Their collaboration started with a kickoff call and continued asynchronously through chat and GitHub.</p>



<p>“Clare demonstrated strong problem-solving skills, attention to detail, and a solid understanding of UI/UX principles”, said Ruslan.</p>



<p>For Clare, the biggest takeaway was not just the code itself, but understanding the realities of open-source collaboration.</p>



<p>“As a developer who had never contributed to open source before, the biggest thing I learned was how open-source collaboration actually works. This program made it feel approachable and far less intimidating than I ever expected. I genuinely don’t think I would have taken that leap without it”, she commented.</p>



<h1 class="wp-block-heading">Other participants</h1>



<p>We received 80 mentee applications and 29 mentor applications – a clear sign of strong community interest in this kind of initiative, so we plan to continue the program.</p>



<p>For this pilot, we selected ten pairs. Eight remained active through the middle of the program, and four completed it successfully. These successful pairs contributed across different parts of the Kotlin ecosystem and Kotlin-related projects, including the Android UI, developer tooling, documentation, CI/CD, and multiplatform libraries.</p>



<p>We also want to recognize the other pairs who successfully completed the program:</p>



<p>Mentor: <a href="https://github.com/MohamedRejeb" target="_blank" rel="noreferrer noopener">Mohamed Rejeb</a></p>



<p>Mentee: <a href="https://github.com/deshkaustubh" target="_blank" rel="noreferrer noopener">Kaustubh Deshpande</a></p>



<p>Project: <a href="https://github.com/MohamedRejeb/Calf" target="_blank" rel="noreferrer noopener">Calf</a></p>



<p>Kaustubh contributed across several areas of the project, including dependency updates and CI/CD automation.</p>



<p>Mentor: <a href="https://github.com/Nek-12" target="_blank" rel="noreferrer noopener">Nikita Vaizin</a></p>



<p>Mentee: <a href="https://github.com/anshu7vyas" target="_blank" rel="noreferrer noopener">Anshul Vyas</a></p>



<p>Project: <a href="https://github.com/respawn-app/FlowMVI" target="_blank" rel="noreferrer noopener">FlowMVI</a></p>



<p>Anshul fixed a bug in the metrics module and contributed to the migration guide that helps developers move from MVVM to FlowMVI.</p>



<p>Mentor: <a href="https://github.com/tunjid" target="_blank" rel="noreferrer noopener">Adetunji Dahunsi</a></p>



<p>Mentee: <a href="https://github.com/HI-JIN2" target="_blank" rel="noreferrer noopener">Yu Jin</a></p>



<p>Project: <a href="https://github.com/tunjid/heron" target="_blank" rel="noreferrer noopener">heron</a></p>



<p>Yu Jin worked on improvements related to input handling and developer-facing issues, with a focus on making the project easier to use and maintain.</p>



<h1 class="wp-block-heading">What we learned</h1>



<p>Here are a few valuable takeaways from the participants’ feedback:</p>



<ul>
<li>Clear task scoping matters. Start with work that is concrete, manageable, and reviewable within the program timeline.</li>



<li>Asynchronous mentorship can work well, but only when expectations are explicit, and collaborators align early on communication style, task size, and review cycles.</li>



<li>The program creates value on both sides. Mentees gain confidence, workflow knowledge, and real experience. Mentors get fresh contributions, a chance to improve onboarding in their own projects, and a reminder that open source becomes healthier when maintainers make room for new contributors.</li>
</ul>



<p>Thank you to all mentors and mentees who joined the first Kotlin Ecosystem Mentorship cohort! We’re especially grateful to the maintainers who opened their projects to newcomers and invested time in guidance, reviews, and support.</p>



<p>Congratulations again to Ruslan and Clare, who were selected in the KotlinConf trip prize drawing, and to all four pairs who successfully completed the program.</p>



<p>To stay updated on future programs, <a href="https://slack-chats.kotlinlang.org/c/kotlin-ecosystem-mentorship-program" target="_blank" rel="noopener">join the KEMP Slack channel</a>. See you there!</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Kodee’s Kotlin Roundup: Golden Kodee Finalists, Kotlin 2.4.0-Beta2, and New Learning Resources</title>
		<link>https://blog.jetbrains.com/kotlin/2026/05/kodees-kotlin-roundup-golden-kodee-finalists-kotlin-2-4-0-beta2-and-new-learning-resources/</link>
		
		<dc:creator><![CDATA[Viliam Sedliak]]></dc:creator>
		<pubDate>Mon, 04 May 2026 07:56:26 +0000</pubDate>
		<featuredImage>https://blog.jetbrains.com/wp-content/uploads/2026/04/KT-social-BlogFeatured-1280x720-1-3.png</featuredImage>		<category><![CDATA[news]]></category>
		<category><![CDATA[kotlin-roundup]]></category>
		<guid isPermaLink="false">https://blog.jetbrains.com/?post_type=kotlin&#038;p=702208</guid>

					<description><![CDATA[Hi everyone! April brought exciting community news with the announcement of the Golden Kodee finalists, along with Kotlin and tooling releases, multiplatform progress, and fresh backend resources. I also came across the new Kotlin Professional Certificate on LinkedIn Learning, which is a great way to build your skills. And if you want something more playful, [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>Hi everyone! April brought exciting community news with the announcement of the Golden Kodee finalists, along with Kotlin and tooling releases, multiplatform progress, and fresh backend resources. I also came across the new Kotlin Professional Certificate on LinkedIn Learning, which is a great way to build your skills. And if you want something more playful, I found a fun way to practice coroutines. Here are the stories that stood out to me most.</p>


            <div class="newsletter">
                            <h2>Kodee-Approved Spotlight</h2>
                                                            <article class="newsletter__post">
                                                                                    <img style="width:100% !important; height:auto !important; max-width:100% !important;" decoding="async" class="newsletter__post-img" src="https://blog.jetbrains.com/wp-content/uploads/2026/04/meta-kotlinconf-img.png" alt="KotlinConf 2026 is almost here">
                                                                            <div class="newsletter__post-text">
                                                            <h3>KotlinConf 2026 is almost here</h3>
                                                        <p>KotlinConf 2026 is just around the corner, and the excitement is definitely building. On May 20–22, more than 2,000 Kotlin developers from around the world will gather in Munich to share ideas, learn from each other, and connect. If you cannot make it in person, you can still join online – the conference will be livestreamed on the <a href="https://www.youtube.com/c/Kotlin" target="_blank" rel="noopener noreferrer">Kotlin YouTube channel</a>. I’ll be there in Munich, but I definitely recommend tuning in to catch the key announcements and talks as they happen.</p>
                                                            <a href="https://kotlinconf.com/schedule/?day=2026-05-21" class="btn" target="_blank" rel="noopener">Join KotlinConf</a>
                                                    </div>
                    </article>
                                    <article class="newsletter__post">
                                                                                    <img style="width:100% !important; height:auto !important; max-width:100% !important;" decoding="async" class="newsletter__post-img" src="https://blog.jetbrains.com/wp-content/uploads/2026/04/awards-preview.png" alt="The Golden Kodee finalists have been officially named">
                                                                            <div class="newsletter__post-text">
                                                            <h3>Golden Kodee finalists</h3>
                                                        <p>The Golden Kodee finalists have been announced! The top three nominees in each category will be invited to KotlinConf in Munich, where one winner in each category will receive a Golden Kodee award. It is a great way to celebrate people who share knowledge, organize events, inspire others, and help grow the Kotlin community.</p>
                                                            <a href="https://kotlinconf.com/awards" class="btn" target="_blank" rel="noopener">Meet the finalists</a>
                                                    </div>
                    </article>
                                    <article class="newsletter__post">
                                                                                    <img style="width:100% !important; height:auto !important; max-width:100% !important;" decoding="async" class="newsletter__post-img" src="https://blog.jetbrains.com/wp-content/uploads/2026/04/KT-social-BlogFeatured-1280x720-1-2.png" alt="Kotlin release updates">
                                                                            <div class="newsletter__post-text">
                                                            <h3>Kotlin release updates</h3>
                                                        <p>April brought two Kotlin release updates. Kotlin 2.4.0-Beta2 offers an early look at what’s coming next across the language, the standard library, the JVM, Kotlin/Native, and the compiler. <a href="https://github.com/JetBrains/kotlin/releases/tag/v2.3.21" target="_blank" rel="noopener">Kotlin 2.3.21</a> focuses on performance improvements and bug fixes for the 2.3 release.</p>
                                                            <a href="https://kotlinlang.org/docs/whatsnew-eap.html" class="btn" target="_blank" rel="noopener">See what’s new in Kotlin 2.4.0-Beta2</a>
                                                    </div>
                    </article>
                                    <article class="newsletter__post">
                                                                                    <img style="width:100% !important; height:auto !important; max-width:100% !important;" decoding="async" class="newsletter__post-img" src="https://blog.jetbrains.com/wp-content/uploads/2026/04/IntelliJ-IDEA-2026.1.png" alt="IntelliJ IDEA 2026.1">
                                                                            <div class="newsletter__post-text">
                                                            <h3>IntelliJ IDEA 2026.1</h3>
                                                        <p>IntelliJ IDEA 2026.1 brings improvements that many Kotlin developers will notice in their daily work. From general performance enhancements to better language and framework support, this release is a strong ecosystem update and an important part of the Kotlin developer experience.</p>
                                                            <a href="https://www.jetbrains.com/idea/whatsnew/" class="btn" target="_blank" rel="noopener">Explore the release</a>
                                                    </div>
                    </article>
                                    <article class="newsletter__post">
                                                                                    <img style="width:100% !important; height:auto !important; max-width:100% !important;" decoding="async" class="newsletter__post-img" src="https://blog.jetbrains.com/wp-content/uploads/2026/04/KM-social-BlogFeatured-1280x720-1.png" alt="Helping Decision-Makers Say Yes to Kotlin Multiplatform (KMP)">
                                                                            <div class="newsletter__post-text">
                                                            <h3>Helping Decision-Makers Say Yes to Kotlin Multiplatform (KMP)</h3>
                                                        <p>Adopting Kotlin Multiplatform is easier when the business value is clear. I found this guest post from Touchlab useful because it explains how KMP can improve delivery speed, reduce risk, and support long-term product strategy.</p>
                                                            <a href="https://blog.jetbrains.com/kotlin/2026/04/helping-decision-makers-say-yes-to-kmp/" class="btn" target="_blank">Read the post</a>
                                                    </div>
                    </article>
                                    <article class="newsletter__post">
                                                                                    <img style="width:100% !important; height:auto !important; max-width:100% !important;" decoding="async" class="newsletter__post-img" src="https://blog.jetbrains.com/wp-content/uploads/2026/03/Blog-featured-1.png" alt="KotlinConf’26 Speakers: In Conversation With Lena Reinhard">
                                                                            <div class="newsletter__post-text">
                                                            <h3>KotlinConf’26 Speakers: In Conversation With Lena Reinhard</h3>
                                                        <p>Ahead of KotlinConf’26, I found this interview with Lena Reinhard interesting because it explores what it means to build a career in tech today, especially when old promises no longer feel certain. It covers leadership, uncertainty, the productivity debate in the age of AI, and the human side of our industry.</p>
                                                            <a href="https://blog.jetbrains.com/kotlin/2026/04/kotlinconf-26-speakers-in-conversation-with-lena-reinhard/" class="btn" target="_blank">Read the interview</a>
                                                    </div>
                    </article>
                                    <article class="newsletter__post">
                                                                                    <img style="width:100% !important; height:auto !important; max-width:100% !important;" decoding="async" class="newsletter__post-img" src="https://blog.jetbrains.com/wp-content/uploads/2026/04/KT-social-BlogFeatured-1280x720-1-1.png" alt="Kotlin Professional Certificate by JetBrains – Now on LinkedIn Learning">
                                                                            <div class="newsletter__post-text">
                                                            <h3>Kotlin Professional Certificate by JetBrains on LinkedIn Learning</h3>
                                                        <p>Looking to build your Kotlin skills? The Kotlin Professional Certificate by JetBrains is now available on LinkedIn Learning. In less than 12 hours, you can go through four courses, pass the final exam, and earn a certificate you can share on your LinkedIn profile.</p>
                                                            <a href="https://kotl.in/kotlin-professional-certificate" class="btn" target="_blank" rel="noopener">Start learning</a>
                                                    </div>
                    </article>
                                    <article class="newsletter__post">
                                                                                    <img style="width:100% !important; height:auto !important; max-width:100% !important;" decoding="async" class="newsletter__post-img" src="https://blog.jetbrains.com/wp-content/uploads/2026/04/KG-social-BlogFeatured-1280x720-1-3.png" alt="Koog updates for the JVM ecosystem">
                                                                            <div class="newsletter__post-text">
                                                            <h3>Koog updates for the JVM ecosystem</h3>
                                                        <p>Koog had a busy month, and I found these two updates useful for JVM developers. First, Koog now offers an idiomatic Java API, making it easier for Java teams to build agent workflows. Second, <a href="https://blog.jetbrains.com/ai/2026/04/introducing-koog-integration-for-spring-ai-smarter-orchestration-for-your-agents/" target="_blank">Koog integrates with Spring AI</a>, helping Kotlin and Spring-based projects use Koog in a familiar setup.</p>
                                                            <a href="https://blog.jetbrains.com/ai/2026/03/koog-comes-to-java/" class="btn" target="_blank">Explore Koog’s Java API</a>
                                                    </div>
                    </article>
                                    <article class="newsletter__post">
                                                                                    <img style="width:100% !important; height:auto !important; max-width:100% !important;" decoding="async" class="newsletter__post-img" src="https://blog.jetbrains.com/wp-content/uploads/2026/04/sample-wasi-http-kotlin.webp" alt="Kotlin + WebAssembly: WASI HTTP sample">
                                                                            <div class="newsletter__post-text">
                                                            <h3>Kotlin + WebAssembly: `wasi:http` sample</h3>
                                                        <p>I like this sample because it shows how to run a minimal HTTP server with Kotlin and WebAssembly using `wasi:http`. It highlights practical progress in Kotlin’s WebAssembly story and future backend possibilities.</p>
                                                            <a href="https://github.com/Kotlin/sample-wasi-http-kotlin/" class="btn" target="_blank" rel="noopener">See the sample</a>
                                                    </div>
                    </article>
                                    <article class="newsletter__post">
                                                                                    <img style="width:100% !important; height:auto !important; max-width:100% !important;" decoding="async" class="newsletter__post-img" src="https://blog.jetbrains.com/wp-content/uploads/2026/03/AMP-social-BlogSocialShare-1280x720-1.png" alt="">
                                                                            <div class="newsletter__post-text">
                                                            <h3>Amper 0.10.0</h3>
                                                        <p>Amper keeps evolving quickly, and this update brings several useful improvements. Version 0.10.0 introduces automatic JDK provisioning, a Maven-to-Amper converter, support for custom Kotlin compiler plugins, and an improved IDE experience.</p>
                                                            <a href="https://blog.jetbrains.com/amper/2026/03/amper-0-10/" class="btn" target="_blank">See what’s new in Amper 0.10.0</a>
                                                    </div>
                    </article>
                                    <article class="newsletter__post">
                                                                                    <img style="width:100% !important; height:auto !important; max-width:100% !important;" decoding="async" class="newsletter__post-img" src="https://blog.jetbrains.com/wp-content/uploads/2026/03/IJ-social-BlogFeatured-1280x720-1-4.png" alt="">
                                                                            <div class="newsletter__post-text">
                                                            <h3>Spring Data JPA with Kotlin</h3>
                                                        <p>I found this practical post worthwhile because it shows how Spring Data JPA works with Kotlin across entities, repositories, custom queries, and DTOs. It is useful for teams already using Spring.</p>
                                                            <a href="https://blog.jetbrains.com/idea/2026/03/using-spring-data-jpa-with-kotlin" class="btn" target="_blank">Read the post</a>
                                                    </div>
                    </article>
                                    <article class="newsletter__post">
                                                                                    <img style="width:100% !important; height:auto !important; max-width:100% !important;" decoding="async" class="newsletter__post-img" src="https://blog.jetbrains.com/wp-content/uploads/2026/04/spring.webp" alt="">
                                                                            <div class="newsletter__post-text">
                                                            <h3>Spring guide: Uploading Files</h3>
                                                        <p>This guide is helpful if you want to compare Kotlin and Java side by side. It makes it easier to see how Kotlin fits into existing backend workflows.</p>
                                                            <a href="https://spring.io/guides/gs/uploading-files" class="btn" target="_blank" rel="noopener">View the guide</a>
                                                    </div>
                    </article>
                                    <article class="newsletter__post">
                                                                                    <img style="width:100% !important; height:auto !important; max-width:100% !important;" decoding="async" class="newsletter__post-img" src="https://blog.jetbrains.com/wp-content/uploads/2026/04/Coroutines-Race.webp" alt="">
                                                                            <div class="newsletter__post-text">
                                                            <h3>Coroutines Guesser Game</h3>
                                                        <p>Created by kt.academy, Coroutines Races Guesser Game offers an interactive approach to learning coroutine behavior by predicting what happens and when. It is a fun way to test your intuition.</p>
                                                            <a href="https://game.kt.academy/?game=coroutines" class="btn" target="_blank" rel="noopener">Play the game</a>
                                                    </div>
                    </article>
                                    </div>
    


<h2 class="wp-block-heading">Where you can learn more</h2>



<ul>
<li><a href="https://kotlinconf.com/workshops/" target="_blank" rel="noreferrer noopener">Workshops – KotlinConf 2026, May 20–22, Munich</a></li>



<li><a href="https://blog.jetbrains.com/ai/2026/04/using-acp-deep-agents-to-demystify-modern-software-engineering-2/" target="_blank" rel="noreferrer noopener">Introducing the Skill Manager and Skill Repository</a></li>



<li><a href="https://blog.jetbrains.com/ai/2026/04/give-ai-something-worth-amplifying-three-priorities-for-technical-leaders/" target="_blank" rel="noreferrer noopener">Give AI Something Worth Amplifying: Three Priorities for Technical Leaders</a></li>



<li><a href="https://blog.jetbrains.com/ai/2026/04/using-acp-deep-agents-to-demystify-modern-software-engineering/" target="_blank" rel="noreferrer noopener">Using ACP + Deep Agents to Demystify Modern Software Engineering</a></li>



<li><a href="https://gist.github.com/nomisRev/69d303615d967a1d35b74fb0f4df3b69" target="_blank" rel="noopener">Prototype LLM calls on the JVM using Kotlin Notebook and LangChain4j in IntelliJ IDEA</a></li>



<li><a href="https://blog.jetbrains.com/kotlin/2026/04/next-level-observability-with-opentelemetry/" target="_blank" rel="noreferrer noopener">Next-Level Observability with OpenTelemetry</a></li>



<li><a href="https://www.jetbrains.com/help/exposed/home.html" target="_blank" rel="noreferrer noopener">Exposed now supports array types out of the box for PostgreSQL</a></li>



<li><a href="https://blog.jetbrains.com/idea/2026/04/using-spring-data-jdbc-with-kotlin/" target="_blank" rel="noreferrer noopener">Using Spring Data JDBC With Kotlin</a></li>



<li><a href="https://ktor.io/changelog/3.4/" target="_blank" rel="noreferrer noopener">Ktor 3.4.3 has been released</a></li>



<li><a href="https://github.com/Kotlin/dokka/releases/tag/v2.2.0" target="_blank" rel="noopener">Dokka 2.2.0 is o</a><a href="https://github.com/Kotlin/dokka/releases/tag/v2.2.0" target="_blank" rel="noreferrer noopener">u</a><a href="https://github.com/Kotlin/dokka/releases/tag/v2.2.0" target="_blank" rel="noopener">t</a></li>
</ul>



<h2 class="wp-block-heading">YouTube highlights</h2>



<ul>
<li><a href="https://www.youtube.com/watch?v=nUzcVw5Kv20&amp;t=218s" target="_blank" rel="noreferrer noopener">How KMP Helped a 378-Year-Old Company</a></li>



<li><a href="https://www.youtube.com/watch?v=VJU0rygO03A" target="_blank" rel="noreferrer noopener">How Uber Uses AI to Move from Java to Kotlin</a></li>



<li><a href="https://youtu.be/5k-jh24CDZw?si=mmh297lrOkftPvae" target="_blank" rel="noreferrer noopener">Exposed 1.0 and Beyond | Talking Kotlin</a></li>



<li><a href="https://youtu.be/RZgd8N429bQ?si=6xwzAdWBN8eMbOzs" target="_blank" rel="noreferrer noopener">Best KMP libraries with Klibs.io</a></li>
</ul>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
