Skip to content

Credits and Attribution

open-fsm is a fork of the finite state machine that lives inside Viewflow, written and maintained for many years by Mikhail Podgurskiy. The declarative API on this site — State, @state.transition, State.ANY, State.RETURN_VALUE, State.GET_STATE — is his design, and the test suite is largely a port of Viewflow's own.

Why a fork

Viewflow is a full workflow framework built around Django. Of all of it, the FSM is the only part many projects actually need, and taking it means taking the framework — and Django — along with it.

open-fsm extracts that piece and nothing else: the same API, on a plain Python class, with any ORM or none at all. Zero runtime dependencies, fully typed, and a PEP 561 py.typed marker.

What changed in the fork

Viewflow open-fsm
Dependencies Django None
Unmet-condition result State.UNMET State.CONDITION
state.transition(permission=...) Supported Not accepted
Instance introspection Module functions only Plus the StateEngine mixin
Diagram rendering (chart) Included Not part of this fork

License

Viewflow's FSM is dual-licensed under the AGPL with a license exception, and a commercial license. open-fsm inherits the copyleft side of that: it is licensed under the GNU Affero General Public License v3.0. See LICENSE for the full text.

The original copyright headers are retained in the source files derived from Viewflow.

Stewardship

open-fsm is maintained by Open Byte. Issues and pull requests are welcome on GitHub.

Development practice

open-fsm is developed with AI assistance, and every change is reviewed by a human before it is merged. The pull request template asks a contributor to state both: whether an AI tool was involved, and that they have read the complete diff and take responsibility for it.

Disclosure is the point. AI assistance does not transfer responsibility for correctness or for the right to license the contribution, and the tooling in this repository is built on the same assumption — the test suite executes every example on this site precisely so that a claim in the documentation cannot be taken on trust.

Documentation policy

The guides embed their Python from examples/, and those examples are executed by the test suite. The Material site is built with strict link and snippet validation in continuous integration. See How These Docs Are Tested.