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

SituationDefault choiceReason
A new form, greenfieldSignal FormsStable, signal-native, and the v22 validators cover the common cases.
A working reactive formLeave itStable and tested. Cosmetics are not a migration reason.
A new revenue or regulatory formSignal Forms, with the same rigorStable now; apply the usual validation and rollback discipline.
Custom form controlsSignal Forms with Angular AriaControlValueAccessor errors now propagate, and Aria is stable too.
Team new to SignalsSignals in local UI state firstForms 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 notetext
# 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 form

My 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

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.

Open playbook →

André Ramosavailable for remote roles, UTC−3Get in touch →

Related

Guide · 8 min

OnPush Is the Default in Angular 22: What Breaks and What to Do

Why Angular 22 makes OnPush the default, what actually breaks, the two ways to fix it, and how the migration's Eager additions double as your cleanup backlog.

Read article →

Guide · 11 min

Angular 22: What Actually Changed, and What to Do in a Production App

A senior, production-first guide to Angular 22: the OnPush default, the stabilized Signal Forms and async-signal APIs, the testing migrations, the smaller default flips that bite on upgrade, and a deliberate plan for adopting it.

Read article →

Guide · 7 min

Turning Signal Forms into AI Agent Tools

How Angular turns a Signal Form into an agent-callable tool, what its schema inference needs from your model, and where I would use it before it leaves experimental status.

Read article →