NgRX | Akita | ng-state | NGXS | Redux | MobX | Redux pattern RxJS | |
---|---|---|---|---|---|---|---|
Amount of boilerplate generated files | 9 | 4 | 1 | 3 | heavy | low | 0 |
Tooling | |||||||
Redux Dev Tools | yes | yes (limited) | yes | yes (limited) | no info | yes | no |
CLI | yes | yes | yes | yes (limited) | no info | no info | no |
Schematics | yes | yes | no info | no | no info | no info | no |
Features | |||||||
Async Actions | yes | no | yes | yes | no info | no info | yes |
Offline Persistance | 3rd party package | yes | yes | 1st party package | no info | no info | no |
Snapshot selection without first() | no | yes | yes | yes | no info | no info | no |
Forms synchronization | 3rd party package | yes | yes | 1st party package | no info | no info | no |
Router synchronization | 1st party package | no | yes | 1st party package | no info | no info | no |
Angular ErrorHandler | no | no | no | yes | no info | no info | no |
Lazy loading | yes | yes | yes | yes | no info | no info | no |
Web workers | no | yes | no | no | no info | no info | no |
Transactions | no | yes | yes | no | no info | no info | no |
Optimistic updates | no | partial | yes | no info | no info | no info | no info |
Observables | yes | no info | no info | yes | no info | yes (with tricks) | yes |
WebSocket | 3rd party package | no | no info | 1st party package | no info | no info | no |
Memoized selectors | yes | yes (defferently) | no info | yes | no info | no info | no |
Cancellation | no | no | no info | yes | no info | no info | no |
Side effects | yes | no | no info | yes | no info | no info | no |
Performance | |||||||
Add 1000 rows, seconds | 0.66 | 1.31 | 0.89 | no info | no info | no info | no info |
Update 1000 columns 50 times, seconds | 5.27 | 5.11 | 48.08 | no info | no info | no info | no info |
State Nesting | yes (limited) | yes (limited) | yes | no info | no info | no info | no info |
Non Observable State Access | no | yes (limited) | yes | no info | no info | yes | yes (with tricks) |
Unit testing | via angular testbed by mocking service | via angular testbed by mocking service | via provided testbed | via angular testbed by mocking service | no info | no info | via angular testbed |
Contributors | 232 | 33 | 2 | 121 | 709 | 13 | no info |
Commits | 944 | 779 | 131 | 1489 | 2937 | 171 | no info |
Actively supported | yes | yes | yes | yes | yes | yes | yes |
GitHub Stars | 5500 | 1900 | 6 | 2600 | 51700 | 369 | no info |
Link | https://github.com/ng-state/store | https://github.com/datorama/akita | https://github.com/ng-state/store | https://github.com/ngxs/store | https://github.com/reduxjs/redux | https://github.com/mobxjs/mobx-angular | no info |
My own feeling | no info | no info | no info | no info | the same as ngrx | after while it makes app messed up with two-directional binding like before redux introducing | no info |
Comparison of ng-state, ngrx and akita
Comparison of NgRX, NGXS, akita, RxJS
Comments and pull requests are welcome.