[package]
name = "cano"
description = "High-performance orchestration engine for building resilient, self-healing systems in Rust. Uses Finite State Machines (FSM) for strict, type-safe transitions."
version.workspace = true
edition.workspace = true
rust-version.workspace = true
license.workspace = true
homepage.workspace = true
repository.workspace = true
authors.workspace = true
readme = "../README.md"
keywords = ["ai", "async", "workflow", "data-processing", "scheduler"]
categories = ["finance", "development-tools", "concurrency", "asynchronous", "science"]
[dependencies]
cano-macros = { version = "0.11", path = "../cano-macros" }
tokio = { version = "1.52.1", features = ["macros", "sync", "time", "rt-multi-thread"] }
rand = "0.10"
chrono = { version = "0.4", features = ["serde"], optional = true }
cron = { version = "0.16", optional = true }
futures-util = "0.3"
parking_lot = "0.12"
tracing = { version = "0.1", optional = true }
[features]
scheduler = ["dep:chrono", "dep:cron", "tokio/signal"]
tracing = ["dep:tracing"]
all = ["scheduler", "tracing"]
[dev-dependencies]
axum = "0.8.9"
criterion = { version = "0.8", features = ["html_reports", "async_tokio"] }
redb = "4.1"
reqwest = { version = "0.13", features = ["json"] }
rig-core = "0.35"
serde = { version = "1", features = ["derive"] }
serde_json = "1"
wide = "1.2"
tracing-subscriber = { version = "0.3", features = ["env-filter", "fmt"] }
chrono = { version = "0.4", features = ["serde"] }
tokio = { version = "1.52.1", features = ["macros", "sync", "time", "rt-multi-thread", "signal"] }
[[example]]
name = "ai_workflow_yes_and"
path = "examples/ai_workflow_yes_and.rs"
[[example]]
name = "workflow_simple"
path = "examples/workflow_simple.rs"
[[example]]
name = "workflow_book_prepositions"
path = "examples/workflow_book_prepositions.rs"
[[example]]
name = "workflow_negotiation"
path = "examples/workflow_negotiation.rs"
[[example]]
name = "workflow_simd_matrix_pipeline"
path = "examples/workflow_simd_matrix_pipeline.rs"
[[example]]
name = "scheduler_scheduling"
path = "examples/scheduler_scheduling.rs"
required-features = ["scheduler"]
[[example]]
name = "scheduler_duration_scheduling"
path = "examples/scheduler_duration_scheduling.rs"
required-features = ["scheduler"]
[[example]]
name = "scheduler_graceful_shutdown"
path = "examples/scheduler_graceful_shutdown.rs"
required-features = ["scheduler"]
[[example]]
name = "scheduler_mixed_workflows"
path = "examples/scheduler_mixed_workflows.rs"
required-features = ["scheduler"]
[[example]]
name = "scheduler_book_prepositions"
path = "examples/scheduler_book_prepositions.rs"
required-features = ["scheduler"]
[[example]]
name = "scheduler_mapreduce_books"
path = "examples/scheduler_mapreduce_books.rs"
required-features = ["scheduler"]
[[example]]
name = "scheduler_backoff"
path = "examples/scheduler_backoff.rs"
required-features = ["scheduler"]
[[example]]
name = "tracing_demo"
path = "examples/tracing_demo.rs"
required-features = ["tracing", "scheduler"]
[[example]]
name = "workflow_stack_store"
path = "examples/workflow_stack_store.rs"
[[example]]
name = "mixed_workflow"
path = "examples/mixed_workflow.rs"
[[example]]
name = "task_interface_demo"
path = "examples/task_interface_demo.rs"
[[example]]
name = "task_simple"
path = "examples/task_simple.rs"
[[example]]
name = "workflow_ad_exchange"
path = "examples/workflow_ad_exchange.rs"
[[example]]
name = "workflow_partial_results"
path = "examples/workflow_partial_results.rs"
[[example]]
name = "workflow_split_join"
path = "examples/workflow_split_join.rs"
[[example]]
name = "workflow_on_request"
path = "examples/workflow_on_request.rs"
[[example]]
name = "circuit_breaker"
path = "examples/circuit_breaker.rs"
[[bench]]
name = "workflow_performance"
harness = false
[[bench]]
name = "node_performance"
harness = false
[[bench]]
name = "store_performance"
harness = false
[[bench]]
name = "task_performance"
harness = false
[[bench]]
name = "store_shared_performance"
harness = false
[[bench]]
name = "resource_performance"
harness = false
[[bench]]
name = "circuit_performance"
harness = false