
Type-attributed by default.
The model resolves symbols, traces dependencies, and follows imports across files. Lookalike methods are distinguished by their actual types, not by name.
The first type-attributed refactoring engine for JavaScript and TypeScript. Coordinate React, Angular, Next.js, and Node.js modernization alongside the Java backend on one engine.
JavaScript and TypeScript are first-class citizens in Moderne’s compiler-accurate model. Type information, symbols, and imports are resolved end-to-end before any recipe runs.
Native recipes ship in five categories today, with a codemod compatibility layer for jscodeshift, ts-morph, and ESLint.
Our developers now spend less time worrying about legacy code and more time focusing on value-driven work.
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.
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 the curated codemod ecosystem through one platform, and coordinates change across thousands of repositories with shared reporting and reviewable pull requests.
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).
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.
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.
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.
Refactor JavaScript once. Run the same campaign next quarter.