angular/angular
Lore
How the codebase got here. Dates derive from git commit timestamps and release tags. Where the "why" of a change isn't recorded in commit messages, language is hedged.
Eras
The original commit (Sep 2014)
The first commit, Initial commit on 2014-09-18, established the repository as the home of "Angular 2" — the rewrite of Angular.js (1.x). The earliest months are dominated by build refactors, NgZone scaffolding, and the first DI prototypes. Angular.js (1.x) had its own repository; this repo started as a fresh codebase with TypeScript as the implementation language.
View Engine and the first stable releases (2015 – early 2018)
Angular 2.0.0 shipped on 2016-09-14, then 4 (March 2017), 5, and 6 followed at roughly 6-month cadence. The compiler in this era is the View Engine (VE) compiler: it pre-generates .ngfactory.ts files containing the runtime view code. This emits a fixed runtime imported via @angular/platform-browser-dynamic (JIT) or AOT-compiled factories.
The Ivy bring-up (Dec 2017 – v9, Feb 2020)
The earliest Ivy commits land in December 2017:
2017-12-01 feat(core): Moving Renderer3 into @angular/core (#20855)— the new instruction-based runtime begins asRenderer3inside@angular/core.2018-04-06 feat(ivy): first steps towards ngtsc mode (#23455)— the matchingngtsccompiler is introduced inpackages/compiler-cli/src/ngtsc.
Ivy is initially developed behind a flag. It becomes the default in v9 (February 2020), at which point View Engine is deprecated. The full removal of the View Engine compiler comes in subsequent majors.
Ivy fundamentally changes the compilation model: instead of generating .ngfactory.ts files, the compiler emits Ivy "definitions" (ɵcmp, ɵdir, ɵfac) directly onto the decorated class as static fields. This is the change that unlocks tree-shaking of unused directives and a much smaller default bundle size.
Standalone everything (v14 → v17, mid-2022 → late-2023)
The "standalone components" era begins in v14 (June 2022) with standalone: true on @Component/@Directive/@Pipe. Over the next year, every framework-shipped surface that previously assumed an NgModule grew an NgModule-less variant: bootstrapApplication in @angular/platform-browser, provideRouter in @angular/router, provideHttpClient in @angular/common/http, provideAnimations/provideAnimationsAsync in @angular/animations. By v17 (November 2023), standalone: true becomes the default for new components and the documentation site is rewritten around it.
The companion change in v17 is the new control-flow block syntax: @if, @for, @switch, @let replacing *ngIf, *ngFor, *ngSwitch. Templates compiled by packages/compiler/src/render3/view gain dedicated AST nodes and instructions for blocks.
Signals and zoneless (v16 → v18+)
Signal primitives land in v16 (May 2023) as a developer-preview API in packages/core/primitives/signals. The initial set is signal(), computed(), and effect(). Over the following majors:
- v17.1 introduces signal-based component inputs (
input()). - v17.3 introduces signal
model()two-way bindings. - v18 ships the unified control-flow block syntax as default in
ng newprojects. - v19 promotes signal
input(),output(),model(), andviewChild()to stable. - v19/v20 ship signal forms in
@angular/forms/signals. - v20 makes zoneless change detection a fully supported mode and updates the documentation to lead with it.
The repository's AGENTS.md now codifies the zoneless / "Act, Wait, Assert" testing pattern as the default for new tests.
The angular.dev rewrite (mid-2023 → ongoing)
The documentation site that lives at angular.dev was previously a separate angular/angular.io repository. In 2023 the documentation moved into this repo as adev/, rebuilt as an Angular SSG application using the framework itself. Markdown lives in adev/src/content; API reference pages are generated from TypeScript source via the adev/shared-docs/pipeline/api-gen package. The same site builds a standalone "playground" embedded in tutorials.
v22 next (current, 2026)
HEAD is on the v22 branch. v22.0.0-next.10 was cut on 2026-04-29. v21 is the current LTS; v20 and v19 receive maintenance backports. The pace remains the published 6-month major / biweekly minor cadence.
Longest-standing features
- Hierarchical dependency injection. The injector tree shape and provider concepts have survived from the original 2.0.0 release. The implementation moved into Ivy (
render3/di.ts) but the public@Injectable,Injector, and provider semantics are unchanged. zone.jspatching.packages/zone.jsis older than this repository — the original NgZone integration shipped in 2015. Zoneless mode is now first-class butzone.jsremains supported and shipped.- Reactive forms.
FormControl/FormGroup/FormArrayfrompackages/formsdate to 2016. The signal forms package (packages/forms/signals) is additive; reactive forms remain the default.
Deprecated or removed features
- View Engine compiler — replaced by Ivy in v9, fully removed in v13. References to "View Engine" or "VE" in commit messages are usually about removing the last vestiges.
ngfactory.tsfiles — the View Engine emit format. Gone.@NgModule(still supported, eventually deprecated) — usage is being eroded bystandalone: trueandprovide*functions. The eventual removal is on the long-term roadmap.*ngIf/*ngFor/*ngSwitch— superseded by@if,@for,@switchblocks (v17). Still supported; new code is expected to use blocks.- Animations metadata as a parallel runtime — the original animations package built a separate state-machine runtime alongside the renderer. Recent versions (
@angular/animations) have shrunk and pivoted toward CSS-first patterns plusprovideAnimationsAsync. - TestBed's
fixture.detectChanges()as the default in tests — discouraged in zoneless test pattern; replaced byawait fixture.whenStable(). - Differential loading and ES5 polyfills — earlier majors shipped legacy bundles for older browsers. Modern Angular requires modern evergreen browsers.
@angular/http— replaced byHttpClientfrom@angular/common/http; removed long ago.Renderer(V1) — replaced byRenderer2.
Major rewrites
| Rewrite | Window | Outcome |
|---|---|---|
| Angular.js (1.x) → Angular 2 | 2014–2016 | Clean break. New repo, new framework, new compiler. |
| View Engine → Ivy | Dec 2017 → v9 (Feb 2020) | Tree-shakable runtime, smaller bundles, removable framework code. |
ng new defaults to standalone |
2022 → v17 (Nov 2023) | NgModules-by-default era ended. |
| Zone-based change detection → signals + zoneless | 2023 → v20 | Signals as the primary reactivity primitive. |
| Documentation site (angular.io → angular.dev) | 2023 → 2024 | Migrated content into this repo as adev/. |
Growth trajectory
- 2014–2017 — small core team, heavy focus on getting the framework to a stable 2.0+. Repository activity is mostly Googlers.
- 2018–2020 — Ivy bring-up dominates. Major code changes underneath stable public APIs.
- 2021–2023 — community contributions accelerate; the standalone migration spans dozens of packages.
- 2024–2026 — signals, zoneless, and
adevrewrite generate the highest sustained activity in the repo's history. Bot-driven release tooling (angular-robot) handles the mechanical churn.
The current contributor list is in the 2,500+ range, but the active circle (committers in the last 6 months) is closer to a few dozen people, with angular-robot automation accounting for the largest share of bot-authored commits.
Built by Factory AutoWiki from public repository content. It is a generated preview for codebase exploration, not source-maintained documentation.