https://github.com/batazor/fsme
Finite State Machine Engine for Go
https://github.com/batazor/fsme
finite-state-machine fsm react ui
Last synced: 10 months ago
JSON representation
Finite State Machine Engine for Go
- Host: GitHub
- URL: https://github.com/batazor/fsme
- Owner: batazor
- License: mit
- Created: 2019-01-31T13:57:46.000Z (over 7 years ago)
- Default Branch: master
- Last Pushed: 2025-08-06T20:55:26.000Z (11 months ago)
- Last Synced: 2025-08-06T22:27:42.040Z (11 months ago)
- Topics: finite-state-machine, fsm, react, ui
- Language: JavaScript
- Homepage: https://fsme.herokuapp.com/
- Size: 13.7 MB
- Stars: 10
- Watchers: 2
- Forks: 2
- Open Issues: 11
-
Metadata Files:
- Readme: README.md
- License: LICENSE
- Roadmap: ROADMAP.md
Awesome Lists containing this project
README
# fsme
Finite State Machine Engine for Go
[](https://godoc.org/github.com/batazor/fsme/fsm)
### Try it
1. [Demo](https://fsme.herokuapp.com/)
-----
-----
### Install
`go get github.com/batazor/fsme/fsm`
### Basic Example
From [examples/simple.go](./examples/simple.go)
```go
package main
import (
"fmt"
"github.com/batazor/fsme/fsm"
)
func main() {
// Create new FSM
machine, err := fsm.New()
// Add rule
machine.AddStateTransitionRules("a", "b", "c")
machine.AddStateTransitionRules("b", "d", "e")
machine.AddStateTransitionRules("c", "k")
machine.AddStateTransitionRules("d", "a")
machine.AddStateTransitionRules("e", "k")
machine.AddStateTransitionRules("k")
// Add Events
machine.AddEvent("start", "a")
machine.AddEvent("to b", "b")
machine.AddEvent("to d", "d")
// Add callback for state
machine.AddCallback("a", "enter", func(f *fsm.FSM) { fmt.Println("Enter state: ", f.GetCurrentState()) })
machine.AddCallback("a", "leave", func(f *fsm.FSM) { fmt.Println("Leave state: ", f.GetCurrentState()) })
machine.AddCallback("b", "enter", func(f *fsm.FSM) { fmt.Println("Enter state: ", f.GetCurrentState()) })
// Init State
err = machine.SetStateTransition("a")
if err != nil {
fmt.Println(err)
}
// Send Event
err = machine.SendEvent("to b")
if err != nil {
fmt.Println(err)
}
err = machine.SendEvent("to d")
if err != nil {
fmt.Println(err)
}
fmt.Printf("State: %s\n", machine.GetCurrentState())
}
```
## UI


### Feature
+ FSM
+ Callback [Entry, Leave]
+ UI Editor/View
+ Export
+ [Examples](./examples)
### Refs
- FSM
- https://github.com/looplab/fsm
- https://github.com/theckman/go-fsm