Skip to main content

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

Project description

atomr

A native Rust runtime for actor-based concurrent and distributed systems, with first-class Python bindings. atomr 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 atomr::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. atomr 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. atomr 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
atomr Umbrella facade re-exporting the core types
atomr-core Actors, supervision, dispatch, mailboxes, FSMs, event stream, coordinated shutdown
atomr-config HOCON-style layered configuration
atomr-macros Ergonomic derives and helpers
atomr-testkit Probes, virtual time, deterministic test scaffolding
atomr-remote Location-transparent messaging across processes (TCP + framed PDU + reliable delivery)
atomr-cluster Membership, gossip, reachability, split-brain resolution
atomr-cluster-tools Singleton, pub/sub, cluster-client patterns
atomr-cluster-sharding Shard regions, rebalance, remember-entities, persistent coordinator
atomr-cluster-metrics Adaptive load balancing
atomr-distributed-data Convergent replicated data types (CRDTs) over the cluster — OrMap, LWWMap, PNCounterMap, ORMultiMap, replicator subscribe
atomr-distributed-data-lmdb redb-backed DurableStore for distributed-data
atomr-persistence Event sourcing — journals, snapshots, recovery, async snapshotting, persistent FSM, ALOD
atomr-persistence-query Tagged event streams over journals
atomr-persistence-query-inmemory In-memory query journal for tests + samples
atomr-persistence-{sql,redis,mongodb,cassandra,aws,azure} Storage adapters (Postgres / MySQL / Redis / Mongo / Cassandra / DynamoDB / Azurite)
atomr-persistence-tck Conformance suite — journal_replay_edge_cases, snapshot_extended_suite, concurrent + extended journal suites
atomr-streams Typed reactive streams (sources, flows, sinks, junctions, hubs, kill switches, sub-streams, conflate/expand, merge_sorted/merge_prioritized, queue/restart)
atomr-serialization-hyperion Hyperion-compatible serializer surface
atomr-coordination Lease-based leadership primitives
atomr-discovery Pluggable service discovery
atomr-di Dependency-injection container
atomr-hosting Builder API for wiring system + config + DI together
atomr-telemetry Tracing, metrics, exporters
atomr-dashboard Live web UI over the running system

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

Test coverage

atomr ships ~545 lib tests plus ~420 integration tests across the workspace. Subsystem coverage includes:

  • Cluster. Vector clock, member ordering, reachability, cluster events, gossip, SBR strategies, heartbeat, membership state, plus a LeaderHandover watcher and a multinode harness.
  • Cluster tools / sharding. Singleton, ClusterClient, distributed PubSub, shard allocation + handoff, at-least-once-delivery.
  • Distributed data. OrMap / LWWMap / PNCounterMap / ORMultiMap, CRDT laws, replicator subscribe, three-node convergence suites, redb-backed durable store (atomr-distributed-data-lmdb).
  • Persistence. PersistentFSM, EventSourced, ALOD, snapshot retention, plus the TCK's journal_replay_edge_cases and snapshot_extended_suite exercised against every backend (Postgres, MySQL, Redis, MongoDB, Cassandra, DynamoDB, Azurite, redb) in CI.
  • Streams. FlowOperator, Hub, SubStream, Recovery, conflate / expand, merge_sorted / merge_prioritized, Queue / Restart.
  • Core runtime. Scheduler, Stash, Extensions, Lifecycle, IO managers (TcpManager outbound Connect + IO coverage), ActorPath / Address, FailureDetector, EndpointState, Routing.
  • Hosting / DI / lease. ServiceContainer, Hosting builder, Lease.
  • Out-of-process multinode. MultiNodeOopController and MultiNodeOopNode drive cross-process scenarios from the testkit.

Quick start (Rust)

The umbrella crate is published on crates.io as atomr:

[dependencies]
atomr = { version = "0.1", features = ["cluster", "persistence"] }

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

use atomr::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 atomr
from atomr 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

atomr 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 atomr-profiler -- --scenario all --format md
python -m atomr.profiler --scenario all --format md

See docs/profiler.md.

Layout

crates/                 Rust workspace
crates/py-bindings/     PyO3 bridge crates
python/atomr/           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

atomr-0.3.1.tar.gz (503.4 kB view details)

Uploaded Source

Built Distributions

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

atomr-0.3.1-cp310-abi3-win_amd64.whl (3.5 MB view details)

Uploaded CPython 3.10+Windows x86-64

atomr-0.3.1-cp310-abi3-musllinux_1_2_x86_64.whl (3.6 MB view details)

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

atomr-0.3.1-cp310-abi3-musllinux_1_2_aarch64.whl (3.4 MB view details)

Uploaded CPython 3.10+musllinux: musl 1.2+ ARM64

atomr-0.3.1-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (3.4 MB view details)

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

atomr-0.3.1-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (3.2 MB view details)

Uploaded CPython 3.10+manylinux: glibc 2.17+ ARM64

atomr-0.3.1-cp310-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl (6.3 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 atomr-0.3.1.tar.gz.

File metadata

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

File hashes

Hashes for atomr-0.3.1.tar.gz
Algorithm Hash digest
SHA256 f5b82f10b5b3fb87d6f4c277f3384f1a8673e65c9271e3e37b56029d5c3acdb1
MD5 7843093021c2af0d41eeb09c60d25ffe
BLAKE2b-256 b17425ef8c06afcc948c28471f6744bce826f58639cf0e64c1d753e86de49932

See more details on using hashes here.

Provenance

The following attestation bundles were made for atomr-0.3.1.tar.gz:

Publisher: release.yml on rustakka/atomr

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

File details

Details for the file atomr-0.3.1-cp310-abi3-win_amd64.whl.

File metadata

  • Download URL: atomr-0.3.1-cp310-abi3-win_amd64.whl
  • Upload date:
  • Size: 3.5 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 atomr-0.3.1-cp310-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 8f9f6710f4201a8d4be13998ffa11fc023e75c46756d588c8f25a420cd9953aa
MD5 44f89cead3ec689d340ae48854ad934a
BLAKE2b-256 7e11abdcfd43c392708aa2bec498ea46a1c624aca27c7762af97d829fa363c87

See more details on using hashes here.

Provenance

The following attestation bundles were made for atomr-0.3.1-cp310-abi3-win_amd64.whl:

Publisher: release.yml on rustakka/atomr

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

File details

Details for the file atomr-0.3.1-cp310-abi3-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for atomr-0.3.1-cp310-abi3-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 0af3ce4f8ced01f1942a3227f9830f932cc1de7073c220f0446aab29dfedbaf9
MD5 68c1f39eceab8c6009bada0ad64170e6
BLAKE2b-256 e75fd13e8bee9be01268182bcde63ab7752bd26a0686b5735c08e2b38b033036

See more details on using hashes here.

Provenance

The following attestation bundles were made for atomr-0.3.1-cp310-abi3-musllinux_1_2_x86_64.whl:

Publisher: release.yml on rustakka/atomr

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

File details

Details for the file atomr-0.3.1-cp310-abi3-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for atomr-0.3.1-cp310-abi3-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 c49c9775765fef112033ce994b33f8d054b98fcdcf7c457623580852b6fcea86
MD5 e41530130b0dd6081b78cca9338d6c10
BLAKE2b-256 0fddb57382b70c17ae592fb04ca518d584cbe044ccbfc0974c7d8d1ba7eede68

See more details on using hashes here.

Provenance

The following attestation bundles were made for atomr-0.3.1-cp310-abi3-musllinux_1_2_aarch64.whl:

Publisher: release.yml on rustakka/atomr

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

File details

Details for the file atomr-0.3.1-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for atomr-0.3.1-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 63f981ec60eb9ca4ddf3e1efd2599146c45fe6bd76ce1b0194b74932ec5225c7
MD5 32af6134df32e99894ab175239e4caae
BLAKE2b-256 1e43203203d5e279bba46e0820ce8e69643e9d3f36a5cceb9cc9e3c842b9afb7

See more details on using hashes here.

Provenance

The following attestation bundles were made for atomr-0.3.1-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: release.yml on rustakka/atomr

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

File details

Details for the file atomr-0.3.1-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for atomr-0.3.1-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 dfdb3c1454ebbb719762cf8c1a2710f9ac6c4f5f38feff8ceae410ecc5d74daa
MD5 291d8d345577beffab727e90ded27722
BLAKE2b-256 1258ca2ca71b05e4a26f85536c4898694420bd6f868f9b1a44bb68985977dc4f

See more details on using hashes here.

Provenance

The following attestation bundles were made for atomr-0.3.1-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:

Publisher: release.yml on rustakka/atomr

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

File details

Details for the file atomr-0.3.1-cp310-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl.

File metadata

File hashes

Hashes for atomr-0.3.1-cp310-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl
Algorithm Hash digest
SHA256 d4eeb6cc81aa2c8b665d7103647f2f1b0abb761dce492fefc98f9984c9774591
MD5 b10b5b191035294d6a8a57f73c731be4
BLAKE2b-256 f4d6136880c571a56dadd2b04186b7be49cb7028937219d0919a97f8f1538b5e

See more details on using hashes here.

Provenance

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

Publisher: release.yml on rustakka/atomr

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