# What changed in @angular-eslint/eslint-plugin-template

> 39 changes in @angular-eslint/eslint-plugin-template 20 to 22 from its official release notes, upgrade guides and advisories: 3 breaking, 12 new APIs and options. Each one cited. Sources checked 2026-10-18. HTML: https://unstale.sh/npm/@angular-eslint/eslint-plugin-template/

To see which of these apply to a repository, run `npx @unstale/cli init` in it.

## @angular-eslint/eslint-plugin-template 22

### Breaking changes

- Support for ESLint v8 was dropped. (22.0.0) — [release notes](https://github.com/angular-eslint/angular-eslint/blob/7722ad2ab4da81568f19a7a29a3951fa443bf22c/packages/eslint-plugin-template/CHANGELOG.md#2200-2026-06-07)
- Support for the legacy eslintrc config format was dropped. (22.0.0) — [release notes](https://github.com/angular-eslint/angular-eslint/blob/7722ad2ab4da81568f19a7a29a3951fa443bf22c/packages/eslint-plugin-template/CHANGELOG.md#2200-2026-06-07)

### New APIs and options

- Adds the allowedKeyCodes option. (22.4.0) — [release notes](https://github.com/angular-eslint/angular-eslint/blob/7722ad2ab4da81568f19a7a29a3951fa443bf22c/packages/eslint-plugin-template/CHANGELOG.md#2240-2026-09-07)
- Adds the requireKeyCode option. (22.4.0) — [release notes](https://github.com/angular-eslint/angular-eslint/blob/7722ad2ab4da81568f19a7a29a3951fa443bf22c/packages/eslint-plugin-template/CHANGELOG.md#2240-2026-09-07)
- Adds allowBindToStyle to allow [style] bindings. (22.4.0) — [release notes](https://github.com/angular-eslint/angular-eslint/blob/7722ad2ab4da81568f19a7a29a3951fa443bf22c/packages/eslint-plugin-template/CHANGELOG.md#2240-2026-09-07)
- Adds the dynamic option value for style bindings. (22.4.0) — [release notes](https://github.com/angular-eslint/angular-eslint/blob/7722ad2ab4da81568f19a7a29a3951fa443bf22c/packages/eslint-plugin-template/CHANGELOG.md#2240-2026-09-07)
- Adds the prefer-style-binding rule. (22.4.0) — [release notes](https://github.com/angular-eslint/angular-eslint/blob/7722ad2ab4da81568f19a7a29a3951fa443bf22c/packages/eslint-plugin-template/CHANGELOG.md#2240-2026-09-07)
- ESLint inline directive comments are now supported within element opening tags. (22.1.0) — [release notes](https://github.com/angular-eslint/angular-eslint/blob/7722ad2ab4da81568f19a7a29a3951fa443bf22c/packages/eslint-plugin-template/CHANGELOG.md#2210-2026-07-12)
- Adds the no-outerhtml rule to eslint-plugin-template. (22.1.0) — [release notes](https://github.com/angular-eslint/angular-eslint/blob/7722ad2ab4da81568f19a7a29a3951fa443bf22c/packages/eslint-plugin-template/CHANGELOG.md#2210-2026-07-12)
- Adds the require-switch-default rule to eslint-plugin-template. (22.1.0) — [release notes](https://github.com/angular-eslint/angular-eslint/blob/7722ad2ab4da81568f19a7a29a3951fa443bf22c/packages/eslint-plugin-template/CHANGELOG.md#2210-2026-07-12)

### Behavior and default changes

- The option now supports regex entries. (22.4.0) — [release notes](https://github.com/angular-eslint/angular-eslint/blob/7722ad2ab4da81568f19a7a29a3951fa443bf22c/packages/eslint-plugin-template/CHANGELOG.md#2240-2026-09-07)

### Fixes and other changes

- The conditional-complexity rule now checks control flow. (22.6.0) — [release notes](https://github.com/angular-eslint/angular-eslint/blob/7722ad2ab4da81568f19a7a29a3951fa443bf22c/packages/eslint-plugin-template/CHANGELOG.md#2260-2026-10-11)
- The template parser now traverses @defer hydrate triggers. (22.6.0) — [release notes](https://github.com/angular-eslint/angular-eslint/blob/7722ad2ab4da81568f19a7a29a3951fa443bf22c/packages/eslint-plugin-template/CHANGELOG.md#2260-2026-10-11)
- Honors allowNullOrUndefined across compiler copies. (22.4.0) — [release notes](https://github.com/angular-eslint/angular-eslint/blob/7722ad2ab4da81568f19a7a29a3951fa443bf22c/packages/eslint-plugin-template/CHANGELOG.md#2240-2026-09-07)
- Treats ng-template as a nesting boundary. (22.4.0) — [release notes](https://github.com/angular-eslint/angular-eslint/blob/7722ad2ab4da81568f19a7a29a3951fa443bf22c/packages/eslint-plugin-template/CHANGELOG.md#2240-2026-09-07)
- Avoids unsafe content projection fixes. (22.4.0) — [release notes](https://github.com/angular-eslint/angular-eslint/blob/7722ad2ab4da81568f19a7a29a3951fa443bf22c/packages/eslint-plugin-template/CHANGELOG.md#2240-2026-09-07)
- Ignores all index.html files. (22.4.0) — [release notes](https://github.com/angular-eslint/angular-eslint/blob/7722ad2ab4da81568f19a7a29a3951fa443bf22c/packages/eslint-plugin-template/CHANGELOG.md#2240-2026-09-07)
- Ignores children of svg and math elements. (22.4.0) — [release notes](https://github.com/angular-eslint/angular-eslint/blob/7722ad2ab4da81568f19a7a29a3951fa443bf22c/packages/eslint-plugin-template/CHANGELOG.md#2240-2026-09-07)
- The rule now escapes the fixed attribute value. (22.2.0) — [release notes](https://github.com/angular-eslint/angular-eslint/blob/7722ad2ab4da81568f19a7a29a3951fa443bf22c/packages/eslint-plugin-template/CHANGELOG.md#2220-2026-08-30)
- The rule now validates each token of a token list. (22.2.0) — [release notes](https://github.com/angular-eslint/angular-eslint/blob/7722ad2ab4da81568f19a7a29a3951fa443bf22c/packages/eslint-plugin-template/CHANGELOG.md#2220-2026-08-30)

## @angular-eslint/eslint-plugin-template 21

### Breaking changes

- textContent was added to the default allowList, changing which template content is allowed by default. (21.0.0) — [release notes](https://github.com/angular-eslint/angular-eslint/blob/7722ad2ab4da81568f19a7a29a3951fa443bf22c/packages/eslint-plugin-template/CHANGELOG.md#2100-2025-11-22)

### New APIs and options

- Adds a variant option to the cyclomatic-complexity rule. (21.4.0) — [release notes](https://github.com/angular-eslint/angular-eslint/blob/7722ad2ab4da81568f19a7a29a3951fa443bf22c/packages/eslint-plugin-template/CHANGELOG.md#2140-2026-05-13)
- Adds the no-non-null-assertion rule to eslint-plugin-template. (21.3.0) — [release notes](https://github.com/angular-eslint/angular-eslint/blob/7722ad2ab4da81568f19a7a29a3951fa443bf22c/packages/eslint-plugin-template/CHANGELOG.md#2130-2026-03-05)
- Adds a rule that enforces class binding over ngClass. (21.2.0) — [release notes](https://github.com/angular-eslint/angular-eslint/blob/7722ad2ab4da81568f19a7a29a3951fa443bf22c/packages/eslint-plugin-template/CHANGELOG.md#2120-2026-01-29)
- The rule supports ignore attributes, allowing developers to exclude attributes from its checks. (21.2.0) — [release notes](https://github.com/angular-eslint/angular-eslint/blob/7722ad2ab4da81568f19a7a29a3951fa443bf22c/packages/eslint-plugin-template/CHANGELOG.md#2120-2026-01-29)

### Behavior and default changes

- The prefer-control-flow rule was added to the recommended config, so projects using it will enable the rule by default. (21.0.0) — [release notes](https://github.com/angular-eslint/angular-eslint/blob/7722ad2ab4da81568f19a7a29a3951fa443bf22c/packages/eslint-plugin-template/CHANGELOG.md#2100-2025-11-22)

### Tooling

- Adds support for ESLint v10. (21.3.0) — [release notes](https://github.com/angular-eslint/angular-eslint/blob/7722ad2ab4da81568f19a7a29a3951fa443bf22c/packages/eslint-plugin-template/CHANGELOG.md#2130-2026-03-05)

### Fixes and other changes

- Fixes the rule failing when destructuring null. (21.4.0) — [release notes](https://github.com/angular-eslint/angular-eslint/blob/7722ad2ab4da81568f19a7a29a3951fa443bf22c/packages/eslint-plugin-template/CHANGELOG.md#2140-2026-05-13)
- Fixes the rule so it reports non-null assertions in nested arrays. (21.4.0) — [release notes](https://github.com/angular-eslint/angular-eslint/blob/7722ad2ab4da81568f19a7a29a3951fa443bf22c/packages/eslint-plugin-template/CHANGELOG.md#2140-2026-05-13)
- The rule now includes selectedcontent in nonAriaElements, changing how it handles that element. (21.3.1) — [release notes](https://github.com/angular-eslint/angular-eslint/blob/7722ad2ab4da81568f19a7a29a3951fa443bf22c/packages/eslint-plugin-template/CHANGELOG.md#2131-2026-03-17)
- Preserves nested non-string binary + operations. (21.3.0) — [release notes](https://github.com/angular-eslint/angular-eslint/blob/7722ad2ab4da81568f19a7a29a3951fa443bf22c/packages/eslint-plugin-template/CHANGELOG.md#2130-2026-03-05)
- Allows autofocus on dialog elements for improved accessibility. (21.2.0) — [release notes](https://github.com/angular-eslint/angular-eslint/blob/7722ad2ab4da81568f19a7a29a3951fa443bf22c/packages/eslint-plugin-template/CHANGELOG.md#2120-2026-01-29)
- Fixes overlapping fixes for semicolon-separated let declarations. (21.0.1) — [release notes](https://github.com/angular-eslint/angular-eslint/blob/7722ad2ab4da81568f19a7a29a3951fa443bf22c/packages/eslint-plugin-template/CHANGELOG.md#2101-2025-11-23)
- Handles chained concatenations correctly. (21.0.1) — [release notes](https://github.com/angular-eslint/angular-eslint/blob/7722ad2ab4da81568f19a7a29a3951fa443bf22c/packages/eslint-plugin-template/CHANGELOG.md#2101-2025-11-23)

## @angular-eslint/eslint-plugin-template 20

### Tooling

- The prefer-ngsrc rule now provides suggestions, giving developers suggested fixes when the rule reports an issue. (20.7.0) — [release notes](https://github.com/angular-eslint/angular-eslint/blob/7722ad2ab4da81568f19a7a29a3951fa443bf22c/packages/eslint-plugin-template/CHANGELOG.md#2070-2025-11-22)
- Adds a template lint rule that prefers built-in pipes. (20.5.0) — [release notes](https://github.com/angular-eslint/angular-eslint/blob/7722ad2ab4da81568f19a7a29a3951fa443bf22c/packages/eslint-plugin-template/CHANGELOG.md#2050-2025-10-27)

### Fixes and other changes

- The conditional-complexity rule handles animation directives without values. (20.5.2) — [release notes](https://github.com/angular-eslint/angular-eslint/blob/7722ad2ab4da81568f19a7a29a3951fa443bf22c/packages/eslint-plugin-template/CHANGELOG.md#2052-2025-11-08)
- The prefer-ngsrc rule supports data URLs in more scenarios. (20.5.2) — [release notes](https://github.com/angular-eslint/angular-eslint/blob/7722ad2ab4da81568f19a7a29a3951fa443bf22c/packages/eslint-plugin-template/CHANGELOG.md#2052-2025-11-08)
- eslint-plugin-template now supports uppercase tags. (20.5.1) — [release notes](https://github.com/angular-eslint/angular-eslint/blob/7722ad2ab4da81568f19a7a29a3951fa443bf22c/packages/eslint-plugin-template/CHANGELOG.md#2051-2025-11-03)
