Skip to content

JetBrains/kotlin-compiler-server

Folders and files

NameName
Last commit message
Last commit date

Latest commit

74ad94f Β· Apr 17, 2025
Apr 2, 2025
Apr 15, 2025
Apr 15, 2025
Apr 15, 2025
Apr 17, 2025
Apr 15, 2025
Apr 15, 2025
Apr 15, 2025
Apr 15, 2025
Apr 17, 2025
Mar 1, 2021
Mar 20, 2024
Mar 18, 2025
Sep 22, 2020
Mar 27, 2025
Jan 6, 2020
Sep 20, 2024
Apr 15, 2025
Mar 27, 2025
Aug 19, 2024
Sep 2, 2024
Aug 20, 2024
Aug 20, 2024
Apr 15, 2025
Mar 7, 2024

Repository files navigation

Kotlin compiler server

official JetBrains project Build status Java CI TC status Kotlin GitHub license

A REST server for compiling and executing Kotlin code. The server provides the API for Kotlin Playground library.

How to start 🏁

Simple Spring Boot application

Download Kotlin dependencies and build an executor before starting the server:

$ ./gradlew build -x test 

Start the Spring Boot project. The main class: com.compiler.server.CompilerApplication

With Docker

To build the app inside a Docker container, run the following command from the project directory:

$ ./docker-image-build.sh

From Amazon lambda

Based on aws-serverless-container.

$ ./gradlew buildLambda

Getting .zip file from build/distributions.

Lambda handler: com.compiler.server.lambdas.StreamLambdaHandler::handleRequest.

Publish your Lambda function: you can follow the instructions in AWS Lambda's documentation on how to package your function for deployment.

From Kotless

Add Kotless and remove aws-serverless-container =)

API Documentation πŸ“ƒ

Swagger url: http://localhost:8080/swagger-ui/

How to add your dependencies to kotlin compiler πŸ“š

Just put whatever you need as dependencies to build.gradle.kts via a task called kotlinDependency:

 kotlinDependency "your dependency"

NOTE: If the library you're adding uses reflection, accesses the file system, or performs any other type of security-sensitive operations, don't forget to configure the executor.policy . Click here for more information about Java Security Policy.

How to set Java Security Policy in executors.policy

If you want to configure a custom dependency, use the marker @LIB_DIR@:

grant codeBase "file:%%LIB_DIR%%/junit-4.12.jar"{
  permission java.lang.reflect.ReflectPermission "suppressAccessChecks";
  permission java.lang.RuntimePermission "setIO";
  permission java.io.FilePermission "<<ALL FILES>>", "read";
  permission java.lang.RuntimePermission "accessDeclaredMembers";
};

CORS configuration

Set the environment variables

ENV Default value
ACCESS_CONTROL_ALLOW_ORIGIN_VALUE *
ACCESS_CONTROL_ALLOW_HEADER_VALUE *

Configure logging

We use prod spring active profile to stream logs as JSON format. You can set the spring profile by supplying -Dspring.profiles.active=prod or set env variable SPRING_PROFILES_ACTIVE to prod value.

Unsuccessful execution logs

In case of an unsuccessful execution in the standard output will be the event with INFO level:

{
  "date_time": "31/Aug/2021:11:49:45 +03:00",
  "@version": "1",
  "message": "Code execution is complete.",
  "logger_name": "com.compiler.server.service.KotlinProjectExecutor",
  "thread_name": "http-nio-8080-exec-1",
  "level": "INFO",
  "level_value": 20000,
  "hasErrors": true,
  "confType": "JAVA",
  "kotlinVersion": "$kotlinVersion"
}

Kotlin release guide πŸš€

  1. Update the kotlin version in libs.versions.toml
  2. Make sure everything is going well via the task:
$ ./gradlew build
  1. Save branch with the name of the kotlin version. Pattern: /^[0-9.]+$/ (optional)
  2. Bump version on GitHub releases (optional)

Gradle Build Scans

Gradle Build Scans can provide insights into an Kotlin Compiler Server Build. JetBrains runs a Gradle Develocity server. that can be used to automatically upload reports.

To automatically opt in add the following to $GRADLE_USER_HOME/gradle.properties.

org.jetbrains.kotlin.compiler.server.build.scan.enabled=true
# optionally provide a username that will be attached to each report
org.jetbrains..kotlin.compiler.server.build.scan.username=John Wick

Also you need to create an access key:

./gradlew provisionDevelocityAccessKey

A Build Scan may contain identifiable information. See the Terms of Use https://gradle.com/legal/terms-of-use/.