Skip to main content

Typed, clustered actor framework for Python. Pure asyncio, zero dependencies.

Project description

Casty

Typed, clustered actor framework for Python

PyPI Python Tests License

Documentation · Getting Started · PyPI


Casty is a typed, clustered actor framework for Python built on asyncio. Instead of threads, locks, and shared mutable state, you model your system as independent actors that communicate exclusively through immutable messages, from a single process to a distributed cluster.

Quick Start

pip install casty
import asyncio
from dataclasses import dataclass
from casty import ActorContext, ActorSystem, Behavior, Behaviors

@dataclass(frozen=True)
class Greet:
    name: str

def greeter() -> Behavior[Greet]:
    async def receive(ctx: ActorContext[Greet], msg: Greet) -> Behavior[Greet]:
        print(f"Hello, {msg.name}!")
        return Behaviors.same()

    return Behaviors.receive(receive)

async def main() -> None:
    async with ActorSystem() as system:
        ref = system.spawn(greeter(), "greeter")
        ref.tell(Greet("Alice"))
        ref.tell(Greet("Bob"))
        await asyncio.sleep(0.1)

asyncio.run(main())
# Hello, Alice!
# Hello, Bob!

Features

  • Behaviors as values, not classes — No Actor base class. Behaviors are frozen dataclasses composed through factory functions.
  • State via closures — Actor state is captured in closures. State transitions happen by returning a new behavior with new closed-over values. No mutable fields, no nonlocal.
  • Immutability by default — All messages, behaviors, events, and configurations are frozen dataclasses.
  • Type-safe end-to-endActorRef[M], Behavior[M], and PEP 695 type aliases ensure message type mismatches are caught at development time.
  • Zero external dependencies — Pure Python, stdlib only.
  • Supervision — "Let it crash" philosophy with configurable restart strategies, inspired by Erlang/OTP.
  • Event sourcing — Persist actor state as a sequence of events with automatic recovery on restart.
  • Cluster sharding — Distribute actors across nodes with gossip-based membership, phi accrual failure detection, and automatic shard rebalancing.
  • Shard replication — Passive replicas with automatic promotion on node failure.
  • Cluster broadcast — Fan-out messages to all nodes with typesafe aggregated responses.
  • Distributed data structures — Counter, Dict, Set, Queue, Lock, Semaphore, and Barrier built on sharded actors.
  • TOML configuration — Optional casty.toml for environment-specific tuning with per-actor overrides.

Documentation

Full documentation is available at gabfssilva.github.io/casty.

Section Description
Getting Started Installation and first steps
Concepts Actors, behaviors, state, request-reply, hierarchies, supervision, state machines
Persistence Event sourcing with journals and snapshots
Clustering Sharding, broadcast, replication, distributed data structures
Configuration TOML-based configuration with per-actor overrides
API Reference Complete API documentation

Acknowledgments

Casty builds on the actor model (Hewitt, 1973), Erlang/OTP's supervision philosophy, Akka Typed's functional behavior API, and distributed systems research including phi accrual failure detection, gossip protocols, CRDTs, and vector clocks. See the full Acknowledgments page for details and references.

Contributing

git clone https://github.com/gabfssilva/casty
cd casty
uv sync
uv run pytest                    # run tests
uv run pyright src/casty/        # type checking (strict mode)
uv run ruff check src/ tests/    # lint
uv run ruff format src/ tests/   # format

License

MIT — see LICENSE for details.

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

casty-0.12.0.tar.gz (1.2 MB view details)

Uploaded Source

Built Distribution

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

casty-0.12.0-py3-none-any.whl (97.0 kB view details)

Uploaded Python 3

File details

Details for the file casty-0.12.0.tar.gz.

File metadata

  • Download URL: casty-0.12.0.tar.gz
  • Upload date:
  • Size: 1.2 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for casty-0.12.0.tar.gz
Algorithm Hash digest
SHA256 266bd54e0667f9c1318f1695fac375f9b0ebdc060f5de16eb6c7cb66abc0ab6c
MD5 f5672e2b635fc421cd813d2586d323ad
BLAKE2b-256 a175340038bc994316308dc6944f6de70938b66b91212ccc6aa2b5d9818e1aff

See more details on using hashes here.

Provenance

The following attestation bundles were made for casty-0.12.0.tar.gz:

Publisher: publish.yml on gabfssilva/casty

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

File details

Details for the file casty-0.12.0-py3-none-any.whl.

File metadata

  • Download URL: casty-0.12.0-py3-none-any.whl
  • Upload date:
  • Size: 97.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for casty-0.12.0-py3-none-any.whl
Algorithm Hash digest
SHA256 6ad4edcfaaf90c75e6a43048beb290ca64fad10b4f631ffcb6e1220367690f0e
MD5 dd893efe3662288969a05a775c7898b1
BLAKE2b-256 3f3c39443aabb2009161b7f058e1d14d78a7bb5f49b4b5988bdaf459fbdd7f74

See more details on using hashes here.

Provenance

The following attestation bundles were made for casty-0.12.0-py3-none-any.whl:

Publisher: publish.yml on gabfssilva/casty

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