Kotlin: Reading the JetBrains/kotlin Repository Before You Adopt It
The Kotlin Programming Language.
At a glance
- What is it?
- The JetBrains/kotlin repository is the compiler, standard library, Gradle plugin and Maven plugin for the Kotlin language, licensed Apache 2.0 according to its own badge. This article covers what is verifiable from the repository material, how the build is wired, and where the project is the wrong dependency to take on.
- Who is it for?
- Adopt Kotlin if you are building JVM, Android, iOS or web targets and want one language across them, with the compiler, stdlib and Gradle plugin maintained in a single repository. Do not treat this repository as your integration point if you only need the compiler: pull the released artifacts from Maven Central instead of building from source.
- Can I use it commercially?
- Not without permission. GitHub finds no licence file in the repository, and without a licence all rights are reserved by default: you may read the code but not reuse it. Check the README, or ask the authors, before using it.
- Is it still maintained?
- Yes. The repository received new commits within the last day.
- What is it written in?
- Mainly Kotlin, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on September 15, 2026, and from our analysis. They are not legal advice.
DEEP OPEN-SOURCE ANALYSIS
What the Kotlin repository actually contains
This is not a library you add to a dependency list in the usual sense. The repository holds the Kotlin compiler, the standard library, the reflection and kotlin-test modules, the Gradle plugin, the Maven plugin, and the Kotlin/Native toolchain, which lives under kotlin-native/. The README describes Kotlin as a concise multiplatform language developed by JetBrains and contributors. The topics list on the repository names the pieces directly: compiler, gradle-plugin, intellij-plugin, kotlin-library, maven-plugin, wasm, webassembly. The intended audience is anyone writing code that has to run on more than one target while sharing logic, and the README frames multiplatform support as one of Kotlin's key benefits, pointing at sharing business logic and UI between Android, iOS, desktop and web. If you only ever compile for a single JVM target, most of the repository is irrelevant to you, and the relevant part is a released artifact, not this source tree.
How the compiler, plugins and stdlib fit together
The repository layout separates the command line compiler from the IDE integration. The README states that intellij-core is part of the command line compiler and contains only the necessary APIs, while idea-full is a full IntelliJ IDEA Community Edition used by the plugin module. That distinction matters if you are trying to understand build weight: pulling the IDE plugin path drags in a complete IDE distribution as a build dependency. The stdlib, reflect and kotlin-test modules are tested together through the coreLibsTest task, which tells you they are versioned and validated as one unit rather than independently. The compiler itself is validated through compilerTest, and the Gradle plugin through gradlePluginTest. Kotlin/Native is a separate build path with its own README under kotlin-native/. The data flow is conventional for a compiler project: source is parsed and compiled by the compiler module, the Gradle or Maven plugin invokes it during a build, and the stdlib is resolved as a runtime dependency. Nothing in the README describes the internal compiler pipeline, so any claim about IR, frontend or backend stages would be outside what can be verified here.
Building from source: toolchains, timeouts and long paths
The build is Gradle-based. On Unix or macOS the README gives ./gradlew <tasks-and-options>; on Windows it is gradlew <tasks-and-options>. The repository uses Gradle toolchains to select and auto-provision the required JDKs from Eclipse Adoptium. If you want to supply JDKs yourself through environment variables, the supported variable names are in gradle.properties, and Gradle's auto-detection can be turned off with -Porg.gradle.java.installations.auto-detect=false, either on the command line or in $GRADLE_USER_HOME/gradle.properties. On Windows, the README notes you may need git config core.longpaths true. The first configuration downloads intellij-core and idea-full, which the README describes as quite large, and it explicitly warns that depending on connection quality you may face timeouts, in which case you can raise them with ./gradlew -Dhttp.socketTimeout=60000 -Dhttp.connectionTimeout=60000. The named tasks are clean, dist (which assembles the compiler distribution into dist/kotlinc/), install (which builds and installs all public artifacts into the local Maven repository), coreLibsTest, gradlePluginTest and compilerTest. To reproduce the TeamCity build, pass -Pteamcity=true; the README notes that local builds do not run proguard and have jar compression disabled by default. Some artifacts, mainly the Maven plugin ones, are built separately with Maven, with details in libraries/ReadMe.md.
Dependency verification is a hard gate, not a suggestion
The repository enables Gradle dependency verification for all Gradle builds. Gradle checks md5 and sha256 hashes of used dependencies and fails the build with a Dependency verification failed error when local artifacts are missing or differ from the hashes recorded in gradle/verification-metadata.xml. The README states that this file should only be updated with commits that modify the build. That is the single most likely source of friction for a contributor or a downstream fork. If you vendor a dependency, bump a version, or work behind a proxy that substitutes artifacts, your build stops until the metadata file is amended, and amending it is expected to be a build-changing commit rather than a casual edit. There is no documented escape hatch in the README, so plan for the metadata file to be part of your change, not an obstacle to route around.
Where Kotlin is the wrong choice
The README does not enumerate limitations, and it contains no performance figures, no user counts and no compatibility guarantees. What can be said is structural. Kotlin Multiplatform targets are listed in a separate supported-platforms documentation page, and the README links to it rather than reproducing the list, so the set of supported targets is not fixed by this repository snapshot and must be checked against the docs for your specific target. The build environment is demanding: Gradle toolchains, auto-provisioned JDKs, large first-run downloads and a verification metadata file that fails builds on hash mismatch. If your environment cannot reach Eclipse Adoptium or cannot tolerate a multi-gigabyte first configuration, building from source is the wrong path. If you need a language whose toolchain you can vendor in a single small binary with no Gradle involvement, this repository's build model works against you. And if your platform is not on the supported-platforms list, multiplatform code sharing is a promise the project does not make for you.
The realistic alternative and the actual difference
The obvious comparison is Java on the JVM. Both compile to JVM bytecode, both run on the same virtual machine, and both can be consumed from Gradle or Maven. The difference is in the source model and the sharing story. Java's toolchain is the JDK itself, distributed as a single installable, with javac invoked directly or through a build tool; there is no separate compiler repository, no IDE distribution pulled in as a build dependency, and no dependency verification metadata file gating the build. Kotlin's approach is to put the compiler, the stdlib, the Gradle plugin, the Maven plugin and the native toolchain under one repository and one release train, which is why the version numbers in the release list (v2.4.20, with v2.4.20-RC3 and v2.4.20-RC2 preceding it) cover all of those pieces together. If your requirement is a single language across Android, iOS, desktop and web with shared business logic, Java does not offer that and Kotlin's repository structure is built around it. If your requirement is a compiler you can reason about in isolation, Java's separation is simpler to operate.
Releases, maintenance and what the licence permits
The release cadence visible in the repository is tight and includes pre-release candidates: v2.4.20 on 2026-09-07, preceded by v2.4.20-RC3 on 2026-09-02 and v2.4.20-RC2 on 2026-08-26. The repository was last pushed on 2026-09-10 and is not archived. The licence badge in the README points at the Apache License 2.0, and the badge links to apache.org/licenses/LICENSE-2.0. The repository metadata supplied here lists the licence as unknown, which conflicts with the README badge; the README is the more specific source, but you should confirm the licence file in the repository root before relying on it. This is not legal advice. What Apache 2.0 generally means in practice is that you can use, modify and redistribute the code, including commercially, subject to the licence's notice and attribution conditions, but the exact obligations depend on how you distribute and what you modify. Upgrading means tracking a release train that ships release candidates ahead of stable versions, and if you build from source rather than consuming Maven Central artifacts, each upgrade reopens the dependency verification metadata question.
Who should take this on, and what to check first
Take this on if you are writing code for more than one target and want the compiler, standard library and build plugins maintained together, with the Gradle and Maven plugins published under the org.jetbrains.kotlin group on Maven Central (the README's Maven Central badge points at kotlin-maven-plugin under that group). Do not take this on if you only need a JVM compiler and would be happier with the JDK's own javac, or if your build environment cannot provision JDKs, tolerate large first-run downloads, or maintain a verification-metadata.xml. Before you commit, check three concrete things: the supported-platforms page for your target, the JDK variables documented in gradle.properties if you are supplying your own toolchains, and the licence file in the repository root, since the metadata and the README badge disagree. If you are consuming Kotlin rather than building it, the practical entry point is the released artifact, not this source tree.
Editorial conclusion
Adopt Kotlin if you are building JVM, Android, iOS or web targets and want one language across them, with the compiler, stdlib and Gradle plugin maintained in a single repository. Do not treat this repository as your integration point if you only need the compiler: pull the released artifacts from Maven Central instead of building from source. Before committing, verify three things: that your target platform is listed in the supported-platforms documentation, that your build can accommodate the JDK toolchain requirements, and that the Apache 2.0 licence terms in the repository header match what your distribution model allows.
Community notes