Skip to main content

Native Rust actor runtime with Python bindings — supervised concurrency from one core to a cluster.

Project description

rakka

A native Rust runtime for actor-based concurrent and distributed systems, with first-class Python bindings. rakka gives you a single mental model — addressable units of state plus behavior, communicating by asynchronous messages — that scales from a single core to a cluster, and increasingly from a CPU to a GPU.

use rakka::prelude::*;

#[derive(Default)]
struct Greeter;

#[async_trait::async_trait]
impl Actor for Greeter {
    type Msg = String;
    async fn handle(&mut self, _ctx: &mut Context<Self>, msg: String) {
        println!("hi {msg}");
    }
}

Why an actor runtime, in Rust, now

The actor model is the same idea wherever it runs: a small, addressable unit of state plus behavior, talking to other actors by asynchronous message passing. That model is a good fit for two converging trends.

Agentic systems. Long-lived, autonomous, collaborating processes that reason, call tools, and coordinate are exactly what supervised, addressable actors describe. Each agent is an actor; conversations are mailboxes; tool calls are typed messages; failure is supervised, not silently swallowed. rakka gives that model a runtime that doesn't trade performance for safety.

Unified compute. Modern workloads no longer live entirely on the CPU. Inference, embedding, scoring, simulation — they want a GPU. Coordination, control flow, I/O, persistence — they want a CPU. Today's stacks force you to glue the two with ad-hoc batching layers, queues, and serialization boundaries. The actor model already encodes the right boundary: a message is the dispatch unit. rakka is built so that the same actor_ref.tell(msg) can target a CPU mailbox today and a CUDA-backed dispatcher tomorrow — with the same supervision, the same backpressure, the same observability. The runtime is explicit about where work runs without forcing the developer to write two programs.

Granular efficiency. Rust gives us deterministic resource use, zero-cost abstractions, and ownership-as-concurrency-safety. Per-message cost stays low. Per-actor footprint stays small. The scheduler can hand work to a tokio worker, a dedicated dispatcher, or — by design — a GPU stream, without changing the message contract. That same precision lets the runtime push backpressure, mailboxes, and supervision down to a level where they don't need to be rebuilt at every layer above.

A longer argument is in docs/actors-and-agentic-computing.md.

What's in the box

Crate What it does
rakka Umbrella facade re-exporting the core types
rakka-core Actors, supervision, dispatch, mailboxes, FSMs, event stream, coordinated shutdown
rakka-config HOCON-style layered configuration
rakka-macros Ergonomic derives and helpers
rakka-testkit Probes, virtual time, deterministic test scaffolding
rakka-remote Location-transparent messaging across processes (TCP + framed PDU + reliable delivery)
rakka-cluster Membership, gossip, reachability, split-brain resolution
rakka-cluster-tools Singleton, pub/sub, cluster-client patterns
rakka-cluster-sharding Shard regions, rebalance, remember-entities, persistent coordinator
rakka-cluster-metrics Adaptive load balancing
rakka-distributed-data Convergent replicated data types (CRDTs) over the cluster
rakka-persistence Event sourcing — journals, snapshots, recovery, async snapshotting
rakka-persistence-query Tagged event streams over journals
rakka-persistence-{sql,redis,mongodb,cassandra,aws,azure} Storage adapters
rakka-persistence-tck Conformance suite for journal + snapshot implementations
rakka-streams Typed reactive streams (sources, flows, sinks, junctions, hubs, kill switches)
rakka-coordination Lease-based leadership primitives
rakka-discovery Pluggable service discovery
rakka-di Dependency-injection container
rakka-hosting Builder API for wiring system + config + DI together
rakka-telemetry Tracing, metrics, exporters
rakka-dashboard Live web UI over the running system

Plus a Python facade — pip install rakka — that exposes the same actor model with GIL-isolated interpreter pools for CPU-bound work and async-native tell / ask.

Quick start (Rust)

The umbrella crate is published on crates.io as rakka-rs (the short name rakka is already taken by an unrelated, dormant crate). Cargo's package alias keeps the import name rakka:

[dependencies]
rakka = { package = "rakka-rs", version = "0.2", features = ["cluster", "persistence"] }

Or pull in subsystem crates directly — rakka-core, rakka-cluster, rakka-persistence, rakka-streams, etc. are all on crates.io.

use rakka::prelude::*;

#[derive(Default)]
struct Greeter;

#[async_trait::async_trait]
impl Actor for Greeter {
    type Msg = String;
    async fn handle(&mut self, _ctx: &mut Context<Self>, msg: String) {
        println!("hi {msg}");
    }
}

# async fn run() -> Result<(), Box<dyn std::error::Error>> {
let system = ActorSystem::create("S", Config::empty()).await?;
let greeter = system.actor_of(Props::create(Greeter::default), "greeter")?;
greeter.tell("world".to_string());
system.terminate().await;
# Ok(()) }

Quick start (Python)

python -m venv .venv && source .venv/bin/activate
pip install rakka
from rakka import Actor, ActorSystem, props

class Greeter(Actor):
    async def handle(self, ctx, msg):
        return f"hello, {msg}"

system = ActorSystem.create_blocking("app")
ref = system.actor_of(props(Greeter), "greeter")
print(ref.ask_blocking("world", timeout=5.0))   # -> "hello, world"
system.terminate_blocking()

See docs/python.md for the GIL-strategy guide (python-pinned, python-subinterpreter-pool per PEP 684, python-nogil per PEP 703, python-subprocess) and the C-extension compatibility registry.

Building from source

# Rust
cargo build --workspace
cargo test --workspace

# Python bindings (requires maturin + a Python dev toolchain)
maturin develop --release
pytest python/tests -v

# Docs (optional)
pip install mkdocs-material
mkdocs serve

Profiling

rakka ships with a cross-runtime profiler that measures the same four scenarios (tell, ask, fanout, cpu) in Rust and Python and emits a shared JSON schema so the two paths can be compared directly.

cargo run --release -p rakka-profiler -- --scenario all --format md
python -m rakka.profiler --scenario all --format md

See docs/profiler.md.

Layout

crates/                 Rust workspace
crates/py-bindings/     PyO3 bridge crates
python/rakka/           Python package
python/tests/           Python integration tests
examples/               Runnable Rust examples
benches/                Criterion benches
scripts/                Cross-runtime tooling
docs/                   mkdocs-material source
xtask/                  Cargo xtask (audit, profile, bump, verify)

Learn more

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

rakka-0.2.1.tar.gz (409.2 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

rakka-0.2.1-cp310-abi3-win_amd64.whl (2.7 MB view details)

Uploaded CPython 3.10+Windows x86-64

rakka-0.2.1-cp310-abi3-musllinux_1_2_x86_64.whl (2.9 MB view details)

Uploaded CPython 3.10+musllinux: musl 1.2+ x86-64

rakka-0.2.1-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.7 MB view details)

Uploaded CPython 3.10+manylinux: glibc 2.17+ x86-64

rakka-0.2.1-cp310-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl (5.0 MB view details)

Uploaded CPython 3.10+macOS 10.12+ universal2 (ARM64, x86-64)macOS 10.12+ x86-64macOS 11.0+ ARM64

File details

Details for the file rakka-0.2.1.tar.gz.

File metadata

  • Download URL: rakka-0.2.1.tar.gz
  • Upload date:
  • Size: 409.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for rakka-0.2.1.tar.gz
Algorithm Hash digest
SHA256 487582375db4170fd91e69cd0e3d19c65497258547bae3769ff3ca267f699575
MD5 df4f88b05cc7432fa3159261ed9dc40e
BLAKE2b-256 a45a1eb0ccdc685a017e7051f6bdeff9e1754622b41c94ca0c778c477878fa58

See more details on using hashes here.

Provenance

The following attestation bundles were made for rakka-0.2.1.tar.gz:

Publisher: release.yml on rustakka/rakka

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file rakka-0.2.1-cp310-abi3-win_amd64.whl.

File metadata

  • Download URL: rakka-0.2.1-cp310-abi3-win_amd64.whl
  • Upload date:
  • Size: 2.7 MB
  • Tags: CPython 3.10+, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for rakka-0.2.1-cp310-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 13872a1ec23333c065e96750e1bcecd5bab2f71003a001564bef058eb63581f1
MD5 85297257f3c7a7fed20a652f701f12c9
BLAKE2b-256 ddce668e8feaaa3a9b0fdc0413939bfb24bc75f1a975eeb77894b2e006bc382a

See more details on using hashes here.

Provenance

The following attestation bundles were made for rakka-0.2.1-cp310-abi3-win_amd64.whl:

Publisher: release.yml on rustakka/rakka

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file rakka-0.2.1-cp310-abi3-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for rakka-0.2.1-cp310-abi3-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 fc67d027c241e30b0940c83fdeb90b6f510759787179bbde92a3dc9c5b7ebdf2
MD5 f999083e0a1c95ae213307b3d0449aec
BLAKE2b-256 5f858d542087b4fd99394867da9515fe62ca0aa89cbd8592218cf8b9fe08f475

See more details on using hashes here.

Provenance

The following attestation bundles were made for rakka-0.2.1-cp310-abi3-musllinux_1_2_x86_64.whl:

Publisher: release.yml on rustakka/rakka

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file rakka-0.2.1-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for rakka-0.2.1-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 7a12f39137fdeba464de31296b620b5538c370e92b6cf5aad6a2e07075ecc8a3
MD5 09400037560108f478a65b11b7c1aec4
BLAKE2b-256 62455b6669ea6eabc572b892bc94168cd870dc7994f531449b010a26814293d1

See more details on using hashes here.

Provenance

The following attestation bundles were made for rakka-0.2.1-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: release.yml on rustakka/rakka

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file rakka-0.2.1-cp310-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl.

File metadata

File hashes

Hashes for rakka-0.2.1-cp310-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl
Algorithm Hash digest
SHA256 ceaeedf736ca267101805213f9921d0d634cae6729e29dc8af661d78b87e33dc
MD5 66e7584b3925644397c500ec9bd1d57e
BLAKE2b-256 4a74e4097bd6e8cc683d45c47dab99c2d6510c9203c60f7de13922fd4c5e92ee

See more details on using hashes here.

Provenance

The following attestation bundles were made for rakka-0.2.1-cp310-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl:

Publisher: release.yml on rustakka/rakka

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page