Orchestrate complex async processes with finite state machines, parallel execution, and built-in scheduling.
Overview
Cano is a high-performance orchestration engine designed for building resilient, self-healing systems in Rust. Unlike simple task queues, Cano uses Finite State Machines (FSM) to define strict, type-safe transitions between processing steps.
It excels at managing complex lifecycles where state transitions matter:
- Data Pipelines: ETL jobs with parallel processing (Split/Join) and aggregation.
- AI Agents: Multi-step inference chains with shared context and memory.
- Background Systems: Scheduled maintenance, periodic reporting, and distributed cron jobs.
The engine is built on three core concepts: Tasks/Nodes for logic, Workflows for state transitions, and Schedulers for timing.
Features
- Type-Safe State Machines: Enum-driven transitions with compile-time guarantees.
- Flexible Processing Units: Choose between simple
Tasks or structuredNodes (Prep/Exec/Post lifecycle). - Parallel Execution (Split/Join): Run tasks concurrently and join results with strategies like
All,Any,Quorum, orPartialResults. - Robust Retry Logic: Configurable strategies including exponential backoff with jitter.
- Built-in Scheduling: Cron-based, interval, and manual triggers for background jobs.
- Concurrent Workflows: Run multiple instances of the same workflow with quota management.
- Observability: Integrated
tracingsupport for deep insights into workflow execution. - Performance-Focused: Minimizes heap allocations by leveraging stack-based objects wherever possible, giving you control over where allocations occur.
Simple Example: Parallel Processing
Here is a real-world example showing how to split execution into parallel tasks and join them back together.
graph TD
Start([Start]) --> Split{Split}
Split -->|Source 1| T1[FetchSourceTask 1]
Split -->|Source 2| T2[FetchSourceTask 2]
Split -->|Source 3| T3[FetchSourceTask 3]
T1 --> Join{Join All}
T2 --> Join
T3 --> Join
Join --> Aggregate[Aggregate]
Aggregate --> Complete([Complete])
use *;
use Duration;
// A task that simulates fetching data from a source
async
Documentation
For complete documentation, examples, and guides, please visit our website:
👉 https://nassor.github.io/cano/
You can also find:
- API Documentation on docs.rs
- Examples Directory in the repository
Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
License
This project is licensed under the MIT License - see the LICENSE file for details.