[Complete] RFC: Setting OnPush as the default Change Detection Strategy · angular/angular · Discussion #66779

Authors: @MarkTechson & @alxhub
Area: Angular Framework
Posted: January 27, 2026
Status: Open

We're planning to make a small, but important changes to Angular components:

  • Components will default to ChangeDetectionStrategy.OnPush
  • We're renaming ChangeDetionStrategy.Default to ChangeDetectionStrategy.Eager

OnPush by default

Change detection is Angular's way of identifying changes in application state and keeping the user interface in sync. The move to zoneless has created a requirement that components explicitly use ChangeDetectionStrategy.OnPush or at least be "OnPush compatible". Being "OnPush compatible" means that your application's functionality would not be negatively impacted by switching to OnPush without any other code changes.

Using OnPush has long been considered an Angular best practice, and developers have been requesting that we make this change for some time. Having best practices as the default means that developers and teams will not be required to take the additional opt-in step for every component. We believe now that zoneless is stable and well supported across the ecosystem, the time is right. Zoneless is the present and future of Angular applications, and changing the default ChangeDetectionStrategy is aligned with this reality.

Similarly to how we changed the default version of standalone, we will automatically migrate existing Angular codebases to explicitly set ChangeDetectionStrategy.Eager, preserving their current behavior.

Community Questions

  • Are there any specific component authoring patterns that you anticipate will break or require refactoring due to this change?

ChangeDetectionStrategy.Eager

Renaming the default change detection strategy gives developers and tooling more insight into the meaning of ChangeDetectionStrategy.Default. On its own, a developer coming across this may assume incorrectly that the name "default" is a "recommendation" of sorts and is compatible with modern Angular zoneless practices, for example. Whereas in reality, "default" means that change detection happens by default, without needing to mark the component explicitly for check. This change aims to reduce any ambiguity in this scenario and others like it.

Before this change:

@Component({...}) // no changeDetection setting
// or
@Component({
  changeDetection: ChangeDetectionStrategy.Default	
})

After the migration:

@Component({
  changeDetection: ChangeDetectionStrategy.Eager
})

With this change, the functionality remains the same: Angular will eagerly check whether the component's DOM needs an update whenever change detection traversal reaches it, rather than only doing so when it is explicitly marked for check.

Next Steps

We are targeting these changes for Angular v22 in May 2026. While we don't expect this to have any significant impact on your codebases, we're eager to hear what you think and to learn of anything we may have missed.

Let us know in the comments on this RFC.