# Kotlin Symbol Processing changelog > Kotlin's annotation-processing API — what Room and its neighbours generate code through. - Vendor: Google - Category: Developer Tools - License: Apache-2.0 - Language: Kotlin - Official site: https://kotlinlang.org/docs/ksp-overview.html - Tracked by: What's New (https://whatsnew.fyi/product/ksp) - Harvested from: GitHub (google/ksp) - Entries below: 12 (newest first) What's New is an index, not a publisher: every entry below links to the vendor's own release notes, which are the authoritative source. Entries are labelled where they are hand-curated sample data, pre-releases, or drawn from a secondary source such as a developer blog. Reuse: the summaries, labels and curation here are © What's New. Quote freely with attribution and a link back; wholesale republication of the corpus is not permitted — terms: https://whatsnew.fyi/terms. The vendors' own release notes remain their publishers'. ## Releases ### 2.3.12 - Date: 2026-09-09 - Version: 2.3.12 - Original notes: https://github.com/google/ksp/releases/tag/2.3.12 - Permalink: https://whatsnew.fyi/product/ksp/releases/2.3.12 - **added** — Support for explicit backing fields that may be returned by Resolver.getSymbolsWithAnnotation when opting in to new features - **changed** — Resolver.getSymbolsWithAnnotation now returns a KSBackingField if the given annotation targeted a field, previously would return a KSProperty - **changed** — Resolver.effectiveJavaModifiers returns fewer modifiers for a KSPropertyDeclaration if it has a backing field, since most JVM-specific annotations now apply to the backing field - **changed** — KSP now models Java fields as properties that always have backing fields, with modifiers applying to the backing field instead - **added** — Processors must call registerProcessorForNewFeatures function in SymbolProcessorEnvironment when created to opt in to backing field support - **added** — KSVisitor implementations should move to KSVisitorNext, or extend KSTopDownVisitor with enableNewFeatures = true and override visitBackingField - **fixed** — Fix Resolver.getDeclarationsFromPackage returning incomplete declarations from KLibs in Kotlin Multiplatform - **fixed** — Fix KSP CLI process hanging indefinitely when a processor throws an unhandled exception - **fixed** — Fix implicit task dependency error between KSP and Android Lint in Android KMP - **fixed** — Fix NullPointerException by registering PluginProblemReporter as an application service - **fixed** — Do not mark companion objects as JAVA_STATIC in Resolver.effectiveJavaModifiers - **fixed** — Fix JAVA_STATIC modifier resolution for @JvmStatic members in Resolver.effectiveJavaModifiers - **changed** — Update minimum supported Android Gradle Plugin (AGP) version to 8.12.0 ##### What's Changed ###### Migrating Processors to Support Backing Fields This release introduces support for explicit backing fields (#2873), which may now be returned by `Resolver.getSymbolsWithAnnotation`. To prevent breaking existing processors, new language features require an explicit opt-in. More generally, the KSP API now explicitly models backing fields for properties. The following is an exhaustive list of functions in KSP API where processor may observe the change after opting in: - `Resolver.getSymbolsWithAnnotation`: The function now returns a `KSBackingField` if the given annotation targeted a field. Previously, if a field were targeted, the function would return a `KSProperty`. - `Resolver.effectiveJavaModifiers`: The function returns fewer modifiers for a `KSPropertyDeclaration` if it has a backing field, since most of the JVM-specific annotations apply to the backing field. If you are interested in the JVM modifiers, you should call the function with the `KSBackingField` obtained from the property instead. Additionally, KSP now models Java fields as properties that always have backing fields. Some of the modifiers now apply to the backing field instead. Processors adapting to new features must opt in via both of the following steps simultaneously (failing to do both may lead to undefined behavior): 1. The processor should call the `registerProcessorForNewFeatures` function in `SymbolProcessorEnvironment` immediately when created (and only once). Example: [AbstractTestProcessor.kt#L30](https://github.com/google/ksp/blob/958be42cfd07943f901727d12ab7fec6540d543f/test-utils/src/main/kotlin/com/google/devtools/ksp/processor/AbstractTestProcessor.kt#L30) 2. All implementations of `KSVisitor` should move to `KSVisitorNext`. If their processor code does not directly implement the interface but instead **extends** one of the KSP-provided visitors (such as `KSTopDownVisitor`), they should instead extend `KSTopDownVisitor(enableNewFeatures = true)` and override `visitBackingField` depending on their code and needs. Let us know if you run into unexpected behavior! ###### Bug Fixes * Fix Resolver.getDeclarationsFromPackage returning incomplete declarations from KLibs in Kotlin Multiplatform (#2396) * Fix KSP CLI process hanging indefinitely when a processor throws an unhandled exception (#3120) * Fix implicit task dependency error between KSP and Android Lint in Android KMP (#3128) * Fix NullPointerException by registering PluginProblemReporter as an application service (#3140) * Do not mark companion objects as JAVA_STATIC in Resolver.effectiveJavaModifiers (#3125) * Fix JAVA_STATIC modifier resolution for @JvmStatic members in Resolver.effectiveJavaModifiers (#3124) * Update minimum supported Android Gradle Plugin (AGP) version to 8.12.0 (#3149) ##### New Contributors Thanks to @KlyneChrysler, @budindepunk, and everyone who reported bugs and participated in discussions! **Full Changelog**: https://github.com/google/ksp/compare/2.3.11...2.3.12 ### 2.3.11 - Date: 2026-08-03 - Version: 2.3.11 - Original notes: https://github.com/google/ksp/releases/tag/2.3.11 - Permalink: https://whatsnew.fyi/product/ksp/releases/2.3.11 - **added** — Support org.gradle.isolated-projects for project isolation - **fixed** — Fix premature kspDebugAndroidTest task skipping on Android library modules - **fixed** — Fix missing parent declaration exception for @NotNull annotations during incremental compilation - **changed** — Clean output directories instead of skipping tasks when processor classpath transitions to empty - **fixed** — Fix build cache misses by marking KspGradleConfig.logLevel as @Internal - **added** — Add org.gradle.isolated-projects=true to KSP Gradle properties reference table - **added** — Add KSP Gradle properties reference table to README documentation - **changed** — Document collection values in KSValueArgument.value - **changed** — Update error messaging for ksp.useKSP2 deprecation notice ##### What's Changed - Support `org.gradle.isolated-projects` for project isolation (#3051) - Fix premature `kspDebugAndroidTest` task skipping on Android library modules (#3050) - Fix missing parent declaration exception for `@NotNull` annotations during incremental compilation (#3030) - Clean output directories instead of skipping tasks when processor classpath transitions to empty (#3046) - Fix build cache misses by marking `KspGradleConfig.logLevel` as `@Internal` (#3039) - Add `org.gradle.isolated-projects=true` to KSP Gradle properties reference table (#3076) - Add KSP Gradle properties reference table to README documentation (#3070) - Document collection values in `KSValueArgument.value` (#3069) - Update error messaging for `ksp.useKSP2` deprecation notice (#3066) ##### Contributors - Thanks to @simonlebras, @ChristianKatzmann, @Yong-yuan-X, @bacecek, @KlyneChrysler, @Shaurya2k06, and everyone who reported bugs and participated in discussions! **Full Changelog**: https://github.com/google/ksp/compare/2.3.10...2.3.11 ### 2.3.10 - Date: 2026-07-09 - Version: 2.3.10 - Original notes: https://github.com/google/ksp/releases/tag/2.3.10 - Permalink: https://whatsnew.fyi/product/ksp/releases/2.3.10 - **fixed** — Fix OOMs caused by unstopped coroutine Dispatcher threads by moving KSP task cache to a gradle build service - **fixed** — Sanitize ':' in internal-name module suffix so KSP works with Kotlin 2.4.0 default module names - **fixed** — Filter source file trees in KspAATask to restore NO-SOURCE skipping behaviour - **fixed** — Fix R-class resolution in KSP when AGP 9 built-in Kotlin is enabled - **fixed** — Fix KSP2 incremental cache path normalization mismatch - **fixed** — Normalize line endings for KspAATask source roots to prevent cross-platform remote build cache misses - **fixed** — Fix bug where KSP incremental compilation does not consider library class references in annotations - **fixed** — Consume all Kotlin sources in KSP to support other code generators - **fixed** — Fix configuration cache invalidation in klib cross-compilation check - **changed** — Memoized hash code for KSTypeImpl to speed up processing - **fixed** — Fix incorrect name generation for data classes annotated with @JvmRecord - **added** — Include kotlinx.coroutines in the distributed uber jar symbol-processing-aa-embeddable - **added** — New debugging features for incremental compilation, including additional logging and dependency graph visualization - **deprecated** — Deprecate the ksp(...) Gradle configuration in Kotlin Multiplatform (KMP) projects in favor of target-specific configurations ##### What's Changed * Fix OOMs caused by unstopped coroutine Dispatcher threads by moving KSP task cache to a gradle build service (#2817) * Sanitize ':' in internal-name module suffix so KSP works with Kotlin 2.4.0 default module names (#2964) * Filter source file trees in KspAATask to restore NO-SOURCE skipping behaviour (#2947) * Fix R-class resolution in KSP when AGP 9 built-in Kotlin is enabled (#2857) * Fix KSP2 incremental cache path normalization mismatch (#2854) * Normalize line endings for KspAATask source roots to prevent cross-platform remote build cache misses (#2849) * Fix bug where KSP incremental compilation does not consider library class references in annotations (#3011) * Consume all Kotlin sources in KSP to support other code generators (#3001) * Fix configuration cache invalidation in klib cross-compilation check (#3014) * Memoized hash code for `KSTypeImpl` to speed up processing (#2896) * Fix incorrect name generation for data classes annotated with `@JvmRecord` (#2813) * Include `kotlinx.coroutines` in the distributed uber jar `symbol-processing-aa-embeddable` (#2938) * New debugging features for incremental compilation, including additional logging and dependency graph visualization (#3015) * Deprecate the `ksp(...)` Gradle configuration in Kotlin Multiplatform (KMP) projects in favor of target-specific configurations (#2956). Note: Non-KMP projects are also affected. For migration details, see the [documentation](https://kotlinlang.org/docs/ksp-multiplatform.html#avoid-the-ksp-configuration-on-ksp-1-0-1). ##### Contributors * Thanks to @mvanhorn, @Yong-yuan-X, @MariusVolkhart, @shmuelr and everyone who reported bugs and participated in discussions! **Full Changelog**: https://github.com/google/ksp/compare/2.3.9...2.3.10 ### 2.3.9 - Date: 2026-05-26 - Version: 2.3.9 - Original notes: https://github.com/google/ksp/releases/tag/2.3.9 - Permalink: https://whatsnew.fyi/product/ksp/releases/2.3.9 - **fixed** — Cleaned up native cross-compilation support checks to prevent Gradle Configuration Cache invalidation - **fixed** — Fixed a compilation performance regression in PsiResolutionStrategy introduced in 2.3.8 ##### What's Changed * Cleaned up native cross-compilation support checks to prevent Gradle Configuration Cache invalidation (#2953) * Fixed a compilation performance regression in in PsiResolutionStrategy introduced in 2.3.8 (#2948) ##### Contributors * Thanks to everyone who reported bugs and participated in discussions! **Full Changelog**: https://github.com/google/ksp/compare/2.3.8...2.3.9 ### 2.3.8 - Date: 2026-05-13 - Version: 2.3.8 - Original notes: https://github.com/google/ksp/releases/tag/2.3.8 - Permalink: https://whatsnew.fyi/product/ksp/releases/2.3.8 - **changed** — Enabled new default annotation use-site rules in Kotlin's Analysis API for more information - **changed** — Enabled ksp.project.isolation by default when Gradle isolated projects are enabled - **changed** — Improved getSymbolsWithAnnotation performance by implementing a new PSI-based resolution strategy ##### What's Changed * Enabled new default annotation use-site rules in Kotlin's Analysis API (see KEEP 402) for more information. Note: KSP was already mostly compatible with KEEP 402, so there shouldn't be any visible changes for users. (#2888) * Enabled ksp.project.isolation by default when Gradle isolated projects are enabled (#2866) * Improved getSymbolsWithAnnotation performance by implementing a new PSI-based resolution strategy (#2816) ##### Contributors * Thanks to @hugoncosta and everyone who reported bugs and participated in discussions! **Full Changelog**: https://github.com/google/ksp/compare/2.3.7...2.3.8 ### 2.3.7 - Date: 2026-04-22 - Version: 2.3.7 - Original notes: https://github.com/google/ksp/releases/tag/2.3.7 - Permalink: https://whatsnew.fyi/product/ksp/releases/2.3.7 - **changed** — Bumped Kotlin target language version to 2.3 - **fixed** — Fixed crash caused by upstream dependency - **fixed** — Fixed support for Gradle Isolated Projects ##### What's Changed * Bumped Kotlin target language version to 2.3 (#2821) * Fixed crash caused by upstream dependency (#2856) * Fixed support for Gradle Isolated Projects (#2844) ##### Contributors * Thanks to everyone who reported bugs and participated in discussions! **Full Changelog**: https://github.com/google/ksp/compare/2.3.6...2.3.7 ### 2.3.6 - Date: 2026-02-17 - Version: 2.3.6 - Original notes: https://github.com/google/ksp/releases/tag/2.3.6 - Permalink: https://whatsnew.fyi/product/ksp/releases/2.3.6 - **fixed** — Fixed an issue where module recompilation would fail on Windows environments when KSP2 was enabled - **fixed** — Resolved an issue where generated Java sources were ignored when using Android Kotlin Multiplatform with IP-compatible paths - **fixed** — Fixed a KSP version 2.3.5 CI error exception that does not break build checks - **added** — Added symbol-processing-api and common-deps to compile dependencies - **changed** — Improved the detection of built-in Kotlin by removing the reliance on KotlinBaseApiPlugin - **changed** — Back-ported a performance optimization in the Intellij / Analysis API - **added** — Added support for nested typealias Kotlin language feature - **security** — Exclude jdbc package from log4j to prevent vulnerability issue ##### What's Changed * Fixed an issue where module recompilation would fail on Windows environments when KSP2 was enabled (#2774) * Resolved an issue where generated Java sources were ignored when using Android Kotlin Multiplatform with IP-compatible paths (#2744) * Fixed a KSP version 2.3.5 CI error exception that does not break build checks (#2763) * Added symbol-processing-api and common-deps to compile dependencies (#2789) * Improved the detection of built-in Kotlin by removing the reliance on KotlinBaseApiPlugin (#2772) * A back-port of a performance optimization in the Intellij / Analysis API ([2785](https://github.com/google/ksp/pull/2785) ) * Added support for nested typealias Kotlin language feature #2588 * Exclude jdbc package from log4j to prevent vulnerability issue #2651 ##### Contributors * Thanks to @salmanmkc, @jaschdoc, @gurusai-voleti and everyone who reported bugs and participated in discussions! **Full Changelog**: https://github.com/google/ksp/compare/2.3.5...2.3.6 ### 2.2.21-2.0.5 - Date: 2026-02-02 - Version: 2.2.21-2.0.5 - Original notes: https://github.com/google/ksp/releases/tag/2.2.21-2.0.5 - Permalink: https://whatsnew.fyi/product/ksp/releases/2.2.21-2.0.5 - **added** — A new Gradle property flag warn.on.ksp1.usage was added to mute warnings about KSP1 usage ##### What's Changed * A new Gradle property flag was added to mute the warnings about KSP1 usage. You can enable this by setting warn.on.ksp1.usage=false in your gradle.properties file. **Full Changelog**: https://github.com/google/ksp/compare/2.2.21-2.0.4...2.2.21-2.0.5 ### 2.3.5 - Date: 2026-01-28 - Version: 2.3.5 - Original notes: https://github.com/google/ksp/releases/tag/2.3.5 - Permalink: https://whatsnew.fyi/product/ksp/releases/2.3.5 - **fixed** — KSPCoreEnvironment.instance_prop memory leak when used programmatically - **fixed** — Missing first annotation argument when toByte is used - **fixed** — Circular dependency between KSP and KAPT in AGP 9.0 ##### What's Changed * KSPCoreEnvironment.instance_prop leaks memory when used programmatically #2742 * Missing first annotation argument when toByte is used #2672 * Fix circular dependency between KSP and KAPT in AGP 9.0 #2743 ##### Contributors * Thanks to everyone who reported bugs and participated in discussions! **Full Changelog**: https://github.com/google/ksp/compare/2.3.4...2.3.5 ### 2.3.4 - Date: 2025-12-16 - Version: 2.3.4 - Original notes: https://github.com/google/ksp/releases/tag/2.3.4 - Permalink: https://whatsnew.fyi/product/ksp/releases/2.3.4 - **fixed** — KSP ignores sources in Kotlin directory - **fixed** — Avoid recording Java symbol lookups in non-incremental builds - **fixed** — Clean up ThreadLocals when processing is done ##### What's Changed * KSP ignores sources in Kotlin directory #2730 * Avoid recording Java symbol lookups in non-incremental builds #2728 * Clean up ThreadLocals when processing is done #2709 ##### Contributors * Thanks to everyone who reported bugs and participated in discussions! **Full Changelog**: https://github.com/google/ksp/compare/2.3.3...2.3.4 ### 2.3.3 - Date: 2025-11-20 - Version: 2.3.3 - Original notes: https://github.com/google/ksp/releases/tag/2.3.3 - Permalink: https://whatsnew.fyi/product/ksp/releases/2.3.3 - **changed** — Migrate away from a deprecated compilerOptions KGP API ##### What's Changed * Migrate away from a deprecated compilerOptions KGP API #2703 ##### Contributors * Thanks to everyone who reported bugs and participated in discussions! **Full Changelog**: https://github.com/google/ksp/compare/2.3.2...2.3.3 ### 2.3.2 - Date: 2025-11-06 - Version: 2.3.2 - Original notes: https://github.com/google/ksp/releases/tag/2.3.2 - Permalink: https://whatsnew.fyi/product/ksp/releases/2.3.2 - **fixed** — KSP incorrectly processed specific nullable annotations from Java interfaces, leading to incorrect nullability in the generated Kotlin code - **fixed** — Regression that caused runtime failures for projects using AGP 8.8.0 and older due to an incompatible, version-specific type check ##### What's Changed **Note:** This release is a hotfix for a regression introduced in 2.3.1 * Fixed an issue where KSP incorrectly processed specific nullable annotations from Java interfaces, leading to incorrect nullability in the generated Kotlin code #2696 * Fixed a regression introduced in #2656 that caused runtime failures for projects using AGP 8.8.0 and older due to an incompatible, version-specific type check. #2694 ##### Contributors Thanks to everyone who reported bugs and participated in discussions! **Full Changelog**: https://github.com/google/ksp/compare/2.3.1...2.3.2