Angular 19 Release Notes
Angular 19, released on November 6, 2024, marks a significant milestone in the framework's evolution with the stabilization of Signals as the default reactive model, full zoneless change detection support, and production-ready deferred loading via @defer blocks. This version includes contributions from over 200 developers and introduces major performance, developer experience, and build system improvements.
Angular 19 requires TypeScript 5.5 or higher and Node.js 18.19+, while supporting modern browsers (Chrome 118+, Firefox 115+, Safari 17+, Edge 118+). It is the first release where standalone APIs are the default for new projects, and NgModules are deprecated for bootstrapping. This release sets the foundation for a faster, lighter, and more predictable Angular.
Signals Become the Default
Signals are now the recommended and default reactivity primitive in Angular 19. When creating new components with ng generate, they are generated with signal()-based inputs and state by default:
@Component({
selector: 'app-counter',
standalone: true,
template: `
<button (click)="count.update(c => c + 1)">+</button>
<p>Count: {{ count() }}</p>
`
})
export class CounterComponent {
count = signal(0);
}
Signals provide fine-grained reactivity, eliminating unnecessary change detection cycles and enabling zoneless execution. The Angular CLI now defaults to signal-based templates and components.
Zoneless Change Detection (Stable)
Zoneless applications are now stable and production-ready. You can bootstrap an app without zone.js:
bootstrapApplication(AppComponent, {
providers: [provideExperimentalZonelessChangeDetection()]
});
This reduces bundle size by ~40 KB (gzipped), improves runtime performance, and simplifies debugging. Angular Material, CDK, and Router fully support zoneless mode. Migration is assisted via ng update with automated zone.js removal detection.
Deferred Loading with @defer (Stable)
The @defer block syntax is now stable, enabling lazy loading of templates and components with triggers:
@defer (on viewport) {
<heavy-chart />
} @placeholder {
<p>Loading chart...</p>
} @loading (after 500ms) {
<p>Loading...</p>
}
Triggers include on viewport, on interaction, on hover, on timer, and when <expression>. This dramatically improves initial load performance and Core Web Vitals by deferring heavy content until needed.
Hydration Improvements
Server-side rendering (SSR) with hydration is now faster and more reliable. Angular Universal uses non-blocking hydration by default, allowing the UI to become interactive before full client-side rehydration completes.
New ngSkipHydration attribute skips hydration for specific components (e.g., third-party widgets). The @angular/ssr package includes built-in express and Node.js engines with improved streaming support.
Build System: esbuild + Vite (Default)
The esbuild-based application builder (@angular/build) is now the default for all new projects. It replaces Webpack and provides:
- Up to 67% faster development server startup
- Hot Module Replacement (HMR) in under 100ms
- Built-in Sass, PostCSS, and Tailwind support
- Improved tree-shaking and code splitting
Legacy ng build --watch with Webpack is deprecated.
Standalone APIs Are Now Default
New projects generated with ng new use standalone components, directives, and pipes by default. NgModule is no longer generated unless explicitly requested with --standalone=false.
The CLI includes schematics to convert existing NgModule-based apps to standalone. bootstrapApplication() is the default bootstrapping method.
Improved Developer Experience
- Angular Language Service now supports Signal inputs, @defer, and template type checking in VS Code
- Inline diagnostics in templates for unused variables and type mismatches
- ng add and ng update automate migrations for zoneless, defer, and standalone
- Enhanced error messages with links to documentation
Material and CDK Updates
Angular Material aligns closer with Material Design 3 (M3):
- New color system with dynamic theming via CSS variables
- Updated button, card, chip, and input components
- Improved accessibility and dark mode support
CDK adds CdkMenu improvements and better a11y for drag-and-drop.
Deprecations
- NgModule for bootstrapping (platformBrowserDynamic().bootstrapModule())
- ViewEngine (fully removed)
- Renderer2 listening methods (use output() instead)
- async pipe with Promise (use | async with Observable or signal)
- Legacy router loadChildren string syntax
Removals
- zone.js from default polyfills.ts (opt-in only)
- @angular/platform-browser-dynamic testing module
- IE11 support and related polyfills
- HammerJS (use native gestures or CDK)
Performance Benchmarks
Official benchmarks show:
| Metric | Angular 18 | Angular 19 | Improvement |
|---|---|---|---|
| First Contentful Paint (FCP) | 1.8s | 1.2s | -33% |
| Time to Interactive (TTI) | 3.5s | 2.1s | -40% |
| Bundle Size (gzipped) | 68 KB | 45 KB | -34% |
Migration and Support
Upgrade using:
ng update @angular/core@19 @angular/cli@19
The CLI runs automated migrations for:
- Signal inputs
- @defer blocks
- Zoneless opt-in
- Standalone conversion
Full support until November 2025, with LTS security patches until May 2027.