The Message Knows the Way.
/ΛΙΛ.sjΙ/ — async actors π
Pure Python, zero dependencies. No SDK imports, no decorators, no framework coupling.
Test locally with assert process(state) == expected.
Deploy as a Kubernetes CRD. Asya injects the sidecar, creates the queue, configures KEDA autoscaling. Your code stays clean.
Built for AI/ML workloads that need independent scaling, fault isolation, and zero framework lock-in.
Choreography on Kubernetes — no central orchestrator, each message carries its own route
Stateless actors, all state travels in the envelope — route, payload, headers
Stateless by design, with optional persistent memory via pluggable state proxy
CRDs, Helm charts, GitOps — runs anywhere K8s runs
KEDA scales each actor independently — GPU pods cost nothing when idle
SQS, RabbitMQ, Pub/Sub — swap via Crossplane, handler code unchanged
S3, GCS, Redis, NATS KV — state proxy connectors for virtual actor memory
Durable queues, retry policies, DLQ, SLA enforcement, timeout control
Actors communicate through message queues. Each message is an envelope that carries its own routing instructions.
Every actor pod has two containers: your Python runtime and the Asya sidecar. The sidecar polls the queue, delivers the envelope to your handler via Unix socket, and routes the response to the next queue in the chain.
Queue → Sidecar → Runtime → Sidecar → Next Queue
Local actor mesh in minutes.
Requires Docker, kubectl, Helm, and Kind.
Pluggable at every layer. Swap transports, state backends, and gateway protocols independently.
Honest, factual comparisons with real code examples.
Distributed actors, not in-process graphs — LangGraph, CrewAI, ADK, AutoGen, KAgent
Choreography, not centralized orchestration — Temporal, Argo, Airflow, Prefect, Dagster
Runtime-centric, not training-centric — KFP, Flyte, Metaflow, ZenML
Discrete messages, not infinite streams — Flink, Kafka Streams, Spark
Pure functions, not mailboxes — Erlang, Akka, Orleans, Dapr
7 categories + 7 in-depth 1:1 with code examples