[package]
edition = "2024"
rust-version = "1.89.0"
name = "cano"
version = "0.13.2"
authors = ["Nassor Frazier-Silva <nassor@gmail.com>"]
build = false
autolib = false
autobins = false
autoexamples = false
autotests = false
autobenches = false
description = "High-performance orchestration engine for building resilient, self-healing systems in Rust. Uses Finite State Machines (FSM) for strict, type-safe transitions."
homepage = "https://nassor.github.io/cano/"
readme = "README.md"
keywords = [
"ai",
"async",
"workflow",
"data-processing",
"scheduler",
]
categories = [
"finance",
"development-tools",
"concurrency",
"asynchronous",
"science",
]
license = "MIT OR Apache-2.0"
repository = "https://github.com/nassor/cano"
[features]
all = [
"scheduler",
"tracing",
"recovery",
"metrics",
]
metrics = ["dep:metrics"]
recovery = [
"dep:redb",
"dep:postcard",
]
scheduler = [
"dep:chrono",
"dep:cron",
"tokio/signal",
]
tracing = ["dep:tracing"]
[lib]
name = "cano"
path = "src/lib.rs"
[[bin]]
name = "recovery_resume"
path = "src/bin/recovery_resume.rs"
required-features = ["recovery"]
[[bin]]
name = "stepped_resume"
path = "src/bin/stepped_resume.rs"
required-features = ["recovery"]
[[example]]
name = "ai_workflow_yes_and"
path = "examples/ai_workflow_yes_and.rs"
[[example]]
name = "batch_task"
path = "examples/batch_task.rs"
[[example]]
name = "circuit_breaker"
path = "examples/circuit_breaker.rs"
[[example]]
name = "circuit_breaker_manual"
path = "examples/circuit_breaker_manual.rs"
[[example]]
name = "custom_checkpoint_store"
path = "examples/custom_checkpoint_store.rs"
[[example]]
name = "join_strategies"
path = "examples/join_strategies.rs"
[[example]]
name = "metrics_demo"
path = "examples/metrics_demo.rs"
required-features = [
"metrics",
"scheduler",
]
[[example]]
name = "metrics_tracing_context"
path = "examples/metrics_tracing_context.rs"
required-features = [
"metrics",
"tracing",
]
[[example]]
name = "mixed_workflow"
path = "examples/mixed_workflow.rs"
[[example]]
name = "observer_metrics"
path = "examples/observer_metrics.rs"
[[example]]
name = "panic_safety"
path = "examples/panic_safety.rs"
[[example]]
name = "poll_retry_on_error"
path = "examples/poll_retry_on_error.rs"
[[example]]
name = "poll_task"
path = "examples/poll_task.rs"
[[example]]
name = "processing_models_tour"
path = "examples/processing_models_tour.rs"
required-features = ["recovery"]
[[example]]
name = "resources_advanced"
path = "examples/resources_advanced.rs"
[[example]]
name = "router_task"
path = "examples/router_task.rs"
[[example]]
name = "saga_payment"
path = "examples/saga_payment.rs"
[[example]]
name = "saga_recovery"
path = "examples/saga_recovery.rs"
required-features = ["recovery"]
[[example]]
name = "scheduler_backoff"
path = "examples/scheduler_backoff.rs"
required-features = ["scheduler"]
[[example]]
name = "scheduler_book_prepositions"
path = "examples/scheduler_book_prepositions.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_mapreduce_books"
path = "examples/scheduler_mapreduce_books.rs"
required-features = ["scheduler"]
[[example]]
name = "scheduler_mixed_workflows"
path = "examples/scheduler_mixed_workflows.rs"
required-features = ["scheduler"]
[[example]]
name = "scheduler_scheduling"
path = "examples/scheduler_scheduling.rs"
required-features = ["scheduler"]
[[example]]
name = "split_bulkhead"
path = "examples/split_bulkhead.rs"
[[example]]
name = "stepped_task"
path = "examples/stepped_task.rs"
required-features = ["recovery"]
[[example]]
name = "store_custom_backend"
path = "examples/store_custom_backend.rs"
[[example]]
name = "task_interface_demo"
path = "examples/task_interface_demo.rs"
[[example]]
name = "task_simple"
path = "examples/task_simple.rs"
[[example]]
name = "tracing_demo"
path = "examples/tracing_demo.rs"
required-features = [
"tracing",
"scheduler",
]
[[example]]
name = "workflow_ad_exchange"
path = "examples/workflow_ad_exchange.rs"
[[example]]
name = "workflow_bare"
path = "examples/workflow_bare.rs"
[[example]]
name = "workflow_book_prepositions"
path = "examples/workflow_book_prepositions.rs"
[[example]]
name = "workflow_negotiation"
path = "examples/workflow_negotiation.rs"
[[example]]
name = "workflow_observer"
path = "examples/workflow_observer.rs"
[[example]]
name = "workflow_on_request"
path = "examples/workflow_on_request.rs"
[[example]]
name = "workflow_partial_results"
path = "examples/workflow_partial_results.rs"
[[example]]
name = "workflow_recovery"
path = "examples/workflow_recovery.rs"
required-features = ["recovery"]
[[example]]
name = "workflow_resources"
path = "examples/workflow_resources.rs"
[[example]]
name = "workflow_simd_matrix_pipeline"
path = "examples/workflow_simd_matrix_pipeline.rs"
[[example]]
name = "workflow_simple"
path = "examples/workflow_simple.rs"
[[example]]
name = "workflow_split_join"
path = "examples/workflow_split_join.rs"
[[example]]
name = "workflow_stack_store"
path = "examples/workflow_stack_store.rs"
[[example]]
name = "workflow_validation"
path = "examples/workflow_validation.rs"
[[test]]
name = "recovery_e2e"
path = "tests/recovery_e2e.rs"
[[test]]
name = "recovery_hardening"
path = "tests/recovery_hardening.rs"
[[test]]
name = "recovery_version_compat"
path = "tests/recovery_version_compat.rs"
[[test]]
name = "saga_hardening"
path = "tests/saga_hardening.rs"
[[test]]
name = "stepped_resume_e2e"
path = "tests/stepped_resume_e2e.rs"
[[test]]
name = "tracing_tests"
path = "tests/tracing_tests.rs"
[[bench]]
name = "circuit_performance"
path = "benches/circuit_performance.rs"
harness = false
[[bench]]
name = "resource_performance"
path = "benches/resource_performance.rs"
harness = false
[[bench]]
name = "store_performance"
path = "benches/store_performance.rs"
harness = false
[[bench]]
name = "store_shared_performance"
path = "benches/store_shared_performance.rs"
harness = false
[[bench]]
name = "task_performance"
path = "benches/task_performance.rs"
harness = false
[[bench]]
name = "workflow_performance"
path = "benches/workflow_performance.rs"
harness = false
[dependencies.cano-macros]
version = "0.13"
[dependencies.chrono]
version = "0.4"
features = ["serde"]
optional = true
[dependencies.cron]
version = "0.16"
optional = true
[dependencies.futures-util]
version = "0.3"
[dependencies.metrics]
version = "0.24.5"
optional = true
[dependencies.parking_lot]
version = "0.12"
[dependencies.postcard]
version = "1"
features = ["use-std"]
optional = true
[dependencies.rand]
version = "0.10"
[dependencies.redb]
version = "4.1"
optional = true
[dependencies.serde]
version = "1"
features = ["derive"]
[dependencies.serde_json]
version = "1"
[dependencies.tokio]
version = "1.52.1"
features = [
"macros",
"sync",
"time",
"rt-multi-thread",
]
[dependencies.tracing]
version = "0.1"
optional = true
[dev-dependencies.axum]
version = "0.8.9"
[dev-dependencies.chrono]
version = "0.4"
features = ["serde"]
[dev-dependencies.criterion]
version = "0.8"
features = [
"html_reports",
"async_tokio",
]
[dev-dependencies.metrics-tracing-context]
version = "0.18.1"
[dev-dependencies.metrics-util]
version = "0.20.3"
features = ["debugging"]
[dev-dependencies.redb]
version = "4.1"
[dev-dependencies.reqwest]
version = "0.13"
features = ["json"]
[dev-dependencies.rig-core]
version = "0.36.0"
[dev-dependencies.serde]
version = "1"
features = ["derive"]
[dev-dependencies.serde_json]
version = "1"
[dev-dependencies.tempfile]
version = "3"
[dev-dependencies.tokio]
version = "1.52.1"
features = [
"macros",
"sync",
"time",
"rt-multi-thread",
"signal",
]
[dev-dependencies.tracing-subscriber]
version = "0.3"
features = [
"env-filter",
"fmt",
]
[dev-dependencies.wide]
version = "1.2"