datum-core 0.3.0

Rust stream-processing library mirroring Akka/Pekko Streams Typed, built on Ractor actors
Documentation

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:

cargo add datum-core

Or in Cargo.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:

[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

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
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/:

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/ 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.