Skip to main content

Kotlin SDK

RBS provides first-class Kotlin support with automatic Kotlin compiler and JDK management, Maven-compatible dependency resolution, JUnit 5 auto-inclusion, Spring Boot support, and linting.

Setup

Toolchain

Register both Java and Kotlin toolchains — Kotlin requires a JVM.
load("@rbs//java/toolchain.rbs", "java_toolchain", "java_test_deps")
load("@rbs//kotlin/toolchain.rbs", "kotlin_toolchain")

# JDK (Kotlin requires JVM)
java_toolchain(name = "java", version = "17.0.11")

# Kotlin compiler
kotlin_toolchain(name = "kotlin", version = "2.0.21")

# JUnit 5 for tests
java_test_deps()

Dependencies

Define external packages using kotlin_repository. Uses the same Maven coordinate format as Java.
load("@rbs//kotlin/dependencies.rbs", "kotlin_repository")

kotlin_repository(
    name = "spring_boot_web",
    package = "org.springframework.boot:spring-boot-starter-web",
    version = "3.2.2",
)

kotlin_repository(
    name = "kotlinx_coroutines",
    package = "org.jetbrains.kotlinx:kotlinx-coroutines-core",
    version = "1.8.1",
)

Rules

kotlin_library

Creates a reusable Kotlin library (JAR).
load("@rbs//kotlin/rules.rbs", "kotlin_library")

kotlin_library(
    name = "greeter",
    srcs = ["Greeter.kt"],
)
AttributeTypeDescription
namestringUnique target name (required).
srcslistKotlin source files.
depslistDependencies (local or @external://).
runtime_depslistRuntime-only dependencies (not for compilation).
resourceslistResource files to include in the JAR.

kotlin_binary

Creates an executable Kotlin application.
load("@rbs//kotlin/rules.rbs", "kotlin_binary")

kotlin_binary(
    name = "hello",
    srcs = ["Main.kt"],
    deps = [":greeter"],
    main = "MainKt",
)

# With external dependencies (coroutines)
kotlin_binary(
    name = "async_hello",
    srcs = ["AsyncMain.kt"],
    deps = [
        ":greeter",
        "@external://org_jetbrains_kotlinx_kotlinx-coroutines-core:1.8.1",
    ],
    main = "AsyncMainKt",
)
AttributeTypeDescription
namestringUnique target name (required).
srcslistKotlin source files.
mainstringFully qualified main class (required).
depslistDependencies.
runtime_depslistRuntime-only dependencies.
resourceslistResource files.
javaoptslistJVM options.

kotlin_test

Runs Kotlin tests. JUnit 5 is automatically included.
load("@rbs//kotlin/rules.rbs", "kotlin_test")

kotlin_test(
    name = "greeting_service_test",
    srcs = [
        "src/main/kotlin/com/example/GreetingService.kt",
        "src/test/kotlin/com/example/GreetingServiceTest.kt",
    ],
    args = ["--select-class=com.example.GreetingServiceTest"],
)

kotlin_lint / kt_lint

Runs linting on Kotlin source files (supports ktlint).
load("@rbs//kotlin/lint.rbs", "kt_lint")

kt_lint(
    name = "lint",
    srcs = ["Main.kt", "Greeter.kt", "AsyncMain.kt"],
    ktlint = True,
)

Example: Kotlin Spring Boot

load("@rbs//java/toolchain.rbs", "java_toolchain", "java_test_deps")
load("@rbs//kotlin/toolchain.rbs", "kotlin_toolchain")
load("@rbs//kotlin/dependencies.rbs", "kotlin_repository")

java_toolchain(name = "java", version = "17.0.11")
kotlin_toolchain(name = "kotlin", version = "2.0.21")
java_test_deps()

kotlin_repository(
    name = "spring_boot_web",
    package = "org.springframework.boot:spring-boot-starter-web",
    version = "3.2.2",
)