Quickstart
One command per stage of the lifecycle. Each of these is a real, working invocation.
charly box build fedoraA box is a container image composed from a candy list. charly box build resolves the candy
graph, generates a multi-stage Containerfile, and builds it.
# a box living in a submodule — charly resolves cross-repo refscharly -C box/cachyos box build cachyoscharly shell fedora # drop into an interactive shellcharly start jupyter # run it as a managed podcharly config jupyter # configure as a systemd service (quadlet + secrets + volumes)Deploy
Section titled “Deploy”The same candies apply to substrates other than containers — a host, a VM, a Kubernetes cluster, an Android device:
charly bundle add host ripgrepcharly bundle add host fedora-coder --with-services --yescharly bundle del host # reverses everything, via recorded ReverseOps and an install ledgercharly bundle del is not a best-effort cleanup: every applied step records how to undo itself,
so teardown replays the ledger backwards.
Evaluate
Section titled “Evaluate”charly check run check-podA check bed is a disposable deployment that exists to be destroyed. charly check run drives
the whole sequence — build, deploy, bring to steady state, run the baked acceptance plan, tear
down — and reports a verdict.
This is the stage most tools do not have, and it is why every candy on this site shows an acceptance plan: the spec is the test, baked into the image and runnable against a live deployment.
Building a bootable VM
Section titled “Building a bootable VM”charly box build <my-bootc-box> # a candy: with base: + bootc: truecharly vm build <my-bootc-vm> --type qcow2 # a kind:vm with source.kind: bootccharly vm create <my-bootc-vm>Where to go next
Section titled “Where to go next”- Candies and boxes — what you are actually composing.
- Candyboxing — why the boundary is the security model.
- Recipe cards — the dedicated page for every candy, box and verb.