# What changed in @ng-select/ng-select

> 79 changes in @ng-select/ng-select 4 to 24 from its official release notes, upgrade guides and advisories: 21 breaking, 1 security, 8 new APIs and options. Each one cited. Sources checked 2026-10-24. HTML: https://unstale.sh/npm/@ng-select/ng-select/

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

## @ng-select/ng-select 24

### Breaking changes

- Angular CDK ^22.0.0 is now required because the dropdown panel renders in CDK Overlay. (24.0.0) — [release notes](https://github.com/ng-select/ng-select/releases/tag/v24.0.0)
- appendTo controls DOM containment only; positioning remains viewport-based. (24.0.0) — [release notes](https://github.com/ng-select/ng-select/releases/tag/v24.0.0)
- The panel renders in CDK Overlay rather than as a child of ng-select, changing its DOM location and CSS scoping. (24.0.0) — [release notes](https://github.com/ng-select/ng-select/releases/tag/v24.0.0)
- Escape is consumed only when it closes an open dropdown, allowing parent dialogs to handle it when the select is closed. (24.0.0) — [release notes](https://github.com/ng-select/ng-select/releases/tag/v24.0.0)
- popover is deprecated and becomes a no-op because the top layer is automatic. (24.0.0) — [release notes](https://github.com/ng-select/ng-select/releases/tag/v24.0.0)
- The typeahead output emits only when typing; selecting, closing, or clearing no longer emits. Use close or clear for those actions. (24.0.0) — [release notes](https://github.com/ng-select/ng-select/releases/tag/v24.0.0)

### Security

- Default labels are rendered as text to prevent XSS. (24.0.1) — [release notes](https://github.com/ng-select/ng-select/releases/tag/v24.0.1)

### New APIs and options

- Adds support for signal forms. (24.1.0) — [release notes](https://github.com/ng-select/ng-select/releases/tag/v24.1.0)
- Themes expose CSS custom properties for theming. (24.0.0) — [release notes](https://github.com/ng-select/ng-select/releases/tag/v24.0.0)

### Fixes and other changes

- Keeps the virtual scroll offset in sync with rendered rows. (24.2.1) — [release notes](https://github.com/ng-select/ng-select/releases/tag/v24.2.1)
- Selection state is initialized for async options. (24.1.4) — [release notes](https://github.com/ng-select/ng-select/releases/tag/v24.1.4)
- Fixes issues with signal forms. (24.1.1) — [release notes](https://github.com/ng-select/ng-select/releases/tag/v24.1.1)
- Overlay behavior is enhanced for dynamic host elements. (24.0.3) — [release notes](https://github.com/ng-select/ng-select/releases/tag/v24.0.3)
- Fixed the placeholder configuration. (24.0.2) — [release notes](https://github.com/ng-select/ng-select/releases/tag/v24.0.2)
- Selected value text can be selected and copied when searchable is false without toggling the panel. (24.0.0) — [release notes](https://github.com/ng-select/ng-select/releases/tag/v24.0.0)
- unselect now does nothing when the select or item is disabled. (24.0.0) — [release notes](https://github.com/ng-select/ng-select/releases/tag/v24.0.0)
- Virtual scroll measures option height with offsetHeight so borders are included, and handles separate group and option heights. (24.0.0) — [release notes](https://github.com/ng-select/ng-select/releases/tag/v24.0.0)

## @ng-select/ng-select 23

### Breaking changes

- Disabled selects and disabled items can no longer be removed via × or clearItem. (23.10.0) — [release notes](https://github.com/ng-select/ng-select/releases/tag/v23.10.0)
- Migrates the project’s test runner from Karma to Vitest. (23.2.0) — [release notes](https://github.com/ng-select/ng-select/releases/tag/v23.2.0)
- Adds Angular 22 support and raises the minimum required Angular version to 22. (23.0.0) — [release notes](https://github.com/ng-select/ng-select/releases/tag/v23.0.0)

### New APIs and options

- Adds support for zoneless change detection. (23.5.0) — [release notes](https://github.com/ng-select/ng-select/releases/tag/v23.5.0)
- The ng-option component now supports custom classes. (23.1.0) — [release notes](https://github.com/ng-select/ng-select/releases/tag/v23.1.0)

### Behavior and default changes

- The dropdown panel is rendered in CDK Overlay. (23.7.0) — [release notes](https://github.com/ng-select/ng-select/releases/tag/v23.7.0)
- Accessibility and interaction for selected items in ng-select were enhanced. (23.3.0) — [release notes](https://github.com/ng-select/ng-select/releases/tag/v23.3.0)

### Fixes and other changes

- Virtual scroll measures option height with offsetHeight, including borders. (23.10.0) — [release notes](https://github.com/ng-select/ng-select/releases/tag/v23.10.0)
- preventDefault is skipped during Angular event replay for SSR/hydration. (23.10.0) — [release notes](https://github.com/ng-select/ng-select/releases/tag/v23.10.0)
- Selected labels can be copied or selected when searchable is false. (23.10.0) — [release notes](https://github.com/ng-select/ng-select/releases/tag/v23.10.0)
- The highlight directive matches all words in multi-word search queries. (23.5.1) — [release notes](https://github.com/ng-select/ng-select/releases/tag/v23.5.1)
- Active-option announcements are fixed. (23.4.0) — [release notes](https://github.com/ng-select/ng-select/releases/tag/v23.4.0)
- Grouped scroll targeting is fixed. (23.4.0) — [release notes](https://github.com/ng-select/ng-select/releases/tag/v23.4.0)
- The blur commit behavior for selectOnTab is fixed. (23.4.0) — [release notes](https://github.com/ng-select/ng-select/releases/tag/v23.4.0)
- Prevents the dropdown from closing when the click target shifts after mousedown, including in shadow DOM. (23.2.4) — [release notes](https://github.com/ng-select/ng-select/releases/tag/v23.2.4)
- Adds a notched outline appearance to the ng-select component. (23.2.3) — [release notes](https://github.com/ng-select/ng-select/releases/tag/v23.2.3)
- The dropdown id is assigned to the listbox element, and its ARIA attributes are corrected. (23.2.2) — [release notes](https://github.com/ng-select/ng-select/releases/tag/v23.2.2)
- Group header elements in ng-select no longer have the ng-option class. (23.2.1) — [release notes](https://github.com/ng-select/ng-select/releases/tag/v23.2.1)
- NgDropdownPanelComponent and NgSelectComponent now handle an undefined outsideClickEvent. (23.0.3) — [release notes](https://github.com/ng-select/ng-select/releases/tag/v23.0.3)
- Corrected Angular peer dependency versions to match the supported Angular version. (23.0.1) — [release notes](https://github.com/ng-select/ng-select/releases/tag/v23.0.1)

## @ng-select/ng-select 21

### Breaking changes

- The NgSelectComponent isOpen property type now enforces boolean only. (21.1.5) — [release notes](https://github.com/ng-select/ng-select/releases/tag/v21.1.5)

### New APIs and options

- Adds a popover input to ng-select. (21.6.0) — [release notes](https://github.com/ng-select/ng-select/releases/tag/v21.6.0)
- Adds the fill appearance option to the ng-select component. (21.3.0) — [release notes](https://github.com/ng-select/ng-select/releases/tag/v21.3.0)
- Adds configuration for ariaLabelDropdown. (21.2.0) — [release notes](https://github.com/ng-select/ng-select/releases/tag/v21.2.0)

### Performance

- Scroll handling was optimized in NgDropdownPanelComponent. (21.1.4) — [release notes](https://github.com/ng-select/ng-select/releases/tag/v21.1.4)

### Behavior and default changes

- A disabled option that is currently selected can now be cleared. (21.4.0) — [release notes](https://github.com/ng-select/ng-select/releases/tag/v21.4.0)

### Fixes and other changes

- Fixes a regression introduced in v20.1.2; the affected behavior is not specified in the notes. (21.8.2) — [release notes](https://github.com/ng-select/ng-select/releases/tag/v21.8.2)
- The dropdown closes immediately when the user clicks outside it. (21.8.1) — [release notes](https://github.com/ng-select/ng-select/releases/tag/v21.8.1)
- Input signals are writable, restoring programmatic configurability. (21.8.0) — [release notes](https://github.com/ng-select/ng-select/releases/tag/v21.8.0)
- Handles undefined values in the items list and during ng-option initialization. (21.5.2) — [release notes](https://github.com/ng-select/ng-select/releases/tag/v21.5.2)
- Enhances dropdown behavior with window scroll handling. (21.4.1) — [release notes](https://github.com/ng-select/ng-select/releases/tag/v21.4.1)
- Disabled items are no longer marked on key press, correcting accessibility behavior. (21.3.1) — [release notes](https://github.com/ng-select/ng-select/releases/tag/v21.3.1)
- Clear button template rendering was reordered. (21.1.6) — [release notes](https://github.com/ng-select/ng-select/releases/tag/v21.1.6)
- isOpen now accepts undefined. (21.1.2) — [release notes](https://github.com/ng-select/ng-select/releases/tag/v21.5.1), [release notes](https://github.com/ng-select/ng-select/releases/tag/v21.1.2)
- Fixes an issue with ng-option-highlight. (21.1.1) — [release notes](https://github.com/ng-select/ng-select/releases/tag/v21.1.1)
- Adds support for Angular 21.0.0. (21.0.0) — [release notes](https://github.com/ng-select/ng-select/releases/tag/v21.0.0)

## @ng-select/ng-select 20

### Breaking changes

- The project migrated from Yarn to pnpm for package management. (20.7.0) — [release notes](https://github.com/ng-select/ng-select/releases/tag/v20.7.0)
- The items input type in NgSelectComponent is now readonly. (20.3.3) — [release notes](https://github.com/ng-select/ng-select/releases/tag/v20.3.3)

### New APIs and options

- Adds outside click event configuration to the ng-select component. (20.5.0) — [release notes](https://github.com/ng-select/ng-select/releases/tag/v20.5.0)

### Fixes and other changes

- Supports null as a valid value in ng-select. (20.6.3) — [release notes](https://github.com/ng-select/ng-select/releases/tag/v20.6.3)
- Fixes dropdown panel height when using addTag and virtual scroll. (20.6.2) — [release notes](https://github.com/ng-select/ng-select/releases/tag/v20.6.2)
- Fixes the inability to access SearchInput. (20.6.1) — [release notes](https://github.com/ng-select/ng-select/releases/tag/v20.6.1)
- Fixes scroll behavior when ng-select is used in shadow DOM. (20.4.4) — [release notes](https://github.com/ng-select/ng-select/releases/tag/v20.4.4)
- Items are updated only when findItem succeeds, avoiding updates when no matching item is found. (20.4.3) — [release notes](https://github.com/ng-select/ng-select/releases/tag/v20.4.3)
- Fixed an ng-option race condition. (20.4.2) — [release notes](https://github.com/ng-select/ng-select/releases/tag/v20.4.2)
- Fixes an accessibility issue where a signal was not being called in the template. (20.3.5) — [release notes](https://github.com/ng-select/ng-select/releases/tag/v20.3.5)
- A touchstart event is no longer considered an outside click. (20.3.4) — [release notes](https://github.com/ng-select/ng-select/releases/tag/v20.3.4)
- Fixes converting items as an input signal. (20.3.2) — [release notes](https://github.com/ng-select/ng-select/releases/tag/v20.3.2)

## @ng-select/ng-select 15

### Breaking changes

- Angular 20 is now the minimum required Angular version. (15.0.0) — [release notes](https://github.com/ng-select/ng-select/releases/tag/v15.0.0)

## @ng-select/ng-select 14

### Breaking changes

- Angular 19.0.0 is now the minimum required Angular version. (14.0.0) — [release notes](https://github.com/ng-select/ng-select/releases/tag/v14.0.0)

### Fixes and other changes

- Adds support for Angular 19. (14.0.0) — [release notes](https://github.com/ng-select/ng-select/releases/tag/v14.0.0)

## @ng-select/ng-select 13

### Breaking changes

- Adds support for Angular 18. (13.0.0) — [release notes](https://github.com/ng-select/ng-select/releases/tag/v13.0.0)

## @ng-select/ng-select 12

### Fixes and other changes

- Adds support for Angular 17. (12.0.0) — [release notes](https://github.com/ng-select/ng-select/releases/tag/v12.0.0)

## @ng-select/ng-select 11

### Fixes and other changes

- Angular 16 support was added. (11.0.0) — [release notes](https://github.com/ng-select/ng-select/releases/tag/v11.0.0)
- Accessibility improvements were made to the dropdown panel. (11.0.0) — [release notes](https://github.com/ng-select/ng-select/releases/tag/v11.0.0)

## @ng-select/ng-select 10

### Fixes and other changes

- Adds support for Angular 15, affecting which Angular versions developers can use with the package. (10.0.0) — [release notes](https://github.com/ng-select/ng-select/releases/tag/v10.0.0)

## @ng-select/ng-select 9

### Breaking changes

- Updates the package to Angular 14, changing the Angular version it supports. (9.0.0) — [release notes](https://github.com/ng-select/ng-select/releases/tag/v9.0.0)

## @ng-select/ng-select 8

### Breaking changes

- Updated to Angular 13, a breaking change for projects using this release. (8.0.0) — [release notes](https://github.com/ng-select/ng-select/releases/tag/v8.0.0)

## @ng-select/ng-select 7

### Breaking changes

- Updated to Angular 12 as a breaking change. (7.0.0) — [release notes](https://github.com/ng-select/ng-select/releases/tag/v7.0.0)

## @ng-select/ng-select 6

### Breaking changes

- The release updates ng-select to Angular 11, so developers need to account for the Angular 11 compatibility change. (6.0.0) — [release notes](https://github.com/ng-select/ng-select/releases/tag/v6.0.0)

## @ng-select/ng-select 5

### Breaking changes

- Angular 10 is the minimum dependency requirement. (5.0.0) — [release notes](https://github.com/ng-select/ng-select/releases/tag/v5.0.0)

## @ng-select/ng-select 4

### Breaking changes

- Updated to Angular 9, affecting the framework version used with ng-select. (4.0.0) — [release notes](https://github.com/ng-select/ng-select/releases/tag/v4.0.0)
