
Implements the Chain of Responsibility design pattern to streamline business logic processes, enhancing readability and agility, while offering a code-first approach for developer-friendly customization.
kotlin-cor is a lightweight Kotlin Multiplatform library that brings Chain of Responsibility pattern to business logic orchestration. It allows you to write complex business processes as readable, declarative code — instead of XML schemas or visual BPM designers.
kotlin-cor fills the gap between simple CoR pattern and full-blown workflow engines:
| Category | Tools | kotlin-cor Role |
|---|---|---|
| State Machines | Tinder/StateMachine, KStateMachine | Different — sequential processing, not state transitions |
| Workflow Engines | Temporal, Infinitic, Conductor | Lighter alternative — no infrastructure needed |
| Saga Pattern | Arrow Saga | Different — sequential pipeline, not distributed transactions |
| BPMS | Camunda, Flowable | Direct competitor — code-first instead of visual-first |
Primary Use Cases:
See docs/comparison.md for detailed analysis.
val chain = rootChain<BizContext> {
validate("Validate request") {
validateNotEmpty("Check ID not empty")
validateFormat("Check ID format")
}
authorize("Check access rights") {
fetchUserPermissions()
checkObjectAccess()
}
fetchData("Load business object")
respond("Prepare response")
}.build()
runBlocking { chain.exec(BizContext(request)) }on { condition } for conditional stepsexcept blocks for compensation/rollbackparallel block for concurrent operations// build.gradle.kts
dependencies {
implementation("com.crowdproj:kotlin-cor:${VERSION}")
}kotlin-cor is a lightweight Kotlin Multiplatform library that brings Chain of Responsibility pattern to business logic orchestration. It allows you to write complex business processes as readable, declarative code — instead of XML schemas or visual BPM designers.
kotlin-cor fills the gap between simple CoR pattern and full-blown workflow engines:
| Category | Tools | kotlin-cor Role |
|---|---|---|
| State Machines | Tinder/StateMachine, KStateMachine | Different — sequential processing, not state transitions |
| Workflow Engines | Temporal, Infinitic, Conductor | Lighter alternative — no infrastructure needed |
| Saga Pattern | Arrow Saga | Different — sequential pipeline, not distributed transactions |
| BPMS | Camunda, Flowable | Direct competitor — code-first instead of visual-first |
Primary Use Cases:
See docs/comparison.md for detailed analysis.
val chain = rootChain<BizContext> {
validate("Validate request") {
validateNotEmpty("Check ID not empty")
validateFormat("Check ID format")
}
authorize("Check access rights") {
fetchUserPermissions()
checkObjectAccess()
}
fetchData("Load business object")
respond("Prepare response")
}.build()
runBlocking { chain.exec(BizContext(request)) }on { condition } for conditional stepsexcept blocks for compensation/rollbackparallel block for concurrent operations// build.gradle.kts
dependencies {
implementation("com.crowdproj:kotlin-cor:${VERSION}")
}