# Datum
🪼 - Just "Stream" anything :]
Datum is a Rust stream processing library scaffolded around Ractor actors and a push-based stream abstraction. The compatibility target is Akka/Pekko Streams Typed API shape and behavior, with Rust-native ownership, async, and benchmarking constraints.
## Install
Add Datum to your project from crates.io:
```sh
cargo add datum-core
```
Or in `Cargo.toml`:
```toml
[dependencies]
datum-core = "0.3"
```
> **Note:** The package is published as `datum-core` (the name `datum` is taken on crates.io), but
> the import path stays `use datum::…` — the crate's library name is `datum`.
To track an unreleased commit instead:
```toml
[dependencies]
datum-core = { git = "https://github.com/Aethergrids/Datum", tag = "v0.3.0" }
```
## Upstream References
- Ractor crate: `0.15.13`
- Optional Ractor cluster crate: `0.15.13`, enabled with `--features cluster`
- Akka source submodule: `third_party/akka`, tracking upstream `main` and pinned in this repository at commit `58f1f6db2e505e87f5dc115ee9476833872e7ae0`
- Latest stable Akka tag observed during setup: `v2.10.18`
## Development
```sh
cargo test
cargo check --benches
cargo bench --bench push_baseline
cargo bench --bench source_flow
cargo bench --bench materialization
cargo bench --bench graph
cargo bench --bench actor_ask
benches/actor_ask_compare/run.sh
```
```rust
use datum::{Sink, Source};
let sum = Source::from_iter(0_u64..1_000)
.map(|item| item + 1)
.filter(|item| item % 2 == 0)
.run_with(Sink::fold(0_u64, |acc, item| acc + item))
.unwrap()
.wait()
.unwrap();
```
## Benchmarks
Datum is benchmarked head-to-head against warmed Akka/Pekko Streams across four areas — Source/Flow, materialization, graph/junctions, and actor ask. Datum wins or ties on most paths; honest per-path numbers (including below-parity rows) are in the result tables under `roadmap/benchmarks/`. The harness adds a `Datum CPU us/op` column on purpose: some wins come partly from busy-spinning while Akka parks — a real cost the wall-clock number hides.
Run a comparison (requires a JDK + `sbt`); each runner writes a rendered table under `target/<area>-comparison/`:
```sh
benches/source_flow_compare/run.sh
benches/materialization_compare/run.sh
benches/graph_compare/run.sh
benches/actor_ask_compare/run.sh
```
Current result tables, the per-operator coverage matrix, and apples-to-apples caveats:
- `roadmap/benchmarks/source-flow.md`
- `roadmap/benchmarks/materialization.md`
- `roadmap/benchmarks/graph.md`
- `roadmap/benchmarks/actor-ask.md`
- `roadmap/M1-v0.1.0-foundation.md` — coverage matrix, optimization status & apples-to-apples caveats
- `roadmap/M2-v0.2.0-akka-streams-parity.md` — the forward roadmap (full Akka topic/operator plan)
See [`roadmap/`](roadmap/README.md) for the full milestone roadmap. User documentation is the published VitePress site (Cloudflare Pages); `docs/` holds its source. `roadmap/` holds internal planning and benchmark records.