Dallasphillips24
08/24/2025, 3:21 PMDallasphillips24
08/24/2025, 3:22 PMWukongRework.exe
08/26/2025, 11:48 PMKoinMultiplatformApplication
and I’m running into a ClosedScopeException
when rotating the screen. A bit of googling later leads me to this GitHub issue https://github.com/InsertKoinIO/koin/issues/1773 but the suggested solution of using KoinContext
doesn’t appear to be a valid solution anymore as the function has been deprecated in 4.1.0 (which I am using). Does anyone know if there is a new API to use in 4.1.0 to fix this issue?
Thanks in advance!Umit AYDIN
08/27/2025, 10:38 PMMarc
08/28/2025, 10:14 AM// In my feature module
val featureModule = module {
singleOf(::WhateverImplementation){ binds<WateverInterface>() }
// Main app module
...
install(Koin) {
modules(featureModule)
}
I’d like something like (pseudocode)
//feature module
fun Application.featurePlugin() {
-> inject here the featureModule to Koin
rest of the feature configuration
}
// main app module
fun Application.main() {
featurePlugin() <- this way I can keep all configs isolated into feature module and i just need to add it into a single entry point
}
Does it make sense? is there any solution/idea already implemented or that would make more sense than this?
ty!esdrasdl
08/28/2025, 7:52 PMCrashed: com.apple.main-thread
0x14f28 class_rw_t::methods() const
0x125a8 class_copyMethodList
0x21ae42c createTypeInfo(objc_class*, TypeInfo const*, TypeInfo const*)
0x21ae274 getOrCreateTypeInfo(objc_class*)
0x1de4850 kfun:kotlinx.cinterop.internal.ObjectiveCKClassImpl#hashCode(){}<http://kotlin.Int|kotlin.Int> + 1852 (Primitives.kt:1852)
0x1e2bd7c kfun:kotlin.collections.HashMap.findKey#internal + 40 (Any.kt:40)
0x1e28e2c kfun:kotlin.collections.HashMap#get(1:0){}1:1? + 111 (HashMap.kt:111)
0x1f151b0 kfun:co.touchlab.stately.collections.ConcurrentMutableMap.ConcurrentMutableMap$get$1.invoke#internal + 27 (ConcurrentMutableMap.kt:27)
0x1f0f690 kfun:co.touchlab.stately.concurrency.Synchronizable#runSynchronized(kotlin.Function0<0:0>){0§<kotlin.Any?>}0:0 + 1 ([K][Suspend]Functions:1)
0x1f13d68 kfun:co.touchlab.stately.collections.ConcurrentMutableMap#get(1:0){}1:1? + 27 (ConcurrentMutableMap.kt:27)
0x1f243cc kfun:org.koin.ext#getFullName__at__kotlin.reflect.KClass<*>(){}kotlin.String + 85 (Map.kt:85)
0x1f1c94c kfun:org.koin.core.module.Module#indexPrimaryType(org.koin.core.instance.InstanceFactory<*>){} + 100 (BeanDefinition.kt:100)
0x217a5a0 kfun:my.package.core.network.networkModule$1.$<bridge-DNN>invoke(org.koin.core.module.Module){}#internal + 112 (Module.kt:112)
0x1f2408c kfun:org.koin.dsl#module(kotlin.Boolean;kotlin.Function1<org.koin.core.module.Module,kotlin.Unit>){}org.koin.core.module.Module + 38 (ModuleDSL.kt:38)
0x21843fc kfun:my.package.startComposeModules$1.$<bridge-DNN>invoke(org.koin.core.KoinApplication){}#internal + 33 (ModuleDSL.kt:33)
0x1f27ba8 kfun:org.koin.core.context.MutableGlobalContext#startKoin(kotlin.Function1<org.koin.core.KoinApplication,kotlin.Unit>){}org.koin.core.KoinApplication + 1 ([K][Suspend]Functions:1)
0x219c764 objc2kotlin_kfun:my.package#startComposeModules(kotlin.String;kotlin.Function0<platform.Foundation.NSURLCredential?>){} + 41 (DefaultContextExt.kt:41)
0xae2b8 specialized AppDelegate.application(_:didFinishLaunchingWithOptions:) + 25 (AppDelegate.swift:25)
0xacfe8 @objc AppDelegate.application(_:didFinishLaunchingWithOptions:) (<compiler-generated>)
Do you have any clues?
My coworker tried to increase the koin version to 4.1.0 but the crash still happens but with a different stracktrace
Can't show file for stack frame : <DBGLLDBStackFrame: 0x367d4abb0> - stackNumber:4 - name:kfun:kotlinx.cinterop.internal.ObjectiveCKClassImpl#hashCode(){}<http://kotlin.Int|kotlin.Int> [inlined] kfun:kotlinx.cinterop.internal.ObjectiveCKClassImpl#<get-typeInfo>(){}kotlin.native.internal.NativePtr [inlined].
The file path does not exist on the file system: /opt/buildAgent/work/2d153abd4d2c0600/kotlin/kotlin-native/Interop/Runtime/src/native/kotlin/kotlinx/cinterop/internal/ObjectiveCKClassImpl.kt
Dallasphillips24
08/29/2025, 3:14 AMgalex
08/29/2025, 6:48 AMRoger Kreienbühl
08/31/2025, 10:30 AM@Factory
fun provideLogger(@InjectedParam tag: String?): Logger {
return if (tag != null) logger.withTag(tag) else logger
}
Now I am wondering, how I can pass the tag when creating for example a singleton:
@Single
class SomeService(logger: Logger) { ... }
Is there any solution to this?Renz
09/02/2025, 12:52 AMabstract class BaseViewModel<V : BaseViewModelState<U>, U : BaseUiState> : ViewModel()
class MainViewModel(
private val cardSetUseCase: CardSetUseCase
) : BaseViewModel<MainViewModelState, MainUiState>()
val viewModelModule = module {
viewModelOf(::MainViewModel)
}
Dallasphillips24
09/03/2025, 12:12 AMJonathan
09/05/2025, 2:53 PMJonathan
09/07/2025, 2:19 AMlateinit
and enforce calling an "init" function at startup but that seems messy. Is there an obvious solution that I'm missing?Ori Spokoini
09/08/2025, 8:18 AM@KoinViewModel
class ProfileEditorViewModel(
private val userRepository: UserRepository
) : ViewModel()
And in composeApp/.../FakeUserRepo.kt
@Factory
class FakeUserRepo() : UserRepository
Currently I’m using @Provided
to suppress the injection error and then manually loading FakeUserRepo
. I also tried ComponentScan
, but it doesn’t seem to work across modules.
What’s the recommended way to handle this?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 issues
Karan 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?