Version: 3.1


This tutorial lets you write an Android/Kotlin application and use Koin inject and retrieve your components.

Get the code

Gradle Setup

Add the Koin Android dependency like below:

// Add Maven Central to your repositories if needed
repositories {
dependencies {
// Koin for Android
implementation "io.insert-koin:koin-android:$koin_version"

Our components

Let's create a HelloRepository to provide some data:

interface HelloRepository {
fun giveHello(): String
class HelloRepositoryImpl() : HelloRepository {
override fun giveHello() = "Hello Koin"

Let's create a presenter class, for consuming this data:

class MySimplePresenter(val repo: HelloRepository) {
fun sayHello() = "${repo.giveHello()} from $this"

Writing the Koin module

Use the module function to declare a module. Let's declare our first component:

val appModule = module {
// single instance of HelloRepository
single<HelloRepository> { HelloRepositoryImpl() }
// Simple Presenter Factory
factory { MySimplePresenter(get()) }

We declare our MySimplePresenter class as factory to have a new instance created each time our Activity need one.

Start Koin

Now that we have a module, let's start it with Koin. Open your application class, or make one (don't forget to declare it in your manifest.xml). Just call the startKoin() function:

class MyApplication : Application(){
override fun onCreate() {
// Start Koin

Injecting dependencies

The MySimplePresenter component will be created with HelloRepository instance. To get it into our Activity, let's inject it with the by inject() delegate injector:

class MySimpleActivity : AppCompatActivity() {
// Lazy injected MySimplePresenter
val firstPresenter: MySimplePresenter by inject()
override fun onCreate(savedInstanceState: Bundle?) {

The by inject() function allows us to retrieve Koin instances, in Android components runtime (Activity, fragment, Service...)


The get() function is here to retrieve directly an instance (non lazy)