Client-side DDD/CQRS for JavaScript.
Switch branches/tags
usecase-bus@1.1.0 node-memory-leak-testing@2.0.1 node-memory-leak-testing@2.0.0 example-todomvc@1.1.0 example-todomvc@1.0.2 example-todomvc@1.0.1 example-todomvc-typescript@1.1.0 example-todomvc-flow@1.1.0 example-todomvc-flow@1.0.2 example-todomvc-flow@1.0.1 example-svg-feeling@1.1.0 example-svg-feeling@1.0.2 example-svg-feeling@1.0.1 example-shopping-cart@1.1.0 example-shopping-cart@1.0.2 example-shopping-cart@1.0.1 example-perf-node-memory-leak-testing@2.1.0 example-perf-benchmark@1.1.0 example-introduction@1.1.0 example-counter@1.1.0 example-counter@1.0.2 example-counter@1.0.1 benchmark@1.0.2 benchmark@1.0.1 almin@0.18.1 almin@0.18.0 almin@0.17.1 almin@0.17.0 almin@0.16.0 almin@0.15.3 almin@0.15.2 almin@0.15.1 almin@0.15.0 almin@0.14.0 almin@0.13.11 almin@0.13.10 almin@0.13.9 almin@0.13.8 almin@0.13.7 almin@0.13.6 almin@0.13.5 almin@0.13.4 almin@0.13.3 almin@0.13.2 almin@0.13.1 almin@0.13.0 almin@0.12.5 almin@0.12.4 almin@0.12.3 almin@0.12.2 almin@0.12.1 almin@0.12.0 @almin/usecase-bus@1.2.2 @almin/usecase-bus@1.2.1 @almin/usecase-bus@1.2.0 @almin/store-test-helper@1.1.3 @almin/store-test-helper@1.1.2 @almin/store-test-helper@1.1.1 @almin/store-test-helper@1.1.0 @almin/react-context@1.1.3 @almin/react-context@1.1.2 @almin/react-context@1.1.1 @almin/react-context@1.1.0 almin-react-container@0.7.3 almin-react-container@0.7.2 almin-react-container@0.7.1 almin-react-container@0.7.0 almin-react-container@0.6.4 almin-react-container@0.6.3 almin-react-container@0.6.2 almin-react-container@0.6.1 almin-react-container@0.6.0 almin-react-container@0.5.0 almin-react-container@0.4.0 almin-react-container@0.3.11 almin-react-container@0.3.10 almin-react-container@0.3.9 almin-react-container@0.3.8 almin-react-container@0.3.7 almin-react-container@0.3.6 almin-react-container@0.3.5 almin-react-container@0.3.4 almin-react-container@0.3.3 almin-react-container@0.3.2 almin-react-container@0.3.1 almin-react-container@0.3.0 almin-react-container@0.2.2 almin-react-container@0.2.1 almin-react-container@0.2.0 almin-logger@6.2.3 almin-logger@6.2.2 almin-logger@6.2.1 almin-logger@6.2.0 almin-logger@6.1.5 almin-logger@6.1.4 almin-logger@6.1.3 almin-logger@6.1.2 almin-logger@6.1.1 almin-logger@6.1.0 almin-logger@6.0.0
Nothing to show
Clone or download
azu Merge pull request #363 from almin/update-deps
docs(deps): update docs
Latest commit 438cf40 Sep 7, 2018
Failed to load latest commit information.
.github docs(CONTRIBUTING): update commit message style (#322) Jan 19, 2018
.travis Update deploy script Aug 8, 2016
docs docs(almin): hide `release` API Sep 4, 2018
examples chore: update deps Jun 9, 2018
packages docs(almin): hide `release` API Sep 4, 2018
perf fix(benchmark): fix benchmark script Jun 9, 2018
test chore(npm): update dependencies (#297) Nov 19, 2017
tools chore(website): add CNAME Dec 16, 2017
website docs(deps): update docs Sep 4, 2018
.editorconfig Add .editorconfig and ESLint (#105) Feb 26, 2017
.eslintignore style(prettier): Update Prettier@1.7.0 (#279) Sep 16, 2017
.eslintrc.json refactor(example): Update Counter example (#260) Jul 22, 2017
.gitignore refactor(lerna): enable yarn workspace (#314) Jan 18, 2018
.prettierignore chore(prettier): ignore Executor Apr 27, 2018
.textlintrc docs(TypeScript): add TypeScript document (#335) Feb 7, 2018
.travis.yml chore(travis): do run build Jun 8, 2018
CNAME Add CNAME file Aug 8, 2016
LICENSE docs(website): use docusaurus instead of GitBook (#304) Dec 16, 2017 docs(website): use docusaurus instead of GitBook (#304) Dec 16, 2017
crowdin.yaml docs(website): use docusaurus instead of GitBook (#304) Dec 16, 2017
lerna.json chore(lerna): Update to leana@3 Aug 26, 2018
netlify.toml docs(website): use docusaurus instead of GitBook (#304) Dec 16, 2017
package.json chore(deps): update lerna Aug 30, 2018
prettier.config.js style(prettier): Update Prettier@1.7.0 (#279) Sep 16, 2017
prh.yml docs(almin): update description Sep 29, 2017
yarn.lock docs(deps): update docs Sep 4, 2018

Almin.js Build Status

Almin.js logo

Sauce Test Status

Flux/CQRS patterns for JavaScript application.

Write code thinking :)


Now, We can implement web applications with Flux or Redux etc...

But, I often hear a story that "Control flow of Flux/Redux is cool, but where to implement domain logic."

I think that people skip to Flux/Redux from MV* pattern.

MV* --> ( Missing things ) --> Flux/Redux(CQRS+EventSourcing)

Almin aim to fill the Missing things between MV* and Flux/Redux.


Almin provides some patterns, is not a framework.

  • Testable
  • Scalable
  • Responsibility Layers patten - well-known as DDD(Domain-Driven Design)/CQRS
  • Support TypeScript and Flow

Almin is an implementation of Read/Write Stack Architecture that is well-known as Flux/CQRS.


npm install almin

You'll also need a Promise polyfill for older browsers.

npm install es6-promise


📝 Please See for details.

What is Almin?

Almin provides Flux/CQRS patterns for JavaScript applications.

It aims to create a scalable app.

Overview of almin-architecture

The above figure is overview of Almin architecture that is similar to CQRS(Command Query Responsibility Segregation).

But, Almin is not a framework, provides only these components

  • Dispatcher
  • Context
  • UseCase
  • Store
  • StoreGroup

Other components like Domain, Repository and State are written by you!

Of course, Almin help you to write other components.

Also, You may notice that these components are similar to Flux architecture.

Almin is also a flux implementation library. 👍

Almin Flux Redux
Dispatcher Dispatcher store.dispatch
Context Container Middleware/React Redux
UseCase ActionCreator Actions
Store Store Store
StoreGroup Container combineReducers
(State) Store Reducer

📝 State, Domain and Repository is optional on Almin, because the best for these components is vary based on application.

Almin has not a perfect solution for an application, but we can write code thinking.

We are going to learn two architectures(Flux/CQRS) using Almin :)

Real Examples

Welcome to pull request!



The Almin repo is managed as a monorepo; it's composed of npm packages.


Package Version Description
almin npm almin itself


Package Version Description
almin-react-container npm Integration with React


Package Version Description
almin-logger npm console logger
almin-devtools npm browser debugging extension


Please see for more details.

  1. Fork it!
  2. Create your feature branch: git checkout -b my-new-feature
  3. Commit your changes: git commit -am 'Add some feature'
  4. Push to the branch: git push origin my-new-feature
  5. Submit a pull request :D