A modern, type-safe async event bus for Rust applications built on Tokio.
// Create an event bus
let bus = EventBus::builder()
.with_metrics()
.build();
// Subscribe to events
bus.subscribe(|event: UserRegistered| async {
println!("New user: {}", event.email);
}).await?;
// Publish events
bus.publish(UserRegistered {
id: 123,
email: "user@example.com".into(),
}).await?;- Single instance shared across your application
- Provides
publish()andsubscribe()methods - Manages component lifecycle
- Maps event types to their subscribers
- Uses
TypeIdfor type-safe routing - Thread-safe using
DashMap
- MPSC channel for queuing events
- Worker thread processes events
- Configurable queue size and backpressure
- Stores active handlers
- Spawns async tasks for parallel execution
- Manages subscription lifecycle
publish(UserRegistered)
↓
Create EventEnvelope (type erasure)
↓
Send to channel (Arc wrap)
↓
Worker receives
↓
Lookup by TypeId → Find handlers
↓
Spawn tasks (parallel)
↓
Each handler:
- Downcast to UserRegistered
- Execute user function
- Update metrics
↓
Cleanup (Arc refcount → 0)

