akua render
Shipped
Run the Package's program. Evaluate the KCL, invoke every source engine (Helm, kro, Kustomize), compose results, produce deploy-ready manifests.
akua render [path] [flags]
Discovery. With no path, renders every user-authored document in the workspace whose schema declares render semantics — typically the workspace's App-shaped documents that reference a Package and carry inputs. With a path, renders only that file. Users author their own App / Environment / etc. schemas (akua does not specify them; see package-format.md); render processes whichever documents the workspace declares as renderable.
Not the same asakua export.renderexecutes the full pipeline against customer inputs and writes manifests a reconciler applies to a cluster.exportconverts a canonical artifact (schema, user-authored KCL document, policy bundle) into a format view (JSON Schema, YAML, OpenAPI, Rego bundle). Render needs inputs; export usually doesn't. Render invokes engines; export is format translation. Seeakua exportbelow.
Flags
| flag | description |
|---|---|
--package=<path> | path to the package.k file (default ./package.k) |
--inputs=<file> | inputs file (JSON or YAML). When omitted, probes ./inputs.yaml then ./inputs.example.yaml next to the package; falls back to schema defaults if neither exists |
--out=<dir> | write to directory (default: ./deploy/) |
--stdout | print rendered manifests as multi-doc YAML to stdout instead of writing files |
--dry-run | render but don't write files |
Engines. Helm and Akua-package composition reach the user via alias-method calls —webapp.template(webapp.TemplateOpts{values = webapp.Values{...}}),upstream.render(upstream.Input{...})— synthesized per dep fromakua.toml. Kustomize stays engine-direct (kustomize.build({path = "./overlays"})) because its input is a within-Package directory, not a typed dep. All backends ship as embedded WASM modules; akua never shells out tohelmorkustomizebinaries — every engine runs inside the wasmtime sandbox alongside the render worker. Seedocs/security-model.mdanddocs/embedded-engines.md. One render output. akua writes raw YAML manifests, one file per resource. Distribution shapes like Helm charts or OCI bundles are futureakua publish --as <format>concerns — they wrap rendered manifests at distribution time, not as a Package-declared output.
Exit codes
0 success, 1 user error, 2 system error. (Phase B adds 3 for policy deny.)
JSON output
{
"format": "raw-manifests",
"target": "./deploy",
"manifests": 1,
"hash": "sha256:…",
"files": ["000-configmap-hello.yaml"]
}
format is always "raw-manifests" today. target is the resolved output directory. hash is sha256:<hex> of the concatenated <filename>\n<yaml> blocks — stable across runs when inputs + lockfile + akua version match.