Maintenance release for the 4.2.x line — resolver regression fixes from the 4.2.0 CoreResolverV2 rewrite, ViewModel/scope fixes, a Ktor request-scope fix, plus new tvOS support and an R8/ProGuard guide.
Anyone hitting resolver issues on 4.2.0/4.2.1 should upgrade to 4.2.2.
Bug Fixes
-
Stacked params no longer shadow qualified dependencies (#2370, #2408) — A value passed via
parametersOfcould be returned for aget(named(...))request of the same type, shadowing the qualified definition. Qualified lookups are now registry-only and never read the parameter stack — parameters carry no qualifier, so they can't satisfy a qualified request. -
Root factory no longer resolves its scoped dependencies from
_root_(#2379) — When a non-single factory defined in the root scope was resolved from a child scope,CoreResolverV2resolved its scoped dependencies against_root_instead of the requesting scope. Linked-scope resolution now runs the factory against the requesting scope (single instances keep their root-bound semantics, preserving #2325). -
viewModelScopeFactoryscope is linked to its parent (#2299) — A ViewModel scope created viaviewModelScopeFactory()was not linked to the originating scope, so dependencies declared in the parent couldn't be resolved. The created scope is now linked to its parent (except when the parent is root). -
Tolerate non-
Stringenvironment properties (#2348) — Loading environment/system properties whose values aren'tStringthrewClassCastExceptiondue to an unchecked map cast. Non-Stringvalues are now preserved asAnyand onlyStringkeys are required. -
Unique Ktor request-scope ids under concurrency (#2410) — Concurrent requests could collide on request-scope ids. Ids are now generated from a monotonic counter seeded once at startup. Thanks @lfavreli-betclic!
-
Actionable errors for
SavedStateHandle/viewModelScope { }(#2044, #2417) — ResolvingSavedStateHandlewithout the proper extras, or usingviewModelScope { }without theviewModelScopeFactory()option, now produces a clear, actionable error message instead of an opaque failure.
Added
-
tvOS targets for
koin-core-viewmodel(#2426) —koin-core-viewmodelnow publishestvosArm64,tvosX64, andtvosSimulatorArm64, unblocking ViewModel usage on tvOS. -
Consumer R8/ProGuard rules + guide — Android and ViewModel artifacts now ship consumer R8/ProGuard rules in their AARs, and a new R8 / ProGuard guide documents keep rules for minified builds.
Improvements
- O(1) secondary-type registration in
bind()/binds()—bind/bindsnow append secondary types in O(1) instead of reallocating the type list per binding, removing quadratic cost when a definition declares many bindings. No user-visible behavior change.
Documentation
- Navigation 3 typed
entryProvider(#2336) — Added guidance on using Koin with the typedentryProviderin the Navigation 3 reference.
Contributors
Thanks to the following contributors for this release:
- @arnaudgiuliani (Arnaud Giuliani)
- @lfavreli-betclic (Loïc Favrelière) — unique Ktor request-scope ids under concurrency (#2432)