12 releases
Uses new Rust 2024
| 0.1.11 | Dec 19, 2025 |
|---|---|
| 0.1.10 | Sep 28, 2025 |
#1241 in Concurrency
24KB
661 lines
Ascolt
Async runtime-agnostic actor framework
Features
- Clean type-safe syntax
- Async support
- Both unbounded and bounded channels supported
- Handler errors can trigger actor stop, forced stop, or restart (behavior is customizable)
- No heavy macros
- No unsafe code
Examples
let first_actor = FirstActor {};
let (first_actor_tx, first_actor_rx) = ascolt::bounded_channel(100);
let second_actor = SecondActor { first_actor_tx };
let (second_actor_tx, second_actor_rx) = ascolt::bounded_channel(100);
// if using tokio runtime
tokio::spawn(ascolt::run(actor, first_actor_rx));
tokio::spawn(ascolt::run(second_actor, second_actor_rx));
first_actor_tx.tell(SomeRequest { number: 3 })
.await?; // fire-and-forget
let result = second_actor_tx
.ask(SecondActorCalcRequest(10))
.await?; // request-response
println!("Result: {}", result.0);
More examples located at examples directory.
What can be added
- Panic isolation
- Backpressure management
- Supervisor for controlling multiple actors
- Dependency graph (e.g., automatically shut down actors when the actors they depend on stop)
- Actor communication over the network
Alternatives
Dependencies
~5.5–8MB
~69K SLoC