Kotlin compiler options
Each release of Kotlin includes compilers for the supported targets: JVM, JavaScript, and native binaries for supported platforms.
These compilers are used by:
The IDE, when you click the Compile or Run button for your Kotlin project.
Gradle, when you call
gradle build
in a console or in the IDE.Maven, when you call
mvn compile
ormvn test-compile
in a console or in the IDE.
You can also run Kotlin compilers manually from the command line as described in the Working with command-line compiler tutorial.
Compiler options
Kotlin compilers have a number of options for tailoring the compiling process. Compiler options for different targets are listed on this page together with a description of each one.
There are several ways to set the compiler options and their values (compiler arguments):
In IntelliJ IDEA, write in the compiler arguments in the Additional command line parameters text box in Settings/Preferences | Build, Execution, Deployment | Compiler | Kotlin Compiler.
If you're using Gradle, specify the compiler arguments in the
compilerOptions
property of the Kotlin compilation task. For details, see Gradle compiler options.If you're using Maven, specify the compiler arguments in the
<configuration>
element of the Maven plugin node. For details, see Maven.If you run a command-line compiler, add the compiler arguments directly to the utility call or write them into an argfile.
For example:
Common options
The following options are common for all Kotlin compilers.
-version
Display the compiler version.
-nowarn
Suppress the compiler from displaying warnings during compilation.
-Werror
Turn any warnings into a compilation error.
-verbose
Enable verbose logging output which includes details of the compilation process.
-script
Evaluate a Kotlin script file. When called with this option, the compiler executes the first Kotlin script (*.kts
) file among the given arguments.
-help (-h)
Display usage information and exit. Only standard options are shown. To show advanced options, use -X
.
-X
Display information about the advanced options and exit. These options are currently unstable: their names and behavior may be changed without notice.
-kotlin-home path
Specify a custom path to the Kotlin compiler used for the discovery of runtime libraries.
-P plugin:pluginId:optionName=value
Pass an option to a Kotlin compiler plugin. Core plugins and their options are listed in the Core compiler plugins section of the documentation.
-language-version version
Provide source compatibility with the specified version of Kotlin.
-api-version version
Allow using declarations only from the specified version of Kotlin bundled libraries.
-progressive
Enable the progressive mode for the compiler.
In the progressive mode, deprecations and bug fixes for unstable code take effect immediately, instead of going through a graceful migration cycle. Code written in the progressive mode is backwards compatible; however, code written in a non-progressive mode may cause compilation errors in the progressive mode.
@argfile
Read the compiler options from the given file. Such a file can contain compiler options with values and paths to the source files. Options and paths should be separated by whitespaces. For example:
To pass values that contain whitespaces, surround them with single (') or double (") quotes. If a value contains quotation marks in it, escape them with a backslash (\).
You can also pass multiple argument files, for example, to separate compiler options from source files.
If the files reside in locations different from the current directory, use relative paths.
-opt-in annotation
Enable usages of API that requires opt-in with a requirement annotation with the given fully qualified name.
Kotlin/JVM compiler options
The Kotlin compiler for JVM compiles Kotlin source files into Java class files. The command-line tools for Kotlin to JVM compilation are kotlinc
and kotlinc-jvm
. You can also use them for executing Kotlin script files.
In addition to the common options, Kotlin/JVM compiler has the options listed below.
-classpath path (-cp path)
Search for class files in the specified paths. Separate elements of the classpath with system path separators (; on Windows, : on macOS/Linux). The classpath can contain file and directory paths, ZIP, or JAR files.
-d path
Place the generated class files into the specified location. The location can be a directory, a ZIP, or a JAR file.
-include-runtime
Include the Kotlin runtime into the resulting JAR file. Makes the resulting archive runnable on any Java-enabled environment.
-jdk-home path
Use a custom JDK home directory to include into the classpath if it differs from the default JAVA_HOME
.
-Xjdk-release=version
Specify the target version of the generated JVM bytecode. Limit the API of the JDK in the classpath to the specified Java version. Automatically sets -jvm-target version
. Possible values are 1.8
, 9
, 10
, ..., 21
.
-jvm-target version
Specify the target version of the generated JVM bytecode. Possible values are 1.8
, 9
, 10
, ..., 21
. The default value is 1.8
.
-java-parameters
Generate metadata for Java 1.8 reflection on method parameters.
-module-name name (JVM)
Set a custom name for the generated .kotlin_module
file.
-no-jdk
Don't automatically include the Java runtime into the classpath.
-no-reflect
Don't automatically include the Kotlin reflection (kotlin-reflect.jar
) into the classpath.
-no-stdlib (JVM)
Don't automatically include the Kotlin/JVM stdlib (kotlin-stdlib.jar
) and Kotlin reflection (kotlin-reflect.jar
) into the classpath.
-script-templates classnames[,]
Script definition template classes. Use fully qualified class names and separate them with commas (,).
Kotlin/JS compiler options
The Kotlin compiler for JS compiles Kotlin source files into JavaScript code. The command-line tool for Kotlin to JS compilation is kotlinc-js
.
In addition to the common options, Kotlin/JS compiler has the options listed below.
-libraries path
Paths to Kotlin libraries with .meta.js
and .kjsm
files, separated by the system path separator.
-main {call|noCall}
Define whether the main
function should be called upon execution.
-meta-info
Generate .meta.js
and .kjsm
files with metadata. Use this option when creating a JS library.
-module-kind {umd|commonjs|amd|plain}
The kind of JS module generated by the compiler:
umd
- a Universal Module Definition modulecommonjs
- a CommonJS moduleamd
- an Asynchronous Module Definition moduleplain
- a plain JS module
To learn more about the different kinds of JS module and the distinctions between them, see this article.
-no-stdlib (JS)
Don't automatically include the default Kotlin/JS stdlib into the compilation dependencies.
-output filepath
Set the destination file for the compilation result. The value must be a path to a .js
file including its name.
-output-postfix filepath
Add the content of the specified file to the end of the output file.
-output-prefix filepath
Add the content of the specified file to the beginning of the output file.
-source-map
Generate the source map.
-source-map-base-dirs path
Use the specified paths as base directories. Base directories are used for calculating relative paths in the source map.
-source-map-embed-sources {always|never|inlining}
Embed source files into the source map.
-source-map-names-policy {simple-names|fully-qualified-names|no}
Add variable and function names that you declared in Kotlin code into the source map.
Setting | Description | Example output |
---|---|---|
| Variable names and simple function names are added. (Default) |
|
| Variable names and fully qualified function names are added. |
|
| No variable or function names are added. | N/A |
-source-map-prefix
Add the specified prefix to paths in the source map.
Kotlin/Native compiler options
Kotlin/Native compiler compiles Kotlin source files into native binaries for the supported platforms. The command-line tool for Kotlin/Native compilation is kotlinc-native
.
In addition to the common options, Kotlin/Native compiler has the options listed below.
-enable-assertions (-ea)
Enable runtime assertions in the generated code.
-g
Enable emitting debug information. This option lowers the optimization level and should not be combined with the -opt
option.
-generate-test-runner (-tr)
Produce an application for running unit tests from the project.
-generate-no-exit-test-runner (-trn)
Produce an application for running unit tests without an explicit process exit.
-include-binary path (-ib path)
Pack external binary within the generated klib file.
-library path (-l path)
Link with the library. To learn about using libraries in Kotlin/native projects, see Kotlin/Native libraries.
-library-version version (-lv version)
Set the library version.
-list-targets
List the available hardware targets.
-manifest path
Provide a manifest addend file.
-module-name name (Native)
Specify a name for the compilation module. This option can also be used to specify a name prefix for the declarations exported to Objective-C: How do I specify a custom Objective-C prefix/name for my Kotlin framework?
-native-library path (-nl path)
Include the native bitcode library.
-no-default-libs
Disable linking user code with the default platform libraries distributed with the compiler.
-nomain
Assume the main
entry point to be provided by external libraries.
-nopack
Don't pack the library into a klib file.
-linker-option
Pass an argument to the linker during binary building. This can be used for linking against some native library.
-linker-options args
Pass multiple arguments to the linker during binary building. Separate arguments with whitespaces.
-nostdlib
Don't link with stdlib.
-opt
Enable compilation optimizations and produce a binary with better runtime performance. It's not recommended to combine it with the -g
option, which lowers the optimization level.
-output name (-o name)
Set the name for the output file.
-entry name (-e name)
Specify the qualified entry point name.
-produce output (-p output)
Specify output file kind:
program
static
dynamic
framework
library
bitcode
-repo path (-r path)
Library search path. For more information, see Library search sequence.
-target target
Set hardware target. To see the list of available targets, use the -list-targets
option.