Angular 20: focus on reactivity and performance, possible solution for deprecated Karma testing

Angular 20: focus on reactivity and performance, possible solution for deprecated Karma testing

The Angular team has released version 20, with key changes including further stabilized reactivity based on its Signals API, a developer preview of doing without ZoneJS to improve performance, and experimental support for the vitest testing framework as a replacement for the deprecated Karma test runner.

Sponsored by Google, Angular is an open-source web framework with both client-side and optional server-side rendering. 

The big news for Angular in recent years is the development of Signals, which track state within an application and allows the framework to respond with rendering updates when state changes. This approach to reactivity is now maturing. Three key APIs, these being effect, linkedSignal and toSignal, are now designated stable.

ECMA TC39, the technical committee which standardizes JavaScript, has a proposal to add reactivity to the language using Signals, the aim being to align the JavaScript ecosystem. According to the Angular 20 release post, the TC39 reference implementation is based on Angular Signals.

Another change in version 20 is a preview of Angular without ZoneJS, also known as zoneless. ZoneJS is an earlier approach to automatic detection of state changes which has long been baked into Angular via a file called Zone.js. The Angular team found that ZoneJS is bad for performance since it triggers synchronization with state more often than is necessary, brings a lot of overhead, and makes debugging difficult. 

The traditional test runner for Angular, called Karma, was deprecated in Angular 16, but it has not always been clear how to replace it. Angular 20 adds experimental support for vitest, allowing developer to configure the Angular CLI to run unit tests with vitest via the command ng test.

Server-side rendering (SSR) in Angular is now improved with incremental hydration now stable.

Angular-specific profiling is now available in Chrome DevTools, part of a stated goal to improve the Angular development experience as well as framework performance.

Angular has a major release every 6 months, which the docs state “gives eager developers access to new features as soon as they are fully developed,” though it may also seem a burden for those who prefer stability over innovation. Each release is supported for 18 months, though after 6 months support moves from active to LTS (long-term support), meaning security fixes and regressions only.

Angular usage is picking up after years of gradual decline, according to the State of JavaScript survey

Angular has suffered from a mixed reputation since a controversial 2016 rewrite in Typescript, but according to the most recent State of JavaScript survey both usage and satisfaction are now growing, after several years of decline. The larger StackOverflow developer survey also shows increased statisfaction, with Angular’s “admired” score rising from 50.75 to 53.4 percent between 2023 and 2024, though usage shows as flat. It remains a long way behind Meta’s React, but these are positive signs for the framework.

“I used to be very harsh on Angular back when it was rudderless and stalling. I can’t say how grateful I am to the Angular team for all the progress they’ve made over the past few years,” said one developer in response to the version 20 release – though another complained that Angular’s 6-month release cycle is “particularly punishing.”

That said, this is a framework in transition and there is some frustration regarding old versus new approaches. “I would have preferred if the effort in SSR or Resource was instead put into Form Signals or vitest. Karma migration still can’t happen and moving back and forwards between form stuff and signals is just a big hassle,” said another comment.