Modern Angular
How I Would Adopt Signal Forms Now That They Are Stable in Angular 22
Signal Forms graduated from developer preview to stable in Angular 22, and v22 added the pieces that were missing: date validators, debounced async validation, and getError with type narrowing. That changes the adoption question from "should I risk it" to "where does it earn its place." Here is the filter I would use.
The status changed, and that changes the question
For two releases Signal Forms were a developer preview, and the right move was to keep them out of revenue forms. Angular 22 made them stable, and that is not a footnote. A stable API is one you can build a real form on without betting on a signature that might move under you.
v22 also shipped the things that made me hold back: minDate and maxDate validators, debounced async validation (validateHttp(field, { debounce: 400 })), a consistent when option across validators, and getError(kind) with type narrowing. The gaps that used to send a spike back to reactive forms are mostly closed.
So the question is no longer "is it safe to touch." It is "where does Signal Forms earn its place over the reactive forms you already have."
Where each forms path belongs now
| Situation | Default choice | Reason |
|---|---|---|
| A new form, greenfield | Signal Forms | Stable, signal-native, and the v22 validators cover the common cases. |
| A working reactive form | Leave it | Stable and tested. Cosmetics are not a migration reason. |
| A new revenue or regulatory form | Signal Forms, with the same rigor | Stable now; apply the usual validation and rollback discipline. |
| Custom form controls | Signal Forms with Angular Aria | ControlValueAccessor errors now propagate, and Aria is stable too. |
| Team new to Signals | Signals in local UI state first | Forms still multiply concepts; learn the primitive first. |
Adopt for new, do not rewrite for cosmetics
The discipline that applied to the experiment still applies to the stable API, just pointed the other way. Before, the rule was "spike it somewhere safe." Now the rule is "use it for new forms, and leave working reactive forms alone."
A migration of an existing reactive form to Signal Forms should clear the same bar any refactor does: name what gets better (validation, custom controls, type safety in this codebase), not just "it is the new way." If you cannot name the win, the reactive form stays.
# Signal Forms adoption note
Form:
New form, or migration of an existing one:
What Signal Forms makes better here:
Validation cases covered:
Custom controls and Aria:
If migrating, the named win over the reactive version:
Decision: adopt, or keep the reactive formMy default now
The default flipped with the status. New forms start as Signal Forms, because the API is stable and signal-native and the v22 validators cover the common ground. Existing reactive forms stay until there is a real reason to touch them, and there is no migration campaign, because a stable API does not require one.
That is not enthusiasm replacing discipline. It is the same discipline reading a different fact: the API graduated, so it moved from the spike column to the default-for-new-code column.
Reusable artifact
Signal Forms adoption filter (Angular 22)
- Use Signal Forms for new forms; they are stable in Angular 22.
- Leave working reactive forms in place; cosmetics are not a migration reason.
- For a migration, name the concrete win (validation, custom controls, type safety) or keep the reactive form.
- Pair custom controls with Angular Aria, which is also stable now.
Sources checked
- https://angular.dev/events/v22
- https://angular.dev/guide/forms/signals/overview
- https://angular.dev/guide/forms
- https://angular.dev/guide/signals
- https://angular.dev/reference/versions
- https://blog.ninja-squad.com/2026/06/03/what-is-new-angular-22.0
Modern Angular Playbook
This article is one play.
The Modern Angular Playbook collects the diagnostic, the adoption matrix, eleven plays, and the 30-day plan. Free, in English and Portuguese.
You get both PDFs by email, through the Dojo IA list.
André Ramosavailable for remote roles, UTC−3Get in touch →