A distributed runtime. An open system. See it happen.

Distributed systems.
Watch them come alive.

Nodes find each other. A leader emerges. Work finds a home. Follow the messages that make a cluster tick — then try it for real.

SWIM MEMBERSHIP

Hello, cluster.

A seed is an introduction. Gossip carries membership through the rest of the cluster.

3 / 6peers discovered
How a six-node cluster worksAnimated messages connect three control plane nodes and three workers. The numbered explanation below describes each step. CONTROL PLANEWORKER POOL ◇ CP-01 Coordinator ◇ CP-02 Coordinator ◇ CP-03 Coordinator ⌘ W-01 Ready ⌘ W-02 Ready ⌘ W-03 Ready
Control planeWorkerShard assignment
ANIMATED CONCEPT · simplified messages and timing · no live session requiredNow see it in the real admin panel ↗
THE PRIMITIVES, CONNECTED.
Rust runtimeSWIM discoveryQUIC transportRaft consensusFjall storage
01 / Hands on

Less reading. More running.

Six real nodes. Your own temporary cluster.
Explore the system, then put it to the test.

Cluster playground

Checking availability…

Ready to explore

A small cluster. The full experience.

Launch three control plane nodes and three workers. Follow discovery, form a quorum, and explore the admin panel.

6 isolated nodesBrowser accessNo install needed
SESSION ACTIVITY
Waiting for your first launch.
02 / Inside the runtime

Built to work together.

The building blocks of a distributed system,
composed into a single supervised runtime.

/ 01MembershipEventHubService

Every service has a home.

A node supervises modular services. Typed events connect them through EventHub, with lifecycle and configuration in one place.

Node → Services → EventHub
/ 02ABCping → ack

Discovery without a registry.

SWIM gossip tracks membership while QUIC connects peers. Inspect the topology and observe node state as your cluster changes.

SWIM + QUIC
/ 03votevote…2 / 3 = majority

Coordination with consensus.

An embedded Raft control plane coordinates cluster metadata and shard placement. Local state lives in the Fjall storage engine.

OpenRaft + Fjall
03 / What you can build

What you can build with Aaron.

One set of primitives. Many possible systems. Bring your application logic; compose the runtime around it.

Data infrastructure/ 01
RequestShard routerWorker

Distributed key-value & cache engines

Build a partitioned key-value service, a persistent cache, or a storage layer for application state.

How Aaron powers it

Fjall stores local data. The control plane coordinates shard placement, while QUIC connects the services that route and handle requests.

  • Fjall storage
  • Shard placement
  • QUIC
At the edge/ 02
SensorsLocal bufferUpstream

Edge IoT & telemetry gateways

Collect sensor readings close to the source, buffer them locally, and build a service that forwards batches upstream.

How Aaron powers it

Combine embedded storage with supervised ingestion services and peer discovery. Your service decides when to retry, flush, and retain data.

  • Local buffering
  • SWIM discovery
  • Supervised services
Background compute/ 03
Job servicePlacementWorkers

Worker meshes & scheduled jobs

Distribute background jobs, media processing, or scheduled tasks across a pool of worker nodes.

How Aaron powers it

Membership tracks available peers and shard placement assigns service ownership. Build scheduling, job acknowledgements, and retries into your service.

  • Worker pools
  • Failure detection
  • Service placement
Shared experiences/ 04
PlayersSessionShared state

Multiplayer & collaborative state

Host game sessions, collaborative canvases, or shared rooms with a service instance responsible for each session.

How Aaron powers it

Supervised services own the session logic. QUIC carries messages between nodes, EventHub connects local services, and storage keeps application state.

  • Session services
  • QUIC streams
  • EventHub
Business state machines/ 05
CommandLedger serviceAudit record

Financial ledgers & settlement

Explore ledger services, bookkeeping workflows, and settlement coordinators with explicit application rules.

How Aaron powers it

Use local persistence, typed events, and cluster coordination as building blocks. Implement transaction invariants, audit records, and business-state replication in the application.

  • State machines
  • Local persistence
  • Typed events
Connected pipelines/ 06
IngestTransformDeliver

Event & media streaming pipelines

Compose ingestion, transformation, and delivery services for event processing or media workflows.

How Aaron powers it

EventHub connects stages within a node; QUIC connects nodes. Combine service placement with local keyspaces to build your buffering and delivery policies.

  • EventHub
  • QUIC transport
  • Partitioned keyspaces
07 / Use your imagination

Mix the primitives. Make it yours.

A standalone supervisor, a peer-to-peer mesh, or a stateful cluster: start with the services your system needs and add capabilities as it grows.

  • Discovery
  • Transport
  • Storage
  • Consensus
  • Supervision
  • Tracing
Start with a node →
04 / Start building

Your services.
One runtime.

Start with a node. Compose the services you need. Explore the existing code models for coordinators, workers, and standalone applications.

$ cargo add aaron

Browse examples on GitHub ↗

// 1. Primary Coordinator: OpenRaft Consensus, Shard Orchestrator & Admin Console
use aaron::{
    admin::AdminService,
    control_plane::ControlPlaneService,
    membership::MembershipService,
    shard::ShardService,
    tracing::TracingService,
    Node,
};

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    // Initialize cluster subsystems on documented default ports
    let (membership_svc, membership_handle) = MembershipService::pair();
    let (control_svc, control_handle) = ControlPlaneService::pair();
    let (shard_svc, shard_handle) = ShardService::coordinator(control_handle.clone());

    let node = Node::new("orders-coordinator")
        .with(membership_svc)                                              // SWIM Gossip on default port 7946
        .with(TracingService::new())                                       // Dynamic log filter reload
        .with(control_svc)                                                 // OpenRaft consensus RPC on port 18946
        .with(shard_svc)                                                   // Shard placement coordinator
        .with(
            AdminService::new()                                            // Embedded Admin Web UI on port 8080
                .with_membership_handle(membership_handle)
                .with_control_plane_handle(control_handle)
                .with_shard_handle(shard_handle),
        );

    println!("Orders coordinator online. Admin console available at http://127.0.0.1:8080");
    node.run().await?;
    Ok(())
}