# Introduction

`ng-state` is a controlled nested state container designed to help write performant, consistent applications on top of Angular 2. It is powered by `RxJs` and `Immer (or ImmutableJs)` and was inspired by [@ngrx](https://github.com/ngrx/store).

### Version 10.0.0 introduces createEffect function!!! 🔥

[Read more](https://vytautas.gitbook.io/ng-state/core-concepts/createeeffct)

### Version 9.5.2 introduces WithStore decorator!!! 🔥

[Read more](https://vytautas.gitbook.io/ng-state/core-concepts/injectstore-decorator-1)

### Version 9.1.0 introduces injectable actions!!! 🔥

[Read more](https://vytautas.gitbook.io/ng-state/core-concepts/actions/injectable-actions)

Core tenets:

* State is a single immutable data structure
* Each component gets its own peace of nested state
* State accessed with `actions` variable under component or the `Store`, an observable of state and an observer of global state

These core principles enable building components that can use the `OnPush` change detection strategy giving you [intelligent, performant change detection](http://blog.thoughtram.io/angular/2016/02/22/angular-2-change-detection-explained.html#smarter-change-detection) throughout your application.

`ng-state` share same core as [`react-state-rxjs`](https://github.com/react-state/store) so it is very beneficial for those who are not bind to one technology.&#x20;

How it is different from others please read on [Main differences](https://vytautas.gitbook.io/ng-state/main-differences) page.
