Migrate
AlphaLegacy upgrades (Angular 17→21, Next 14→16, Node 18→20, CJS→ESM, JS→TS): paste a package.json, get a deterministic rule-based plan (7 rules).
- 1.Input
- 2.Deterministic analysis
- 3.Claude/Gemini reasoning (optional, BYOK)
- 4.Validation
- 5.Evidence
- 6.Human review
- 7.Export
Migration plan checklist
- Commit a clean baseline and capture the lockfile.
- Apply the findings table below top-down (breaking first).
- Run Next.js codemods per major, then fix App Router breaking changes.
- Reinstall, typecheck, run tests, and diff the lockfile before merging.
| Severity | Rule | Evidence | Suggestion |
|---|---|---|---|
| breaking | next-major-lt-15 | "next": "14.2.5" | Upgrade Next.js one major at a time (14→15→16); run the official codemods and review App Router migration notes for layouts, metadata, and async request APIs. |
| warning | react-major-lt-19 | "react": "18.3.1" | Bump react to ^19 and align peer ranges; check ref-as-prop changes and removed legacy APIs before upgrading dependents. |
| warning | engines-node | "node": ">=18" | Raise engines.node to >=20 and re-verify native deps and CI images built for Node 18. |
| info | major-bump-list | "next": "14.2.5", "react": "18.3.1", "react-dom": "18.3.1", "zod": "~3.23.8", "typescript": "5.4.5" | Pinned/tilde ranges listed above will not float to the new majors automatically; bump each deliberately and run tests per dependency. |
Alpha: verify everything before acting.
What the 7 rules check
- next-major-lt-15: flags Next.js below 15 when moving to 16.
- react-major-lt-19: flags React below 19.
- react-dom-peer: flags mismatched react and react-dom majors.
- engines-node: flags a missing or low engines.node field.
- cjs-main-field: flags a CJS main entry when moving to ESM.
- cjs-missing-type: flags a missing "type": "module" field when moving to ESM.
- major-bump-list: lists pinned or tilde ranges that will not float to the new majors on their own.
With the default sample and the Next 14 → 16 target, the table above shows 4 findings: 1 breaking, 2 warnings, 1 info.
Privacy: your key is sent only to the chosen provider through our stateless proxy, which never stores it server-side. Requests bill to your own provider account. Without a key every deterministic feature still works; the model step is optional.