s3rius
09/09/2025, 12:24 PMApiClient class that needs a bunch of inputs. Basically like this:
@Single
class ApiClient(
val baseUrl: String,
val enableLogging: Boolean,
val cacheDirectory: Path,
val authClientId: String,
...
)
There are a few ways of providing these dependencies:
1. Tagging them all as ``@InjectedParam`` and doing a ``getApiClient { parametersOf(...) }`` once at the start of the app (to create the singleton). But this seems pretty shaky: it fails to work well with several parameters of the same type (such as ``baseUrl`` and ``authClientId``) and there's no compile-time safety.
2. Adding all those dependencies to Koins dependency graph via ``@Single`` or ``single()``, etc, using ``named<>`` to differentiate them. But that seems like you're polluting the dependency graph with dependencies that are really just details of a particular use-case.
3. Stuffing everything into a ``ApiClientConfig`` class and only providing that class?
4. Using ``@Property`` and providing everything as a properties map?
5. Not using Annotations for classes like this; instead injecting them via code in the main application where these various configurations/settings can be loaded?
I've tried a few different ways over the months but they all seem somewhat messy and dissatisfactory.
Any widsom to share? Preferable from larger codebases where this kind of mess might end up having a big impact on readability or reproducibility?Jonathan
09/09/2025, 2:37 PMcommonMain/ sourceSet. The concern I have is that “native” component scanning doesn’t seem to work. Reviewing the androidMain/ generated code I don’t see Koin declarations for classes I’ve marked with`@Single` . The generated module for actual class NativeModule is empty. I don’t see one at all for iosMain/ . Has anyone else experienced this?
https://kotlinlang.slack.com/archives/C67HDJZ2N/p1757211546010449Suresh Maidaragi
09/15/2025, 7:16 AMslow cold start and anr issues due to koin initialisation on one of your project wherein we have 20modules out of which around 10 are in kmp, so when tries to initialise this 10 Kmp modules using koin, it takes around ~7sec to init and move to further screens.
This modules are initialised within Application class. We already made all this koin init async still the issue persisting around. Is there work around this?? to make it initialise quicker/ondemand
when we init this 10kmp module on demand during runtime we are seeing no koin def found issuesKaran Sharma
09/16/2025, 12:40 PMcomposable<SavedTripsRoute> { backStackEntry ->
val viewModel: SavedTripsViewModel = koinViewModel<SavedTripsViewModel>(key = "SavedTripsNav")
}
Tried using a key, as well, but observed that when i navigate away and back to this screen, SavedTripsViewModel is recreated.
koin - 4.1.1
nav compose - 2.9.0-rc02
compose-multiplatform = "1.9.0-rc02"
happens for both ios and android.Kazik
09/17/2025, 1:17 PM@InjectedParam be passed to another dependency which expect it with koin-annotations? For example I have following classes
@Factory
class TestSampleClass(
@InjectedParam val name: String,
val sample: AnotherSample
) {
fun hello(): String {
return "Hello $name!"
}
fun hello2(): String {
return sample.hello()
}
}
@Factory
class AnotherSample(@InjectedParam val name: String) {
fun hello(): String {
return "Another $name!!!"
}
}
When I injected for example like this it is possible to also AnotherSample class instantiated with that parameter?
private val testSampleClass: TestSampleClass by inject { parametersOf("woooo!") }WukongRework.exe
09/23/2025, 8:05 AMKoinMultiplatformApplication and have just set up deep linking. The initial prototype of the deep link is working fine on iOS but when testing on Android, an java.lang.IllegalStateException: KoinApplication has not been started error is thrown crashing the application. I’ve tried changing to using KoinApplication following https://carrion.dev/en/posts/koin-cmp/ as seen in the comments of https://github.com/InsertKoinIO/koin/issues/2157 to no change in the behavior, with the same illegal state exception.
The tested Koin version is 4.1.1
The Compose version is 1.9.0
The full stack trace in đź§µ
Thanks in advance!galex
09/24/2025, 6:03 PM@DefaultHttpClient I had no problem bringing a specific dependency in a constructor of a class:
@Single
internal class FirebaseAuthImpl(
private val firebase: Firebase,
private val firebaseSettings: Lazy<FirebaseSettings>,
@param:DefaultHttpClient val httpClient: Lazy<HttpClient>,
private val json: Lazy<Json>,
) : FirebaseAuth { ... }
Now, using the same annotation in a function misses the annotation:
@Single
fun provideFirebaseAuth(
firebaseApp: FirebaseApp,
firebaseSettings: Lazy<FirebaseSettings>,
@DefaultHttpClient httpClient: Lazy<HttpClient>,
json: Lazy<Json>,
): FirebaseAuth {
return createFirebaseAuth(
firebaseApp = firebaseApp,
firebaseSettings = firebaseSettings,
httpClient = httpClient,
json = json,
)
}
The error is the following:
[ksp] --> Missing Definition for property 'httpClient : io.ktor.client.HttpClient' in 'com.domain.app.di.provideFirebaseAuth'. Fix your configuration: add definition annotation on the class.
What am I missing? 🤔Bobby Hargett
09/25/2025, 12:04 PM@Module()
@ComponentScan("com.hssw.wallpaperprude")
class DefaultModule {
@Single
fun ucFetch() {
val flow: SharedFlow<Async<RedditClient>> = get()
val response = MutableSharedFlow<RedditUseCase?>(replay = 1).apply {
How do I get the val "flow" from Koin?
The @Single Flow is defined elsewhere in the moduleKyle Szalai
10/01/2025, 2:39 PMandroidx.core.bundle.Bundle, so it fails to build
Missing class androidx.core.bundle.Bundle (referenced from: kotlin.jvm.functions.Function0 org.koin.viewmodel.BundleExtKt.emptyState() and 2 other contexts)
I would assume I need to add some consumer proguard rules, so I am trying to add
-keep class androidx.core.bundle.Bundle {}
to my Proguard configuration, but this doesn't fix the issue.
I've tried adding org.jetbrains.androidx.core to the project to see if providing it fixes it, but unfortunately, nothing.
Koin 4.0.4 (koin-android and koin-androidx-compose)
Compose BOM 2024.04.00
Kotlin 2.1.20arnaud.giuliani
10/07/2025, 1:23 PMIrsath Kareem
10/10/2025, 3:04 AMIrsath Kareem
10/10/2025, 4:39 AMsingleOf(::DatabaseFactory)bartek.t
10/10/2025, 1:00 PMHoratio Thomas
10/12/2025, 5:00 AMFarhazul Mullick
10/15/2025, 9:56 AMMark
10/15/2025, 1:04 PMMainActivity which I currently access using:
inline fun <reified T : ViewModel> koinActivityViewModel(
qualifier: Qualifier? = null,
key: String? = null,
scope: Scope = currentKoinScope(),
noinline parameters: ParametersDefinition? = null,
): T = koinViewModel<T>(
qualifier = qualifier,
viewModelStoreOwner = LocalActivity.current as ComponentActivity,
key = key,
scope = scope,
parameters = parameters,
)
Claude is recommending I just use single { } for such a view model. Thoughts?Shahid Iqbal4213
10/18/2025, 5:31 PMinternal val authApiModule = module {
single<Retrofit>(named(AUTH_RETROFIT_QUALIFIER)) {
Retrofit.Builder()
.baseUrl("<https://api.example.com/>") // Base URL must be set here
.addConverterFactory(GsonConverterFactory.create())
.client(get<OkHttpClient>(qualifier = named(OKHTTP_CLIENT_QUALIFIER)))
.build()
}
factory<AuthApi> {
provideApi(
get<Retrofit>(qualifier = named(AUTH_RETROFIT_QUALIFIER)),
AuthApi::class.java
)
}
}
and AuthApi module is added to main module
val authFeatureModule = module {
includes(authNavModule, authApiModule, authMainModule)
}Irsath Kareem
10/19/2025, 8:20 AM@KoinApplication is available in :app module, (it looks for @Configuration in its direct child modules)
Let's assume, I want to write @Configuration("test") in :feature:data module. (which needs to load only in tests.)
This configuration is automatically loaded by :app module's @KoinApplication(config... = ["test"]) ?????
I think, Currently, It is not.
Can you help me?, Or any other workaround???Otávio Gabriel (Tavieto)
10/20/2025, 7:08 PMcheckModules to the new verify?
Because I'm seeing some scenarios where verify should fail, but it's not failing.
Maybe I'm getting something wrong. If not, I would like to contribute to the project.arnaud.giuliani
10/22/2025, 7:28 AMOtávio Gabriel (Tavieto)
10/22/2025, 11:34 PMFlowFan
10/23/2025, 4:01 AM@Composable
@Preview
fun App(
modifier: Modifier = Modifier,
darkTheme: Boolean = isSystemInDarkTheme(),
navController: NavHostController = rememberNavController()
) {
KoinApplication(
application = {
modules(AppModule.module)
defaultModule()
}
) {
MainScreen(navController = navController)
}
}Chirag Redij
10/25/2025, 12:50 PMPackage 'core.data' was compiled by a pre-release version of Kotlin and cannot be loaded by this version of the compiler.
Here are my Kotlin versions
kotlin = "2.2.20"
ksp = "2.2.20-2.0.4"
Koin versions
koin-core = "4.1.1"
koin-annotation = "2.3.0"Denys
10/27/2025, 2:32 PMarnaud.giuliani
11/05/2025, 4:46 PMarnaud.giuliani
11/05/2025, 4:47 PMBart
11/05/2025, 7:51 PM@KoinApplication in other source set than commonMain (e.g. commonTest or custom)?
I have custom source set for instrumented tests (it includes commonMain like commonTest does), and @KoinApplication when used in this source set not generated the code properly, needed to put it in commonMain. Would be useful/cleaner is such test koin application could be created in test source set.Anuta Vlad Sv
11/06/2025, 9:59 AMMichal Klimczak
11/06/2025, 10:24 AMPedro Francisco de Sousa Neto
11/06/2025, 12:17 PM// build.gradle.kts
implementation(libs.koin.core)
implementation(libs.koin.core.coroutines)
implementation(libs.koin.compose)
implementation(libs.koin.compose.viewmodel)
implementation(libs.koin.compose.viewmodel.navigation)
implementation(libs.koin.compose.navigation)
// libs.versions.toml
koin = "4.2.0-alpha1"
koin-compose = { module = "io.insert-koin:koin-compose", version.ref = "koin" }
koin-compose-viewmodel = { module = "io.insert-koin:koin-compose-viewmodel", version.ref = "koin" }
koin-compose-viewmodel-navigation = { module = "io.insert-koin:koin-compose-viewmodel-navigation", version.ref = "koin" }
koin-compose-navigation = { module = "io.insert-koin:koin-compose-navigation3", version.ref = "koin" }
koin-core = { module = "io.insert-koin:koin-core", version.ref = "koin" }
koin-core-coroutines = { module = "io.insert-koin:koin-core-coroutines", version.ref = "koin" }
koin-android = { module = "io.insert-koin:koin-android", version.ref = "koin" }
I couldn´t find the import for NavigationHost in a @Composable function.
What am I missing?