Watch GitLab Duo Chat migrate an entire Angular app across 5 major versions, from analysis to merge request, in a single conversation.
Duo Chat reads every file, inventories 11 components, 3 services, 13 Material modules, and creates a GitLab Issue with 6 phases and ~80 checkboxes.
Duo Chat runs ng update, refactors code, migrates templates, switches builders, verifies builds, commits each phase, pushes, and creates a merge request.
useDefineForClassFieldsAppModule and AppRoutingModule*ngIf ➔ @if, *ngFor ➔ @forapplication builderstyleUrls ➔ styleUrlinject() in all componentstoSignal())AsyncPipe dependencyzone.js from dependencies and polyfillsprovideZonelessChangeDetection()experimentalDecorators, downlevelIterationmoduleResolution to bundler| Category | Angular 15 | Angular 20 |
|---|---|---|
| Bootstrapping | platformBrowserDynamic().bootstrapModule() | bootstrapApplication() |
| Components | @NgModule({ declarations }) | Standalone (default) |
| Templates | *ngIf, *ngFor | @if, @for |
| Dependency Injection | constructor(private svc: Service) | inject(Service) |
| Reactivity | BehaviorSubject + async pipe | signal() + toSignal() |
| Change Detection | Zone.js | Zoneless |
| Build System | Webpack (browser builder) | esbuild (application builder) |
| Theme | Material 2 (indigo-pink) | Material 3 (azure-blue) |
| Node.js | 18.x | 22.x |
| TypeScript | 4.9 | 5.8 |
Duo Chat reads and understands every file in the project before making any changes. It knows the component structure, DI patterns, and template syntax.
When styleUrl (singular) failed on Angular 16, Duo Chat detected the build error, understood it was a v17 feature, and reverted the change automatically.
Each phase runs ng build to verify the migration succeeded before committing. No broken intermediate states.
From project analysis to GitLab Issue creation, code migration, git commits, branch push, and merge request creation, all in one conversation.
See the actual GitLab artifacts produced by this demo.
📋 Migration Plan Issue 📦 Merge Request