
Angular 21.1 is out, and while most of the new features are still experimental, the release gives us a solid preview of where Angular is heading. From Signal Forms API changes and long-awaited focus helpers, to more flexible control flow, template improvements, router updates, and MCP server enhancements, this version is packed with ideas worth exploring—just not shipping to production yet. Let’s take a quick look at what’s new and what’s promising.
Alain Chautard
January 23, 2026
Angular 21.1 is available and offers many interesting features, but keep in mind that almost all of them are experimental at this point, meaning they’re not ready for production use.
Signal Forms are an experimental feature, and it shows in version 21.1, as there are two breaking API changes:
This means we have to use the form field directive as follows from now on:
<input type="text" [formField]="userForm.firstName">
instead of:
<input type="text" [field]="userForm.firstName">

It’s unclear if there will be an automated migration as the API is still experimental and could change again.
Some actual welcome features now:
focusBoundControl() method
Finally, Angular knows how to focus form fields without using native APIs!
this.userForm.firstName().focusBoundControl();
As expected, the code above focuses on the form element bound to the firstName form property.
CSS classes for validation state
If you missed “ng-valid”, “ng-dirty”, and all, in Signal Forms, and enjoyed my video on how to get those classes back, well, now we can do even better with a new config option in the providers of ApplicationConfig:
provideSignalFormsConfig({
classes: {
"ng-invalid": field => field.state().invalid(),
"ng-valid": field => field.state().valid() && field.state().required(),
"ng-dirty": field => field.state().dirty()
}
})
As you can guess from the above code, you can pick your own class names and map them to field conditions, which means you can customize precisely when to apply these classes. For instance, in this example, I apply “ng-valid” only for required fields that are valid
If you like using switch /case flows, you’ll enjoy the new option to have multiple cases display the same HTML:
@switch (condition) {
@case (caseA) {
Case A.
}
@case (caseB)
@case (caseC) {
Case B or C.
}
@default {
Default case.
}
}
It’s now possible to use the spread operator in Angular templates, for arrays, objects, and function parameters:
@let copy = {...obj, foo: 'bar'};
The router gets its first official (and stable) Signal-based function, isActive, which returns a computed signal indicating whether a route is active. As you can see, you can decide whether to ignore URL query params and such:
private router = inject(Router);
isSettingsActive = isActive('/dashboard', this.router, {
paths: 'exact',
queryParams: 'ignored'
});
Here are the possible options:
interface IsActiveMatchOptions {
matrixParams: "exact" | "subset" | "ignored";
queryParams: "exact" | "subset" | "ignored";
paths: "exact" | "subset";
fragment: "exact" | "ignored";
}
Two experimental features are added as well:
Navigation API for navigation, meaning it can now intercept browser navigation events outside the Angular application.I wrote about the Angular MCP server earlier, and it now supports building, starting, and stopping a dev server, waiting for a build to complete, running unit tests, and running end-to-end tests.
The main purpose is to allow IDE coding agents to check their work by running ng serve, tests, and verifying that the code compiles, which is great.
Also, the AI tutor feature has a new tutorial on Signal Forms.
That’s it for Angular 21.1, quite a nice release with interesting features to try!
Get the latest news and updates on developer certifications. Content is updated regularly, so please make sure to bookmark this page or sign up to get the latest content directly in your inbox.

Cómo funciona realmente el bucle del trabajador de la cola
Domina las colas de Laravel comprendiendo qué ocurre entre bastidores cuando se envían y procesan las tareas. Esta guía analiza los trabajadores de colas, la serialización de modelos, los reintentos, las tareas fallidas, el encadenamiento y el procesamiento por lotes: conceptos clave para crear aplicaciones fiables y superar con éxito los exámenes de certificación de Laravel.
Steve McDougall
25 de junio de 2026

Primeros pasos con rstore en Vue
Una guía paso a paso sobre rstore, el almacén de datos reactivo para Vue con almacenamiento en caché normalizado, consultas tipadas y un sistema de complementos.
Reza Baar
24 de junio de 2026

Promise.withResolvers(): el patrón «Deferred» integrado
Promise.withResolvers() sustituye al patrón «deferred» manual en JavaScript. Una sola desestructuración, sin ejecutor, sin «let». ES2024, compatible con todos los entornos de ejecución modernos.
Martin Ferret
23 de junio de 2026