Per-chart recipes - recommended target surface for the TOP20

A repository document, rendered for the site. View source markdown.

Generated at: 2026-07-30T12:38:02.000Z UTC · source: committed helm-expt evidence for this rendered repository document.

Status: working proposal. The third piece of the catalog model: catalog-doctrine.md (the principle) → fork-vocabulary.md (the shared names + current state) → this doc (the recommended recipe per chart) → customization-decision-tree.md (the user flow). Grounded by current catalog roles, the generated data under data/, and the current package bases.

What this is

For each TOP20 chart, the recommended recipe: one honest default, a parameterized base where fill-safe fields exist, and the 1–4 standard forks (from the shared vocabulary) that genuinely apply to that chart's role. This is the target surface and the build backlog - today every chart ships only 2 bases (fork-vocabulary.md). A recommended base becomes real only after it passes the doctrine's admission check: renders single-namespace, Helm-equivalent, images pinned.

Method - recommend a fork only where the role makes it real (no padding)

dimensionrecommended when the chart…
existing-secretgenerates/needs a secret (the F3 fix-path)
hahas a real replicated/clustered mode
ingress-tlshas a web UI / external HTTP surface
no-crdsships CRDs a controller/GitOps should own
minimalhas optional components worth dropping
tlsconsumes BYO TLS/CA material

Forks compose (existing-secret + ingress-tls); a composed fork is one base, named by its dimensions. Fork = shape change; fill = slot binding (doctrine invariant) - replica count, image tag, resource requests, persistence size, retention are fills on the parameterized base, never forks.

Legend: default always present · P = parameterized base recommended · forks named from the shared vocabulary (a+b = composed single base) · n = standard fork count (target 1–4).

#chartroledefault basePrecommended standard forksnnotes
1nginxstateless webdefault (http-clusterip)ingress-tls · ingress-tls+existing-secret (BYO cert)2TLS cert arrives as existing-secret
2metrics-servercluster metrics addondefaulttls (serving CA) · ha (2× + PDB)2lean addon
3ingress-nginxingress controllerdefaultminimal (admission-disabled) · ha (replicas+PDB)2
4cert-managerCRD operatorno-crds (flip)crds (bundled) · ha2default flips to no-crds - GitOps owns CRDs
5external-secretsCRD operatordefaultno-crds · ha2
6secrets-store-csi-driversecret CSI addondefaultrotation (sync-secret)1rotation is a chart-feature fork
7argo-cdGitOps platformdefaultno-crds · ha · ingress-tls (UI) · existing-secret (admin)4rich platform chart
8lokilog store (stateful)default (single-binary)ha (scalable+object store) · ha+existing-secret (store creds)2default is the lean mode
9prometheusmonitoringdefaultminimal (server-only-ephemeral) · ha (replicas+persistent) · ingress-tls (UI)3
10tempotracing (stateful)default (local-persistent)ha (S3 scalable) · ha+existing-secret (S3 creds)2
11rediscache + secretdefaultexisting-secret · ha (sentinel/cluster)2F3: default must declare required secret
12postgresqlsecret DBdefaultexisting-secret · ha (replication)2F3
13mysqlsecret DBdefaultexisting-secret · ha (replication)2F3
14mongodbsecret DBdefaultexisting-secret · ha (replicaset) · existing-secret+ha3current fork = the composed base
15rabbitmqqueue + secretdefaultexisting-secret · ha (cluster)2F3
16grafanadashboards + secretdefaultexisting-secret · ingress-tls (UI) · existing-secret+ingress-tls3current fork = the composed base
17longhornblock storagedefaultingress-tls (UI) · no-crds · ha (replica count)3ships CRDs
18vaultHA secret storedefaultha (raft) · ingress-tls (UI) · tls (BYO TLS)3
19consulservice meshdefault (control-plane)ha (servers) · existing-secret (gossip/mesh) · ingress-tls (UI)3
20kube-prometheus-stackmonitoring suitedefaultno-crds · minimal (drop exporters) · ingress-tls (UI) · existing-secret (grafana admin)4umbrella chart

Catalog rollup

Typical fill-safe fields (the parameterized placeholders, not forks)

Image tag · replica count (within a mode) · resource requests/limits · persistence size · service annotations · chart-specific tunables (retention, log level, storage class). These bind on a derived variant with no re-render. Anything that changes the rendered object set (enable ingress, switch to cluster mode, add/drop CRDs) is a fork, not a fill - that is what preserves Helm-equivalence and digest-pinning.

How a user reaches these (decision-tree START)

  1. Pick the chart → see its default (installs to Ready, or declares its required secret fill - F3).
  2. Need a change? Pick a named fork from this chart's row - the menu is the same vocabulary everywhere.
  3. Want to make it yours? Use the parameterized base and fill the placeholder fields (the form).
  4. The long tail (env / region / customer) is derived variants layered on the chosen base - fills only.

Open decisions (carried from the doctrine + vocabulary)

  1. cert-manager default flips to no-crds (GitOps owns CRDs); crds becomes the fork. (fork-vocabulary.md rec 4)
  2. Secret-chart defaults (F3): redis/postgresql/mysql/mongodb/rabbitmq/grafana default must either declare the required secret fill and refuse a silently broken install through a required-secret gate or ship existing-secret as the recommended base - never deliver silently broken over GitOps.
  3. Per-chart fill-set: the exact "fill-safe (non-shape) fields" list per chart needs author confirmation; the typical set above is the proposed starting point.

Sources

catalog-doctrine.md, fork-vocabulary.md, generated status/outcome data, and current package bases.