NgRx 22 Launches with resource extensions, dynamic deep signals for Angular Developers

The reactive state management framework adds experimental resource extensions, dynamic deep signals for union types, and a new SignalStoreFeatureType utility.

By LineZotpaper
Published
Read Time2 min
NgRx, the reactive state management framework for Angular, has released version 22 with experimental resource extensions for Angular's resource API, dynamic deep signals for union types, and a new SignalStoreFeatureType helper. The update also brings ESLint v10 compatibility and a light theme for the documentation site.

NgRx 22 introduces resource extensions through a new experimental @ngrx/signals/resource entry point. These extensions wrap an existing resource and patch default behaviors such as resetting value() to undefined during reload and throwing in an error state. Four built-in extensions are included alongside a provideResourceExtensions function for registering defaults at application, route, or component level.

The update also makes deep signals dynamic. Previously, a state slice typed as a union collapsed into a single flat Signal. Now each object literal member gets its own DeepSignal, reachable after narrowing with an in check.

Version 22 includes a new SignalStoreFeatureType utility that extracts the state and members of a feature factory, enabling custom features to reuse them as input types without redeclaration. @ngrx/store-devtools gains an actionCreators option for dispatching from Redux DevTools, and @ngrx/eslint-plugin now supports ESLint v10 while dropping ESLint v8 and legacy .eslintrc format.

Community feedback on the resource extensions has been positive. In the original RFC, Marko Stanimirović explained that changing the error behavior is a prerequisite for deeper SignalStore integration. Manfred Steyer responded "Love it!" and suggested an activation signal, while another commenter asked for parity with SolidJS's createResource. On Hacker News, one user wrote that NgRx Signals is "the new way and its lovely", while another noted that "RxJS and NgRX are becoming less and less necessary to use too, which is great."

Developers upgrading need Angular 22, TypeScript 6.0, and RxJS ^6.5 or ^7.5. The upgrade can be run with ng update @ngrx/store@22 or ng update @ngrx/signals@22 for SignalStore-only projects. Most breaking changes have automated migrations, detailed in the v22 migration guide and changelog. Teams should also note that Angular 22 changed resource timing, which may cause test failures.

NgRx is an open-source, community-driven framework sponsored by Nx and CodeRabbit. Its source is available on GitHub.

§

Analysis

Why This Matters

  • NgRx 22 streamlines state management with resource extensions, potentially simplifying code for Angular developers using the newer resource API.
  • Dynamic deep signals improve handling of loading states, a common pattern in data fetching.
  • The update reflects the ongoing evolution of Angular's reactive ecosystem, including reduced boilerplate and closer alignment with signal-based programming.

Background

Angular has moved toward a signal-based reactivity model in recent major versions. NgRx provides state management through Store and Effects as well as the newer SignalStore. Version 22 continues this trend by offering better integration with Angular's resource API, which was introduced in Angular 21. Community tools like NgRx Toolkit and TanStack Query have already offered similar functionality for retaining previous data during resource reloads.

Key Perspectives

NgRx proponents: The new resource extensions keep state logic on the resource itself, avoiding extra stateful wrappers. The SignalStoreFeatureType utility reduces duplication in custom features. Manfred Steyer (Angular expert): Reacted positively to the RFC, suggesting an activation signal for even finer control. Skeptics: Some developers argue that as Angular itself becomes more capable, the need for third-party state management like NgRx decreases. The Hacker News comment noting that "RxJS and NgRX are becoming less and less necessary" reflects this view.

What to Watch

  • Adoption of the experimental resource extensions and whether they move to stable in a future release.
  • Community feedback on dynamic deep signals, especially for complex union types.
  • Impact on testing workflows given Angular 22's changed resource timing.

Sources

Checked

12 claims in this story checked against 1 source: 12 supported.

Show each claim
  1. SupportedManfred Steyer replied “Love it!” to the resource-extension proposal.InfoQ: “The proposal was well received, with Manfred Steyer replying "Love it!"”
  2. SupportedA Hacker News user described NgRx Signals as “the new way and its lovely”.InfoQ: “In the Hacker News thread for Angular v22, one user wrote: NGRX Signals is the new way and its lovely.”
  3. SupportedAnother Hacker News user said RxJS and NgRX are becoming less necessary to use.InfoQ: “And even RxJS and NgRX are becoming less and less necessary to use too, which is great.”
  4. SupportedNgRx 22 launches with resource extensions and dynamic deep signals for Angular developers.InfoQ: “NgRx, the reactive state management framework for Angular, has released version 22, shipping utilities for customising Angular's resource API, dynamic deep signals for union types”
  5. SupportedNgRx 22 adds experimental resource extensions, dynamic deep signals for union types, and a SignalStoreFeatureType utility.InfoQ: “The main new addition is resource extensions, delivered through a new experimental @ngrx/signals/resource entry point.”
  6. SupportedResource extensions wrap an existing resource and address its reload and error-state behaviours.InfoQ: “Resource extensions wrap an existing resource and patch only those behaviours, while preserving the original resource type.”
  7. SupportedNgRx 22 includes four built-in resource extensions and a function for registering defaults at application, route, or component level.InfoQ: “Four built-in extensions are included, alongside a provideResourceExtensions function that registers defaults at application, route or component level.”
  8. SupportedIn the original RFC, Marko Stanimirović said changing error behaviour is a prerequisite for deeper SignalStore integration.InfoQ: “In the original RFC, Marko Stanimirović explained that changing the error behaviour is also a prerequisite for deeper SignalStore integration”
  9. SupportedNgRx 22 makes deep signals dynamic so each object-literal member of a union gets its own DeepSignal, reachable after narrowing with an in check.InfoQ: “Now each object literal member gets its own DeepSignal, reachable after narrowing with an in check.”
  10. SupportedSignalStoreFeatureType extracts a feature factory’s state and members so custom features can reuse them as input types.InfoQ: “A new SignalStoreFeatureType utility extracts the state and members of a feature factory so custom features can reuse them as input types, rather than redeclaring them by hand.”
  11. SupportedNgRx’s ESLint plugin supports ESLint v10 and drops ESLint v8 and the legacy .eslintrc format.InfoQ: “@ngrx/eslint-plugin now supports ESLint v10 while dropping ESLint v8 and the legacy .eslintrc format.”
  12. SupportedDevelopers upgrading need Angular 22, TypeScript 6.0, and RxJS ^6.5 or ^7.5.InfoQ: “Developers upgrading need Angular 22, TypeScript 6.0 and RxJS ^6.5 or ^7.5”

Zotpaper

Written by June Katz on the Tech & AI desk. Claims checked by Ines Fairley, verification. Edited by Angus Burke, chief sub. Plate by Ollie Flash, picture desk.

1 source12 of 12 claims matched to a sourcefirst published updated once
Meet the newsroomHow we workSubscribe