Uh oh!
There was an error while loading. Please reload this page.
Conversation
The latest updates on your projects. Learn more about Vercel for GitHub.
|
brandyscarney
left a comment
There was a problem hiding this comment.
Looking really good! Excited for this.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
brandyscarney
left a comment
There was a problem hiding this comment.
Great work! Thanks for adding colors. 🎨
thetaPC
left a comment
There was a problem hiding this comment.
LGTM, left one actual request and the rest are suggestions
| for (const finding of entry.findings) { | ||
| lines.push(` ${dim(`${finding.filePath}:${finding.line}`)} - ${finding.detail}`); | ||
| } | ||
| lines.push(` see ${cyan(entry.migration.docsUrl)}`); |
There was a problem hiding this comment.
Please use inclusive language:
| lines.push(` see${cyan(entry.migration.docsUrl)}`); | |
| lines.push(` review${cyan(entry.migration.docsUrl)}`); |
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
thetaPC
commented
Jul 30, 2026
@ShaneK When I reran the command, it successfully blocked it but did print out "Ionic migrate: angular@9 (v9 -> v10, 0 migration(s))". Is there a check in case a dev tries to migrate to a version that doesn't exist? |
ShaneK
commented
Jul 31, 2026
Uh oh!
There was an error while loading. Please reload this page.

Issue number: internal
What is the current behavior?
There's no tooling to help apps move across a major version of Ionic. Every breaking change in the v9 upgrade guide has to be found and applied by hand, across Angular, React, and Vue, with no way to tell which ones a given app is even affected by.
What is the new behavior?
Adds a new
@ionic/migratepackage: a standalone tool that scans an app, applies the breaking changes it can make safely, and prints a checklist of the ones that need manual rework, each with a file, line, and docs link. It detects the installed framework and major frompackage.jsonand selects only the migrations whose version range applies, so a project already on the target major does nothing.Auto-fixes cover the Angular import and package bumps, CSS
~prefix removal, standalone zoneless bootstrap, React Router v6 route rewrites and dep bumps, Vue Router 5 / Vue 3.5 bumps, andautocorrect="off". Report-only findings cover the rest (NgModule zoneless, legacy picker,ion-img,ion-navrouter removal, RR6 semantic cases, Vue guardnext()). TypeScript and TSX edits go throughts-morph; HTML and Vue templates use a quote-aware scanner so string literals and comments are left alone. Changed files are run through the project's own Prettier so the AST edits land as clean diffs.The runner is single-shot by design (a project migrator isn't inherently idempotent - some cannot be due to the nature of their change, like the Angular import changes) and guards re-runs two ways: the version gate skips work once the
@ionic/*bump has landed, andsave()buffers text writes so the gate-closingpackage.jsonbump only hits disk if every migration and the ts-morph save succeed. It won't write to a dirty working tree or directory without git unless--forceis passed, so git can be used to undo changes in case of emergency.Does this introduce a breaking change?
Other information
Migrations are registered in
src/migrations/index.ts; adding one is a new file undersrc/migrations/v<major>/plus a fixture-backed test. The engine handles selection, ordering, git safety, formatting, and reporting.Several new tests were added for migrations and a CI workflow was added that runs migration tests only when migration-related files were changed. When this is merged fully to main we can also make that check required to prevent breaking migration changes.