Deliver web apps with confidence 🚀
Find a file
Miles Malerba b8314bd340 feat(forms): add experimental signal-based forms (#63408)
This commit introduces an experimental version of a new signal-based forms API for Angular. This new API aims to explore how signals can be leveraged to create a more declarative, intuitive, and reactive way of handling forms.

The primary goals of this new signal-based approach are:

*   **Signal-centric Design:** Place signals at the core of the forms experience, enabling a truly reactive programming model for form state and logic.
*   **Declarative Logic:** Allow developers to define form behavior, such as validation and conditional fields, declaratively using TypeScript. This moves logic out of the template and into a typed, testable schema.
*   **Developer-Owned Data Model:** The library does not maintain a copy of data in a form model, but instead read and write it via a developer-provided `WritableSignal`, eliminating the need for applications to synchronize their data with the form system.
*   **Interoperability:** A key design goal is seamless interoperability with existing reactive forms, allowing for incremental adoption.
*   **Bridging Template and Reactive Forms:** This exploration hopes to close the gap between template and reactive forms, offering a unified and more powerful approach that combines the best aspects of both.

This initial version of the experimental API includes the core building blocks, such as the `form()` function, `Field` and `FieldState` objects, and a `[control]` directive for binding to UI elements. It also introduces a schema-based system for defining validation, conditional logic, and other form behaviors.

Note: This is an early, experimental API. It is not yet complete and is subject to change based on feedback and further exploration.

Co-authored-by: Kirill Cherkashin <kirts@google.com>
Co-authored-by: Alex Rickabaugh <alxhub@users.noreply.github.com>
Co-authored-by: Leon Senft <leonsenft@users.noreply.github.com>
Co-authored-by: Dylan Hunn <dylhunn@gmail.com>
Co-authored-by: Michael Small <michael-small@users.noreply.github.com>

PR Close #63408
2025-08-28 09:02:43 -07:00
.devcontainer build: use pnpm as the package manager instead of yarn (#62924) 2025-07-31 22:06:27 +00:00
.gemini ci: add gemini code assist config (#62560) 2025-07-09 12:42:45 -07:00
.github ci: remove old options from workflows (#63441) 2025-08-28 14:05:45 +00:00
.husky build: use pnpm as the package manager instead of yarn (#62924) 2025-07-31 22:06:27 +00:00
.ng-dev build: remove rulesJsInteropMode (#63448) 2025-08-28 08:49:24 -07:00
.vscode build: add ignore revs file for git blame (#60117) 2025-02-26 16:19:25 -05:00
.yarn build: update yarn to 1.22.22 (#58448) 2024-10-31 19:06:16 +01:00
adev docs(docs-infra): remove unused example (#63426) 2025-08-28 08:47:54 -07:00
contributing-docs docs: revert remove of build-and-link (#63187) 2025-08-18 09:14:36 +02:00
devtools build: fix strict deps failure (#63403) 2025-08-26 11:46:43 -07:00
goldens feat(forms): add experimental signal-based forms (#63408) 2025-08-28 09:02:43 -07:00
integration build: rename defaults2.bzl to defaults.bzl (#63383) 2025-08-25 15:45:01 -07:00
modules build: update cross-repo angular dependencies (#63395) 2025-08-27 16:13:08 -07:00
packages feat(forms): add experimental signal-based forms (#63408) 2025-08-28 09:02:43 -07:00
scripts build: correct the snapshot build script now that zone.js does not create a tar file (#63021) 2025-08-06 16:45:36 +02:00
third_party build: drop usage of pkg_web (#62990) 2025-08-05 10:08:47 +02:00
tools build: move macros/build set up for zone.js into zone.js directories (#63421) 2025-08-27 11:23:57 -07:00
.bazelignore build: no longer rely on archive packages for integration tests (#62996) 2025-08-05 10:12:06 +02:00
.bazelrc build: enforce frozen lockfile mode (#63260) 2025-08-20 16:00:05 +00:00
.bazelversion build: update all non-major dependencies (#62935) 2025-08-14 22:09:29 +02:00
.clang-format feat(tooling): Add a .clang-format for automated JavaScript formatting. 2015-04-02 08:44:34 -07:00
.editorconfig build: use https link to editorconfig.org in .editorconfig (#27664) 2018-12-18 09:30:09 -08:00
.git-blame-ignore-revs build: exclude relative imports commits via .git-blame-ignore-revs (#60680) 2025-04-01 20:18:36 +00:00
.gitattributes build: cleanup .gitattributes file and remove outdated CRLF attribute (#46513) 2022-06-28 13:38:27 -07:00
.gitignore build: correct ignore nested node_modules (#58821) 2024-11-22 14:56:23 +00:00
.gitmessage docs: move commit message guidelies to a separate file (#58786) 2025-03-04 19:35:54 +00:00
.mailmap build: add a Git .mailmap with my new name (#19550) 2017-10-09 14:35:30 -07:00
.npmrc build: ensure optimization rule can use compiler-cli from HEAD (#61810) 2025-06-02 09:52:57 -04:00
.nvmrc build: update dependency node to v22.18.0 (#62937) 2025-08-01 12:37:43 +02:00
.pnpmfile.cjs build: use pnpm as the package manager instead of yarn (#62924) 2025-07-31 22:06:27 +00:00
.prettierignore build: add .prettierignore configuration file (#61087) 2025-05-02 09:12:23 -07:00
.prettierrc build: Update prettierrc to always use trailing commas (#58266) 2024-11-04 18:14:05 +01:00
.pullapprove.yml ci: add myself to review fw-general (#63337) 2025-08-22 12:27:36 -07:00
.yarnrc build: update yarn to 1.22.22 (#58448) 2024-10-31 19:06:16 +01:00
browser-providers.conf.d.ts build: share Saucelabs browsers between karma test targets using background Saucelabs daemon and custom karma launcher (#49200) 2023-05-15 09:21:46 -07:00
browser-providers.conf.js refactor: update license text to point to angular.dev (#57901) 2024-09-24 15:33:00 +02:00
BUILD.bazel build: define typescript version via string in module.bazel file (#63431) 2025-08-28 09:50:55 +00:00
CHANGELOG.md release: cut the v21.0.0-next.1 release 2025-08-27 11:00:14 -07:00
CHANGELOG_ARCHIVE.md docs: fix typos 2023-06-22 12:56:49 +02:00
CODE_OF_CONDUCT.md build: update CODE_OF_CONDUCT.md to match the content of angular/.github 2023-03-13 21:07:51 +00:00
context7.json docs: add context7.json config (#63000) 2025-08-05 18:15:38 +02:00
CONTRIBUTING.md refactor(devtools): inject number and symbol values with injection tokens (#56898) 2025-06-25 17:02:54 +00:00
gulpfile.js refactor: update license text to point to angular.dev (#57901) 2024-09-24 15:33:00 +02:00
karma-js.conf.js build: update to bazel 7.6.0 (#63096) 2025-08-14 13:01:30 +02:00
LICENSE docs: update copyright year (#59359) 2025-01-06 19:58:30 +00:00
MODULE.bazel build: define typescript version via string in module.bazel file (#63431) 2025-08-28 09:50:55 +00:00
MODULE.bazel.lock build: define typescript version via string in module.bazel file (#63431) 2025-08-28 09:50:55 +00:00
package.json feat(forms): add experimental signal-based forms (#63408) 2025-08-28 09:02:43 -07:00
packages.bzl build: remove local zone.js build from usage in integration tests (#62775) 2025-07-25 16:53:00 +02:00
pnpm-lock.yaml feat(forms): add experimental signal-based forms (#63408) 2025-08-28 09:02:43 -07:00
pnpm-workspace.yaml build: no longer rely on archive packages for integration tests (#62996) 2025-08-05 10:12:06 +02:00
README.md docs: replace material.a.io with material.a.dev (#61513) 2025-05-20 13:40:42 +00:00
renovate.json ci: only run postUpdateTasks when needed (#63440) 2025-08-28 14:05:14 +00:00
SECURITY.md docs: update security guide link to adev (#56469) 2024-06-17 08:54:08 -07:00
tsconfig-tslint.json build: update tslint configuration (#61146) 2025-05-06 13:35:24 -07:00
tslint.json build: migrate tslint rules from dev-infra to local (#62709) 2025-07-22 10:07:13 -04:00
yarn.bzl build: update yarn to 1.22.22 (#58448) 2024-10-31 19:06:16 +01:00

Angular - The modern web developer's platform

angular-logo
Angular is a development platform for building mobile and desktop web applications
using TypeScript/JavaScript and other languages.

angular.dev

Contributing Guidelines · Submit an Issue · Blog

Angular on npm


Documentation

Get started with Angular, learn the fundamentals and explore advanced topics on our documentation website.

Advanced

Local Development

To contribute to the Angular Docs, check out the Angular.dev README

Development Setup

Prerequisites

Setting Up a Project

Install the Angular CLI globally:

npm install -g @angular/cli

Create workspace:

ng new [PROJECT NAME]

Run the application:

cd [PROJECT NAME]
ng serve

Angular is cross-platform, fast, scalable, has incredible tooling, and is loved by millions.

Quickstart

Get started in 5 minutes.

Ecosystem

angular ecosystem logos

Changelog

Learn about the latest improvements.

Upgrading

Check out our upgrade guide to find out the best way to upgrade your project.

Contributing

Contributing Guidelines

Read through our contributing guidelines to learn about our submission process, coding rules, and more.

Want to Help?

Want to report a bug, contribute some code, or improve the documentation? Excellent! Read up on our guidelines for contributing and then check out one of our issues labeled as help wanted or good first issue.

Code of Conduct

Help us keep Angular open and inclusive. Please read and follow our Code of Conduct.

Community

Join the conversation and help the community.

Love Angular badge

Love Angular? Give our repo a star ⬆️.