Kotlin/Native is an LLVM backend for the Kotlin compiler, runtime implementation, and native code generation facility using the LLVM toolchain.
Kotlin/Native is primarily designed to allow compilation for platforms where virtual machines are not desirable or possible (such as iOS), or where a developer is willing to produce a reasonably sized self-contained program without the need to ship an additional execution runtime.
The most complete experience with Kotlin/Native can be achieved by using Gradle, IntelliJ IDEA or Android Studio with KMP plugin if you target iOS.
If you are interested in using Kotlin/Native for iOS, then Kotlin Multiplatform portal might be useful for you.
Command line compiler is also available.
More information can be found in the overviews of Kotlin/Native and Kotlin Multiplatform.
On macOS Kotlin/Native requires Xcode 12.5 or newer.
You can contribute to Kotlin/Native in many ways. See the relevant page on the website.
See also the general contribution guidelines for this repository.
Prerequisites:
- configure Kotlin build as specified in main readme
- at the root directory of the repository,
create
local.propertiesfile withkotlin.native.enabled=trueline - macOS: Xcode 26.0 or newer
-
if you're seeing a build error like this
> Failed to apply plugin class 'org.jetbrains.kotlin.xcode.XcodeOverridePlugin'. > org.jetbrains.kotlin.konan.MissingXcodeException: An error occurred during an xcrun execution. Make sure that Xcode and its command line tools are properly installed. Failed command: /usr/bin/xcrun -f bitcode-build-tool Try running this command in Terminal and fix the errors by making Xcode (and its command line tools) configuration correct.- try running
sudo xcode-select -s /Applications/Xcode.app/Contents/Developer - check if it helped via
xcrun --find bitcode-build-toolwhich should print the correct path
- try running
-
on
macOS aarch64, CInterop functionality is available only using aarch64 JDK builds, e.g. Eclipse Temurin 17.0.5 or Azul Zulu JDK8Note: using
JDK x86_64onmacOS aarch64will causejava.lang.UnsatisfiedLinkErrorforlibclang.dylib
-
- Linux: glibc 2.23 or newer
- Windows:
- Microsoft C++ build tools for Visual Studio 2019 14.29. It might work with other VS2019 versions, but this was never tested.
- Windows SDK 10.0.18362.0 or newer
The commands below should be run from the repository root.
To compile the basic compiler distribution from sources, run following command:
./gradlew :kotlin-native:dist
It will build compiler and stdlib for host target, without platform libraries.
To get platform libraries, add distPlatformLibs task, e.g.
./gradlew :kotlin-native:dist :kotlin-native:distPlatformLibs
To run the full build:
./gradlew :kotlin-native:bundle
This will produce compiler and libraries for all supported targets.
After any of the commands above, ./dist will contain Kotlin/Native distribution.
You can use it like a distribution of
command-line compiler.
Or configure Gradle to use it -- just add the following line to
gradle.properties in your Gradle project:
kotlin.native.home=/path/to/kotlin/kotlin-native/dist
To compile your programs with a command-line compiler, use:
./dist/bin/kotlinc-native hello.kt -o hello
To compile a faster, optimized binary, use -opt:
./dist/bin/kotlinc-native hello.kt -o hello -opt
To import a C or Objective-C library, use ./dist/bin/cinterop tool.
See the documentation for more details.
Note: on macOS aarch64, JDK aarch64 is required
For tests, use ./gradlew :nativeCompilerTest :nativeCompilerUnitTest --continue.
Note: on macOS aarch64, JDK aarch64 is required
For more details see Testing.
More tips and tricks that might be useful when developing or debugging Kotlin/Native can be found in HACKING.md.
Some Kotlin/Native compiler internals are described in the corresponding docs directory