The main topics this year were the Signal evolution—specifically the polish of the Resource API and Signal Forms—and the massive shift toward AI.
We also used a new layout for this video. Please let us know what you think about it—either here or in the YouTube comments.
Signal Forms
Let's start with the headline feature: Signal Forms. They are fairly young. The team announced them at ng-Poland in 2024, and it took a full year until they landed in Angular 21.
We waited a long time for Signal Forms. Enterprise applications rely heavily on forms; some might even say a frontend application is just a collection of forms.
Signal Forms succeed both template-driven and Reactive forms. They combine the advantages of the old systems but in a modern, signal-based way. In template-driven forms, the form wrote directly into the data structure we provided. With Signal Forms, that structure needs to reside inside a Signal.
Validation works like it did in Reactive forms: we define it in TypeScript. But here again, the validation system is far better than the old one. There is almost no limit on what you can do with it.
The complexity with custom controls also disappears. We no longer need to implement the clumsy ControlValueAccessor interface. Instead, we bind a property called value via the model function, and that's it.
Signal Forms are still experimental, but the Angular team stated they plan to remove the experimental status soon.
Here's a full example
type UserData = {
id: number;
firstname: string;
lastname: string;
subscribe: false;
};
@Component({
selector: 'app-button-checkbox',
template: `
@if (value()) {
<button (click)="value.set(true)">Subscribe to Newsletter</button>
} @else {
<button (click)="value.set(false)">Unsubscribe from Newsletter</button>
}
`,
})
export class ButtonCheckbox implements FormValueControl<boolean> {
value = model.required<boolean>();
}
@Component({
template: `<form>
<input [field]="userForm.id" type="number" />
<input [field]="userForm.firstname" />
<input [field]="userForm.lastname" />
<app-button-checkbox [field]="userForm.subscribe" />
</form>`,
imports: [Field, ButtonCheckbox],
})
export class UserForm {
private readonly userData = signal<UserData>({
id: 1,
firstname: 'John',
lastname: 'Smith',
subscribe: false,
});
protected readonly userForm = form(this.userData, (path) => {
required(path.id, { message: 'Id is required' });
required(path.firstname, { message: 'Firstname is required' });
required(path.lastname, { message: 'Lastname is required' });
});
}
The Resource API
The resource appeared in version 19 (late 2024), but in the minor release of 19.2, we got the third primitive: the httpResource.
The resource bridges the gap whenever a Signal depends on an asynchronous task. In most cases, that task is an HTTP Request, which makes the httpResource vital.
httpResource uses the HttpClient under the hood. This means all interceptors still work the same. That doesn't necessarily mean everyone uses the HttpClient. If we use a generated data client service (via OpenAPI) that exposes an Observable, we use rxResource instead.
In Angular 20, the resources received a final overhaul. For example, they now throw an error if we access the value in an error state, and the status values became strict union types. Like Signal Forms, the resources are still experimental. Hopefully, that will change soon, maybe even in a minor release of version 21.
const page = signal(0);
const pageSize = signal(10);
const holidays = httpResource(
() => ({
url: '/holidays',
params: { page: page(), pageSize: pageSize() },
}), // similar to httpClient.get('/holidays', { params: { ... } })
{
defaultValue: [],
parse: parseHolidays,
},
);
AI
And of course, AI. We saw massive investment here.
The basics: We received an MCP Server which improves with each release. Most importantly, it contains instructions for the LLM to produce modern Angular code—Signals, template control syntax, standalone components, etc.
But AI and Angular go much deeper. The Angular team researches what a framework needs to be "AI-ready." They try to optimize the API not just for us users, but also for an AI agent. They run several tests and even wrote a Codegen Scorer to evaluate the results.
Furthermore, we see that Gemini (Google's LLM) made big leaps this year. If you are the Angular team, and you sit in the same company that lives and breathes AI, you benefit from a good environment and access to all necessary resources.
But because of this huge investment in AI, we also had to accept that other features might not have received the love they needed.
Miscellaneous
Zoneless
What else happened? Zoneless became not just stable, but also the default mode in Angular 21. If we consider the time span from developer experience to stable and then default, it happened within just one major version.
Vitest
Speaking of fast, Vitest skipped "developer preview" and "stable" and jumped from experimental directly to default. That also happened in Angular 21. We finally have a top-tier testing framework and don't have to hide from other ecosystems.
@angular/aria
Then came @angular/aria. It follows the trend where we want full control over our UI components but still want help with behavior. This is exactly what @angular/aria does. It gives you a set of directives that promise proper accessibility behavior.
Deprecation of @angular/animations
Finally, we saw a deprecation with @angular/animations. We no longer need a separate package or the complex DSL. The new, minimalistic animation support lives directly in the template. We now use animate.enter and animate.leave to handle entry and exit transitions right where we define the HTML.
Statistics & Perception
In terms of download statistics, the "Angular Renaissance" has not yet materialized into a massive spike. Downloads continue to rise, but they do so steadily.
Generally, the perception of Angular has turned positive again. However, real-world effects take time. Enterprises—our main user base—move slowly. Many prefer to wait until the transition to "Modern Angular" is fully complete before upgrading.
Outlook 2026
This brings us to the outlook. What can we expect in 2026?
I expect—and hope—that Signal Forms and the Resource API will finally hit stable status.
Last year, I predicted Selectorless components and a new Authoring Format. Neither happened in 2025, so I will carry them over to next year. "Selectorless" means we refer directly to a component class in the template, requiring only one import. As for the authoring format... nobody knows. It could be Signal Components, a switch from classes to functions, or something else entirely. We will see.
Ng-News in Spanish and Portuguese
Last but not least, ng-news now exists in Spanish and Brazilian Portuguese versions. I am really happy that creators from Latin America approached me and joined the project. These are separate YouTube channels, and I hope we add even more languages next year.
https://www.youtube.com/@ng-news-es
https://www.youtube.com/@ng-news-BRAZIL
So it looks good for another year of ng-news. A huge thanks to you—especially for your support when you share, like, and recommend the it to colleagues. That keeps ng-news rolling.
We wish you a successful and healthy New Year.
Top comments (0)