Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Powerful Kotlin Multiplatform library with clean DSL syntax for creating complex state machines and statecharts driven by Kotlin Coroutines.

License

NotificationsYou must be signed in to change notification settings

KStateMachine/kstatemachine

Repository files navigation

Build and test with GradlecodecovMaven Central VersionJitPackmultiplatform support

Open CollectiveMentioned in Awesome KotlinAndroid ArsenalShare on XShare on RedditSlack

KStateMachine

Documentation |KDoc |Sponsors |Quick start |Samples |Install |Contribution |Support |Roadmap |License |Discussions

KStateMachine is a powerfulKotlin Multiplatform library with clean DSL syntax for creatingcomplexstate machinesandstatecharts driven byKotlin Coroutines.

🌏 Overview

📦 Integration features

  • Kotlin DSL syntax -declarative and clear state machine structure. Using without DSL is also possible.
  • Kotlin Coroutinessupport -call suspendable functions within the library.You can fully use KStateMachine without Kotlin Coroutines dependency if necessary.
  • Kotlin Multiplatform support
  • Zero dependency - it is written in pure Kotlin, main library artifact does not depend on any third party librariesor Android SDK.

⚙️ State management features

📄 Documentation

Important

❤️ Sponsors

I highly appreciate that you donate or become a sponsor to support the project.If you find this project useful you can support it by:

  • Pushing the ⭐ star-button
  • Using ❤️github-sponsors button to see supported donation methods

🚀 Quick start sample

🚦Finishing traffic light

stateDiagram-v2    direction TB    classDef red fill:#f00,color:white,font-weight:bold,stroke-width:2px,stroke:black    classDef yellow fill:yellow,color:black,font-weight:bold,stroke-width:2px,stroke:black    classDef green fill:green,color:white,font-weight:bold,stroke-width:2px,stroke:black    [*] --> RedState    RedState --> YellowState: SwitchEvent    YellowState --> GreenState: SwitchEvent    GreenState --> [*]    class RedState red    class YellowState yellow    class GreenState green
Loading
// define your Eventsobject SwitchEvent : Event// define your States as classes or objectssealedclassStates :DefaultState() {object RedState : States()object YellowState : States()// machine finishes when enters [FinalState]object GreenState : States(), FinalState}funmain()= runBlocking {// create state machine and configure its structure in a setup blockval machine= createStateMachine(scope=this) {        addInitialState(RedState) {// add state listeners            onEntry {println("Enter red")// you can call suspendable code if necessary                delay(10)            }            onExit {println("Exit red") }// setup transition            transition<SwitchEvent> {                targetState=YellowState// add transition listener                onTriggered {println("Transition triggered") }            }        }        addState(YellowState) {            transition<SwitchEvent>(targetState=GreenState)        }        addFinalState(GreenState)        onFinished {println("Finished") }    }// you can observe state machine changes using [Flow] along with simple listenersval statesFlow= machine.activeStatesFlow()// you can process events after state machine has been started even from listener callbacks    machine.processEvent(SwitchEvent)// machine goes to [YellowState]    machine.processEvent(SwitchEvent)// machine goes to [GreenState]}

✍️ Publications

🧪 Samples

💾 Install

KStateMachine is available onMaven Central andJitPack repositories.

Seeinstall section in the docs for details.

Maven Central

dependencies {// multiplatform artifacts, where <Tag> is a library version.    implementation("io.github.nsk90:kstatemachine:<Tag>")    implementation("io.github.nsk90:kstatemachine-coroutines:<Tag>")    implementation("io.github.nsk90:kstatemachine-serialization:<Tag>")}

🏗️ Build

Run./gradlew build or build withIntellij IDEA.

🤝 Contribution

The library is in development phase. You are welcome to propose useful features and contribute to the project.SeeCONTRIBUTING file.

🙋 Support

I am open to answer you questions and feature requests. Fill free to use any of communication channels togive your feedback.

If you use some other platforms to ask questions or mention the library, I recommend adding alink to thisGitHub project or using#kstatemachine tag.

🗺️ Roadmap

  • CreateIntellij IDEA Plugin for state machine visualization and edition

🏅 Thanks to supporters

Stargazers repo roster for @kstatemachine/kstatemachineForkers repo roster for @kstatemachine/kstatemachine

🖋️ License

Licensed under permissiveBoost Software License

Languages


[8]ページ先頭

©2009-2025 Movatter.jp