This plugin only works for Kotlin files so it is recommended to keep Kotlin and Java files separate (in case if the same project contains Java files). As with
targeting the JVM, if not using the default convention, you should specify the source folder using sourceSets:

In addition to the output JavaScript file, the plugin by default creates an additional JS file with binary descriptors.
This file is required if you're building a reusable library that other Kotlin modules can depend on, and should be distributed together with the result of translation.
The generation is controlled by the kotlinOptions.metaInfo option:

Android Studio

If using Android Studio, the following needs to be added under android:

android {
...
sourceSets {
main.java.srcDirs += 'src/main/kotlin'
}
}

android {
...
sourceSets["main"].java.srcDir("src/main/kotlin")
}

This lets Android Studio know that the kotlin directory is a source root, so when the project model is loaded into the IDE it will be properly recognized. Alternatively, you can put Kotlin classes in the Java source directory, typically located in src/main/java.

Configuring Dependencies

In addition to the kotlin-gradle-plugin dependency shown above, you need to add a dependency on the Kotlin standard library:

The Kotlin standard library kotlin-stdlib targets Java 6 and above. There are extended versions of the standard library that add support for some of the features of JDK 7 and JDK 8. To use these versions, add one of the
following dependencies instead of kotlin-stdlib:

Starting with Kotlin 1.1.2, the dependencies with group org.jetbrains.kotlin are by default resolved with the version
taken from the applied plugin. You can provide the version manually using the full dependency notation:

implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"

implementation(kotlin("stdlib", kotlinVersion))

Annotation Processing

Kotlin supports annonation processing via the Kotlin annotation processing tool(kapt). Usage of kapt with Gradle is described on the kapt page.

Incremental Compilation

The Kotlin Gradle plugin supports incremental compilation. Incremental compilation tracks changes of source files between builds so only files affected by these changes would be compiled.

Incremental compilation is supported for Kotlin/JVM and Kotlin/JS projects. It's enabled by default since Kotlin 1.1.1 for Kotlin/JVM and 1.3.20 for Kotlin/JS.

There are several ways to override the default setting:

In Gradle configuration files: add the line kotlin.incremental=<value> for Kotlin/JVM or kotlin.incremental.js=<value> for Kotlin/JS projects either to gradle.properties or to local.properties file. <value> is a boolean value reflecting the usage of incremental compilation.

In Gradle command line parameters: add the parameter -Pkotlin.incremental or -Pkotlin.incremental.js with the boolean value reflecting the usage of incremental compilation. Note that in this case the parameter should be added to each subsequent build, and any build with disabled incremental compilation invalidates incremental caches.

Note that the first build isn't incremental in any case.

Gradle Build Cache Support (since 1.2.20)

The Kotlin plugin supports Gradle Build Cache (Gradle version 4.3 and above is required; caching is disabled with lower versions).

To disable the caching for all Kotlin tasks, set the system property flag kotlin.caching.enabled to false (run the build with the argument -Dkotlin.caching.enabled=false).

If you use kapt, note that the kapt annotation processing tasks are not cached by default. However, you can enable caching for them manually. See the kapt page for details.

Compiler Options

To specify additional compilation options, use the kotlinOptions property of a Kotlin compilation task.

When targeting the JVM, the tasks are called compileKotlin for production code and compileTestKotlin
for test code. The tasks for custom source sets are called accordingly to the compile<Name>Kotlin pattern.

The names of the tasks in Android Projects contain the build variant names and follow the pattern compile<BuildVariant>Kotlin, for example, compileDebugKotlin, compileReleaseUnitTestKotlin.

When targeting JavaScript, the tasks are called compileKotlin2Js and compileTestKotlin2Js respectively, and compile<Name>Kotlin2Js for custom source sets.

Attributes Specific for JS

Generate .meta.js and .kjsm files with metadata. Use to create a library

true

moduleKind

Kind of a module generated by compiler

"plain", "amd", "commonjs", "umd"

"plain"

noStdlib

Don't use bundled Kotlin stdlib

true

outputFile

Output file path

sourceMap

Generate source map

false

sourceMapEmbedSources

Embed source files into source map

"never", "always", "inlining"

sourceMapPrefix

Prefix for paths in a source map

target

Generate JS files for specific ECMA version

"v5"

"v5"

typedArrays

Translate primitive arrays to JS typed arrays

true

Generating Documentation

To generate documentation for Kotlin projects, use Dokka;
please refer to the Dokka README
for configuration instructions. Dokka supports mixed-language projects and can generate output in multiple
formats, including standard JavaDoc.

OSGi

Using Gradle Kotlin DSL

When using Gradle Kotlin DSL, apply the Kotlin plugins using the plugins { ... } block. If you apply them with apply { plugin(...) } instead, you may encounter unresolved references to the extensions generated by Gradle Kotlin DSL. To resolve that, you can comment out the erroneous usages, run the Gradle task kotlinDslAccessorsSnapshot, then uncomment the usages back and rerun the build or reimport the project into the IDE.

Examples

The following examples show different possibilities of configuring the Gradle plugin: