Kotlin 1.0 Released: Pragmatic Language for the JVM and Android

This is it. 1.0 is here!

It’s been a long and exciting road but we’ve finally reached the first big 1.0, and we’re celebrating the release by also presenting you with the new logo:


See the discussions on Reddit and Hacker News.

What is Kotlin?

Kotlin is a pragmatic programming language for the JVM and Android that combines OO and functional features and is focused on interoperability, safety, clarity, and tooling support.

Being a general-purpose language, Kotlin works everywhere where Java works: server-side applications, mobile applications (Android), and desktop applications. It works with all major tools and services such as

  • IntelliJ IDEA, Android Studio, and Eclipse
  • Maven, Gradle, and Ant
  • Spring Boot (Kotlin support released today!)
  • GitHub, Slack, and even Minecraft 🙂

One of the key areas of focus for Kotlin has been interoperability and seamless support for mixed Java+Kotlin projects, making adoption easier leading to less boilerplate code and more type-safety. Additionally, Kotlin has an extensive standard library that makes everyday tasks easy and smooth while keeping the bytecode footprint low. Of course, any Java library can be used in Kotlin, too; and vice versa.

What does pragmatic mean?

Understanding its core values is crucial for any long-running project. If I were to choose one word to describe Kotlin’s design, it would be pragmatism. This is why, early on, we said that Kotlin is not so much about invention or research. We ended up inventing quite a few things, but this was never the point of the project. Of course we were building a type system that prevents bugs, and abstraction mechanisms that facilitate code reuse, as anybody in our position would. But our (pragmatic) way of doing it was through focusing on use cases to make the language a good tool.

In particular, this approach led us immediately to the notion that interoperability with existing code and infrastructure is crucial. Re-writing the world the right way, all from scratch — who’s never wanted to? I have, quite a few times 🙂 And Kotlin would have been a whole lot easier to design and develop if not for the Java interop, Maven integration, and Android compatibility! It would definitely be more elegant in many ways. But elegance, though highly appreciated, is not the primary goal here – the primary goal is being useful. And the less our users have to relearn, reinvent, redo from scratch, and the more they can reuse, the better.

So, why doesn’t Kotlin have its own package manager, or its own build system?
— Because Maven and Gradle already exist, and reusing their huge number of plugins is crucial for many projects.
Why did we invest a lot of time and effort into making JDK-compatible collection interfaces, when it was so much easier to just redesign collections from scratch?
— Because tons and tons of Java code work with JDK collections, and converting data on the boundary would be a pain.
Why does Kotlin support Java 6 bytecode?
— Because many people are still running Java 6 (Android, most notably, but not only).

For us, pragmatism is about creating a user experience, not a language or a library alone. Many of the language design decisions were made under constraints like “Won’t this impede incremental compilation?”, “What if this increases APK method counts?”, “How will the IDE highlight this as you type?”, and many more like these. As a result, we are proud of our tooling as well as the language.

Is it mature enough and ready for production?

Yes. And it has been for quite some time. At JetBrains, we’ve not only been implementing the compiler and tooling but have also been using Kotlin in real-life projects on a rather extensive scale over the last two years. In addition to JetBrains, there are quite a few companies that have been using Kotlin in production for some time now.

In fact, one of the reasons it took us a long time to reach 1.0 was that we paid extra attention to validating our design decisions in practice. This was and is necessary, because the compiler will be backward-compatible and future versions of Kotlin must not break existing code. As such, whatever choices we’ve made, we must stick to them.

Reaching this milestone was something we couldn’t have done without the valuable help of our early adopters. We want to thank each and every one of you for your courage, energy, and enthusiasm!

Who’s behind Kotlin?

First and foremost, Kotlin is an Open Source language

  • Developed on GitHub under the Apache 2.0 Open-Source license
  • With over 100 contributors to date

JetBrains is the main backer of Kotlin at the moment. We have invested a lot of effort into developing it and we are committed to the project for the long run. We wrote it out of our own need to use in our own products. And we’re happy to say that to date, close to 10 JetBrains products, which include IntelliJ IDEA, JetBrains Rider, JetBrains Account & E-Shop, YouTrack as well as some of our smaller IDEs and some internal projects are using Kotlin. So it’s here to stay!

Since 2012 we’ve kept Kotlin’s development very open, talking to the community all the time and gathering and addressing lots of feedback.

Moving forward, we are planning to set up a centralized venue for design proposals and discussions, to make the process even more visible and organized. Standardization efforts have not been started for Kotlin so far, but we realize that we’ll need to do it sooner rather than later.

Language design and overall steering of the project is done by the team employed at JetBrains. We currently have over 20 people working full time on Kotlin, which is yet another testament to JetBrains’ commitment to Kotlin.

The numbers

Let’s take a look at some numbers:

Talking about lines of code, the number of these in open repositories on GitHub is growing exponentially, JetBrains’ projects excluded:

Kotlin GitHub Adoption

And of course we have a growing list of companies using Kotlin, including Prezi and Expedia. By the way, if you’re using Kotlin, make sure to send us a Pull Request.

The upcoming roadmap

As of 1.0, we are committed to long-term backward compatibility of the language and its standard library (kotlin-stdlib):

  • A newer compiler will work with older binaries (but older compilers may not understand newer binaries, like javac 1.6 can’t read classes compiled by javac 1.8).
  • Older binaries will keep working with newer binaries at runtime (newer code may require newer dependencies, though).

This applies to JVM/Android support only. JavaScript support remains experimental for now and will have its own release later on.

As for the plans, our nearest goals are (apart from bug fixes):

  • Constant performance improvements for the Kotlin toolchain (this includes, for example, incremental compilation in Gradle, which is in the works now).
  • JavaScript support (including cross-compilation into both the JVM and JS where possible).
  • Support generating Java 8 byte code with optimized lambdas and so on (Java 6 will be actively supported as long as Android users need it).

Tooling updates and bug fixes will be released as incremental updates, i.e. 1.0.X. Bigger changes will first go though an Early Access Program (EAP) and then will be released as 1.1.

How to start

The easiest way to play with the language is through its online mini-IDE:, including Kotlin Koans — a set of introductory problems that guide you through the basics of the language.

To use Kotlin on your machine (including completing Koans offline), use one of these IDEs:

  • IntelliJ IDEA (Ultimate or Community): just create a Kotlin project or a Kotlin file in a Java project.
  • Android Studio: install the plugin through the Plugin Manager.
  • Eclipse: install the plugin through Marketplace.

NOTE: If you are running an older version, you may need to update your Kotlin plugin to 1.0.

To help you get up to speed with Kotlin’s concepts, language docs and tutorials are available from the official web site. Great articles and presentations given by members of our community can be found in the Digest of 2015.

If you’re introducing Kotlin to your Java project, you can make use of the Java-to-Kotlin converter that is built into the IDE, helping migration easier class by class.

Last but not least, make sure you join the discussions on our Forum or Slack.

Once again, we want to thank everyone. We couldn’t have done this without the community.

Have a nice Kotlin! Now 🙂

P.S. See discussions on Reddit and Hacker News

Comments below can no longer be edited.

64 Responses to Kotlin 1.0 Released: Pragmatic Language for the JVM and Android

  1. Avatar

    Rob Bygrave says:

    February 15, 2016


  2. Avatar

    Sergey Igushkin says:

    February 15, 2016

    Awesome news. Congratulations!

  3. Avatar

    svd says:

    February 15, 2016

    Well I have been following Kotlin from its first baby steps until now.
    I really am quite happy to see 1.0 finally.
    Congrats Andrey and also to the whole team!

  4. Avatar

    Dzmitry says:

    February 15, 2016


  5. Avatar

    M Platvoet says:

    February 15, 2016


  6. Avatar

    Francis Fredrick Valero says:

    February 15, 2016

    Congratulations Andrey and the whole Kotlin team!!!!!!!!!!!!!!!!!!

  7. Avatar

    mintori says:

    February 15, 2016

    Well done team!

  8. Avatar

    Mikael Gueck says:

    February 15, 2016


  9. Avatar

    Adambl4 says:

    February 15, 2016

    New era began in the android development.

  10. Avatar

    Salomon BRYS says:

    February 15, 2016


  11. Avatar

    Kittinun Vantasin says:

    February 15, 2016

    Awesome!! Great job JB and the team.

  12. Avatar

    Oliver Plohmann says:

    February 15, 2016

    I read this comment by Andrey some days ago: “We are planning to publish 1.0 very-very soon (think days, not weeks)”. I thought that would be too good to be true. But it was true! Congratulations! We have a real alternative to Java now 🙂

  13. Avatar

    cypressious says:

    February 15, 2016

    Congratulations! You make Android dev fun again.

  14. Avatar

    Максим Наумов says:

    February 15, 2016

    А вот я с критикой. Что на счет KT-10691? Это же наследование, одна из самых базовых вещей, без которой языка не было бы. И с багом.
    Кажется, у вас становится нормой выпускать “финальные версии” с багами (это я намекаю на AppCode).

    Нет, я пользуюсь Kotlin начиная с последних бета-версий, и уже настолько подсел на него, что больше не хочу возвращаться к Java. А при любой возможности советую его друзьям и знакомым. И именно поэтому мне хочется, чтобы Kotlin был безупречным. На практике это означает, что я хочу иметь возможность делать с его помощью не меньше, чем с помощью Java. Но вот кое-что не могу.

    Ведь именно безупречная работа продукта приносит удовольствие от работы с ним. И по большей части так оно и есть. Но недостатки вроде указанного выше – ложка дегтя в бочке Kotlin.

    Надеюсь, что вы правильно меня поймете. А еще надеюсь, что вы все же начнете фиксить все до единого известные баги прежде, чем называть что-то релизом.

    • Avatar

      Andrey Breslav says:

      February 23, 2016

      Баг, конечно, неприятный, починим.

  15. Avatar

    Eugene says:

    February 15, 2016

    Great news!

  16. Avatar

    Geobert Quach says:

    February 15, 2016

    This is fantastic! Congrats!

  17. Avatar

    QuangSon says:

    February 15, 2016


  18. Avatar

    Arild says:

    February 15, 2016

    Fantastic (much anticipated) news! Congratulations!

  19. Avatar

    Ramon J. Long III says:

    February 15, 2016

    Congratulations! Developing and releasing a new language, and one that has received such warm reception, is no easy task. Kotlin is an interesting language, and I hope to see it in use for many years to come. Congratulations all around for JetBrains and everyone that contributed.

  20. Avatar

    Steve says:

    February 15, 2016


  21. Avatar

    Peter says:

    February 15, 2016

    Congrats and thanks for creating this awesome new langauge! Can’t wait for more people to adopt Kotlin.

  22. Avatar

    Misha says:

    February 15, 2016

    No more breaking changes!

  23. Avatar

    Artem Borisovskiy says:

    February 15, 2016

    Excellent news. Writing in Kotlin is so much fun compared to Java 🙂

  24. Avatar

    Cliff says:

    February 15, 2016

    Excellent work and my heartfelt congratulations!

  25. Avatar

    Nik says:

    February 15, 2016

    I hope you guys will fix kapt issues in the future.

  26. Avatar

    Yehonatan Levi says:

    February 15, 2016


  27. Avatar

    David Vydra says:

    February 15, 2016

    Congrats! Would love to have a tech talk at GE Digital in San Ramon, CA.

  28. Avatar

    Steve Holmes says:

    February 15, 2016

    Congratulations, Gents! And let me also congratulate you on having a clear vision. I think it’s one of the most compelling reasons to use Kotlin in production.

  29. Avatar

    Julius Kunze says:

    February 15, 2016

    Congratulations, this is amazing!

  30. Avatar

    Oliver Thomas says:

    February 15, 2016

    Nice one, team Kotlin!

  31. Avatar

    Laurent says:

    February 15, 2016

    I wrote a serie of 4 posts about Kotlin. That’s in French but Google Translate usually works well enough. Conclusion: Kotlin has the potential to supplant orchestration scripts like Python, Ansible, and some others.

  32. Avatar

    Mohammad Sarbandi says:

    February 15, 2016

    Awesome. Congratulations!!!

  33. Avatar

    Craig says:

    February 15, 2016

    I want to use it. Can you point me where to start? Keep in mind I need more experience with JVM stuff in general.

  34. Avatar

    Johannes says:

    February 16, 2016

    Now we just need Google to use Kotlin as main language for Android…

  35. Avatar

    Skin27 says:

    February 16, 2016

    Congrats. A small line of Kotlin, a giant leap for app development.

  36. Avatar

    Michał Kowol says:

    February 16, 2016

    Good job!

  37. Avatar

    Jens Driller says:

    February 16, 2016

    Congrats on the 1st official release!

    Good job. Keep it up! 🙂

  38. Avatar

    ken says:

    February 16, 2016

    Great work!

    Hope the backward compatibility is true…have worked w/ some frameworks where everything breaks on the next version and it was a giant pain 🙁

  39. Avatar

    kuno says:

    February 16, 2016

    Congratulations, guys.

    Really great jobs has been done!

  40. Avatar

    Reza says:

    February 16, 2016

    Congratulations, this is really great news.

  41. Avatar

    foobra says:

    February 16, 2016

    Will you guys talking to Google and consider tread Kotlin as the default language in Android deveolopment?

  42. Avatar

    borrom says:

    February 16, 2016


  43. Avatar

    Suresh says:

    February 16, 2016

    Awesome news.. Congratulations!

  44. Avatar

    Анхбаяр says:

    February 16, 2016

    Nice! Congraz 🙂

  45. Avatar

    Christian says:

    February 16, 2016

    You did a really great job! In many projects Kotlin will be the only alternative to Java. Kotlin is very readable, robust and equipped with good tooling from the start. Thank you, JetBrains!

  46. Avatar

    Bartosz Kosarzycki says:

    February 16, 2016

    Congrats! I’m already using Kotlin in my Android projects. So far it’s great!
    I’d also done a presentation about Kotlin during our company’s Lightning talks.
    Take a look here – Kotlin Developer Starter in Android projects.

  47. Avatar

    Yuriy Trukhin says:

    February 16, 2016


  48. Avatar

    Paweł Gajda says:

    February 16, 2016


  49. Avatar

    HE Guangyu says:

    February 16, 2016

    Congratulations. Thank the Great Team!

  50. Avatar

    Mikhail says:

    February 16, 2016

    Concerning “and future versions of Kotlin must not break existing code. As such, whatever choices we’ve made we need to stick with them.” – Are you sure if it’s right choice?
    What’s wrong if in 10-15 years (when there will be other programming paradigms) – changing/updating language syntax to support new concepts. Once in 10-15 seems – it seems not huge problem.
    I think you as nobody else know what “perpetual backward compatibility” means in practice like in Java: defective generics implementation, outdated bad collection design etc. It seems in a 5-10 years – you can get the same issues when implementing new syntax concepts.

    We already have Java with perpetual backward compatibility and all related issues with it, why you decided to choose the same way?

    • Avatar

      Andrey Breslav says:

      February 18, 2016

      It looks like too few people are ready to rely on a language without such guarantees, which is perfectly understandable

  51. Avatar

    Richard Gerlocke says:

    February 17, 2016

    Gratz again…. This is the first I’ve heard of Kotlin, but I will try it out in Android Studio tonight!

  52. Avatar

    BASIL says:

    February 17, 2016


  53. Avatar

    Sofus Mortensen says:

    February 17, 2016

    Excellent news! Good job, thanks!

  54. Avatar

    Sanu K Soman says:

    February 17, 2016

    Congratzzzz !.. Now its time to start Kotlin programmimg 🙂

  55. Avatar

    snail says:

    February 18, 2016


  56. Avatar

    xzgyb says:

    February 18, 2016

    Congratulations!! I concern kotlin all the time. Now it release 1.0 finally.
    Very thanks!

  57. Avatar

    Tim van der Leeuw says:

    February 18, 2016

    Release of the 1.0.0 version got me curious again so I started playing around a little bit with the REPL, after looking at a couple of examples.

    I found it almost trivially easy however to assign NULL to a value of type String – java interop is the weakness here.

    Has this already been reported? If not, I feel bad for not trying out these things earlier 🙁

    Copy pasting from my REPL session in IntelliJ, so errors are not part of the console output:

    var s1: String = “s1”
    Tim van der Leeuw

    s1 = java.lang.System.getProperty(“”)

    s1 = java.lang.System.getProperty(“none”)




    • Avatar

      Andrey Breslav says:

      February 19, 2016

      The fact that this code is allowed is the expected behavior: we can’t help it much when we interact with Java (we tried to be more strict here, and it has proven very impractical). In pure Kotlin you have a lot more type-safety than in Kotlin+Java, but even with this kind of cases we can catch a lot of bugs statically.

      What is a bug here is that this code fails too late: it should have thrown an exception when the actual null was assigned to s1. Please report this issue. Thanks!

  58. Avatar

    Duy Bui says:

    February 24, 2016

    Owesome! Congrats team.

  59. Avatar

    moreo says:

    February 29, 2016

    What do you think about Kotlin? Let vote guys:

  60. Avatar

    Minimum says:

    February 29, 2016