Skip to main content
Version: 4.1

Koin Built-in Performance Monitoring with @Monitor

The @Monitor annotation (available since Koin Annotations 2.2.0) enables automatic performance monitoring and tracing for your Koin components through the Kotzilla Platform, the official tooling platform for Koin.

Setup​

Add the Kotzilla SDK dependency:

dependencies {
implementation "io.kotzilla:kotzilla-core:latest.version"
}

Check the latest version on the Kotzilla documentation.

Configure the allOpen plugin to make monitored classes extensible:

plugins {
id "org.jetbrains.kotlin.plugin.allopen"
}

allOpen {
annotation("org.koin.core.annotation.Monitor")
}

Initialize Kotzilla analytics in your Koin configuration:

import io.kotzilla.sdk.analytics.koin.analytics

fun initKoin() {
startKoin {
// Enable Kotzilla monitoring
analytics()
modules(appModule)
}
}

Basic Usage​

Simply annotate your Koin components with @Monitor:

@Monitor
@Single
class UserService(private val userRepository: UserRepository) {
fun findUser(id: String): User? = userRepository.findById(id)

suspend fun createUser(userData: UserData): User {
return userRepository.save(userData)
}
}

Generated Code​

The compiler automatically generates a proxy class that wraps your component:

/**
* Generated by @Monitor - Koin proxy for 'UserService'
*/
class UserServiceProxy(userRepository: UserRepository) : UserService(userRepository) {
override fun findUser(id: String): User? {
return KotzillaCore.getDefaultInstance().trace("UserService.findUser") {
super.findUser(id)
}
}

override suspend fun createUser(userData: UserData): User {
return KotzillaCore.getDefaultInstance().suspendTrace("UserService.createUser") {
super.createUser(userData)
}
}
}

Koin automatically uses the proxy instead of the original class, transparently capturing:

  • Method execution times
  • Call frequency and patterns
  • Error rates and types
  • Performance bottlenecks

ViewModels Monitoring​

Monitor your ViewModels to track UI performance:

@Monitor
@KoinViewModel
class DetailViewModel(private val repository: Repository) : ViewModel() {
fun loadData(id: String): StateFlow<Data> = repository.getData(id)
}

Kotzilla Platform Integration​

The monitoring data is automatically sent to your Kotzilla Platform workspace, providing:

  • Real-time Performance Dashboard: View method execution times and trends
  • Error Tracking: Monitor exception rates and stack traces
  • Usage Analytics: Understand which components are most heavily used
  • Performance Alerts: Get notified of performance regressions

Create your free Kotzilla account and configure the API key in your kotzilla.json file:

{
"sdkVersion": "latest.version",
"keys": [
{
"appId": "your-app-id",
"applicationPackageName": "com.example.app",
"keyId": "your-key-id",
"apiKey": "your-api-key"
}
]
}

Requirements​

  • Classes annotated with @Monitor must be open (automatically handled by allOpen plugin)
  • Kotzilla SDK dependency must be available at runtime
  • Valid Kotzilla Platform account and API key for data collection
info

The @Monitor annotation only tracks method calls on the monitored class itself. Dependencies injected into the monitored class are not automatically monitored unless they are also annotated with @Monitor.

note

For complete setup instructions and advanced configuration options, visit the Kotzilla Documentation.