Migration
Kotlin 1.x to 2.x migration
Standard library renames, deprecated API replacements, kotlinx library bumps, and Gradle plugin upgrades. UpgradeToKotlin2 chains the full migration in one recipe.
Automate Kotlin 1.x to 2.x migrations, performance recipes, and Android deprecation cleanup across hundreds of repositories. Deterministic execution, agent-ready infrastructure.
Captures program intent at the semantic level. Changes apply safely and accurately across the entire codebase.
Coordinates changes across hundreds of repositories at once, without manual sequencing or per-team coordination overhead.
Build files, Maven coordinates, version catalogs, and Kotlin plugin versions update consistently across the portfolio.
Existing formatting, indentation, and coding conventions remain intact, so changes integrate cleanly without diff noise.
Migration progress, coverage, and risk are visible across the full portfolio, with rollup views above per-repository detail.
On-demand webinar
Engineers from Netflix, Airbnb, and LinkedIn share how they tackle automated code changes at scale — and get developers to actually review and merge the PRs.


Moderne supports Kotlin from 1.x through 2.x, with migration recipes covering the full transition. The UpgradeToKotlin2 recipe automates standard library renames (toLowerCase to lowercase, appendln to appendLine, Enum.values to Enum.entries, capitalize and decapitalize), kotlinx library bumps (coroutines, datetime, serialization) targeting the latest supported versions, Gradle plugin upgrades to 2.x, and removal of deprecated build properties.
OpenRewrite ships a Kotlin DSL for declarative recipe authoring. A K2 compiler plugin reads paired before-and-after Kotlin lambdas and synthesizes a Recipe subclass at compile time, the same way Refaster's annotation processor works for Java. Recipe authors stay in idiomatic Kotlin with no annotations, no separate template class, and no runtime reflection. Pattern-shaped refactorings use the declarative shape. Structural recipes that need annotations or lexical context drop into an imperative KotlinVisitor scope.
IntelliJ inspections are IDE-bound and operate per-file in the developer's editor. Detekt is static analysis that flags issues but doesn't coordinate fixes across repositories. Moderne provides deterministic transformations that apply across hundreds of repositories in a single coordinated run, delivering reviewable pull requests at scale. IDE inspections require a developer to be present. Moderne provides the portfolio-wide automation layer that engineers and coding agents call when they need transformations applied at scale.
Yes. Build.gradle (Groovy DSL) and build.gradle.kts (Kotlin DSL) files parse into the LST alongside Maven coordinates and Gradle version catalogs. The UpgradeKotlinGradlePlugins recipe handles Kotlin plugin version upgrades across both build file formats, and dependency management recipes apply consistently regardless of which DSL a repository uses.
Moderne's migration model runs in two tiers. Tier 1 covers transformations with a clear, known target state and applies them automatically. Examples include case conversions, appendLine swaps, and enum entries replacements. Tier 2 surfaces changes with behavioral implications and flags them with inline markers so engineers decide before any transformation runs. Engineers get the automated wins immediately and a prioritized list of what needs a decision.
Yes. Kotlin is fully represented in the OpenRewrite Lossless Semantic Tree, giving coding agents a compiler-accurate model of Kotlin source code to reason over. Recipes provide the deterministic execution layer agents call when they need transformations applied safely and consistently across repositories. This is the same Agent Tools infrastructure (Prethink, Trigrep, Skills, MCP) Moderne provides across Java, JavaScript, Python, and C# codebases.