Package Manifest
Moved — `manifest.json` has been removedThe oldmanifest.jsonschema this page documented is no longer used. Packages are described by a top-levelpackage.toml([package]identity + a closed[metadata]table), and the server readspackage.tomldirectly. Themanifest.jsonreader/writer machinery has been removed.
The canonical manifest schema now lives with the archive format:
- Package Format — the
.cloacinaarchive layout (Rust + Python) and the fullpackage.toml[package]/[metadata]schema, including which keys are accepted and which are rejected (package_type,[[metadata.triggers]]). - Packaging Python Workflows — the step-by-step Python packaging procedure.
Triggers are not declared in the manifest. They are declared in code —
#[trigger] (Rust) or @cloaca.trigger (Python) — and registered when the
package is compiled/imported at load time. See
Packaged Triggers.
The package metadata (the workflow_packages.metadata JSON the server reads
from package.toml) now also carries:
declared_params— the JSON-Schema input slots derived from#[workflow(params(...))]/@cloaca.workflow_params(...). These are the workflow’s typed execute-time inputs; the web UI renders a typed Run-workflow form from them, and the execute API validates against them. See Declared params.- Per-task
what/whydoc fields — the structured task documentation parsed from#[task]doc-comments /@taskdocstrings (thewhat:/why:convention). These surface on eachWorkflowTaskNodeasdoc_what/doc_why.
No manifest migration was needed to add these — they are additive fields in the existing metadata JSON.