Stateless 5.20.1

Stateless

Create state machines and lightweight state machine-based workflows directly in .NET code:

var phoneCall = new StateMachine<State, Trigger>(State.OffHook);

phoneCall.Configure(State.OffHook)
    .Permit(Trigger.CallDialled, State.Ringing);

phoneCall.Configure(State.Connected)
    .OnEntry(t => StartCallTimer())
    .OnExit(t => StopCallTimer())
    .InternalTransition(Trigger.MuteMicrophone, t => OnMute())
    .InternalTransition(Trigger.UnmuteMicrophone, t => OnUnmute())
    .InternalTransition<int>(_setVolumeTrigger, (volume, t) => OnSetVolume(volume))
    .Permit(Trigger.LeftMessage, State.OffHook)
    .Permit(Trigger.PlacedOnHold, State.OnHold);

// ...

phoneCall.Fire(Trigger.CallDialled);
Assert.AreEqual(State.Ringing, phoneCall.State);

This project, as well as the example above, was inspired by Simple State Machine (Archived).

Features

Most standard state machine constructs are supported:

  • Generic support for states and triggers of any .NET type (numbers, strings, enums, etc.)
  • Hierarchical states
  • Entry/exit actions for states
  • Guard clauses to support conditional transitions
  • Introspection

Some useful extensions are also provided:

  • Ability to store state externally (for example, in a property tracked by an ORM)
  • Parameterised triggers
  • Reentrant states
  • Export to DOT and Mermaid graph

Documentation

For guidance on how to use Stateles, the project README file contains documentation and code examples. The source repository also includes a few example projects.

Contributing

We welcome contributions to this project. Check CONTRIBUTING.md for more info.

No packages depend on Stateless.

.NET Framework 4.6.2

  • No dependencies.

.NET 8.0

  • No dependencies.

.NET 9.0

  • No dependencies.

.NET 10.0

  • No dependencies.

.NET Standard 2.0

  • No dependencies.

Version Downloads Last updated
5.20.1 1 02/09/2026
5.20.1-dev-19407615528 6 12/20/2025
5.20.1-dev-19407520956 6 12/20/2025
5.20.0 4 12/21/2025
5.20.0-dev-17841589139 4 12/21/2025
5.19.0 4 12/21/2025
5.19.0-dev-17621326750 4 12/20/2025
5.19.0-dev-17157499513 5 12/20/2025
5.18.0 4 12/21/2025
5.18.0-dev-17151133875 4 12/20/2025
5.18.0-dev-17151048893 5 12/20/2025
5.18.0-dev-17123170070 5 12/20/2025
5.18.0-dev-16986834496 5 12/20/2025
5.18.0-dev-16665478063 5 12/21/2025
5.18.0-dev-16665368567 6 12/09/2025
5.17.0 477 12/09/2025
5.17.0-dev-16123181037 4 12/20/2025
5.17.0-dev-12573353197 5 12/20/2025
5.17.0-dev-12536414383 5 12/20/2025
5.16.0 2 12/21/2025
5.16.0-dev-9828500365 5 12/20/2025
5.16.0-dev-9514287026 5 12/20/2025
5.16.0-dev-9221217254 5 12/10/2025
5.16.0-dev-12536374438 5 12/20/2025
5.16.0-dev-12479904394 5 12/20/2025
5.16.0-dev-12470918423 6 12/09/2025
5.16.0-dev-12470449205 4 12/20/2025
5.16.0-dev-10048603300 5 12/20/2025
5.15.0 4 12/21/2025
5.15.0-dev-9171714096 5 12/20/2025
5.15.0-dev-9058520056 5 12/10/2025
5.15.0-dev-8822304149 5 12/20/2025
5.15.0-dev-8790594175 5 12/20/2025
5.15.0-dev-8759383160 5 12/20/2025
5.15.0-dev-7356157229 5 12/20/2025
5.14.0 3 12/21/2025
5.14.0-dev-7355700004 5 12/20/2025
5.14.0-dev-7309801955 5 12/20/2025
5.14.0-dev-7232734414 5 12/20/2025
5.14.0-dev-7232709282 5 12/20/2025
5.14.0-dev-7164312319 5 12/11/2025
5.14.0-dev-7078872236 5 12/20/2025
5.14.0-dev-7078811950 5 12/20/2025
5.14.0-dev-6860395514 6 12/09/2025
5.14.0-dev-6851669594 4 12/20/2025
5.14.0-dev-6851630770 4 12/20/2025
5.14.0-dev-6823242034 5 12/20/2025
5.14.0-dev-6813247520 5 12/11/2025
5.14.0-dev-6811706736 5 12/09/2025
5.14.0-dev-6801352798 4 12/20/2025
5.13.0 3 12/21/2025
5.13.0-dev-6799430915 5 12/20/2025
5.13.0-dev-6746401636 5 12/20/2025
5.13.0-dev-5455458583 5 12/20/2025
5.13.0-dev-5455401408 4 12/20/2025
5.13.0-dev-5235510771 5 12/20/2025
5.13.0-dev-5157129238 5 12/20/2025
5.13.0-dev-4941000713 6 12/10/2025
5.13.0-dev-4940972813 5 12/20/2025
5.13.0-dev-4838097297 5 12/20/2025
5.13.0-dev-4838091545 4 12/10/2025
5.13.0-dev-4838052982 5 12/20/2025
5.13.0-dev-4832488606 5 12/20/2025
5.13.0-dev-4716514070 5 12/20/2025
5.13.0-dev-4701624597 5 12/20/2025
5.13.0-dev-4701061956 6 12/09/2025
5.13.0-dev-4027208421 6 12/09/2025
5.13.0-dev-4027203589 4 12/20/2025
5.13.0-dev-4027201259 4 12/11/2025
5.13.0-dev-3800477155 5 12/20/2025
5.12.0 3 12/21/2025
5.12.0-dev-3553426836 5 12/20/2025
5.12.0-dev-3498786305 4 12/20/2025
5.12.0-dev-3267018252 6 12/10/2025
5.11.0 5 12/10/2025
5.11.0-dev-3264102134 5 12/09/2025
5.11.0-dev-3191463566 4 12/20/2025
5.10.1 4 12/21/2025
5.10.1-dev-791423646 5 12/21/2025
5.10.1-dev-787896296 5 12/21/2025
5.10.1-dev-787889564 5 12/10/2025
5.10.1-dev-574334224 5 12/10/2025
5.10.0 4 12/21/2025
5.10.0-dev-560201439 5 12/21/2025
5.10.0-dev-560186344 5 12/21/2025
5.10.0-dev-542672901 3 12/21/2025
5.10.0-dev-542661127 5 12/21/2025
5.2.0 4 12/21/2025
5.2.0-dev-568743626 5 12/10/2025
5.1.9-dev-00610 5 12/21/2025
5.1.9-dev-00600 4 12/21/2025
5.1.8 4 12/20/2025
5.1.8-dev-00558 5 12/21/2025
5.1.8-dev-00553 5 12/09/2025
5.1.7 4 12/20/2025
5.1.7-dev-00548 5 12/21/2025
5.1.6 5 12/20/2025
5.1.6-dev-00547 4 12/21/2025
5.1.6-dev-00544 4 12/21/2025
5.1.5 5 12/20/2025
5.1.5-dev-00528 4 12/21/2025
5.1.4 5 12/20/2025
5.1.4-dev-00522 5 12/21/2025
5.1.4-dev-00521 5 12/21/2025
5.1.3 6 12/20/2025
5.1.3-dev-00520 5 12/21/2025
5.1.3-dev-00513 5 12/21/2025
5.1.2 5 12/11/2025
5.1.2-dev-00508 4 12/21/2025
5.1.2-dev-00501 4 12/21/2025
5.1.1 5 12/20/2025
5.1.1-dev-00500 6 12/21/2025
5.1.1-dev-00499 5 12/21/2025
5.1.1-dev-00492 4 12/21/2025
5.1.0 5 12/20/2025
5.1.0-dev-00489 5 12/21/2025
5.1.0-dev-00486 5 12/21/2025
5.1.0-dev-00485 4 12/21/2025
5.1.0-dev-00481 5 12/21/2025
5.1.0-dev-00480 5 12/21/2025
5.1.0-dev-00479 5 12/21/2025
5.1.0-dev-00478 5 12/21/2025
5.1.0-dev-00477 6 12/09/2025
5.0.0 5 12/09/2025
5.0.0-dev-00476 5 12/21/2025
5.0.0-dev-00473 4 12/21/2025
5.0.0-dev-00472 4 12/21/2025
5.0.0-dev-00471 5 12/21/2025
5.0.0-dev-00464 5 12/21/2025
5.0.0-dev-00463 3 12/21/2025
4.4.0 6 12/20/2025
4.4.0-dev-00453 5 12/21/2025
4.4.0-dev-00451 5 12/21/2025
4.4.0-dev-00450 5 12/21/2025
4.4.0-dev-00447 5 12/21/2025
4.4.0-dev-00445 4 12/21/2025
4.4.0-dev-00443 5 12/21/2025
4.3.0 5 12/20/2025
4.2.1 6 12/09/2025
4.2.0 6 12/20/2025
4.2.0-dev-00366 4 12/21/2025
4.2.0-dev-00364 6 12/10/2025
4.2.0-dev-00363 5 12/21/2025
4.2.0-dev-00360 4 12/21/2025
4.2.0-dev-00355 5 12/21/2025
4.2.0-dev-00350 6 12/10/2025
4.2.0-dev-00349 5 12/21/2025
4.1.0 5 12/20/2025
4.1.0-dev-00341 5 12/21/2025
4.1.0-dev-00340 5 12/09/2025
4.1.0-dev-00337 5 12/21/2025
4.1.0-dev-00331 4 12/21/2025
4.1.0-dev-00326 3 12/21/2025
4.1.0-dev-00319 5 12/21/2025
4.1.0-dev-00316 5 12/21/2025
4.1.0-dev-00311 5 12/09/2025
4.1.0-dev-00307 4 12/21/2025
4.1.0-dev-00299 5 12/21/2025
4.0.1-dev-00294 5 12/21/2025
4.0.1-dev-00275 5 12/21/2025
4.0.1-dev-00260 5 12/21/2025
4.0.1-dev-00258 4 12/21/2025
4.0.1-dev-00256 6 12/10/2025
4.0.0 3 12/21/2025
4.0.0-dev-00247 5 12/21/2025
4.0.0-dev-00244 4 12/11/2025
4.0.0-dev-00242 5 12/21/2025
4.0.0-dev-00236 5 12/21/2025
4.0.0-dev-00223 5 12/21/2025
4.0.0-dev-00221 5 12/21/2025
4.0.0-dev-00220 5 12/10/2025
4.0.0-dev-00217 6 12/10/2025
4.0.0-dev-00196 4 12/21/2025
4.0.0-dev-00194 5 12/21/2025
4.0.0-dev-00187 4 12/21/2025
4.0.0-dev-00177 5 12/21/2025
4.0.0-dev-00175 5 12/21/2025
4.0.0-dev-00173 5 12/21/2025
3.2.0-dev-00170 3 12/21/2025
3.2.0-dev-00168 4 12/21/2025
3.2.0-dev-00166 5 12/21/2025
3.1.1-dev-00165 7 12/10/2025
3.1.1-dev-00162 5 12/10/2025
3.1.1-dev-00155 5 12/21/2025
3.1.1-dev-00152 5 12/21/2025
3.1.1-dev-00151 7 12/21/2025
3.1.1-dev-00143 4 12/21/2025
3.1.1-dev-00141 5 12/21/2025
3.1.0 5 12/20/2025
3.0.2-dev-00132 5 12/21/2025
3.0.1 5 12/20/2025
3.0.1-dev-00123 5 12/21/2025
3.0.1-dev-00113 5 12/21/2025
3.0.0 6 12/20/2025
3.0.0-dev-00109 5 12/21/2025
3.0.0-dev-00108 5 12/21/2025
3.0.0-dev-00106 3 12/21/2025
3.0.0-dev-00105 5 12/21/2025
3.0.0-dev-00099 5 12/20/2025
3.0.0-dev-00094 5 12/21/2025
3.0.0-dev-00093 4 12/21/2025
3.0.0-dev-00092 5 12/21/2025
2.5.84 4 12/21/2025
2.5.80 5 12/09/2025
2.5.79 4 12/21/2025
2.5.68 3 12/21/2025
2.5.66 4 12/21/2025
2.5.62 3 12/21/2025
2.5.61 3 12/12/2025
2.5.59 4 12/10/2025
2.5.56 4 12/13/2025
2.5.53 4 12/21/2025
2.5.40 4 12/21/2025
2.5.36 4 12/11/2025
2.5.29 4 12/23/2025
2.5.28 4 12/21/2025
2.5.23 4 12/12/2025
2.5.21 5 12/11/2025
2.5.18 4 12/10/2025
2.5.15 4 12/21/2025
2.5.11 4 12/11/2025
2.5.10 6 12/10/2025
2.5.8 5 12/09/2025
2.4.0 4 12/20/2025
2.3.1.1 5 12/20/2025