Releases: InsertKoinIO/koin
Koin 4.2.1
Support for Compile Safety with Koin Compiler 1.0.0-RC1
- Koin Compiler Plugin 1.0.0-RC1 - https://github.com/InsertKoinIO/koin-compiler-plugin/releases/tag/1.0.0-RC1
Bug Fixes
-
Fix stacked-params lookup on linked scopes (#2387) — The 4.2.0 resolver rewrite (
CoreResolverV2) walked linked scopes but dropped the per-parent stacked-parameters check that 4.1.x performed via recursion. This broke patterns whereAndroidParametersHolderis stacked on the factory scope byKoinViewModelFactoryandSavedStateHandleis then resolved from a child ViewModel scope. Linked-scope resolution now also checks stacked params on each parent scope. -
Restore ABI compatibility for
runOnKoinStarted(#2391) — The 4.2.0 release inadvertently broke binary compatibility forrunOnKoinStartedon JVM. Fixed by restoring the original JVM class name via@JvmName/@JvmMultifileClassannotations. -
Fix scope
_closedconcurrency issue (#2389) — TheScope._closedflag was not volatile, which could cause stale reads under concurrent access.
Improvements
-
Improved Scope resolution error messages —
CoreResolverV2now provides clearer error messages when scope resolution fails, making it easier to diagnose misconfigured scopes. -
Added
apiCheckto CI — Binary compatibility validation (kotlinx.binary-compatibility-validator) now runs on every PR to prevent future ABI breaks.
Documentation
parametersOftype-collision warning (#2328) — Added a caution note explaining that when a value passed viaparametersOfhas the same type as the requested definition, Koin returns the value directly and skips the factory block. Suggests using a wrapper type as a workaround.
Contributors
Thanks to the following contributors for this release:
- @arnaudgiuliani (Arnaud Giuliani)
- @inemtsev (Ilya Nemtsev) — fix for scope closed concurrency issue (#2389)
Koin 4.2.1-RC1
Koin 4.2.1-RC1
Bug Fixes
-
Fix ABI break on
runOnKoinStarted(#2391) — The 4.2.0 refactor to movewaitAllStartJobsto common code changed the JVM symbol forrunOnKoinStartedfromKoinWaitExtKttoKoinWaitExt_jvmKt, causingNoSuchMethodErrorat runtime for libraries compiled against 4.1.x. Fixed by adding@file:JvmName("KoinWaitExtKt")and@file:JvmMultifileClassto restore the original symbol. -
Improved scope resolution error messages (#2379) —
NoDefinitionFoundExceptionnow displays the full scope chain that was searched and indicates which scope qualifier is missing a definition, making scope resolution issues much easier to diagnose.
CI / Tooling
- Added
apiCheckto CI — The binary-compatibility-validator plugin was already configured but not running on PRs.apiCheckis now part of the CI build workflow, preventing accidental ABI breaks in future releases. - Updated
.apidump files for all modules to reflect the current public API surface.
Still in progress for 4.2.1 final
4.2.0
Kotlin 2.3.20
New Features
- Ktor 3.4 DI Bridge — Full integration with Ktor's new DI system (ktor-server-di), bridging Ktor ↔ Koin dependency injection both ways
- Dagger Bridge (koin-dagger-bridge) — New module to help inject Koin components from Dagger side
- AndroidX Navigation 3 support — Entry point provider with metadata parameter passing (animations, etc.), generic EntryProvider, and navigation scopes
- Navigation Scope for Compose Nav 2 — Added scoped navigation support for Compose Navigation 2
- Lazy Modules — Parallel loading at startup for improved performance, with benchmarks
- strictOverride option — New definition option to override explicitly
- koinActivityInject — Helper to retrieve dependencies against Activity scope
- Koin Compiler Stubs — Added stubs for KoinApplication.modules() functions
- KoinApplication.withConfiguration() — New configuration support
Performance & Stability
- Core Resolver V2 — Fixed parameter stack propagation, injected params handling, and child scope/ViewModel scope resolution
- Scope Resolution & Thread Safety — Performance optimization with safer ScopeFactory protecting all operations from parallel calls
- ThreadLocal loading optimization — Avoid cost per Scope (#2306)
- getAll no longer sorted by default — Instances come as declared; sort on purpose if needed
- Params stack access optimization
Bug Fixes
- Fix sharedKoinViewModel with type-safe navigation routes (#2293)
- Fix qualified name usage in WASM (#2312)
- Fix premature release of scope & context in Compose — don't drop in onForgotten (#2274)
- Fix crashing declarations for LocalKoinScope & LocalKoinApplication
- Fix Compose Koin Context Loader and Entry Points (#2327)
- Fix CoreResolution with Child Scopes / ViewModelScope (#2325)
- Fix Scope Archetypes Qualifier in plugin support functions
- Fix qualifier conversion
Breaking Changes
- minSdk raised to 23 for Android
- module renamed to lazyModule in some contexts
- BeanDef constructor change (API signature update)
Dependencies ...
Koin 4.2.0-RC2
Second Release Candidate for Koin 4.2.0, upgrading to Kotlin 2.3.20-RC2 and updating dependencies.
What's Changed
Kotlin 2.3.20-RC2 Upgrade
- Upgraded Kotlin from 2.3.20-Beta1 to 2.3.20-RC2 - #2377 by @arnaudgiuliani
Koin Compiler Plugin: New KoinApplication.modules() Stubs
- Added compiler plugin stubs for
KoinApplication.modules<T>()(reified single module) andKoinApplication.modules(vararg KClass<*>)(multiple modules) — enabling type-safe module loading via the
Koin Annotations compiler plugin
Koin Compiler Plugin 0.4.0 Support
- Added compiler plugin stubs for
KoinApplication.modules<T>()(reified single module) andKoinApplication.modules(vararg KClass<*>)(multiple modules) — enabling type-safe module loading via the
Koin Compiler Plugin
Dependency Updates
- Kotlin: 2.3.20-Beta1 → 2.3.20-RC2
- Compose Multiplatform: 1.10.0 → 1.10.2
- AndroidX Activity: 1.12.2 → 1.12.4
- AndroidX WorkManager: 2.11.0 → 2.11.1
- AndroidX Navigation: 2.9.6 → 2.9.7
- AndroidX Navigation3: 1.0.0 → 1.0.1
- JetBrains Navigation: 2.9.1 → 2.9.2
- Robolectric: 4.16 → 4.16.1
- Benchmark: 0.4.15 → 0.4.16
Full Changelog
4.2.0-RC1
Koin 4.2.0-RC1
This Release Candidate consolidates all features, improvements, and bug fixes from the alpha and beta series. The focus has been on Compose integration stability, scope resolution improvements, Ktor 3.4 DI Bridge, and compiler plugin support.
Highlights
Ktor 3.4 DI Bridge Integration
- Bidirectional dependency resolution between Koin and Ktor DI - #2294 by @arnaudgiuliani
- KoinDependencyMapExtension implementing Ktor 3.2+'s DependencyMapExtension interface - 00496cc by @arnaudgiuliani
- New KoinKtorApplication DSL for explicit bridging configuration - 53cfc64 by @arnaudgiuliani
- SPI registration for automatic extension discovery
- Ktor 3.4 stable support - 3e5b44c by @arnaudgiuliani
Navigation 3 Support
- New koin-compose-navigation3 module for AndroidX Navigation3 1.0.0 - #2302 by @arnaudgiuliani
- EntryProvider API for scoped dependency injection in navigation destinations
- Metadata parameter passing support (animations, etc.) - 7fbab5e by @arnaudgiuliani
- Make nav3 EntryProvider generic - #2314 by @xephosbot
Compose Improvements
- koinActivityInject() function for Activity scope dependency retrieval - f946362 by @arnaudgiuliani
- UnboundKoinScope API with @KoinDelicateAPI annotation - f38a30f by @arnaudgiuliani
- Fixed premature release of scope & context in onForgotten - #2326 by @arnaudgiuliani
- Fixed Compose Koin Context Loader and Entry Points - #2327 by @arnaudgiuliani
- Navigation 2.x scope support (KoinNavigationScope) - #2309 by @arnaudgiuliani
- Compose context internals migration helpers - #2295 by @arnaudgiuliani
ViewModelScope Updates
⚠️ Breaking⚠️ : ViewModel declarations requiring scope injection must now be inside view...
4.2.0-beta4
Koin 4.2.0-beta4
New Features
Ktor 3.4 DI Bridge Integration (#2294)
- Added KoinDependencyMapExtension implementing Ktor 3.2+'s DependencyMapExtension interface (00496cc)
- Bidirectional dependency resolution between Koin and Ktor DI:
- Koin can resolve Ktor DI dependencies via KtorDIExtension
- Ktor DI can resolve Koin dependencies via KoinDependencyMap
- New KoinKtorApplication DSL for explicit bridging configuration options (53cfc64)
- SPI registration for automatic extension discovery
- New sample application demonstrating Koin + Ktor DI usage
Koin Plugin Support Improvements
- Adjusted KoinApplication.withConfiguration() API support (c4a5dcb)
- Enhanced ApplicationDSLExt with additional plugin/module DSL extensions
- Added Koin instance extension methods for better integration support
Bug Fixes
- Module flatten order error (#1999, #1998) - Fixed incorrect module flattening order that could cause dependency resolution issues
- Fixed Qualifier conversion in Ktor DI bridge (90edf60)
Dependencies
- Updated to Ktor 3.4.0-eap-1520 (75d4306)
Note: This release requires the Ktor EAP repository. Add the following to your settings.gradle.kts:
maven("https://maven.pkg.jetbrains.space/public/p/ktor/eap")
Full Changelog: 4.2.0-beta3...4.2.0-beta4
4.2.0-beta3
4.2.0-beta3
⚠️ ViewModelScope Declaration Requirement Updated
Experimental Feature: The automatic scope creation for ViewModel constructor injection now requires ViewModel declarations to be part of the viewModelScope section. If declared outside, injection will look in the root scope instead of the ViewModel scope, causing resolution failures.
// Injection against root scope
viewModel { MyViewModel(get()) }
// Injection against viewModel scope
viewModelScope {
viewModel { MyViewModel(get()) }
}Koin Compiler Plugin Support API
New Plugin Support API for Koin Annotations compiler plugin integration:
- ModuleExt - Module extensions for plugin-generated code
- CreateDSL - DSL for plugin code generation
- BaseDSLExt - Base DSL extensions
- ApplicationDSLExt - Application-level DSL extensions
- ViewModelDSLExt / ViewModelModuleExt - ViewModel support for plugin
- WorkerDSLExt / WorkerModuleExt - Android Worker support for plugin
Bug Fixes
- Fix CoreResolution with Child Scopes / ViewModelScope - #2325 by @arnaudgiuliani in #2340
- Fix CoreResolverV2.kt to handle injected params first - #2337 by @arnaudgiuliani in #2341
- Fix WASM qualified name resolution - #2312 by @arnaudgiuliani in #2344
- Fix sharedKoinViewModel fails with type-safe navigation routes by @nazaburo in #2293
- Fix CoreResolverV2 stack params propagation by @arnaudgiuliani (9d6cf10)
- Fix worker/viewModel builder API - qualifier now properly passed to worker by @arnaudgiuliani (43ecac9)
- Fix Scope Archetypes Qualifier in plugin support functions by @arnaudgiuliani (f972c52)
- Fix scope resolution in plugin by @arnaudgiuliani (01cff0d)
- Revert appcompat transitive dependency removal - #2272 by @arnaudgiuliani (7bbf98c)
Features & Improvements
- Add koinActivityInject function - Helper to retrieve dependency against Activity scope by @arnaudgiuliani (f946362)
- Make nav3 EntryProvider generic by @xephosbot in #2314
- Improve Parameter Stack Threading - Optimize ThreadLocal loading to avoid cost per Scope - #2306 by @arnaudgiuliani in #2345
- Optimize Params stack access by @arnaudgiuliani (5ac0e8b)
- Archetype DSL duplication removal by @arnaudgiuliani (7dab332)
- Adjust check & error messages by @arnaudgiuliani (3acd78e)
Libraries & Dependencies
- Kotlin 2.3.20-Beta1
- Coroutines 1.10.2
- Compose Multiplatform 1.10.0
- AndroidX Lifecycle 2.10.0 / JetBrains Lifecycle 2.9.6
- AndroidX Navigation 2.9.6 / JetBrains Navigation 2.9.1
- AndroidX Navigation3 1.0.0
- Ktor 3.3.3
Other
- Clean up koin-fu + koin-annotations beta3 plugin by @arnaudgiuliani (932c154)
- Moved koin-fu lib to Koin beta3 plugin by @arnaudgiuliani (a9daf9b)
- KDoc update for EntryProvider by @arnaudgiuliani (0539c48)
- Delete CHANGELOG.md by @jvanderwee in #2308
New Contributors
- @jvanderwee made their first contribution in #2308
- @xephosbot made their first contribution in #2314
- @nazaburo made their first contribution in #2293
Full Changelog: 4.2.0-beta2...4.2.0-beta3
4.2.0-beta2
What's Changed
- [koin-android] Remove transitive dependency for appcompat library by @egorikftp in #2273
- Safer ScopeFactory, protect all operations from parallel calls by @arnaudgiuliani in #2323
- Fix scope resolution issues by @arnaudgiuliani in #2324
- Fix premature release of scope & context by @arnaudgiuliani in #2326
- Fix Compose Koin Context Loader and Entry Points by @arnaudgiuliani in #2327
- Fix - Performance Optimization: Scope Resolution & Thread Safety by @arnaudgiuliani in #2330
Full Changelog: 4.2.0-alpha3...4.2.0-beta2
4.2.0-alpha3
What's Changed
- [Feat] navigation 2.x scope by @arnaudgiuliani in #2309
- [Maintenance] Cleanup of examples by @GrzegorzBobryk in #2213
- Fix nav3 metadata arguments by @arnaudgiuliani in #2313
Full Changelog: 4.2.0-alpha2...4.2.0-alpha3
4.2.0-alpha2
What's Changed
- [Fix] koin core coroutines loading in background by @arnaudgiuliani in #2303
- [Feat] Explicit definition override by @arnaudgiuliani in #2304
- [Fix] Fix crashing declarations for LocalKoinScope & LocalKoinApplication by @arnaudgiuliani in 261bf93
Full Changelog: 4.2.0-alpha1...4.2.0-alpha2