Angular modernization

Your Angular app, current again. Without a feature freeze.

I upgrade and modernize large Angular codebases, and move AngularJS apps to Angular: version upgrades, zoneless change detection, signals, standalone components, Vitest and strict typing. In small, reviewed steps your team can keep shipping alongside.

Angular checkup

B2B SaaS platform

Nx · Angular 22 · 1 622 files · 1.6 s

  • GoodVersion & toolinglatest major
  • PoorDeprecated APIsremoval due in v23
  • GoodZoneless readiness100% OnPush
  • GoodComponents & templates100% signal inputs
  • FairTesting29% with a spec
  • GoodCircular dependenciesnone
Excerpt of ng-checkup 0.4 output on the codebase from the case study below.

Where to start

Angular Health Check

A free, fixed-scope review that tells you what modernizing your app will take, before you commit to it. You get a plan you can execute with your own team, or with me.

  1. 1
    Full ng-checkup report

    Twelve areas graded, every finding with the files it affects: version gap, deprecated APIs, third-party packages that block the upgrade, zoneless readiness, signals and standalone adoption, architecture and lazy loading, tests, type safety, security with the known vulnerabilities of your dependencies, circular dependencies, bundle size, and the large files your team changes most often. Per project in a monorepo, and how the numbers moved over the last year. For an AngularJS or hybrid app, what is left to migrate and what makes each piece hard to move.

  2. 2
    Manual architecture review

    What a tool cannot see: state management, change detection hot spots, module boundaries, the test setup and the CI pipeline.

  3. 3
    A prioritized upgrade plan

    One Angular major at a time, with the migrations each step needs, the risks, and an effort estimate per step. Coming from AngularJS, the migration in phases instead.

  4. 4
    A walkthrough with your team

    A 60-minute call to go through the findings and the plan, and answer questions.

After the plan

What I modernize

Every change lands as its own merge request, behind your CI, small enough to review in one sitting.

AngularJS to Angular

AngularJS has had no security fixes since January 2022. I move it to Angular without a rewrite and without a freeze: controllers turned into components while the app still runs on AngularJS, then both frameworks side by side with ngUpgrade, services and components moved bottom up, and AngularJS removed at the end. New features can be written in Angular from the second step on.

ng-checkup counts what is left at every step, and a CI gate keeps the AngularJS part from growing back.

Primo VE to NDE

For libraries on Ex Libris Primo: the AngularJS customization package rebuilt as an Angular module for the New Discovery Experience, view by view, before VE goes away.

Version upgrades

One major at a time with ng update, the follow-up migrations reviewed by hand, and the build green after every step.

Zoneless change detection

OnPush everywhere first, then zone.js out of the bundle and out of the tests.

Signals and NgRx

Classic NgRx and BehaviorSubject services moved to signals or the NgRx signal store, with RxJS bridges for legacy consumers.

Standalone and control flow

NgModules removed, @if and @for instead of *ngIf, signal inputs and outputs.

Karma to Vitest

Deprecated Karma and Jasmine replaced, specs kept green, zone-based test helpers rewritten.

Strict typing

strictNullChecks, strictTemplates and noImplicitAny switched on, staged folder by folder.

Circular dependencies and bundle size

Import cycles cut, eager code made lazy, and the initial bundle measured so it stays small.

CI quality gates

Ratchets that let a count go down but never up, so the codebase does not slide back after I leave.

Case study

A German B2B SaaS platform, modernized in place

  • Nx monorepo
  • 1 600 TypeScript files
  • 126 000 lines
  • Under active development

A large Angular application with classic NgRx, Karma, zone.js and loose typing, under active development. I brought it to Angular 22 and zoneless change detection while the team kept shipping features. Every step landed as a reviewed merge request, and CI gates now stop the old patterns from coming back.

133 → 0
circular imports
3.7 → 3.0 MB
initial bundle
313 specs
moved from Karma to Vitest, 3 887 tests
0
classic NgRx left: all state on signal stores
Zoneless
zone.js removed from the app and the tests
Strict
strictTemplates, strictNullChecks and noImplicitAny on

Free and open source

See where your app stands in one minute

ng-checkup is the tool every health check starts from. Run it on your repository and you get the same graded report, as a page you can share with your team.

npx ng-checkup --report checkup.html
  • Finishes in seconds, even on a large monorepo
  • Reads your code, never changes it; only package names and versions go online
  • Known vulnerabilities from osv.dev, hotspots from your git history
  • Deprecations come from your installed Angular version, not a stale list
  • Recognises AngularJS and hybrid apps, with a migration plan in phases
  • On every pull request: the GitHub Action on the Marketplace, or the GitLab CI/CD component
  • MIT licensed, source on GitHub

Which framework runs on a site

No repository needed: ng-checkup url reads what any browser downloads from a public web app and names AngularJS or Angular with the version, zone.js, React, Vue, Next.js and Nuxt.

npx ng-checkup url https://angularjs.org
Read the page and 9 scripts (0.3 MB) from angularjs.org

  AngularJS 1.8.2        seen in the page

  high   AngularJS 1.8.2 is end of life since January 2022
         No security fixes since 31 December 2021.

How the code moved over time

ng-checkup history runs the checkup on one commit per month from git and draws the score and the measures that moved most. Your checkout is never touched.

npx ng-checkup history --report history.html
date        Angular   score
2023-10-30  16.2.11      60
2024-05-24  18.0.0       68
2025-11-10  20.3.9       76
now         21.2.12      91

    -27  *ngIf / *ngFor / [ngSwitch] uses
    -16  Components with eager change detection

How it works

Three steps, no long commitment

You decide after each step whether to continue.

  1. Send a report or grant access

    Run ng-checkup yourself and send the JSON, or give me read access to the repository.

  2. Get the free health check

    The report, the review and a step-by-step plan with estimates, walked through with your team.

  3. Execute, together or alone

    Your team follows the plan, or I do the work in small merge requests alongside them.

About

Hi, I'm Stefan

I'm a frontend engineer from Serbia, working remotely with teams in Germany on Central European time. Most of my work happens inside large Angular codebases: the upgrades nobody has time for, and the tooling that keeps a codebase from sliding back afterwards.

I write down why every decision was made, so your team owns the result when I am gone.

Get in touch

Tell me which Angular version you are on and roughly how big the app is.