State Machine mixin that extends a Moleculer Service to act as a finite-state machine.
Switch branches/tags
Nothing to show
Clone or download
Latest commit def17e6 Dec 11, 2018
Type Name Latest commit message Commit time
Failed to load latest commit information.
.eslintrc.json make sure node 6 is supported to match moleculer Nov 25, 2018
.gitignore initial commit Nov 25, 2018
.travis.yml set node versions Nov 25, 2018
LICENSE initial commit Nov 25, 2018 update with support for method defined callbacks Nov 25, 2018
index.d.ts fix typings errors Dec 11, 2018
index.js add typings Dec 11, 2018
index.spec.js add callbacks Nov 25, 2018
moleculer-state-machine.iml initial commit Nov 25, 2018
package.json fix typings errors Dec 11, 2018
yarn.lock initial commit Nov 25, 2018

Moleculer logo

Moleculer State Machine

Build Status

Moleculer State Machine is an add on for the Moleculer microservices framework that allows services to be extended with finite-state machine behavior. It does so by acting as a high level wrapper for javascript-state-machine.

Basic Usage

Moleculer State Machine will look in the service settings for the state machine options:

const StateMAchine = require("moleculer-state-machine");

    name: "service-with-state-machine",
    mixins: [
    settings: {
        initialState: "new",
        stateTransitions: [
            {name: "age", from: "new", to: "old"}

In this example calling age() on the service will trigger a transition from "new" to "old".


The mixin delegates the methods is, can, cannot, transitions, allTransitions, allStates, and the state property to an internal instance of javascript-state-machine that is created on service creation.


The mixin emits all javascript-stage-machine events as service events prefixed by the service name. The onBeforeTransition event for example will emit on the broker test.onBeforeTransition. The event payload will be as follows:

    event: ..., // the name fo the event
    transition: ..., // the name of the transition function
    from: ... // the state being transitioned from
    to: ... // the state being transitioned to

See javascript-state-machine lifecylce events for more details.


Methods can be defined on the service that will be called when a specific state machine event occurs. These callbacks are called with the same arguments as as events.

See javascript-state-machine lifecylce events for more details.


Moleculer State Machine is available under the MIT license](