# Marigold
[](https://crates.io/crates/marigold)
[](https://docs.rs/marigold)
[](https://github.com/DominicBurkart/marigold/actions/workflows/tests.yaml)
[](https://github.com/DominicBurkart/marigold/actions/workflows/bench.yaml)
[](https://github.com/DominicBurkart/marigold/actions/workflows/style.yaml)
[](https://github.com/DominicBurkart/marigold/actions/workflows/wasm.yaml)
[](https://github.com/DominicBurkart/marigold)
Marigold is a domain-specific language for streaming data pipelining and
analysis. Marigold compiles to asynchronous Rust, and can be accessed in a
macro:
```rust
use marigold::m;
let is_odd = |i: &i32| i % 2 == 1;
let odd_digits = m!(
range(0, 10)
.filter(is_odd)
.to_vec()
.return
).await;
println!("{:?}", odd_digits); // [1, 3, 5, 7, 9]
```
## Runtimes
By default, Marigold works in a single future and can work with any runtime.
The `tokio` and `async-std` features allow Marigold to spawn additional tasks,
enabling parallelism for multithreaded runtimes.
Marigold supports async tracing, e.g. with tokio-console.
## Platforms
Marigold's CI builds against aarch64, arm, WASM, and x86 targets, and builds
the x86 target in mac and windows environments.