Banish generates a fixed-point runtime at compile time and schedules your states through it. You declare states and rules, the framework decides when they run. Release 1.3.0 adds async support, runtime dispatch, block attributes, transition guards, and scoped variable declarations, rounding out what I think is a genuine framework-level feature set for a category of problem that usually ends up as a loop wrapping a match wrapping a pile of flags.The before/after comparison in the README shows the difference pretty concisely. Happy to answer questions about the design tradeoffs, particularly around the proc macro implementation. Thanks for reading.