
The first type-attributed refactoring engine for JavaScript and TypeScript. Coordinate React, Angular, and Node.js modernization across thousands of repositories, safely, deterministically, and side by side with your Java backend.

require, ES6 imports, namespace imports, destructuring. Every codemod author re-implements the same logic, inconsistently, in every script.Resolves types, symbols, and dependencies, so changes distinguish between lookalike methods and don't break on edge cases that AST tools miss.
Coordinates changes across hundreds of repositories in a single run, with shared reporting, impact analysis, and reviewable pull requests.
Brings curated codemods, ESLint plugins, and native LST recipes into one execution layer, so teams don't have to maintain a patchwork of tools.
Keeps existing whitespace, formatting, and code style intact so diffs are clean, idiomatic, and easy for reviewers to merge.
Runs JavaScript and TypeScript transformations in the same campaign as Java, Python, and infrastructure changes.
Provides a semantic foundation that AI coding agents can reason against, plus a governed execution layer that applies their changes safely at scale.
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.

Run a single recipe to migrate Node.js versions, replace deprecated util.isX() calls with native equivalents, and update imports consistently across CommonJS, ES6 imports, and destructuring styles. Because the LST understands types, recipes distinguish between util.isArray() and an unrelated isArray(), eliminating false positives.
Coordinate React, Angular, and Next.js upgrades across hundreds of repositories at once. Moderne runs curated codemods alongside native LST recipes, with full reporting on what changed, where, and what's left.
Moderne becomes the centralized hub for the entire codemod ecosystem. Hundreds of curated codemods, including jscodeshift transforms and ESLint plugins, execute through the same platform with shared orchestration, reporting, and pull request workflows.
Answer questions that were impossible at scale: "Where is this method used across thousands of repos?" "What breaks if we change this API?" "Where are deprecated patterns still hiding?" The LST generates portfolio-wide data tables on React hooks, Angular services, security patterns, and architectural usage.
Trace data and control flow end-to-end: from a React form, through a Spring backend, into an API response. Run a single campaign that updates frontend code, backend services, and infrastructure together, instead of three sequential migrations that drift out of sync.
Follow untrusted input from a React form through a Spring controller into an API response, for security analysis, compliance audits, or impact assessment.
Pair a backend API rename in Java with the corresponding fetch call updates in TypeScript clients. One run, one PR set, no drift.
Remediate a CVE that touches both npm and Maven dependencies in a single campaign, instead of running two parallel projects with separate review cycles.

Moderne's JS support spans two execution layers: native LST recipes built on type-attributed semantic understanding, and curated codemods running through the same platform infrastructure:
Lossless Semantic Trees resolve types, symbols, and dependencies. Recipes distinguish between lookalike methods and trace data flow across files, no false positives, no missed cases.
Applies recipes across hundreds of repositories in a single coordinated run, with impact analysis, shared reporting, and reviewable pull requests at every step.
Hundreds of curated codemods and ESLint rules execute through the same platform: one access point, one execution layer, one reporting model for the entire JS toolchain.
Whitespace, comments, and existing code style are preserved on every run. Reviewers see only the actual change, not a diff full of formatting noise.
JS, TS, Java, Python, and infrastructure share one LST and one execution model. Run frontend and backend changes in the same campaign.
Operates on raw syntax trees without type information. Authors re-implement import handling, symbol resolution, and edge cases for every codemod they write.
Runs one repo at a time. No shared orchestration, no multi-repo reporting, no impact analysis across the portfolio. Coordination is left to whoever runs the script.
jscodeshift for one transform, ts-morph for another, an ESLint plugin for a third. Each has its own configuration, distribution, and execution model.
Most AST-based tools rewrite whitespace, comments, and trailing characters in ways reviewers reject. Diff noise frequently outweighs the actual change.
Designed for JS/TS only. Cannot coordinate with backend Java services, Python data pipelines, or infrastructure changes. Those run separately.
Type-attributed refactoring means the platform understands the actual types of every value, parameter, and return, not just the syntax of the code. Moderne represents JavaScript and TypeScript in a Lossless Semantic Tree that resolves symbols, traces dependencies, and follows imports across files. The result: refactoring tools can distinguish between two methods that share a name but have different signatures, eliminating the false positives and missed cases that plague AST-based codemods.
jscodeshift, ts-morph, and ESLint codemods all operate on raw syntax trees within a single repository. Moderne runs above them: it provides type-attributed semantic understanding, executes hundreds of curated codemods through one platform, and coordinates change across thousands of repositories with shared reporting and reviewable pull requests. You can keep using the codemods you already trust. Moderne becomes the orchestration and execution layer.
Yes. JavaScript and TypeScript are both first-class citizens in the OpenRewrite Lossless Semantic Tree, with type information preserved in both languages. Recipes work across .js, .ts, .jsx, and .tsx files, and migration paths from JavaScript to TypeScript are part of the native recipe catalog.
Yes. Moderne ships curated codemods covering React (hooks adoption, class-to-function migration), Angular (AngularJS to modern Angular, version upgrades), and Next.js (framework upgrades, App Router migrations). These run alongside native LST recipes and execute consistently across every repository in the portfolio, with full reporting on what changed and where.
Moderne automates Node.js version migrations as recipes that handle the deprecated APIs, import updates, and breaking changes at each step. The Node.js 20 to 24 migration, for example, replaces every deprecated util.isX() call with the correct native equivalent and updates imports consistently across CommonJS, ES6, namespace, and destructuring import styles. Because the LST understands types, the recipe distinguishes between util.isArray() and any unrelated isArray() in your code.
Yes. JavaScript, TypeScript, and Java share one Lossless Semantic Tree and one execution model in Moderne. That means a single campaign can trace data flow from a React form through a Spring controller, pair a backend API rename with frontend fetch updates, or remediate a CVE that touches both npm and Maven dependencies. One coordinated run, not three sequential projects.
Yes. JavaScript and TypeScript are fully represented in the OpenRewrite Lossless Semantic Tree, giving coding agents a semantic model of your JS codebase to reason against. Recipes provide the governed execution layer that applies agent-proposed changes safely and consistently across repositories, so you get AI-assisted authoring with deterministic enterprise rollout.
Yes. The Lossless Semantic Tree captures whitespace, comments, and existing formatting alongside syntax and types. When recipes apply changes, the surrounding code is preserved exactly as written, so reviewers see only the actual transformation, not a diff full of formatting noise. This is one of the main reasons enterprise teams adopt LST-based refactoring over AST tools that frequently rewrite formatting.