An open source finite state machine written in Javascript.


A finite state machine is a very good way to keep things in order. Using a sequential logic circuits helps your code to be clean and easy to read.

It is an abstract machine that can be in one of a finite number of states. The machine is in only one state at a time; the state it is in at any given time is called the current state. It can change from one state to another when initiated by a triggering event or condition; this is called a transition. A particular FSM is defined by a list of its states, its initial state, and the triggering condition for each transition.

Check the Code section for more information on how to use Taipan.js.
There is also a documentation if you need to go deeper.

You can help develop Taipan.js on Github.



Javascript (main.js)

Instantiate a state machine with an array of events as parameter.

var fsm = new TAIPAN.FSM([
  { name: 'greenOn',  from: 'red',  to: 'green' },
  { name: 'orangeOn', from: 'green', to: 'orange' },
  { name: 'redOn',    from: 'orange',  to: 'red' }

activate traffic lights. The finite state machine executes authorized operations only.


//turn requested light on if finite state machine authorizes it
function changeLight(light){
  var eventName = light + 'On';
  if(fsm[eventName]()) {
    transition(); //switch lights off
    switchOn(lights[light]); //switch requested light on

Contact me

Feel free to ask me about my work, give me suggestions, or just to say hi.

/** MIT License * * Copyright (c) 2015 Ludovic CLUBER * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in all * copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. * * http://mouettejs.lcluber.com */