| Crates.io | snurr |
| lib.rs | snurr |
| version | 0.13.0 |
| created_at | 2024-09-01 18:41:53.507618+00 |
| updated_at | 2025-09-20 14:01:20.951122+00 |
| description | Read BPMN 2.0 files and run the process flow |
| homepage | |
| repository | https://github.com/sajox/snurr |
| max_upload_size | |
| id | 1359813 |
| size | 103,182 |
Snurr can run the process flow from a Business Process Model and Notation (BPMN) 2.0 file created by https://demo.bpmn.io/new.
Read the Snurr documentation and explore the tests folder for more examples.
NOTE: To view or edit BPMN files in your project you can use the BPMN Editor plugin in VS Code.

BPMN diagram used in example.

[dependencies]
snurr = "0.13"
log = "0.4"
pretty_env_logger = "0.5"
use snurr::Process;
extern crate pretty_env_logger;
#[derive(Debug, Default)]
struct Counter {
count: u32,
}
fn main() -> Result<(), Box<dyn std::error::Error>> {
pretty_env_logger::init();
let bpmn = Process::<Counter>::new("examples/example.bpmn")?
.task("Count 1", |input| {
input.lock().unwrap().count += 1;
None
})
.exclusive("equal to 3", |input| {
match input.lock().unwrap().count {
3 => "YES",
_ => "NO",
}
.into()
})
.build()?;
let counter = bpmn.run(Counter::default())?;
println!("Count: {}", counter.count);
Ok(())
}
If RUST_LOG=info is set when running example
INFO snurr::process::engine > Start: Begin process
INFO snurr::process::engine > SequenceFlow: count
INFO snurr::process::engine > Task: Count 1
INFO snurr::process::engine > SequenceFlow: control
INFO snurr::process::engine > Exclusive: equal to 3
INFO snurr::process::engine > SequenceFlow: NO
INFO snurr::process::engine > Task: Count 1
INFO snurr::process::engine > SequenceFlow: control
INFO snurr::process::engine > Exclusive: equal to 3
INFO snurr::process::engine > SequenceFlow: NO
INFO snurr::process::engine > Task: Count 1
INFO snurr::process::engine > SequenceFlow: control
INFO snurr::process::engine > Exclusive: equal to 3
INFO snurr::process::engine > SequenceFlow: YES
INFO snurr::process::engine > End: End process
Count: 3
Run or copy the simple.rs in the examples folder
RUST_LOG=info cargo run --example simple