What is Cloacina?
Cloacina is a workflow orchestration engine for Rust and Python. It runs durable, database-backed task pipelines — with retries, recovery, and at-least-once execution — and in-process, event-driven computation graphs. Its only hard dependency is a database (PostgreSQL or SQLite): no broker, no queue, no coordinator.
The same engine runs two co-equal ways. Neither is the “real” way; you pick by how you want it to live in your system:
- Embed the library — add
cloacina(Rust) orcloaca(Python) as a dependency and run orchestration inside your application, against a database you already operate. - Run the service — operate
cloacina-serveras a multi-tenant control plane with an HTTP/WebSocket API, a web UI, and horizontal scale; ship workflows to it as.cloacinapackages.
You don’t graduate from one to the other. Embedding is a permanent, production-legitimate way to run Cloacina — chosen because you want orchestration as a component of your own system, not because you haven’t “grown” into the server yet. Equally, plenty of teams want the service from day one.
Cloacina is embedded-first by design: the engine is a genuine standalone library, and the server is built on top of it — not the other way around. That ordering is a deliberate commitment. It’s why embedding is truly first-class rather than a stripped-down mode: the library is the product, and the service is one way to deploy it.
Whichever way you run it, Cloacina exposes two primitives (described once, for both languages, in Engine & Primitives):
- Workflows — durable, database-backed DAGs where the task is the unit of scheduling. For work that must survive restarts and recover from failure.
- Computation Graphs — in-process, event-driven DAGs where the whole traversal is the unit. For low-latency processing that reacts to a stream.
- Is Cloacina for you? — where it fits, where it doesn’t, and which door.
- Embed the library · Run the service