# What changed in @preact/signals

> 30 changes in @preact/signals 2 from its official release notes, upgrade guides and advisories: 6 new APIs and options. Each one cited. Sources checked 2026-10-20. HTML: https://unstale.sh/npm/@preact/signals/

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

## @preact/signals 2

### New APIs and options

- The fallback prop can now be a function, avoiding eager evaluation when the collection has items. (2.11.0) — [release notes](https://github.com/preactjs/signals/releases/tag/%40preact/signals%402.11.0)
- The Preact and React adapters now export the ModelFactory type. (2.10.1) — [release notes](https://github.com/preactjs/signals/releases/tag/%40preact/signals%402.10.1)
- The fallback can now be a function, enabling lazy instantiation and avoiding eager evaluation, which matters when working with signals. (2.10.0) — [release notes](https://github.com/preactjs/signals/releases/tag/%40preact/signals%402.10.0)
- Adds an optional getKey prop for stable list reconciliation, fixing incorrect DOM reuse when items are removed or reordered. (2.9.0) — [release notes](https://github.com/preactjs/signals/releases/tag/%40preact/signals%402.9.0)
- Adds a hook for using Models in React and Preact components. It lazily creates the model, preserves its instance across re-renders, and disposes it when the component unmounts. (2.7.0) — [release notes](https://github.com/preactjs/signals/releases/tag/%40preact/signals%402.7.0)
- The when property of Show can be a function, so it does not have to be transformed into a boolean computed. (2.5.0) — [release notes](https://github.com/preactjs/signals/releases/tag/%40preact/signals%402.5.0)

### Performance

- Checks whether the debug package is enabled only once, fixing a performance regression. (2.5.1) — [release notes](https://github.com/preactjs/signals/releases/tag/%40preact/signals%402.5.1)
- The changes to useComputed were reverted, favoring performance. (2.4.0) — [release notes](https://github.com/preactjs/signals/releases/tag/%40preact/signals%402.4.0)

### Behavior and default changes

- The <For> component now accepts readonly arrays and signals containing readonly arrays. (2.9.3) — [release notes](https://github.com/preactjs/signals/releases/tag/%40preact/signals%402.9.3)
- The when of a For component can return a plain array. (2.8.0) — [release notes](https://github.com/preactjs/signals/releases/tag/%40preact/signals%402.8.0)
- useLiveSignal now accepts plain values. (2.5.1) — [release notes](https://github.com/preactjs/signals/releases/tag/%40preact/signals%402.5.1)

### Tooling

- Signals created internally by the Preact adapter and useLiveSignal are named so debugging tools can identify them. (2.10.0) — [release notes](https://github.com/preactjs/signals/releases/tag/%40preact/signals%402.10.0)

### Fixes and other changes

- Prevents rerunning a useSignalEffect for a component unmounted by the same update, avoiding an effect run against an unmounted component. (2.11.3) — [release notes](https://github.com/preactjs/signals/releases/tag/%40preact/signals%402.11.3)
- Component tracking now stops before Preact reconciles the returned VNode, preventing Signals read by DOM property getters from subscribing the parent component. (2.11.2) — [release notes](https://github.com/preactjs/signals/releases/tag/%40preact/signals%402.11.2)
- The auto-memoization heuristic no longer treats useContext as hook state, allowing context consumers to keep props-based render skipping. (2.9.4) — [release notes](https://github.com/preactjs/signals/releases/tag/%40preact/signals%402.9.4)
- Signal prop updaters are disposed when an element re-renders without signal props, preventing stale signals from overwriting DOM values. (2.9.3) — [release notes](https://github.com/preactjs/signals/releases/tag/%40preact/signals%402.9.3)
- Cached <For> children now reactively receive updated render-prop indexes after removals or reorders, preserving DOM and component identity. (2.9.2) — [release notes](https://github.com/preactjs/signals/releases/tag/%40preact/signals%402.9.2)
- Prop-binding effects write applied values back into rendered props so Preact's diff baseline stays in sync when it reuses a DOM node. (2.9.2) — [release notes](https://github.com/preactjs/signals/releases/tag/%40preact/signals%402.9.2)
- Fixes infinite recursion when tools such as Storybook traverse Signal props. (2.8.2) — [release notes](https://github.com/preactjs/signals/releases/tag/%40preact/signals%402.8.2)
- Re-mounting components now preserves DOM updaters correctly. (2.8.1) — [release notes](https://github.com/preactjs/signals/releases/tag/%40preact/signals%402.8.1)
- Scheduled effects no longer hijack the execution context. (1.3.4, 2.7.1) — [release notes](https://github.com/preactjs/signals/releases/tag/%40preact/signals%402.7.1), [release notes](https://github.com/preactjs/signals/releases/tag/%40preact/signals%401.3.4)
- Fixes an issue where unmounted vnodes could update with signals. (1.3.3, 2.6.2) — [release notes](https://github.com/preactjs/signals/releases/tag/%40preact/signals%402.6.2), [release notes](https://github.com/preactjs/signals/releases/tag/%40preact/signals%401.3.3)
- The For component now has a display name, making it identifiable by name in developer tools. (2.6.1) — [release notes](https://github.com/preactjs/signals/releases/tag/%40preact/signals%402.6.1)
- The Show component now has a display name, making it identifiable by name in developer tools. (2.6.1) — [release notes](https://github.com/preactjs/signals/releases/tag/%40preact/signals%402.6.1)
- Utility component types now accept ComponentChildren/ReactNodes as children and fallbacks. (2.5.1) — [release notes](https://github.com/preactjs/signals/releases/tag/%40preact/signals%402.5.1)
- The cached and non-cached shape is now the same. (2.5.0) — [release notes](https://github.com/preactjs/signals/releases/tag/%40preact/signals%402.5.0)
- The For cache is prevented from expanding infinitely. (2.5.0) — [release notes](https://github.com/preactjs/signals/releases/tag/%40preact/signals%402.5.0)
- aria/data attributes now stick around when going back to an empty string. (2.4.0) — [release notes](https://github.com/preactjs/signals/releases/tag/%40preact/signals%402.4.0)
- For now accounts for nested reactivity. (2.4.0) — [release notes](https://github.com/preactjs/signals/releases/tag/%40preact/signals%402.4.0)
- Show now accounts for nested reactivity. (2.4.0) — [release notes](https://github.com/preactjs/signals/releases/tag/%40preact/signals%402.4.0)
