What the customer needs from you
The install artifact
- Helm chart OCI URL (for full-stack packs):
oci://ghcr.io/khal-os/charts/pack-<name> - Version (the tag from your last release, e.g.,
v1.2.0) - npm package name (frontend-only packs):
@khal-os/pack-<name>@<version>
What the customer needs to configure
If your pack declaresenv[] entries in khal-app.json, the customer admin supplies values at install time:
- Entries with
type: "secret"go into the platform’s secret store — the customer pastes a value once, and the platform injects it into your service at runtime. - Entries with other types become plain config — readable from the admin UI.
What the customer’s workflow looks like (summary)
An FDE doesn’t run this — but it’s useful to understand what happens on the other side so you can hand off cleanly.- Admin picks your pack from their platform’s install UI (or runs the equivalent CLI command).
- Platform pulls the Helm chart from OCI, applies it alongside the shell.
- Admin fills in the
env[]values the pack declared. - Platform injects env, starts the service pod, and loads the frontend npm package into the shell on next launch.
Versioning and updates
- Bumping the pack version on
maintriggers a new chart (see Publish your pack). - Customers opt into upgrades through their platform’s upgrade flow — not automatic.
- If you break the
env[]contract (renaming keys, adding required fields), document it in your release notes. Customers need to know before they upgrade.
What is NOT your problem
- How the customer’s platform deploys the chart.
- How secrets physically land in the container.
- Pod scheduling, resource quotas, ingress routing.
- Cross-pack coordination at the cluster level.
What’s next
khal-app.json reference
The full manifest schema, including the
env[] shape.Example packs
See reference packs for how to shape env declarations cleanly.