<?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/"
	>

<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>Fri, 03 Jul 2026 09:59:29 +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>In Conversation With the Golden Kodee Winners</title>
		<link>https://blog.jetbrains.com/kotlin/2026/07/in-conversation-with-the-golden-kodee-winners/</link>
		
		<dc:creator><![CDATA[Jelena Ilic]]></dc:creator>
		<pubDate>Fri, 03 Jul 2026 09:57:13 +0000</pubDate>
		<featuredImage>https://blog.jetbrains.com/wp-content/uploads/2026/07/Blog-Featured-Blog-1280x720-1.png</featuredImage>		<product ><![CDATA[kotlin]]></product>
		<category><![CDATA[kotlin]]></category>
		<category><![CDATA[kotlinconf]]></category>
		<category><![CDATA[golden-kodee]]></category>
		<category><![CDATA[kotlin-conf-2026]]></category>
		<guid isPermaLink="false">https://blog.jetbrains.com/?post_type=kotlin&#038;p=717614</guid>

					<description><![CDATA[KotlinConf 2026 marked a milestone for the Kotlin community: the very first Golden Kodee Community Awards. The awards recognize the individuals and communities whose passion and dedication help the Kotlin ecosystem thrive. From creating educational content and building engaging online communities to organizing events, fostering connections, and driving positive societal impact, the Golden Kodee Awards [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>KotlinConf 2026 marked a milestone for the Kotlin community: the very first <a href="https://photos.google.com/share/AF1QipN07OP-BZGGOe6F9IKK1oHMtcNm_5exh73pWZZmrtOf-QIILbIMFR58MZyu4dWDdg?key=QjltWVVHaHdrWGxZcDF1M1MtbjE3WlNnQkM0UGJR" data-type="link" data-id="https://photos.google.com/share/AF1QipN07OP-BZGGOe6F9IKK1oHMtcNm_5exh73pWZZmrtOf-QIILbIMFR58MZyu4dWDdg?key=QjltWVVHaHdrWGxZcDF1M1MtbjE3WlNnQkM0UGJR" target="_blank" rel="noopener">Golden Kodee Community Awards</a>. The awards recognize the individuals and communities whose passion and dedication help the Kotlin ecosystem thrive.</p>



<p>From creating educational content and building engaging online communities to organizing events, fostering connections, and driving positive societal impact, the Golden Kodee Awards shine a spotlight on the many ways people contribute to Kotlin. Open to active members of the Kotlin community who have made notable contributions over the past two years, the awards honor those who share knowledge, mentor others, and inspire developers around the world.</p>



<figure class="wp-block-image size-full"><img style="width:100% !important; height:auto !important; max-width:100% !important;" fetchpriority="high" decoding="async" src="https://blog.jetbrains.com/wp-content/uploads/2026/06/nik-v.de-1130124.jpg" alt="" class="wp-image-715267"/></figure>



<h3 class="wp-block-heading">Getting to know the Golden Kodee winners</h3>



<p>This year’s winners represent the diversity and strength of the Kotlin community: <a href="https://github.com/matheuslf" target="_blank" rel="noopener">Matheus Leandro Ferreira</a> (Education), <a href="https://github.com/skydoves" target="_blank" rel="noopener">Jaewoong Eum</a> (Online Presence), <a href="https://github.com/nicole-terc" target="_blank" rel="noopener">Nicole Terc</a> (Creativity), <a href="https://github.com/eevajonnapanula" target="_blank" rel="noopener">Eeva-Jonna Panula</a> (Positive Societal Impact), and <a href="https://github.com/Liu-Yinlong" target="_blank" rel="noopener">Yinlong Liu</a> (In-Person Presence).</p>



<p>In the days following KotlinConf, we caught up with each of the winners to learn more about their projects and initiatives.</p>



<h3 class="wp-block-heading">Which of your projects do you think stood out the most in helping you win a Golden Kodee?</h3>



<p><strong>Matheus Leandro Ferreira</strong>: Since my category is focused on education, I believe my experience teaching at the university and working with Kotlin over the years may have been an important factor. I’ve been teaching programming and mobile development with Kotlin for quite a long time, while also creating educational content for the developer community outside the classroom.</p>



<p><strong>Jaewoong Eum</strong>: I&#8217;ve contributed to the open-source community for over nine years, so I believe most of my open-source projects have helped me win this award, such as <a href="https://github.com/skydoves/Balloon" target="_blank" rel="noopener">Balloon</a>, <a href="https://github.com/skydoves/landscapist" target="_blank" rel="noopener">landscapist</a>, and <a href="https://github.com/skydoves/compose-stability-analyzer" target="_blank" rel="noopener">compose-stability-analyzer</a>. But also, I&#8217;ve written lots of technical content on my personal <a href="https://doveletter.dev/articles" target="_blank" rel="noopener">blog</a>, <a href="https://doveletter.dev/" target="_blank" rel="noopener">newsletters</a>, and recently, I&#8217;ve published several <a href="https://doveletter.dev/books" target="_blank" rel="noopener">books</a>, so all these activities and projects helped me to win this award.</p>



<p><strong>Nicole Terc</strong>: Composable Sheep talks.</p>



<p><strong>Eeva-Jonna Panula</strong>: I think there might not have been one project that stood out the most; it was probably the whole body of work I’ve done in content creation on accessibility, disability, and inclusion.</p>


    <div class="about-author ">
        <div class="about-author__box">
            <div class="row">
                                                            <div class="about-author__box-img">
                            <img style="width:100% !important; height:auto !important; max-width:100% !important;" decoding="async" src="https://blog.jetbrains.com/wp-content/uploads/2026/06/portrait-Yinlong.jpg" alt="" loading="lazy">
                        </div>
                                        <div class="about-author__box-text">
                                                    <h4>Yinlong Liu</h4>
                                                <blockquote><p><em><span style="font-weight: 400;">As one of the earliest developers to adopt KMP in China, I established a KMP WeChat community to connect developers, and I have been glad to see an increasing number of companies successfully adopt KMP.</span></em></p></blockquote>
                    </div>
                            </div>
        </div>
    </div>



<blockquote class="wp-block-quote is-style-default has-white-background-color has-background is-layout-flow wp-block-quote-is-layout-flow" style="font-style:normal;font-weight:500">
<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p></p>
</blockquote>
</blockquote>



<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/07/Yinlong-win-1.jpg" alt="" class="wp-image-719396"/></figure>



<h3 class="wp-block-heading">What did winning a Golden Kodee feel like?</h3>



<p><strong>Matheus</strong>: It meant a lot to me. In many ways, it felt like a validation of my long journey in education. I’ve been working professionally in technology for more than 20 years and teaching for 13 years. It’s honestly very difficult to describe what I felt when I won. It was incredibly gratifying. Without a doubt, it was the biggest award of my career.</p>



<p><strong>Jaewoong</strong>: I’m truly honored to have received the Golden Kodee Award. I’ve received so much appreciation and encouragement from the community about this win, and it has motivated me. I felt so many positive vibes from everyone throughout the experience. To be honest, even though I’ve been consistently contributing to the community over the years, I don’t often get an opportunity to directly hear words of appreciation from people. But through this award, I was able to feel that gratitude in a very real way, and it genuinely made my heart beat faster. It reminded me again why I love being part of this community and why I want to keep contributing.</p>



<p><strong>Nicole</strong>: It was really surprising at first, then I felt really humbled and seen. We don&#8217;t get enough awards in the community, so having all the hard work recognized was a welcome change.&nbsp;</p>



<p><strong>Eeva-Jonna</strong>: Awesome. The reason I do what I do is that I enjoy it and want to share knowledge and help developers create more inclusive apps. In a sense, it’s a niche topic that doesn’t get much attention compared to many other topics, so being recognized with a Golden Kodee truly meant a lot.​</p>



<p><strong>Yinlong</strong>: It feels truly joyful, honorable, and exciting. Having been a practitioner and advocate of KMP for about six years, I have integrated Kotlin and KMP into my work, life, and even my faith. I have grown my own influence through KMP. I also have a special connection to the color purple: it is not only the theme color of Kotlin but also the color of my favorite NBA team, the LA Lakers.</p>


    <div class="about-author ">
        <div class="about-author__box">
            <div class="row">
                                                            <div class="about-author__box-img">
                            <img style="width:100% !important; height:auto !important; max-width:100% !important;" decoding="async" src="https://blog.jetbrains.com/wp-content/uploads/2026/06/profile-Jaewoong.jpg" alt="" loading="lazy">
                        </div>
                                        <div class="about-author__box-text">
                                                    <h4>Jaewoong Eum</h4>
                                                <blockquote><p><em><span style="font-weight: 400;">I’ve received so much appreciation and encouragement from the community about this win, and it has motivated me.</span></em></p></blockquote>
                    </div>
                            </div>
        </div>
    </div>



<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/06/jaewoong-win.jpg" alt="" class="wp-image-714855"/></figure>



<h3 class="wp-block-heading">Can you take us back to the beginning: How did you first discover Kotlin? What initially attracted you to it, and what made you stick with it?</h3>



<p><strong>Matheus</strong>: I started using Kotlin practically from the moment it was introduced for mobile development. At that time, all of my company’s applications were built with Java. Gradually, we migrated all of them to Kotlin, without exception. I also updated the curriculum at the university where I teach, replacing the applications and teaching materials that were previously developed in Java with Kotlin. The language brings a huge range of opportunities. It’s less verbose, constantly evolving, and keeps up with the trends of the professional market. These days, using Kotlin is essential.</p>



<p><strong>Jaewoong</strong>: The positive cycle of community keeps going around. Back in 2018, I first discovered Kotlin when well-known people in the open-source community began sharing their experiences using it for Android development. I heard great feedback about its impact on developer productivity, which led me to try it for the first time. At the time, I started using Kotlin because of its Java interoperability and various convenient features. But the more I used it, the more I began to see its true value. Today, Kotlin is undoubtedly my top-choice programming language.</p>



<p><strong>Nicole</strong>: My story is similar to many: I was a Java Android developer and adopted it when it got announced as an official Android language. We had an early adopter on our team at the time, so the transition was not hard at all. I stuck with it because of all the goodies it brought into Android: less verbosity, null safety, no use of semicolons, coroutines, etc.</p>



<p><strong>Eeva-Jonna</strong>: I was a web developer at a company that didn’t have much web development work in Finland at the time. I was also an accessibility specialist who had just conducted accessibility testing on our Android app, realizing that the situation wasn’t optimal. I spoke with the Android developers and realized no one would have time to fix the issues I found, so I decided to do it myself. This was pretty much what got me started with Kotlin – becoming an Android developer. As mentioned, I come from a JavaScript (okay, okay, TypeScript) background. When I started working on the Android app and Kotlin, I had these constant moments where I realized that a language can actually support so many things, instead of forcing you to build the functions from scratch every single time.</p>



<p><strong>Yinlong</strong>: We started around 2020 with Kotlin 1.3.72/1.4.0. KMP’s option for shared business logic code is what initially attracted us. We have apps that cover the Android, Windows (Java-based), and iOS platforms, which require high performance and the handling of heavy business logic, all while having a team predominantly made up of Android developers. KMP perfectly matched our requirements for cross-platform technology. As it has become more stable and we’ve gained experience, we have been gradually expanding the scope of our KMP module.</p>


    <div class="about-author ">
        <div class="about-author__box">
            <div class="row">
                                                            <div class="about-author__box-img">
                            <img style="width:100% !important; height:auto !important; max-width:100% !important;" decoding="async" src="https://blog.jetbrains.com/wp-content/uploads/2026/06/portrait-matheus.jpeg" alt="" loading="lazy">
                        </div>
                                        <div class="about-author__box-text">
                                                    <h4>Matheus Leandro Ferreira</h4>
                                                <blockquote><p><em><span style="font-weight: 400;">The language brings a huge range of opportunities. It’s less verbose, constantly evolving, and keeps up with the trends of the professional market. These days, using Kotlin is essential.</span></em></p></blockquote>
                    </div>
                            </div>
        </div>
    </div>



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



<h3 class="wp-block-heading">What do you love most about working with Kotlin today?</h3>


    <div class="about-author ">
        <div class="about-author__box">
            <div class="row">
                                                            <div class="about-author__box-img">
                            <img style="width:100% !important; height:auto !important; max-width:100% !important;" decoding="async" src="https://blog.jetbrains.com/wp-content/uploads/2026/06/portrait-Eeva.png" alt="" loading="lazy">
                        </div>
                                        <div class="about-author__box-text">
                                                    <h4>Eeva-Jonna Panula</h4>
                                                <blockquote><p><em><span style="font-weight: 400;">Being able to build once and distribute to different platforms is great, but what I especially enjoy is how KMP handles native implementations. </span></em></p></blockquote>
                    </div>
                            </div>
        </div>
    </div>



<p><strong>Matheus</strong>: My passion has always been backend development, so what I enjoy the most today is the combination of Kotlin with Spring Boot. It’s something truly fantastic. At the university, I teach the “Mobile Programming” course, and over time, I’ve also been enjoying working more and more with mobile frontend development.</p>



<p><strong>Jaewoong</strong>: I first started using Kotlin because it was 100% compatible with the JVM ecosystem. Over time, it became my primary programming language. What I love most is that Kotlin has grown far beyond the JVM and Android. Today, it can be used actively across many multiplatform development scenarios, which makes it even more powerful and practical. Another thing I really appreciate about Kotlin is its ecosystem. The Kotlin Foundation is deeply committed to maintaining and growing the Kotlin ecosystem. Through initiatives like the Kotlin Evolution and Enhancement Process, they actively communicate with the community and listen closely to user feedback to improve the language. I think this is one of the biggest differences that sets Kotlin apart from many other language ecosystems. I’m also fascinated by the fact that Kotlin enables more advanced, low-level work through tools like Kotlin compiler plugins and KSP. These open the door for using the language at a much higher level, and they’re a big part of what makes Kotlin so compelling to me.</p>



<p><strong>Nicole</strong>: Coroutines. The concurrency handling in Kotlin is pretty good.</p>



<p>Second place is KMP. I really appreciate the potential of porting Android apps to many other platforms.</p>



<p><strong>Eeva-Jonna</strong>: From a language perspective, it&#8217;s the APIs and the way you can write code intuitively. Extension functions and collection APIs make my life so much easier, and even after years of happily being away from the JS world, I still appreciate these features every day. I also love working with Kotlin Multiplatform. Being able to build once and distribute to different platforms is great, but what I especially enjoy is how KMP handles native implementations. If there&#8217;s something I can&#8217;t do in Kotlin, I can just drop down to native code to get it done. That flexibility is really powerful.</p>



<p><strong>Yinlong</strong>: I love ❤️ Kotlin. I just love everything about it.</p>



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



<h3 class="wp-block-heading">What are you currently building or experimenting with in Kotlin?</h3>



<p><strong>Matheus</strong>: Currently, at the company, I’ve been exploring the backend side a lot with Ktor (and also Spring Boot with Kotlin). I’m building a REST API for our BI platform. The idea is to use Kotlin to improve performance, concurrency with Coroutines, and the overall expressiveness of the code compared to our Java legacy systems. The experience with the clean syntax and null safety in a microservices ecosystem has been fantastic. At the university, I’m focused on Kotlin Multiplatform (KMP). I’ve been experimenting with sharing business logic between Android and iOS in a project with my students. It’s amazing to see how much the technology has matured, allowing us to reuse almost the entire data and architecture layers without losing the native experience of each platform. I’m also keeping a close eye on Compose Multiplatform for UI development.</p>



<p><strong>Jaewoong</strong>: I work on a variety of projects with Kotlin, like <a href="https://github.com/skydoves/compose-stability-analyzer" target="_blank" rel="noopener">Compose Stability Analyzer</a>, but the one I’ve been focusing on most recently is <a href="https://hotswan.dev/" target="_blank" rel="noopener">Compose HotSwan</a>. HotSwan is a Hot Reload system for real Android devices. When you make changes in the editor, it applies those changes to the currently running app in under a second and immediately shows the result. Some parts are implemented at a lower level, including C++, but most of the system is written in Kotlin across multiple layers, including the Kotlin Compiler Plugin, Gradle plugin, and IntelliJ IDE plugin. Building a Hot Reload system itself requires a very complex workflow, but Kotlin’s broad language and tooling support made the process much more approachable. HotSwan is still in the early stages of adoption, and it is one of the first Hot Reload solutions for Android and Jetpack Compose. Looking ahead, I see it becoming a next-generation mobile client development solution, especially when combined with AI to create a much faster UI development feedback loop.</p>



<p><strong>Nicole</strong>: I&#8217;m officially working with Kotlin as a professional Android engineer. In my personal time, I&#8217;m building a private boardgame-related app and playing with new ideas with my Filament project.</p>



<p><strong>Eeva-Jonna</strong>: I’m building an app with Kotlin Multiplatform (currently for Android and iOS). It’s a planner app for women and anyone with cycles, combining cycle tracking, calendars, notes, tasks, and more into one app. Currently, we’re collecting waitlisters and have started testing rounds. I’ve enjoyed building the app with Kotlin Multiplatform. Everything is mostly written in Kotlin, but some things have required a native implementation, which has been easy to implement.</p>



<p><strong>Yinlong</strong>: Nothing at the moment.</p>



<h3 class="wp-block-heading">What advice would you give to developers who want to become more active in the Kotlin community?</h3>


    <div class="about-author ">
        <div class="about-author__box">
            <div class="row">
                                                            <div class="about-author__box-img">
                            <img style="width:100% !important; height:auto !important; max-width:100% !important;" decoding="async" src="https://blog.jetbrains.com/wp-content/uploads/2026/06/portrait-Nicole.avif" alt="" loading="lazy">
                        </div>
                                        <div class="about-author__box-text">
                                                    <h4>Nicole Terc</h4>
                                                <blockquote><p><em><span style="font-weight: 400;">In my opinion, the point of participating in a community should be to share and grow together, not to be famous.</span></em></p></blockquote>
                    </div>
                            </div>
        </div>
    </div>



<p><strong>Matheus</strong>: The best advice I could give is: learn in public. You don’t need to be an expert in the ecosystem to contribute. If you spent two hours struggling to configure Coroutines or to get a Kotlin Multiplatform (KMP) project running and finally figured it out, document it. Write a short article on Dev.to, make a LinkedIn post, or create a GitHub repository explaining the solution. What may seem simple to you could be a lifesaver for another developer.</p>



<p><strong>Jaewoong</strong>: The community is always open to everyone, but it can take time to truly understand what “community” means. Contributing to a community is not something you do because you expect something in return. It is more about sharing what you have learned, helping others who are facing similar challenges, and slowly becoming part of a positive cycle where everyone learns from each other. My advice is to start small. You don’t need to be a famous speaker or an experienced open-source maintainer from day one. You can write about something you just learned, answer a question, report an issue, improve documentation, or share a small Kotlin example that helped you. Over time, those small contributions build trust, relationships, and confidence. And most importantly, they remind you that the Kotlin community is not just about the language itself, but about the people who keep learning, building, and helping each other grow.</p>



<p><strong>Nicole</strong>: Reach out to local meetups. Be proactive with socializing and sharing what you are doing without worrying about the clout. In my opinion, the point of participating in a community should be to share and grow together, not to be famous.</p>



<p><strong>Eeva-Jonna</strong>: I would say that the most important thing is to start. Whatever it is you want to do, start doing it. If you want to do public speaking, meetups are usually looking for speakers, and many conferences support first-time speakers. If you want to start creating content, just start. You won’t get it perfect the first time anyway, so better start practicing sooner rather than later. Also, find people who can help you. Reach out to others who are doing what you want to do and ask if they can help. Sometimes the answer might be “no” because, e.g. they don&#8217;t have enough time, but many times you get a “yes” and some help.&nbsp;</p>



<p><strong>Yinlong</strong>: My advice is to use Kotlin to implement your ideas and actively communicate and share your findings with others.</p>



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



<h3 class="wp-block-heading">Where are you keeping your Golden Kodee?</h3>



<figure class="wp-block-image size-full"><img style="width:100% !important; height:auto !important; max-width:100% !important;" loading="lazy" decoding="async" src="https://blog.jetbrains.com/wp-content/uploads/2026/06/Golden-Kodee-at-home-.jpg" alt="" class="wp-image-714595"/></figure>



<p>The stories of this year’s Golden Kodee winners show that there are many ways to make a meaningful impact on the Kotlin community. We hope their journeys and advice have inspired you as much as they have inspired us.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Kotlin Comes to BlueJ</title>
		<link>https://blog.jetbrains.com/kotlin/2026/07/kotlin-comes-to-bluej/</link>
		
		<dc:creator><![CDATA[Ksenia Shneyveys]]></dc:creator>
		<pubDate>Wed, 01 Jul 2026 09:50:23 +0000</pubDate>
		<featuredImage>https://blog.jetbrains.com/wp-content/uploads/2026/06/Kotlin-Release-Blog-Featured-Blog-1280x720-1.png</featuredImage>		<product ><![CDATA[kotlin]]></product>
		<category><![CDATA[education]]></category>
		<category><![CDATA[news]]></category>
		<category><![CDATA[beginners]]></category>
		<category><![CDATA[object-oriented-programming]]></category>
		<guid isPermaLink="false">https://blog.jetbrains.com/?post_type=kotlin&#038;p=717450</guid>

					<description><![CDATA[Kotlin support is now available in BlueJ, one of the most established environments for teaching introductory object-oriented programming (OOP). This work is the result of a collaboration between JetBrains and the BlueJ team at King’s College London, including Professor Michael Kölling and Dr. Neil Brown, whose work has shaped programming education for decades. Download BlueJ [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>Kotlin support is now available in BlueJ, one of the most established environments for teaching introductory object-oriented programming (OOP). This work is the result of a collaboration between JetBrains and the BlueJ team at King’s College London, including Professor Michael Kölling and Dr. Neil Brown, whose work has shaped programming education for decades.</p>



<div class="buttons">
        <div class="buttons__row">
            <a class="ek-link jb-download-button" title="Download BlueJ" href="https://bluej.org/?utm_source=blog&#038;utm_medium=referral&#038;utm_campaign=launch" target="_blank" rel="noopener" data-test="blog-article-cta" data-cl="true">Download BlueJ</a>
         </div>
</div>



<p>For many students, programming begins in the classroom, where a teacher introduces basic concepts for the first time. Having reached more than 25 million unique learners worldwide, BlueJ is one of the most widely used environments for beginners. Its visual class diagram, object bench, and direct object interaction help students see programs as systems of objects they can create, inspect, and command.</p>



<p>When learning to program, students increasingly need to read, evaluate, debug, and maintain code, including code generated by AI. BlueJ helps beginners build the mental models that let them understand and trust the programs they work with by making program behavior visible and interactive – they can create objects, call methods, and observe how state changes. With Kotlin support, they can do this with less boilerplate and fewer syntactic distractions.</p>


    <div class="blockquote">
                    <blockquote><p>“BlueJ remains an excellent tool for developing an object-oriented mindset, but Kotlin makes it even better by allowing students to focus on core concepts rather than syntax overhead.”</p></blockquote>
            <div class="blockquote__author">
                                <div class="blockquote__author-info">
                                            <strong class="blockquote__author-title">Thomas Karp</strong>
                                                                <span class="blockquote__author-subtitle">Head of the Computer Science Department at the Friedrich-Magnus-Schwerd-Gymnasium</span>
                                    </div>
            </div>
            </div>



<figure class="wp-block-video"><video controls loop src="https://blog.jetbrains.com/wp-content/uploads/2026/07/bluej_kotlin_demo-online-video-cutter.com_.mp4" playsinline></video></figure>



<h1 class="wp-block-heading">Why Kotlin in BlueJ</h1>



<p>Java has played a central role in introductory OOP for many years. It is explicit, structured, and familiar to educators. At the same time, many teachers know the cost of that explicitness: students often need to write quite a lot of boilerplate before they grasp the concept.</p>



<p>Kotlin keeps the object-oriented model visible and surfaces a few important design choices from the beginning:</p>



<ul class="wp-block-list">
<li><strong>Concise syntax</strong> reduces the amount of code students need to read and write.</li>



<li><strong>Null safety</strong> makes the possibility of missing values explicit.</li>



<li><strong><code>val</code> and <code>var</code></strong> help students distinguish what can change from what cannot.</li>



<li><strong>JVM interoperability</strong> keeps Kotlin close to the Java ecosystem educators already know.</li>
</ul>


    <div class="blockquote">
                    <blockquote><p>“I showed my students a small sample of Kotlin code and let them decide whether to stick with Java or switch to Kotlin. They voted for Kotlin, and they have not regretted the decision since.”</p></blockquote>
            <div class="blockquote__author">
                                <div class="blockquote__author-info">
                                            <strong class="blockquote__author-title">Thomas Karp</strong>
                                                                <span class="blockquote__author-subtitle">Head of the Computer Science Department at the Friedrich-Magnus-Schwerd-Gymnasium</span>
                                    </div>
            </div>
            </div>



<h1 class="wp-block-heading">What you can do with Kotlin in BlueJ</h1>



<p>This first release focuses on the core classroom workflow. You can create, edit, compile, and run Kotlin files; define classes with properties and methods; and create objects and call their methods through the familiar BlueJ interface, including class diagrams and the object bench.&nbsp;</p>



<h1 class="wp-block-heading">Teaching materials</h1>



<p>To help educators get started, we’ve prepared an onboarding guide for teaching OOP with Kotlin in BlueJ.</p>



<p>It’s written for teachers who already know how to teach introductory OOP and want to understand how those concepts map to Kotlin. It includes explanations, examples, and projects for classroom use. Each unit comes with example projects and practice materials that can be opened directly in BlueJ.</p>



<div class="buttons">
        <div class="buttons__row">
            <a class="ek-link jb-download-button" title="Onboarding guide" href="https://drive.google.com/drive/folders/1ckontI1shfpWq38aMngp3vOcPjhmp9_q?usp=sharing" target="_blank" rel="noopener" data-test="blog-article-cta" data-cl="true">Onboarding guide</a>
         </div>
</div>



<h1 class="wp-block-heading">Thank you to the BlueJ community</h1>



<p>Early builds of Kotlin support in BlueJ were shared with educators in the BlueJ community, and their feedback helped shape the release. Teachers tested classroom examples, reported issues, and shared how they think about Kotlin in an objects-first environment. We are especially grateful to everyone who tried the early builds and helped us understand what matters most in real teaching practice.</p>



<h1 class="wp-block-heading">Try Kotlin in BlueJ</h1>



<p>If you teach with BlueJ, we’d love for you to try Kotlin and tell us how it goes.</p>



<div class="buttons">
        <div class="buttons__row">
            <a class="ek-link jb-download-button" title="Download BlueJ 6.0" href="https://bluej.org/?utm_source=blog&#038;utm_medium=referral&#038;utm_campaign=launch" target="_blank" rel="noopener" data-test="blog-article-cta" data-cl="true">Download BlueJ 6.0</a>
         </div>
</div>



<p>We are looking forward to your questions and feedback from your own classroom. Write to us at <strong>education@kotlinlang.org</strong>, and visit the <a href="https://kotlinlang.org/education/" target="_blank" rel="noopener"><strong>Kotlin for Education</strong></a> page to explore more resources and join the community of Kotlin educators.</p>



<p>Let&#8217;s teach Kotlin – good luck, and have<strong> </strong><strong>fun</strong>!</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Kodee’s Kotlin Roundup: Kotlin Turns 15, Kotlin 2.4.0, and the Kotlin Toolchain</title>
		<link>https://blog.jetbrains.com/kotlin/2026/06/kodees-kotlin-roundup-kotlin-turns-15-kotlin-2-4-0-and-the-kotlin-toolchain/</link>
		
		<dc:creator><![CDATA[Viliam Sedliak]]></dc:creator>
		<pubDate>Tue, 30 Jun 2026 14:03:02 +0000</pubDate>
		<featuredImage>https://blog.jetbrains.com/wp-content/uploads/2026/06/KT-social-BlogFeatured-1280x720-1-3.png</featuredImage>		<category><![CDATA[kotlin]]></category>
		<category><![CDATA[news]]></category>
		<category><![CDATA[kotlin-roundup]]></category>
		<guid isPermaLink="false">https://blog.jetbrains.com/?post_type=kotlin&#038;p=715758</guid>

					<description><![CDATA[Hi everyone! May and June brought so much Kotlin news that I needed a little extra space for this roundup. Kotlin turned 15, Kotlin 2.4.0 arrived with new capabilities for developers on every platform, and I found plenty of ways to learn, experiment, build AI agents and AI-powered applications, and explore useful Kotlin Multiplatform libraries. [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>Hi everyone! May and June brought so much Kotlin news that I needed a little extra space for this roundup. <a href="https://kotl.in/6l73sn" target="_blank" rel="noreferrer noopener">Kotlin turned 15</a>, Kotlin 2.4.0 arrived with new capabilities for developers on every platform, and I found plenty of ways to learn, experiment, build AI agents and AI-powered applications, and explore useful Kotlin Multiplatform libraries. Here are the updates 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/06/maxresdefault.jpg" alt="">
                                                                            <div class="newsletter__post-text">
                                                            <h3>The Kotlin Effect in real life</h3>
                                                        <p>What happens when Kotlin’s logic goes beyond code? For Kotlin’s anniversary, familiar language ideas were brought into everyday situations – making them more concise, efficient, and fun. I had a great time watching the Kotlin Effect come to life outside the IDE.</p>
                                                            <a href="https://kotl.in/p9r6up" class="btn" target="_blank" rel="noopener">Watch the video</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/06/1280h720.jpg" alt="">
                                                                            <div class="newsletter__post-text">
                                                            <h3>Kodee vs. Friction</h3>
                                                        <p>I’ve been busy fighting bugs in Kodee vs. Friction, a browser arcade game where I take on enemies like Boilerplate Golem and Callback Hydra with Kotlin-inspired power-ups. It’s built with Kotlin, Compose Multiplatform for web, Kotlin/Wasm, and a Ktor backend, and the source code is public so you can see how everything works. For the best experience, I recommend playing on a desktop or laptop.</p>
                                                            <a href="https://kotl.in/qoq7j1" class="btn" target="_blank" rel="noopener">Play Kodee vs. Friction</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/06/KT-social-BlogFeatured-1280x720-1-1.png" alt="">
                                                                            <div class="newsletter__post-text">
                                                            <h3>Free Kotlin learning resources</h3>
                                                        <p>An anniversary is a good reason to learn something new. To celebrate Kotlin’s turning 15, select Kotlin courses are available for free on Hyperskill. Whether you want to strengthen your foundations or continue into mobile and backend development, these project-based resources offer a practical way to keep progressing.</p>
                                                            <a href="https://kotl.in/ey2ybd" class="btn" target="_blank" rel="noopener">Keep learning Kotlin</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/06/KT-releases-BlogSocialShare-1280x720-1.png" alt="">
                                                                            <div class="newsletter__post-text">
                                                            <h3>Kotlin 2.4.0</h3>
                                                        <p>Kotlin 2.4.0 is here! The release stabilizes context parameters and explicit backing fields, expands standard library and platform capabilities, and brings improvements across Kotlin/JVM, Kotlin/Native, Kotlin/Wasm, Kotlin/JS, Gradle, Maven, and the compiler. I recommend checking out the full overview to find the changes that matter most for your projects.</p>
                                                            <a href="https://kotl.in/lx4ckk" class="btn" target="_blank" rel="noopener">See what’s new in Kotlin 2.4.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/06/KT-social-BlogFeatured-1280x720-1.png" alt="">
                                                                            <div class="newsletter__post-text">
                                                            <h3>Kotlin Toolchain 0.11</h3>
                                                        <p>The Kotlin Toolchain is your unified entry point for working with Kotlin projects. With a single `kotlin` command, you can create, build, run, test, and publish projects – without complex plugin configuration. Version 0.11 is now available as the official evolution of the Amper project. I’m excited to see this simpler workflow continue to grow across JVM and multiplatform development.</p>
                                                            <a href="https://kotl.in/tw0rt7" class="btn" target="_blank" rel="noopener">Explore Kotlin Toolchain 0.11</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/05/KG-social-BlogFeatured-1280x720-1-1.png" alt="Koog 1.0 Is Here">
                                                                            <div class="newsletter__post-text">
                                                            <h3>Koog 1.0</h3>
                                                        <p>Koog has reached 1.0, marking a major milestone for building AI agents in idiomatic Kotlin. The stable core comes with a one-year compatibility guarantee, improved interoperability, multiplatform observability, and support for reliable agent workflows across backend, mobile, and multiplatform applications.</p>
                                                            <a href="https://kotl.in/gj9jbi" class="btn" target="_blank" rel="noopener">Discover Koog 1.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/06/KT-social-BlogFeatured-1280x720-1-2.png" alt="">
                                                                            <div class="newsletter__post-text">
                                                            <h3>Grants for Kotlin library authors</h3>
                                                        <p>The 2026 Kotlin Foundation Grant Program is open for developers building or maintaining open-source Kotlin libraries, tools, and frameworks. Projects that strengthen the Kotlin ecosystem – including work related to Kotlin Multiplatform, AI, and large language models – can apply for financial support. Applications close July 14, 2026.</p>
                                                            <a href="https://kotl.in/3kv3w8" class="btn" target="_blank" rel="noopener">Learn more and apply</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/06/CMP-social-BlogFeatured-1280x720-1.png" alt="">
                                                                            <div class="newsletter__post-text">
                                                            <h3>Compose Hot Reload experiments with AI agents</h3>
                                                        <p>Compose Hot Reload 1.2.0-beta01 continues the work on the experimental MCP server, giving AI agents more ways to interact with running Compose applications in real time. The beta adds support for autonomous build mode, log access, UI error inspection, and lifecycle controls such as restart and reset. It is still experimental, but it offers an interesting glimpse into how AI-assisted development could become more visual, interactive, and connected to the running app. </p>
                                                            <a href="https://kotl.in/3xrm59" class="btn" target="_blank" rel="noopener">Try the experimental update</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/06/CMP-social-BlogFeatured-1280x720-1-1.png" alt="">
                                                                            <div class="newsletter__post-text">
                                                            <h3>Compose Multiplatform 1.12.0-beta01</h3>
                                                        <p>Compose Multiplatform 1.12.0-beta01 is here, bringing updates for shared UIs across platforms, including new graphics capabilities, iOS accessibility improvements, UI test behavior updates, and fixes for iOS, desktop, web, resources, and the Gradle plugin. Check out the release notes for the full list of changes and migration details.</p>
                                                            <a href="https://kotl.in/ytqkur" class="btn" target="_blank" rel="noopener">Explore the release notes</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/06/opengraph-image.jpg" alt="">
                                                                            <div class="newsletter__post-text">
                                                            <h3>Three Kotlin Multiplatform libraries worth exploring</h3>
                                                        <p>I found three useful additions to explore on Klibs.io: <a href="https://klibs.io/project/kdroidFilter/ComposeMediaPlayer" target="_blank" rel="noopener">ComposeMediaPlayer</a> for cross-platform video playback, <a href="https://klibs.io/project/rickclephas/NSExceptionKt" target="_blank" rel="noopener">NSExceptionKt</a> for better Kotlin/Native crash reporting on Apple platforms, and <a href="https://klibs.io/project/russhwolf/multiplatform-settings" target="_blank" rel="noopener">multiplatform-settings</a> for storing key-value data in shared code. They solve very different problems, which is exactly what makes browsing the KMP library ecosystem so interesting.</p>
                                                            <a href="https://kotl.in/kpzp99" class="btn" target="_blank" rel="noopener">Discover more libraries on Klibs.io</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/06/1200-x-675.png" alt="">
                                                                            <div class="newsletter__post-text">
                                                            <h3>Booking.com’s Kotlin Multiplatform journey</h3>
                                                        <p>Booking.com adopted Kotlin Multiplatform for an experimentation library, and the results exceeded the team’s expectations. Their story shows how KMP can improve cross-platform consistency while fitting into an existing product and engineering environment – without asking teams to abandon platform-specific development.</p>
                                                            <a href="https://kotl.in/6821oj" class="btn" target="_blank" rel="noopener">Read the Booking.com story</a>
                                                    </div>
                    </article>
                                    </div>
    


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



<ul class="wp-block-list">
<li><a href="https://kotlinlang.org/lp/kotlin-spring-ai-tutorial/" target="_blank" rel="noreferrer noopener">Build AI-powered apps with Kotlin and Spring AI</a></li>



<li><a href="https://kotlinlang.org/lp/enterprise-playbook/" target="_blank" rel="noreferrer noopener">Evaluate Kotlin adoption with the enterprise playbook</a></li>



<li><a href="https://ktor.io/docs/server-testing.html" target="_blank" rel="noreferrer noopener">Test Ktor REST APIs with the built-in test framework</a></li>



<li><a href="https://kotl.in/f5f4h3" target="_blank" rel="noreferrer noopener">Bring iOS 26 Liquid Glass to a Compose Multiplatform app</a></li>



<li><a href="https://kotl.in/zxux6n" target="_blank" rel="noreferrer noopener">Connect shared business logic to UI with a multiplatform ViewModel</a></li>



<li><a href="https://blog.jetbrains.com/kotlin/2026/05/the-road-to-name-based-destructuring/" target="_blank" rel="noreferrer noopener">Read <em>The Road to Name-Based Destructuring</em></a></li>



<li><a href="https://blog.jetbrains.com/kotlin/2026/05/compose-multiplatform-1-11-0/" target="_blank" rel="noreferrer noopener">Explore Compose Multiplatform 1.11.0</a></li>



<li><a href="https://blog.jetbrains.com/idea/2026/06/kotlin-notebook-sunset/" target="_blank" rel="noreferrer noopener">Learn about the Kotlin Notebook plugin update</a></li>
</ul>



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



<ul class="wp-block-list">
<li><a href="https://www.youtube.com/watch?v=LO4N_-LFrHQ" target="_blank" rel="noreferrer noopener">Beyond LLMs: Kotlin Game AI</a></li>



<li><a href="https://www.youtube.com/watch?v=Atvl0l7fm1Y" target="_blank" rel="noreferrer noopener">Introducing the New KMP Project Structure</a></li>



<li><a href="https://www.youtube.com/watch?v=juG8UP3IPZU" target="_blank" rel="noreferrer noopener">KotlinConf&#8217;26 Keynote</a></li>



<li><a href="https://www.youtube.com/watch?v=IpdOheudcZ4" target="_blank" rel="noreferrer noopener">Jake Wharton | KotlinConfersations&#8217;26</a></li>



<li><a href="https://www.youtube.com/watch?v=vTNEs3EUSJo" target="_blank" rel="noreferrer noopener">Dan Kim | KotlinConfersations&#8217;26</a></li>



<li><a href="https://www.youtube.com/watch?v=TKUxeZ34dNI" target="_blank" rel="noreferrer noopener">Six Years, Zero Regrets: Sony’s Kotlin Multiplatform Success Story | KotlinConfersations&#8217;26</a></li>



<li><a href="https://www.youtube.com/watch?v=efT95__W_oU" target="_blank" rel="noreferrer noopener">What Nobody Told Us About KMP on iOS | KotlinConfersations&#8217;26</a></li>



<li><a href="https://www.youtube.com/watch?v=lo8uh-HU1HI" target="_blank" rel="noreferrer noopener">Migrating 25-year-old legacy code to Kotlin</a></li>



<li><a href="https://www.youtube.com/watch?v=VBOCfzKoI-U" target="_blank" rel="noreferrer noopener">A World of Kotlin &#8211; Animated Short Film (2026 KotlinConf Intro)</a></li>
</ul>



<p><br>That’s all from me for this roundup. Happy 15th anniversary, Kotlin – and happy coding!</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Kotlin Notebook Sunset</title>
		<link>https://blog.jetbrains.com/idea/2026/06/kotlin-notebook-sunset/</link>
		
		<dc:creator><![CDATA[Marco Behler]]></dc:creator>
		<pubDate>Mon, 29 Jun 2026 12:02:16 +0000</pubDate>
		<featuredImage>https://blog.jetbrains.com/wp-content/uploads/2026/06/IJ-social-BlogFeatured-1280x720-1-3.png</featuredImage>		<product ><![CDATA[idea]]></product>
		<product ><![CDATA[kotlin]]></product>
		<category><![CDATA[kotlin]]></category>
		<category><![CDATA[news]]></category>
		<category><![CDATA[kotlin-news-2]]></category>
		<category><![CDATA[kotlin-notebook]]></category>
		<guid isPermaLink="false">https://blog.jetbrains.com/?post_type=idea&#038;p=717314</guid>

					<description><![CDATA[Starting from IntelliJ IDEA 2026.2, JetBrains will sunset Kotlin Notebook as a product and will no longer maintain it. The plugin will remain available on an open-source model so the community can continue its development.&#160; Below, we explain why we’re making this change, how it affects current Kotlin Notebook users, what comes next, and how [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>Starting from IntelliJ IDEA 2026.2, JetBrains will sunset Kotlin Notebook as a product and will no longer maintain it.</p>



<p>The plugin will remain available on an open-source model so the community can continue its development.&nbsp;</p>



<p>Below, we explain why we’re making this change, how it affects current Kotlin Notebook users, what comes next, and how Kotlin DataFrame will continue to exist beyond Kotlin Notebook.</p>



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



<p>Demand for built-in interactive tooling has shifted since we launched the plugin, and Kotlin Notebook didn&#8217;t reach the level of adoption we expected. AI tools have changed how developers explore code, prototype, and iterate, and many of the workflows that originally drove notebook adoption have evolved along with that shift.</p>



<p>After reviewing usage trends, we’ve decided to move Kotlin Notebook out of our internal roadmap and into the open. Going forward, our team will devote its time to projects with a broader impact on Kotlin developers.</p>



<h2 class="wp-block-heading">Timeline and what to expect</h2>



<p>Here&#8217;s what to expect during the transition:</p>



<p><strong>v2026.1 and earlier:</strong></p>



<p>• Kotlin Notebook remains bundled with IntelliJ IDEA.</p>



<p><strong>v2026.2:</strong></p>



<ul class="wp-block-list">
<li>Kotlin Notebook will be unbundled from IntelliJ IDEA.</li>



<li>JetBrains will no longer develop new features for Kotlin Notebook.</li>



<li>The <a href="https://plugins.jetbrains.com/plugin/16340-kotlin-notebook" target="_blank" rel="noopener">Kotlin Notebook</a> plugin will still be available for installation from the marketplace. It is compatible with v2026.2. However, we do not maintain it anymore. Future development will happen in the open-source repository only. </li>



<li>The plugin source will be published on <a href="https://github.com/Kotlin/kotlin-notebook" target="_blank" rel="noopener">GitHub</a> under the Apache License 2.0. Users can build the plugin from GitHub and install it manually. The README walks you through the steps.</li>
</ul>



<p><strong>V2026.3 and further:</strong></p>



<ul class="wp-block-list">
<li>JetBrains won&#8217;t publish a compatible plugin for v2026.3 and beyond.</li>
</ul>



<p><strong>During the transition to community ownership:</strong></p>



<ul class="wp-block-list">
<li>We plan to continue maintaining the Kotlin Jupyter kernel on a best-effort basis, as capacity allows.</li>



<li>If you’re interested in maintaining or contributing to Kotlin Notebook, please share your interest in the Kotlin Slack <a href="https://kotlinlang.slack.com/archives/C05333T208Y" target="_blank" rel="noopener"><strong>#notebooks</strong></a> channel. </li>



<li>Our Support team will be available during the transition for compatibility questions.</li>
</ul>



<h2 class="wp-block-heading">Kotlin DataFrame beyond notebooks</h2>



<p>If you’re using Kotlin DataFrame, recent releases have made it much easier to bring notebook-style, type-safe data transformations into regular Kotlin projects. With the Kotlin DataFrame compiler plugin, schema-aware APIs and generated column accessors are now available directly in Gradle and Maven projects and can be used in ordinary .kt files.</p>



<p>To get started, see the setup guides for Gradle and Maven:</p>



<ul class="wp-block-list">
<li>Gradle:<a href="https://kotlin.github.io/dataframe/setupgradle.html" target="_blank" rel="noopener"> https://kotlin.github.io/dataframe/setupgradle.html</a></li>



<li>Maven:<a href="https://kotlin.github.io/dataframe/setupmaven.html" target="_blank" rel="noopener"> https://kotlin.github.io/dataframe/setupmaven.html</a></li>
</ul>



<p>We also recently released Kotlin DataFrame 1.0.0-Beta5, with numerous improvements across the library. See the release notes <a href="https://github.com/Kotlin/dataframe/releases/tag/v1.0.0-Beta5" target="_blank" rel="noopener">here</a>. </p>



<p>If you have questions about migrating existing workflows or adopting Kotlin DataFrame in your projects, feel free to reach out in the Kotlin Slack <a href="https://kotlinlang.slack.com/archives/C4W52CFEZ" target="_blank" rel="noopener">#datascience</a> channel.</p>



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



<p>We’re grateful to everyone who used Kotlin Notebook, filed issues, and shared feedback over the years. Thank you!</p>



<p>The JetBrains team</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Kotlin Toolchain 0.11: The Next Step for Amper</title>
		<link>https://blog.jetbrains.com/amper/2026/06/kotlin-toolchain-0-11/</link>
		
		<dc:creator><![CDATA[Joffrey Bion]]></dc:creator>
		<pubDate>Wed, 24 Jun 2026 13:04:32 +0000</pubDate>
		<featuredImage>https://blog.jetbrains.com/wp-content/uploads/2026/06/KT-social-BlogFeatured-1280x720-1.png</featuredImage>		<product ><![CDATA[amper]]></product>
		<product ><![CDATA[kotlin]]></product>
		<category><![CDATA[build-tools]]></category>
		<category><![CDATA[cli]]></category>
		<guid isPermaLink="false">https://blog.jetbrains.com/?post_type=amper&#038;p=695012</guid>

					<description><![CDATA[Amper 0.11.0 is out, and you will notice a shift in the product branding immediately. If you missed the KotlinConf keynote (watch the recording), here’s the headline: Amper has evolved into the Kotlin Toolchain and is now Alpha! This release brings that transition to life, alongside the ability to publish JVM libraries, new plugin development [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p><a href="https://github.com/JetBrains/kotlin-toolchain/releases/tag/v0.11.0" target="_blank" rel="noopener">Amper 0.11.0</a> is out, and you will notice a shift in the product branding immediately. If you missed the KotlinConf keynote (<a href="https://www.youtube.com/live/MmwBJbzWbV0" target="_blank" rel="noopener">watch the recording)</a>, here’s the headline: Amper has evolved into the Kotlin Toolchain and is now Alpha! This release brings that transition to life, alongside the ability to publish JVM libraries, new plugin development APIs, and several developer experience improvements.</p>



<p>Read on for the details, and check the <a href="https://github.com/JetBrains/kotlin-toolchain/releases/tag/v0.11.0" target="_blank" rel="noopener">release notes</a> for the full list of changes and bug fixes.</p>



<p><em>To get support for Kotlin Toolchain’s latest features, use </em><a href="https://www.jetbrains.com/idea/" target="_blank" rel="noopener"><em>IntelliJ IDEA 2026.1.2</em></a><em> (or newer). Make sure the latest version of the </em><a href="https://plugins.jetbrains.com/plugin/31850-kotlin-toolchain" target="_blank" rel="noopener"><em>Kotlin Toolchain plugin</em></a><em> is installed.&nbsp;</em></p>



<h2 class="wp-block-heading">Amper is now the Kotlin Toolchain</h2>



<p>When we launched Amper, the goal was to experiment with a cohesive, declarative build experience. As the project evolved, it became clear that the ecosystem doesn&#8217;t just need another build tool – it needs a unified entry point into all of Kotlin.</p>



<p>The Kotlin Toolchain is that cohesive entry point. It provides a single command, <code>kotlin</code>, which allows you to create a project, build, run, and test it, and configure it for packaging and publishing. In the future, it will even let you format your code, generate docs, and much more. No build-tool decisions up front; no complex plugin wiring before you can write your first line of code.</p>



<p>Of course, we didn’t start from scratch. Everything we built inside Amper was moved to the Kotlin Toolchain, which allowed the project to graduate straight to Alpha! This label means JetBrains is committed to supporting it, and so we’d love for you to try it out and share your feedback.</p>



<p>If you were already using Amper, this major change has several implications that you should be aware of:</p>



<ul class="wp-block-list">
<li>The <code>amper</code> and <code>amper.bat</code> wrapper scripts must be replaced with the new <code>kotlin</code> and <code>kotlin.bat</code> wrappers.</li>



<li>In IntelliJ IDEA, the <a href="https://plugins.jetbrains.com/plugin/31850-kotlin-toolchain" target="_blank" rel="noopener">Kotlin Toolchain IDE plugin</a> must be installed <em>instead of</em> the Amper IDE plugin, which can safely be uninstalled.</li>
</ul>



<h2 class="wp-block-heading">Global installation</h2>



<p>The wrapper scripts that are committed to your project are great for providing a clone-and-build experience with zero installation requirements, but they aren’t suitable for all use cases.</p>



<p>With this new release, you can now install the <code>kotlin</code> CLI globally (outside of a project) and use it everywhere instead of <code>./kotlin</code>. You can install it right now via <a href="https://sdkman.io/" target="_blank" rel="noopener">SDKMAN!</a> this way:</p>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">sdk install kotlintoolchain</pre>


                    <div class="alert ">
            <p><strong>Note:</strong> You don’t have to use SDKMAN!. Check out our documentation for other installation options.</p>
        </div>
    






<p>This improves the experience on several fronts:</p>



<ul class="wp-block-list">
<li>Launching <code>kotlin</code> commands from nested directories inside your project is more convenient.</li>



<li>You can use project-agnostic commands from any directory (like <code>kotlin tool jaeger</code> or <code>kotlin clean-shared-caches</code>).</li>



<li>Creating new projects with the <code>init</code> command is more natural (no need to download a wrapper manually or copy it from another project).</li>
</ul>



<p></p>



<p>Using the global <code>kotlin</code> command doesn’t mean you will have to align your Kotlin Toolchain version in all your projects, though. The <code>kotlin</code> command automatically finds your project’s wrapper script and runs the matching version of the Kotlin Toolchain.</p>



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



<p>The library publication feature is finally in preview! You can now publish your JVM libraries to Maven repositories, including Maven Central.</p>


                    <div class="alert ">
            <p><strong>Note:</strong> Kotlin Multiplatform libraries cannot be published yet, but we’re working on it. Stay tuned!</p>
        </div>
    






<h3 class="wp-block-heading">Regular Maven repositories</h3>



<p>To publish to a Maven repository other than Maven Central, use the following configuration in your <code>module.yaml</code>:</p>



<pre class="EnlighterJSRAW" data-enlighter-language="yaml" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">product: jvm/lib

repositories:
  - id: myMavenRepoId
    url: https://maven.pkg.github.com/my-org/my-maven-repo 
    publish: true
    credentials:
      file: creds.properties # a properties file containing your credentials 
      usernameKey: maven.username # the name of the property containing the username
      passwordKey: maven.password # the name of the property containing the password

settings:
 publishing:
   enabled: true
   group: com.example
   artifactId: greeter # optional, defaults to the module name
   version: 1.0.0</pre>



<p>Provide the credentials file that was referenced in the repository configuration, for example, this <code>creds.properties</code>:</p>



<pre class="EnlighterJSRAW" data-enlighter-language="raw" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">maven.username=john.doe
maven.password=MyVerySecurePassword123</pre>



<p>You can then reference the repository by ID when running the <code>publish</code> command:</p>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">kotlin publish myMavenRepoId</pre>



<p>This command publishes all modules that have publication enabled and have declared a repository with the ID <code>myMavenRepoId</code>.</p>



<h3 class="wp-block-heading">Maven Central</h3>



<p>Publishing to Maven Central is known for being a tedious process involving a lot of moving parts: sources and javadoc JARs, PGP signatures, POM metadata, checksums, etc. The latest Kotlin Toolchain does all of that for you – you declare what to publish, and we take care of the rest.</p>



<p>You will first need an <a href="https://central.sonatype.org/register/central-portal/" target="_blank" rel="noopener">account</a>, a <a href="https://central.sonatype.org/register/namespace/" target="_blank" rel="noopener">namespace</a>, and a <a href="https://central.sonatype.org/publish/generate-portal-token/" target="_blank" rel="noopener">user token</a> on the Maven Central Publisher Portal, as well as a <a href="https://central.sonatype.org/publish/requirements/gpg/" target="_blank" rel="noopener">PGP signing key</a>. For everything else, the Kotlin Toolchain has you covered.</p>



<p>To publish to Maven Central, you don’t need to declare the repository by hand. Just add <code>mavenCentral: enabled</code> to your publication configuration, and configure everything that Maven Central requires. Here is a minimal example:</p>



<pre class="EnlighterJSRAW" data-enlighter-language="yaml" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">product: jvm/lib

description: A meaningful description for this specific module

settings:
  publishing:
    enabled: true
    group: com.example # the group has to match your Maven Central namespace
    version: 1.0.0
    # artifactId is optional, and defaults to your module's name
    mavenCentral: enabled
    signArtifacts: true # automatically sign your artifacts, no external GPG binary required
    publishSources: true
    pom:
      url: https://example.com
      scm: https://github.com/my-org/example.git # the SCM connection and dev connection are automatically derived from this
      developers:
        - name: John Doe
      licenses:
        - name: MIT
          url: https://opensource.org/license/mit
</pre>



<p>Check out the documentation to learn <a href="https://kotlin-toolchain.org/0.11/user-guide/publishing/#passing-credentials" target="_blank" rel="noopener">how to pass the credentials</a> needed to sign artifacts and upload to the Maven Central Publisher Portal. After this, publishing is just one command away:</p>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">kotlin publish mavenCentral</pre>



<p>This command builds and signs every artifact, zips them into a Maven Central deployment bundle, uploads the bundle, and awaits its validation. You can then check the deployment and finish the release via the <a href="https://central.sonatype.com/publishing/deployments" target="_blank" rel="noopener">Central portal UI</a>. You can also skip manual verification and fully automate the release with <code>publishingMode: auto</code> if you trust the pipeline. Check out the documentation to read more about <a href="https://kotlin-toolchain.org/latest/user-guide/publishing/#publishing-mode" target="_blank" rel="noopener">publishing modes</a>.</p>



<h2 class="wp-block-heading">Cinterop support</h2>



<p>The Kotlin Toolchain now generates custom bindings for C libraries from the <a href="https://kotlinlang.org/docs/native-definition-file.html" target="_blank" rel="noopener">definition files</a> (<code>.def</code>) placed inside the <code>cinterop</code> folder of a module.</p>



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



<p>The IDE also provides assistance by generating bindings during the project sync process.</p>



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



<h2 class="wp-block-heading">Terminal UI improvements</h2>



<p>We have made several improvements to the output of the <code>kotlin</code> command.</p>



<p>We have introduced better progress indicators for completed tasks, and the main progress bar is integrated with your terminal’s native progress indicator:</p>



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



<p>We have also improved how the diagnostics reported by the Kotlin JVM compiler are rendered (requires Kotlin 2.4.0 or newer):</p>



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



<h2 class="wp-block-heading">IDE improvements</h2>



<h3 class="wp-block-heading">Library sources download</h3>



<p>Sources for libraries are now downloaded automatically as a post-sync activity.</p>



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



<p>Because the sync is completed first, you can start working on the project straight away while sources are downloaded in the background.</p>



<h3 class="wp-block-heading">Module-wide dependency resolution</h3>



<p>Previously, dependency resolution in the IDE plugin was performed at the project level, unlike in the CLI. This could lead to an incorrect dependency version in a module or incorrect warnings in the editor. We have aligned the behavior with the CLI, so now each module has its own resolution scope, and all diagnostics are the same.</p>



<h2 class="wp-block-heading">Plugin development improvements</h2>



<p>Multiple new features are available for authors of local plugins, including the new <code>checks</code> and <code>commands</code> declarations, new APIs for task inputs, and diagnostic improvements.</p>



<h3 class="wp-block-heading">New references</h3>



<p>When authoring plugin.yaml to wire task inputs, a few built-in references can be used to access information about the project. We introduced two new ones to cover some common cases:</p>



<ul class="wp-block-list">
<li><code>${project.rootDir}</code> can be used to access the project’s root directory.</li>



<li><code>${module.classes}</code> can be used to access the directory containing raw compiled class files.</li>
</ul>



<h3 class="wp-block-heading">Custom checks</h3>



<p>The new <code>kotlin check</code> command is designed to make sure the project passes all quality checks. It runs the usual unit tests by default, and plugins can register additional checks that the command should run.</p>



<p>To introduce a custom check in a plugin, use the <code>checks</code> top-level list:</p>



<pre class="EnlighterJSRAW" data-enlighter-language="yaml" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group=""># my-lint-plugin/plugin.yaml
tasks:
  runLinter:
    action: !kotlinJavaLint
      sources: ${module.kotlinJavaSources}

checks:
  - name: lint
    performedBy: runLinter</pre>



<p>The above <code>lint</code> check can also be run individually using <code>kotlin check lint</code>.</p>



<p>To list the checks that are in the project, use the <code>kotlin show checks</code> command. You can read more about custom checks in the <a href="https://kotlin-toolchain.org/dev/user-guide/plugins/topics/checks/" target="_blank" rel="noopener">plugins docs</a>.</p>



<h3 class="wp-block-heading">Custom commands</h3>



<p>Sometimes you need to expose a public entry point for your plugin&#8217;s users. For example, you might want to provide the ability to generate a changelog, print some information on demand, or publish a custom distribution format. Because your plugin’s tasks should be considered private by default, we introduced a new concept called <em>custom commands</em> to represent these public entry points.</p>



<p>A custom command is implemented using a regular task, and as such, it can get data from the build (such as source files, compiled JARs, or runtime classpath information) and depend on other tasks. To register a command associated with your task, use the new <code>commands</code> top-level section in <code>plugin.yaml</code>:</p>



<pre class="EnlighterJSRAW" data-enlighter-language="yaml" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group=""># my-lint-plugin/plugin.yaml
tasks:
  updateBaseline:
    action: !runDetektForBaseline
      sources: ${module.kotlinJavaSources}
      outputFile: ${module.rootDir}/detekt/baseline.xml

commands:
  # shorthand when the name of the command matches that of the task
  - updateBaseline
</pre>



<p>You can then run this custom command using the new <code>kotlin do command</code>:</p>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">kotlin do updateBaseline</pre>



<p>This will run the task associated with the command, as well as its dependencies.</p>



<p>To list all the custom commands available in the project, use <code>kotlin show commands</code>. Learn more about custom commands in the <a href="https://kotlin-toolchain.org/dev/user-guide/plugins/topics/custom-commands/" target="_blank" rel="noopener">plugins docs</a>.</p>



<h3 class="wp-block-heading">A new way to register generated files</h3>



<p>We introduced a new top-level section to <code>plugin.yaml</code> called <code>generated</code>, which allows registering generated sources, resources, and classes. As of 0.11.0, you can even register cinterop definitions when your task dynamically provisions native libraries:</p>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">tasks:
  generateStuff:
    action: !myGenerateStuffAction
      outputSources: ${taskOutputDir}/src
      outputResources: ${taskOutputDir}/res
      outputDefFiles: ${taskOutputDir}/cinterop

generated:
  sources:
    - directory: ${tasks.generateStuff.action.outputSources}
      language: kotlin
  resources:
    - directory: ${tasks.generateStuff.action.outputResources}
  cinteropDefinitions:
    - directory: ${tasks.generateStuff.action.outputDefFiles}
</pre>



<p>This replaces the <code>markOutputAs</code> property inside tasks, which is deprecated and will soon be removed. This way, all outputs that contribute back to the build are registered in a similar way and can be identified at a glance in their individual sections by humans, AI agents, and other tools.</p>



<h2 class="wp-block-heading">Other improvements</h2>



<h3 class="wp-block-heading"><code>lib</code> renamed to <code>kmp/lib</code></h3>



<p>The <code>lib</code> product type was renamed to <code>kmp/lib</code> to better reflect what it represents after the introduction of the <code>jvm/lib</code> product type. The <code>lib</code> value is deprecated, and we plan to remove it in an upcoming Kotlin Toolchain version.</p>



<h3 class="wp-block-heading">Nested templates</h3>



<p>Templates can now apply other templates, allowing you to build a logical hierarchy of settings. The syntax is the same; simply use the <code>apply</code> section in your template files:</p>



<pre class="EnlighterJSRAW" data-enlighter-language="yaml" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group=""># spring.module-template.yaml
apply:
  - ./jvm.module-template.yaml

settings:
  springBoot: enabled</pre>



<h3 class="wp-block-heading">Maven classifier support</h3>



<p>You can now add classifiers to Maven dependency notations to depend on a specific artifact of the library, for example:</p>



<pre class="EnlighterJSRAW" data-enlighter-language="yaml" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">dependencies:
  - io.netty:netty-transport-native-epoll:4.2.13.Final:linux-x86_64</pre>



<h3 class="wp-block-heading"><code>run</code> command improvements</h3>



<p>We have improved the experience of the run command in cases when only one option is suitable for the current host.</p>



<p>If the project has multiple modules, but only one can run on the host machine, it is no longer necessary to specify the module explicitly. For example, given the following project:</p>



<pre class="EnlighterJSRAW" data-enlighter-language="raw" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">.
├── linux-cli/
├── macos-cli/
├── windows-cli/
├── shared/
├── kotlin
├── kotlin.bat
└── project.yaml</pre>



<p><code>kotlin run</code> will launch the <code>windows-cli</code> module on a Windows machine.</p>



<p>If the specified module has multiple target platforms and only one of them can be run on the host machine, it is no longer necessary to specify the platform explicitly. For example, given the following module:</p>



<pre class="EnlighterJSRAW" data-enlighter-language="yaml" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group=""># linux-app/module.yaml
product: linux/app

# The platforms linuxArm64 and linuxX64 are both present by default</pre>



<p><code>kotlin run -m linux-app</code> will launch the ARM64 version of the app on an ARM machine and the x86-64 version of the app on an x86 machine.</p>



<h2 class="wp-block-heading">Updated default versions</h2>



<p>We updated some of the default versions for toolchains and frameworks:</p>



<ul class="wp-block-list">
<li>Kotlin 2.3.21</li>



<li>Compose Hot Reload 1.1.1</li>



<li>KSP 2.3.7</li>



<li>Ktor 3.4.3</li>



<li>SpringBoot 4.0.6</li>



<li>Lombok 1.18.46</li>



<li>JUnit Platform 6.0.3</li>
</ul>



<h2 class="wp-block-heading">Try Kotlin Toolchain 0.11.0</h2>



<p>To get started with the Kotlin Toolchain, check out our <a href="https://kotl.in/toolchain/get-started" target="_blank" rel="noopener"><em>Getting started</em></a> guide. Take a look at some examples, follow a tutorial, or read the comprehensive user guide, depending on your learning style.</p>


    <div class="buttons">
        <div class="buttons__row">
                                                <a href="https://kotlin-toolchain.org/" class="btn" target="" rel="noopener">Try Kotlin Toolchain</a>
                                                    </div>
    </div>







<p>If you’ve been using Amper, you won’t be able to migrate your installation to the Kotlin Toolchain via the usual automatic update path. Instead, you should replace <code>amper</code> and <code>amper.bat</code> in your project with Kotlin wrappers. You can do so by installing the toolchain globally and then using the Kotlin CLI to generate the new Kotlin wrappers in your project:</p>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">kotlin update --create</pre>



<p>After replacing the wrappers, you will be able to use <code>kotlin update</code> for future updates.</p>



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



<p>The Kotlin Toolchain is still under active development. You can provide feedback about your experience by joining the discussion in the <a href="https://slack-chats.kotlinlang.org/c/kotlin-toolchain" target="_blank" rel="noopener">#kotlin-toolchain Slack channel</a> or by sharing your suggestions and ideas in a <a href="https://youtrack.jetbrains.com/issues/AMPER" target="_blank" rel="noopener">YouTrack issue</a>. Your input and use cases help shape the future of the Kotlin Toolchain!</p>
]]></content:encoded>
					
		
		
			</item>
		<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 class="wp-block-list">
<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 class="wp-block-list">
<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 class="wp-block-list">
<li><a href="https://x.com/noraltavir">Alexander Nozik</a></li>



<li><a href="https://x.com/andy_lamax" data-type="link" data-id="https://x.com/andy_lamax">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 class="wp-block-list">
<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 class="wp-block-list">
<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 loading="lazy" 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 class="wp-block-list">
<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;" loading="lazy" decoding="async" 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;" loading="lazy" 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;" loading="lazy" decoding="async" 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;" loading="lazy" decoding="async" 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;" loading="lazy" decoding="async" 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;" loading="lazy" decoding="async" 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;" loading="lazy" decoding="async" 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;" loading="lazy" decoding="async" 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;" loading="lazy" decoding="async" 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;" loading="lazy" decoding="async" 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;" loading="lazy" decoding="async" 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;" loading="lazy" decoding="async" 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;" loading="lazy" decoding="async" 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;" loading="lazy" decoding="async" 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;" loading="lazy" decoding="async" 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;" loading="lazy" decoding="async" 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;" loading="lazy" decoding="async" 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;" loading="lazy" decoding="async" 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>
                                    <language>
                        <code><![CDATA[ja]]></code>
                        <url>https://blog.jetbrains.com/ja/kotlin/2026/05/kotlinconf26-keynote-highlights/</url>
                    </language>
                                    <language>
                        <code><![CDATA[fr]]></code>
                        <url>https://blog.jetbrains.com/fr/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 class="wp-block-list">
<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 class="wp-block-list">
<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 class="wp-block-list">
<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 class="wp-block-list">
<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 class="wp-block-list">
<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 class="wp-block-list">
<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="Introducing the New KMP Project Structure" 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 is-layout-flow wp-block-quote-is-layout-flow">
<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 loading="lazy" decoding="async" 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 loading="lazy" decoding="async" 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 loading="lazy" decoding="async" 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 loading="lazy" decoding="async" 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 class="wp-block-list">
<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 loading="lazy" decoding="async" 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 loading="lazy" decoding="async" 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 is-layout-flow wp-block-quote-is-layout-flow">
<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>
					
		
		
		                    <language>
                        <code><![CDATA[zh-hans]]></code>
                        <url>https://blog.jetbrains.com/zh-hans/kotlin/2026/05/new-kmp-default-structure/</url>
                    </language>
                	</item>
	</channel>
</rss>
