DOCS v0.1.13 github

@hatch:fsm v0.1.0

Harel statecharts for Wren. Hierarchical and parallel states, history, guards, entry/exit/transition actions, context, signal-based observation. Pure Wren.

stable system updated May 28, 2026 source ↗
README
$ hatch add @hatch:fsm

MOD fsm

CL StateNode_

NEW StateNode_.new_(name, parent, kind, initial, entry, exit, transitions, states)

GET StateNode_.name

GET StateNode_.parent

GET StateNode_.kind

GET StateNode_.initial

GET StateNode_.entry

GET StateNode_.exit

GET StateNode_.transitions

GET StateNode_.states

GET StateNode_.path

FN StateNode_.walk(fn)

FN StateNode_.findTransition_(event, guardEval)

CL TransitionBranch_

NEW TransitionBranch_.new_(event, target, guard, actions, internal)

GET TransitionBranch_.event

GET TransitionBranch_.target

GET TransitionBranch_.guard

GET TransitionBranch_.actions

GET TransitionBranch_.internal

FN TransitionBranch_.resolveTo_(path)

CL TransitionBuilder_

NEW TransitionBuilder_.new_(sourceName, event)

FN TransitionBuilder_.when(fn)

FN TransitionBuilder_.does(fn)

FN TransitionBuilder_.go(target)

FN TransitionBuilder_.internal()

FN TransitionBuilder_.finish_()

CL StateBuilder_

NEW StateBuilder_.new_(name)

GET StateBuilder_.name

GET StateBuilder_.kindAccessor_

GET StateBuilder_.initialAccessor_

GET StateBuilder_.entryAccessor_

GET StateBuilder_.exitAccessor_

GET StateBuilder_.transitionsAccessor_

GET StateBuilder_.statesAccessor_

FN StateBuilder_.initial(stateName)

FN StateBuilder_.state(name, fn)

FN StateBuilder_.on(event, target)

FN StateBuilder_.entry(fn)

FN StateBuilder_.exit(fn)

FN StateBuilder_.final()

FN StateBuilder_.parallel(name, fn)

FN StateBuilder_.markParallel_()

CL ChartBuilder_

NEW ChartBuilder_.new_()

FN ChartBuilder_.id(name)

FN ChartBuilder_.context(map)

FN ChartBuilder_.initial(stateName)

FN ChartBuilder_.state(name, fn)

FN ChartBuilder_.parallel(name, fn)

FN ChartBuilder_.finish()

FN ChartBuilder_.static compileState_(sb, parentNode)

FN ChartBuilder_.static validateAndCollect_(node, ids)

FN ChartBuilder_.static resolveTargets_(node, ids)

FN ChartBuilder_.static resolveTarget_(target, sourceNode, ids)

CL StateChart

NEW StateChart.fromCompiled_(id, rootStates, rootInitial, ids, context)

GET StateChart.id

GET StateChart.context

GET StateChart.activeStates

GET StateChart.started

GET StateChart.offAll

GET StateChart.eventNames

GET StateChart.tree

GET StateChart.toString

GET StateChart.activePath

GET StateChart.activeLeaves_

FN StateChart.static build(builderFn)

FN StateChart.static fromMap(spec)

FN StateChart.static buildStateFromMap_(parentBuilder, name, spec)

FN StateChart.static applyStateConfig_(builder, spec)

FN StateChart.static applyTransitionFromMap_(builder, event, def)

FN StateChart.on(event, fn)

FN StateChart.once(event, fn)

FN StateChart.off(event, fn)

FN StateChart.offAll(event)

FN StateChart.listenerCount(event)

FN StateChart.bindEvents(emitter, eventNames)

FN StateChart.bindEvent(emitter, eventName)

FN StateChart.treeNode_(node, prefix, isLast)

FN StateChart.matches(pattern)

FN StateChart.start()

FN StateChart.stop()

FN StateChart.send(event)

FN StateChart.step_(event)

FN StateChart.stepOne_(branch, source, event)

FN StateChart.enterPath_(node, event)

FN StateChart.descendIntoInitial_(node, event)

FN StateChart.activeDescendantsOf_(ancestor)

FN StateChart.resolveTargetForStep_(targetStr)

FN StateChart.recordHistory_(node)

FN StateChart.resolveHistoryTarget_(targetStr)

FN StateChart.emitDoneIfApplicable_(target, event)

FN StateChart.allRegionsFinal_(parallelNode)

FN StateChart.fire_(channel, args)

FN StateChart.runActions_(actions, event)

FN StateChart.lca_(a, b)

FN StateChart.pathFromLcaToTarget_(lca, target)

FN StateChart.removeActive_(path)