Koin Compiler Plugin Setup
The Koin Compiler Plugin is the recommended approach for all new Kotlin 2.x projects. It provides auto-wiring, compile-time safety, and a cleaner DSL syntax.
What is the Compiler Plugin?
The Koin Compiler Plugin is a native Kotlin Compiler Plugin (K2) that:
- Auto-detects constructor dependencies
- Provides compile-time analysis
- Works with both DSL and Annotations
- Generates no visible files
See Introduction to Koin Compiler Plugin for details on features and benefits.
Requirements
- Kotlin 2.x (K2 compiler)
- Gradle 8.x+
Setup
Step 1: Add the Plugin to Settings
In your settings.gradle.kts:
pluginManagement {
plugins {
id("io.insert-koin.compiler.plugin") version "1.0.0" apply false
}
}
Or using plugin resolution:
pluginManagement {
repositories {
mavenCentral()
gradlePluginPortal()
}
}
Step 2: Apply the Plugin
In your module's build.gradle.kts:
plugins {
id("io.insert-koin.compiler.plugin")
}
Step 3: Add Koin Dependencies
dependencies {
implementation(platform("io.insert-koin:koin-bom:4.2.0"))
implementation("io.insert-koin:koin-android") // or your platform
}
Complete Example
settings.gradle.kts
pluginManagement {
plugins {
id("io.insert-koin.compiler.plugin") version "1.0.0" apply false
}
}
dependencyResolutionManagement {
repositories {
mavenCentral()
google()
}
}
app/build.gradle.kts
plugins {
id("com.android.application")
id("org.jetbrains.kotlin.android")
id("io.insert-koin.compiler.plugin")
}
dependencies {
implementation(platform("io.insert-koin:koin-bom:4.2.0"))
implementation("io.insert-koin:koin-android")
implementation("io.insert-koin:koin-androidx-compose")
}
Using the Compiler Plugin
DSL Style
Import from the compiler plugin package:
import org.koin.plugin.module.dsl.*
import org.koin.dsl.module
val appModule = module {
single<Database>()
single<ApiClient>()
single<UserRepository>()
viewModel<UserViewModel>()
}
The Compiler Plugin DSL is in package org.koin.plugin.module.dsl. Classic DSL remains in org.koin.dsl.
Annotation Style
Use annotations on your classes:
@Singleton
class Database
@Singleton
class ApiClient
@Singleton
class UserRepository(
private val database: Database,
private val apiClient: ApiClient
)
@KoinViewModel
class UserViewModel(private val repository: UserRepository) : ViewModel()
@Module
@ComponentScan("com.myapp")
class AppModule
Then use the generated module:
import org.koin.ksp.generated.*
startKoin {
modules(AppModule().module)
}
Or with configuration-based auto-discovery:
@Module
@ComponentScan("com.myapp")
@Configuration // Auto-discovered
class AppModule
// In your app
@KoinApplication
object MyApp
fun main() {
MyApp.startKoin()
}
Configuration Options
Configure the compiler plugin in your build.gradle.kts:
koinCompiler {
// Configuration options
}
Available Options
| Option | Description | Default |
|---|---|---|
configCheck | Enable compile-time configuration validation | false |
Example:
koinCompiler {
configCheck = true
}
More configuration options are planned for future releases.
Multi-Module Projects
For projects with multiple Gradle modules:
Library Module
// feature/build.gradle.kts
plugins {
id("io.insert-koin.compiler.plugin")
}
dependencies {
implementation(platform("io.insert-koin:koin-bom:4.2.0"))
implementation("io.insert-koin:koin-core")
}
// feature/src/main/kotlin/FeatureModule.kt
@Module
@ComponentScan("com.myapp.feature")
@Configuration // Auto-discovered by app module
class FeatureModule
App Module
// app/build.gradle.kts
plugins {
id("io.insert-koin.compiler.plugin")
}
dependencies {
implementation(project(":feature"))
implementation(platform("io.insert-koin:koin-bom:4.2.0"))
implementation("io.insert-koin:koin-android")
}
// app/src/main/kotlin/MyApp.kt
@KoinApplication
class MyApp : Application() {
override fun onCreate() {
super.onCreate()
startKoin()
}
}
With @Configuration on your modules, they're automatically discovered.
Kotlin Multiplatform
The Compiler Plugin works with KMP projects:
// shared/build.gradle.kts
plugins {
id("org.jetbrains.kotlin.multiplatform")
id("io.insert-koin.compiler.plugin")
}
kotlin {
sourceSets {
commonMain.dependencies {
implementation(platform("io.insert-koin:koin-bom:4.2.0"))
implementation("io.insert-koin:koin-core")
}
}
}
Troubleshooting
Plugin Not Found
Ensure the plugin is in your plugin repositories:
// settings.gradle.kts
pluginManagement {
repositories {
mavenCentral()
gradlePluginPortal()
}
}
Kotlin Version Mismatch
The Compiler Plugin requires Kotlin 2.x. Check your Kotlin version:
// build.gradle.kts
plugins {
kotlin("jvm") version "2.0.0" // Requires 2.x
}
Import Errors
Make sure you're importing from the correct package:
// Compiler Plugin DSL
import org.koin.plugin.module.dsl.*
// Classic DSL
import org.koin.dsl.*
Generated Code Not Found
For annotations, ensure you're importing the generated extensions:
import org.koin.ksp.generated.*
Migration
From Classic DSL
- Add the Compiler Plugin
- Update imports to
org.koin.plugin.module.dsl.* - Replace
singleOf(::Class)withsingle<Class>()
See Migrating from DSL to Compiler Plugin.
From KSP Annotations
- Remove KSP plugin and dependencies
- Add Koin Compiler Plugin
- Your annotations stay the same!
See Migrating from KSP to Compiler Plugin.
Next Steps
- DSL Reference - Complete DSL documentation
- Annotations Reference - Complete annotations documentation
- Starting Koin - Configure your application