You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
A correctness-focused maintenance release: it removes several false compile-safety errors in multi-module projects, fixes duplicate-hint KLIB failures on iOS/Native/WASM-JS, and hardens per-compilation state under parallel Gradle daemons.
🔑 Highlights
No more false "missing dependency" errors across modules — a @Module whose dependency is provided by a sibling module (assembled only at @KoinApplication / startKoin) no longer fails with KOIN-D001. It defers to the entry-point graph, and surfaces a new KOIN-W002 warning only when no complete closure is visible in the compilation (#51).
iOS / Native / WASM-JS build reliability — cross-module @ComponentScan and cross-module top-level @Single functions no longer emit duplicate hint declarations that broke KLIB serialization (#62).
Fewer false compile-safety errors on DSL code — typed DSL definitions with custom lambdas, indirect parametersOf helpers, and outer DSL qualifiers are now understood (#36, #49, #61, #41).
Compose entry point validated — KoinApplication(configuration = koinConfiguration { … }) now runs full-graph safety (#38).
🐛 Fixes
False KOIN-D001 for cross-module (sibling) dependencies — #51 (KTZ-4256)
In a layered multi-module build, a @Module is compiled without visibility of the sibling modules a downstream @KoinApplication(modules = […]) assembles alongside it. Per-module (A2) validation therefore reported a provider that lives in a sibling as a hard KOIN-D001 missing dependency. Validation now defers an unresolved binding when a provider hint for the type exists elsewhere on the build graph, settling it authoritatively at the entry-point closure (A3) or at runtime checkModules(). When no complete closure is present in the compilation (e.g. a leaf library module), it emits the new KOIN-W002 warning instead of an error.
Scope: this narrows the false positive to the common shape (provider is a compile dependency, or compiled alongside the consumer). A genuine missing dependency with no provider hint anywhere is still a hard KOIN-D001. A provider that lives in a non-dependency peer module (type declared in a shared module) is not yet distinguishable at the leaf and may still report — full A2 relaxation is planned for 1.1.
A cross-module @ComponentScan covering a dependency module's package, and cross-module top-level @Single functions, could register the same definition more than once — emitting duplicate componentscan_* / definition_function_* hint declarations. The JVM/DEX toolchain tolerated it (a D8 "multiple definitions" warning); KLIB serialization (iOS/Native/WASM-JS) rejected it with a hard SignatureClashDetector error. Definitions are now de-duplicated by class identity (and by type+qualifier for functions), so each is emitted exactly once per target.
False KOIN-D001 for typed DSL definitions with non-create lambdas — #36, #49
single<T> { existingInstance }, single<T> { provideX() }, viewModel { VM() } and similar shapes are now recognized as providing T, so compile-safety no longer reports T as a missing definition. The user's lambda is left untouched.
False KOIN-D006 for indirect parametersOf helpers — #61
A call site passing an opaque params lambda (e.g. { buildParams() }) no longer triggers KOIN-D006 ("forgot parametersOf"). The diagnostic now fires only when no params lambda is present at all.
An outer DSL qualifier (single<T>(named("x")) { create(::T) }) is now propagated into the compile-safety hints, so qualified cross-module definitions resolve correctly instead of producing spurious mismatches.
Compose koinConfiguration { } entry point not validated — #38
KoinApplication(configuration = koinConfiguration { modules(…) }) is now recognized as a Koin entry point, enabling full-graph (A3) compile-safety for Compose apps. The koinConfiguration call is only marked as an entry point — it is not rewritten, so runtime behavior is unchanged.
Flaky / order-dependent behavior under parallel Gradle daemons — (KTZ-4414)
Plugin config flags and the @PropertyValue registry were held in process-global mutable state shared across every compilation in a Gradle daemon. Parallel or interleaved compilations could read another build's flags or have a @PropertyValue default dropped. State is now held per-compilation (thread-local, rebound onto the IR phase), matching the existing per-compilation message-collector handling.
This changes generated code and can affect runtime resolution. Auto-detected bindings no longer include framework plumbing / marker supertypes: kotlin.Any, org.koin.core.component.KoinComponent, KoinScopeComponent, and androidx.lifecycle.ViewModel / AndroidViewModel. Previously a @KoinViewModel / @Single class implementing one of these could be auto-bound to the framework base type, letting get<ViewModel>() / get<KoinComponent>() resolve to an arbitrary component (silent wrong-instance resolution). A definition is now registered under its own type and its genuine domain interfaces only.
Explicit bindings are unaffected — @Single(binds = [ViewModel::class]) still binds exactly what you list. If you relied on auto-binding to one of the excluded supertypes, add it explicitly with binds = [...].
✅ Compatibility
Kotlin 2.3.20
Kotlin 2.4.0
JVM / Android
✅
✅
iOS / Native
✅
✅
WASM/JS — DSL
✅
✅
WASM/JS — annotations
⚠️ KT-82395
✅
Koin: 4.2.0+
📦 Install
plugins {
id("io.insert-koin.compiler.plugin") version "1.0.2"
}
A maintenance release focused on Kotlin 2.4.0 support and Kotlin/Native + WASM/JS build reliability. One plugin artifact now spans Kotlin 2.3.20 → 2.4.x.
🔑 Highlights
Kotlin 2.4.0 support — the plugin no longer crashes on Kotlin 2.4.0, and the same artifact also works on Kotlin 2.3.20.
1.0.1 introduces a Kotlin version-adapter layer: the core is compiled against the stable IR API, and a small per-version adapter (selected at compile time) absorbs the breaking compiler-internal differences. A single published jar supports Kotlin 2.3.20 and 2.4.0; an unrecognized newer Kotlin gets a warning and best-effort support, while versions below the floor get a clear, actionable error instead of an internal crash.
A type collected by more than one @ComponentScan module generated the @InjectedParam hint function twice with identical signatures. The JVM tolerated it; KLIB serialization (iOS/Native/WASM/JS) rejected it with "Different declarations with the same signatures". The hint is now emitted exactly once per target. (Regression vs 1.0.0-RC2.)
The plugin's generated hint files lacked a resolvable source, failing the JS/WASM KLIB serializer ("No file found for source null"). Fixed — DSL-based projects now build on WASM/JS.
createdAtStart = true on a @Single / @Singletondefinition function inside a @Module was discarded in codegen, so eager singletons were never created at startKoin (no error or warning). Now propagated correctly. (The @Module(createdAtStart) and @Singleton class cases were already fixed in 1.0.0-RC3.13.)
⚠️ Known limitation — annotation-based WASM/JS on Kotlin 2.3.20
Annotation-based projects (@Module / @ComponentScan) targeting WASM/JS require Kotlin 2.4.0. On Kotlin 2.3.20 they hit an upstream Kotlin compiler bug — KT-82395 — in the JS/WASM KLIB metadata serializer, which the plugin cannot work around. Kotlin 2.4.0 resolves it. (iOS/Native and DSL-based WASM/JS are unaffected and work on both Kotlin versions.)
✅ Compatibility
Kotlin 2.3.20
Kotlin 2.4.0
JVM / Android
✅
✅
iOS / Native
✅
✅
WASM/JS — DSL
✅
✅
WASM/JS — annotations
⚠️ KT-82395
✅
📦 Install
plugins {
id("io.insert-koin.compiler.plugin") version "1.0.1"
}
The first stable release. RC1 shipped in April 2026; over the following weeks the safety pass, incremental-compilation handling, and K2.3.20 compatibility came together. The compiler-plugin path is now ready for production: full-graph compile-time safety, cross-module call-site validation, IC-aware safe-defaults, and K2.3.20 support.
Requires: Kotlin 2.3.20+ (K2) | Koin 4.2.1+
What's New Since 1.0.0-RC2
Compile-time safety expanded (A2/A3/A4)
Circular dependency detection — cycles like A → B → A are caught during graph traversal in A2/A3, no longer waiting for runtime.
Call-site validation with dynamic parameters — get<T> { parametersOf(...) } and ViewModel/inject sites with parametersOf {} flows are validated against the assembled graph.
Compose-wrapped lambdas — A4 traverses Compose lambdas, so koinViewModel<T>() inside @Composable builders is validated like any other call site.
Qualifier-collision guard — A4 reports when two definitions resolve to the same (raw class + qualifier) key, preventing silent last-wins overrides at runtime.
KOIN-D007 — @Factory returning a type that extends a suspend fun interface is now blocked at compile time (previously crashed Fir2Ir).
Bare koinConfiguration / koinApplication / startKoin no longer bypass A3 — the full-graph pass runs even without an explicit <T> type parameter.
Cross-module DSL visibility under typed startKoin<T>() — A4 now sees DSL module { … } definitions declared in dependency JARs when the aggregator uses the typed entry point.
Incremental compilation & build robustness
strictSafety flag — auto-enabled on modules that contain startKoin, koinApplication, or @KoinApplication. Forces the full-graph safety pass to re-run on the aggregator each build, working around two K2 IC gaps: DSL changes inside module { } lambda bodies (not part of any declaration's ABI) and @ComponentScan package-scope discovery (no source-level edge). Library and feature modules stay fully incremental.
Module-disambiguated hint file names — stable anchors prevent cross-module Hints.kt collisions during multi-platform builds.
kapt / Hilt coexistence — defensive guard around KtPsiSourceElement.psi prevents Fir2Ir crashes when the plugin runs alongside kapt or Hilt during migration.
Kotlin 2.3.20 compatibility
Fir2Ir crash on K2.3.20 — HINTS_PACKAGE is now claimed unconditionally, fixing a regression when building against the latest K2.
Annotation fixes
@Module(createdAtStart = true) — was silently ignored; now correctly forwards the flag to the generated module { }.
@Scope(name = "…") — previously produced no bean definition; the scope DSL is now generated as expected.
@ScopeId(name = "…") — resolution behaviour locked in via regression coverage.
Diagnostics
CTA banner ordering — error reports anchor on the last error in the chain and use a per-extension collector, so the actionable hint is always closest to the offending call site.
Compiler error info — error frames now embed the diagnostic code and a single-line "how to fix" pointer.
Performance
Memoized startKoin module discovery — repeated scans during a single compilation reuse the resolved module set.
Indexed @ComponentScan filtering — package-scope discovery now uses an indexed lookup instead of repeated linear scans, noticeably faster on large multi-module projects.
Repo / docs
Playground apps moved into the main repo (playground-apps/app-dsl, playground-apps/app-annotations) — single clone, single build, no separate repo to keep in sync.
Documentation updates — strictSafety, K2.3.20 minimum, circular-dep detection at compile time, KOIN-D007.
Behaviour changes to note when upgrading
strictSafety is on by default on aggregator modules. If your app contains startKoin, koinApplication, or @KoinApplication, that module's compileKotlin task will re-run the A3 safety pass on every build (library/feature modules unaffected). The cost is bounded, and it closes the IC gaps that previously let graph changes slip through cached builds. Set koinCompiler { strictSafety = false } to opt out.
Kotlin minimum bumped to 2.3.20 (was 2.3.0) — the Fir2Ir fix requires the newer compiler. If you're pinned to 2.3.0, stay on 1.0.0-RC2 until you can upgrade.
#16 — Compiler crash on @Factory returning fun interface extending suspend function type (@krzdabrowski) — now also blocked diagnostically via KOIN-D007
Zac Sweers — LookupTracker and ExpectActualTracker patterns from Metro
Issue reporters — the high-quality reproductions made all of this possible. See the closed-issues list above for the full set; everyone there contributed time and detail that shortened diagnosis significantly.
Internal feedback: Francois Dabonot (Kotzilla) — RC2.3 missing-artifact compile error came from his migration feedback.
renovateBot
changed the title
Update dependency io.insert-koin.compiler.plugin to v1
chore(deps): update dependency io.insert-koin.compiler.plugin to v1
May 23, 2026
renovateBot
changed the title
chore(deps): update dependency io.insert-koin.compiler.plugin to v1
Update dependency io.insert-koin.compiler.plugin to v1
May 28, 2026
renovateBot
changed the title
Update dependency io.insert-koin.compiler.plugin to v1
chore(deps): update dependency io.insert-koin.compiler.plugin to v1
May 31, 2026
renovateBot
changed the title
chore(deps): update dependency io.insert-koin.compiler.plugin to v1
Update dependency io.insert-koin.compiler.plugin to v1
Jun 1, 2026
renovateBot
changed the title
Update dependency io.insert-koin.compiler.plugin to v1
chore(deps): update koincompilerplugin to v1
Jun 2, 2026
renovateBot
changed the title
chore(deps): update koincompilerplugin to v1
Update koinCompilerPlugin to v1
Jun 3, 2026
renovateBot
changed the title
Update koinCompilerPlugin to v1
chore(deps): update koincompilerplugin to v1
Jun 3, 2026
renovateBot
changed the title
chore(deps): update koincompilerplugin to v1
Update koinCompilerPlugin to v1
Jun 8, 2026
renovateBot
changed the title
Update koinCompilerPlugin to v1
chore(deps): update koincompilerplugin to v1
Jun 12, 2026
renovateBot
changed the title
chore(deps): update koincompilerplugin to v1
Update koinCompilerPlugin to v1
Jun 15, 2026
renovateBot
changed the title
Update koinCompilerPlugin to v1
chore(deps): update koincompilerplugin to v1
Jun 16, 2026
renovateBot
changed the title
chore(deps): update koincompilerplugin to v1
Update koinCompilerPlugin to v1
Jun 18, 2026
renovateBot
changed the title
Update koinCompilerPlugin to v1
chore(deps): update koincompilerplugin to v1
Jun 19, 2026
renovateBot
changed the title
chore(deps): update koincompilerplugin to v1
chore(deps): update koincompilerplugin (major)
Jun 22, 2026
renovateBot
changed the title
chore(deps): update koincompilerplugin (major)
chore(deps): update dependency io.insert-koin.compiler.plugin to v1
Jun 25, 2026
renovateBot
changed the title
chore(deps): update dependency io.insert-koin.compiler.plugin to v1
Update dependency io.insert-koin.compiler.plugin to v1
Jun 29, 2026
renovateBot
changed the title
Update dependency io.insert-koin.compiler.plugin to v1
chore(deps): update dependency io.insert-koin.compiler.plugin to v1
Jul 2, 2026
renovateBot
changed the title
chore(deps): update dependency io.insert-koin.compiler.plugin to v1
Update dependency io.insert-koin.compiler.plugin to v1
Jul 11, 2026
renovateBot
changed the title
Update dependency io.insert-koin.compiler.plugin to v1
chore(deps): update dependency io.insert-koin.compiler.plugin to v1
Jul 12, 2026
renovateBot
changed the title
chore(deps): update dependency io.insert-koin.compiler.plugin to v1
Update dependency io.insert-koin.compiler.plugin to v1
Jul 12, 2026
renovateBot
changed the title
Update dependency io.insert-koin.compiler.plugin to v1
chore(deps): update dependency io.insert-koin.compiler.plugin to v1
Jul 13, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This PR contains the following updates:
0.6.2→1.0.2Release Notes
InsertKoinIO/koin-compiler-plugin (io.insert-koin.compiler.plugin)
v1.0.2Compare Source
A correctness-focused maintenance release: it removes several false compile-safety errors in multi-module projects, fixes duplicate-hint KLIB failures on iOS/Native/WASM-JS, and hardens per-compilation state under parallel Gradle daemons.
🔑 Highlights
@Modulewhose dependency is provided by a sibling module (assembled only at@KoinApplication/startKoin) no longer fails withKOIN-D001. It defers to the entry-point graph, and surfaces a newKOIN-W002warning only when no complete closure is visible in the compilation (#51).@ComponentScanand cross-module top-level@Singlefunctions no longer emit duplicate hint declarations that broke KLIB serialization (#62).parametersOfhelpers, and outer DSL qualifiers are now understood (#36, #49, #61, #41).KoinApplication(configuration = koinConfiguration { … })now runs full-graph safety (#38).🐛 Fixes
False
KOIN-D001for cross-module (sibling) dependencies — #51 (KTZ-4256)In a layered multi-module build, a
@Moduleis compiled without visibility of the sibling modules a downstream@KoinApplication(modules = […])assembles alongside it. Per-module (A2) validation therefore reported a provider that lives in a sibling as a hardKOIN-D001missing dependency. Validation now defers an unresolved binding when a provider hint for the type exists elsewhere on the build graph, settling it authoritatively at the entry-point closure (A3) or at runtimecheckModules(). When no complete closure is present in the compilation (e.g. a leaf library module), it emits the newKOIN-W002warning instead of an error.Duplicate hint declarations broke iOS / Native / WASM-JS — #62 (KTZ-4365)
A cross-module
@ComponentScancovering a dependency module's package, and cross-module top-level@Singlefunctions, could register the same definition more than once — emitting duplicatecomponentscan_*/definition_function_*hint declarations. The JVM/DEX toolchain tolerated it (a D8 "multiple definitions" warning); KLIB serialization (iOS/Native/WASM-JS) rejected it with a hardSignatureClashDetectorerror. Definitions are now de-duplicated by class identity (and by type+qualifier for functions), so each is emitted exactly once per target.False
KOIN-D001for typed DSL definitions with non-createlambdas — #36, #49single<T> { existingInstance },single<T> { provideX() },viewModel { VM() }and similar shapes are now recognized as providingT, so compile-safety no longer reportsTas a missing definition. The user's lambda is left untouched.False
KOIN-D006for indirectparametersOfhelpers — #61A call site passing an opaque params lambda (e.g.
{ buildParams() }) no longer triggersKOIN-D006("forgotparametersOf"). The diagnostic now fires only when no params lambda is present at all.Qualifier lost on DSL
createdefinitions — #41An outer DSL qualifier (
single<T>(named("x")) { create(::T) }) is now propagated into the compile-safety hints, so qualified cross-module definitions resolve correctly instead of producing spurious mismatches.Compose
koinConfiguration { }entry point not validated — #38KoinApplication(configuration = koinConfiguration { modules(…) })is now recognized as a Koin entry point, enabling full-graph (A3) compile-safety for Compose apps. ThekoinConfigurationcall is only marked as an entry point — it is not rewritten, so runtime behavior is unchanged.Flaky / order-dependent behavior under parallel Gradle daemons — (KTZ-4414)
Plugin config flags and the
@PropertyValueregistry were held in process-global mutable state shared across every compilation in a Gradle daemon. Parallel or interleaved compilations could read another build's flags or have a@PropertyValuedefault dropped. State is now held per-compilation (thread-local, rebound onto the IR phase), matching the existing per-compilation message-collector handling.This changes generated code and can affect runtime resolution. Auto-detected bindings no longer include framework plumbing / marker supertypes:
kotlin.Any,org.koin.core.component.KoinComponent,KoinScopeComponent, andandroidx.lifecycle.ViewModel/AndroidViewModel. Previously a@KoinViewModel/@Singleclass implementing one of these could be auto-bound to the framework base type, lettingget<ViewModel>()/get<KoinComponent>()resolve to an arbitrary component (silent wrong-instance resolution). A definition is now registered under its own type and its genuine domain interfaces only.Explicit bindings are unaffected —
@Single(binds = [ViewModel::class])still binds exactly what you list. If you relied on auto-binding to one of the excluded supertypes, add it explicitly withbinds = [...].✅ Compatibility
📦 Install
plugins { id("io.insert-koin.compiler.plugin") version "1.0.2" }Full changelog: InsertKoinIO/koin-compiler-plugin@1.0.1...1.0.2
v1.0.1Compare Source
A maintenance release focused on Kotlin 2.4.0 support and Kotlin/Native + WASM/JS build reliability. One plugin artifact now spans Kotlin 2.3.20 → 2.4.x.
🔑 Highlights
@Single(createdAtStart = true)honored on definition functions — eager singletons are created atstartKoinagain.🐛 Fixes
Kotlin version compatibility — #19, #42 (and koin#2431)
The plugin hard-crashed on the two most recent Kotlin versions:
ClassCastExceptionduring FIR extension registration.NoSuchMethodError(IrDeclarationOrigin.IR_EXTERNAL_DECLARATION_STUB).1.0.1 introduces a Kotlin version-adapter layer: the core is compiled against the stable IR API, and a small per-version adapter (selected at compile time) absorbs the breaking compiler-internal differences. A single published jar supports Kotlin 2.3.20 and 2.4.0; an unrecognized newer Kotlin gets a warning and best-effort support, while versions below the floor get a clear, actionable error instead of an internal crash.
Duplicate
injectedparams_*signatures broke iOS + WASM/JS — #44, #40A type collected by more than one
@ComponentScanmodule generated the@InjectedParamhint function twice with identical signatures. The JVM tolerated it; KLIB serialization (iOS/Native/WASM/JS) rejected it with "Different declarations with the same signatures". The hint is now emitted exactly once per target. (Regression vs 1.0.0-RC2.)WASM/JS KLIB serialization — #40
The plugin's generated hint files lacked a resolvable source, failing the JS/WASM KLIB serializer ("No file found for source null"). Fixed — DSL-based projects now build on WASM/JS.
@Single(createdAtStart = true)silently dropped — koin#2425, koin#2415createdAtStart = trueon a@Single/@Singletondefinition function inside a@Modulewas discarded in codegen, so eager singletons were never created atstartKoin(no error or warning). Now propagated correctly. (The@Module(createdAtStart)and@Singleton classcases were already fixed in 1.0.0-RC3.13.)Annotation-based projects (
@Module/@ComponentScan) targeting WASM/JS require Kotlin 2.4.0. On Kotlin 2.3.20 they hit an upstream Kotlin compiler bug — KT-82395 — in the JS/WASM KLIB metadata serializer, which the plugin cannot work around. Kotlin 2.4.0 resolves it. (iOS/Native and DSL-based WASM/JS are unaffected and work on both Kotlin versions.)✅ Compatibility
📦 Install
plugins { id("io.insert-koin.compiler.plugin") version "1.0.1" }Full changelog: InsertKoinIO/koin-compiler-plugin@1.0.0...1.0.1
v1.0.0Compare Source
Koin Compiler Plugin 1.0.0
The first stable release. RC1 shipped in April 2026; over the following weeks the safety pass, incremental-compilation handling, and K2.3.20 compatibility came together. The compiler-plugin path is now ready for production: full-graph compile-time safety, cross-module call-site validation, IC-aware safe-defaults, and K2.3.20 support.
Requires: Kotlin 2.3.20+ (K2) | Koin 4.2.1+
What's New Since 1.0.0-RC2
Compile-time safety expanded (A2/A3/A4)
A → B → Aare caught during graph traversal in A2/A3, no longer waiting for runtime.get<T> { parametersOf(...) }and ViewModel/inject sites withparametersOf {}flows are validated against the assembled graph.koinViewModel<T>()inside@Composablebuilders is validated like any other call site.(raw class + qualifier)key, preventing silent last-wins overrides at runtime.KOIN-D007—@Factoryreturning a type that extends a suspendfun interfaceis now blocked at compile time (previously crashed Fir2Ir).koinConfiguration/koinApplication/startKoinno longer bypass A3 — the full-graph pass runs even without an explicit<T>type parameter.startKoin<T>()— A4 now sees DSLmodule { … }definitions declared in dependency JARs when the aggregator uses the typed entry point.Incremental compilation & build robustness
strictSafetyflag — auto-enabled on modules that containstartKoin,koinApplication, or@KoinApplication. Forces the full-graph safety pass to re-run on the aggregator each build, working around two K2 IC gaps: DSL changes insidemodule { }lambda bodies (not part of any declaration's ABI) and@ComponentScanpackage-scope discovery (no source-level edge). Library and feature modules stay fully incremental.Hints.ktcollisions during multi-platform builds.KtPsiSourceElement.psiprevents Fir2Ir crashes when the plugin runs alongside kapt or Hilt during migration.Kotlin 2.3.20 compatibility
HINTS_PACKAGEis now claimed unconditionally, fixing a regression when building against the latest K2.Annotation fixes
@Module(createdAtStart = true)— was silently ignored; now correctly forwards the flag to the generatedmodule { }.@Scope(name = "…")— previously produced no bean definition; the scope DSL is now generated as expected.@ScopeId(name = "…")— resolution behaviour locked in via regression coverage.Diagnostics
Performance
startKoinmodule discovery — repeated scans during a single compilation reuse the resolved module set.@ComponentScanfiltering — package-scope discovery now uses an indexed lookup instead of repeated linear scans, noticeably faster on large multi-module projects.Repo / docs
playground-apps/app-dsl,playground-apps/app-annotations) — single clone, single build, no separate repo to keep in sync.strictSafety, K2.3.20 minimum, circular-dep detection at compile time, KOIN-D007.Behaviour changes to note when upgrading
strictSafetyis on by default on aggregator modules. If your app containsstartKoin,koinApplication, or@KoinApplication, that module'scompileKotlintask will re-run the A3 safety pass on every build (library/feature modules unaffected). The cost is bounded, and it closes the IC gaps that previously let graph changes slip through cached builds. SetkoinCompiler { strictSafety = false }to opt out.Kotlin minimum bumped to 2.3.20 (was 2.3.0) — the Fir2Ir fix requires the newer compiler. If you're pinned to 2.3.0, stay on
1.0.0-RC2until you can upgrade.Closed issues since the project went public
Fixed
@ScopeId(@limuyang2)@Providedstill flagging missing dependencies (@kmbisset89)Scope.get()(@alex28sh).module()extension not recognized by IntelliJ (@DenAbr)@Factoryreturningfun interfaceextending suspend function type (@krzdabrowski) — now also blocked diagnostically via KOIN-D007@Single(binds = [...])provider function (@flaringapp)compileSafetymissing binding silently passes on incremental compilation (@j-bajon) — drove thestrictSafetydesign@Scope(name=…)+@Scoped(binds=[…])silently produce no bean definitions (@rduriancik)org.koin.plugin.hints(@0xMatthewGroves)compileSafetychecks bypassed when usingKoinApplicationComposable in CMP (@rajdeepvaghela)Won't fix / deferred
module()extension (@JordanLongstaff) — documented as a known limitation pending IDE-side supportCross-repo fixes
@ScopeId(name = "…")resolution behaviourstartKoin<T>+@KoinApplication(modules=[…])+ scanned@KoinViewModelincludes(...)reachability@KoinApplication(modules = [...])overrides discovered@ConfigurationContributors
Project lead: @arnaudgiuliani (Arnaud Giuliani)
Code contributions (commit authors and merged PRs across all releases):
@Moduleprovider functions (PR #23)@ComponentScanhints without@Configuration(PR #25)Credits for techniques:
LookupTrackerandExpectActualTrackerpatterns from MetroIssue reporters — the high-quality reproductions made all of this possible. See the closed-issues list above for the full set; everyone there contributed time and detail that shortened diagnosis significantly.
Internal feedback: Francois Dabonot (Kotzilla) — RC2.3 missing-artifact compile error came from his migration feedback.
Full changelog
Configuration
📅 Schedule: (UTC)
🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.
♻ Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.
🔕 Ignore: Close this PR and you won't be reminded about this update again.
This PR was generated by Mend Renovate. View the repository job log.