Skip to content

Package

A .cloacina package is the distributable unit: a package.toml manifest plus source. Once built, the same package runs under the embedded library, the daemon, or the server unchanged — it is the seam that lets you move a Workflow or Computation Graph between the two doors.

  • A package wraps your code with a package.toml and a conventional source layout.
  • The loop is new → validate → pack → upload, via cloacinactl package.
  • The server loads it (the reconciler registers its workflows, triggers, graphs).

The two languages package differently:

A Python package is a module tree under workflow/, declaring tasks with bare @cloaca.task decorators (no WorkflowBuilder — the loader supplies the workflow context):

my-pipeline/
├── package.toml
└── workflow/
└── my_pipeline/
├── __init__.py
└── tasks.py # bare @cloaca.task decorators
Terminal window
cloacinactl package new my-pipeline --lang python # scaffold
cloacinactl package validate my-pipeline # check format
cloacinactl package pack my-pipeline # build the .cloacina archive
cloacinactl --tenant acme package upload my-pipeline-0.1.0.cloacina
  • Portable: one artifact runs embedded / daemon / server.
  • Python: bare decorators only; a WorkflowBuilder inside a package fails to load.
  • Rust: compiled on the server at load time.