Browse Config
Catalog
Config
Stacks
Operate
Docs

Turn a recipe and values into a base, and decide where a change belongs

The model and the rule are free; creating a variant needs a ConfigHub account

A Helm chart is a recipe. Render it with one set of values and you get a base: the exact Kubernetes objects a team can review, reuse, and promote. This page shows how a recipe becomes a base, then answers one question for every later change.

Does the change rebuild the base, or does it belong to one environment? If it changes what Helm renders, rebuild the base. If it only changes one environment after render, make a derived ConfigHub variant.

A chart becomes a shared base when you upload its reviewed render, which needs a free ConfigHub account. The examples page shows the upload; come back here once it has run.

A variant is one named configuration of the same component, such as development, staging or production, and it can equally be a region or a customer.

1. See the model

A component is the software being shipped. A variant is one named configuration of that component.

Component: payments-api

Variants:
  payments-api/base
  payments-api/dev
  payments-api/staging
  payments-api/prod-us
  payments-api/prod-eu
TermMeaning
ComponentThe thing you care about: Redis, ingress-nginx, payments-api, or a platform slice.
VariantOne named configuration of that component: base, dev, staging, prod-us, prod-eu, or customer-a.
Base variantA configuration rendered from Helm. Use it when values, chart version, CRDs, storage, HA mode, or Secret strategy change the Kubernetes objects.
Derived variantA ConfigHub configuration made from an existing base. Use it for environment, region, target, labels, approvals, and scoped post-render changes.
PromotionA controlled way to carry a reviewed change from one variant to another, with a preview before anything is applied.

The team can then answer four questions. Which configuration are we using, where did it come from, what changed, and is it safe to promote?

Three variant layers

The word variant can describe a choice at three different stages. Keep the layers separate.

LayerWhat it isExample
Source variantA provider-curated choice before materialization. Its provider records which target and use case it is for.A Catalog Helm preset with recorded values, or an AICR leaf selected by service, accelerator, and platform.
Retained base variantThe exact objects produced from one source variant, with their digest, source link, and evidence.One rendered Helm preset, or the Argo CD Applications produced from one AICR leaf.
Derived ConfigHub variantA recorded change to a retained base for an environment, region, customer, or policy.Development, staging, and production revisions linked to the same base.

Four things called base

The word base names four different things on this site and in the CLI. Here is each one.

Where you see itWhat it meansExample
--base flagPicks a preset when you render or upload a package.cub installer setup --base reuse-existing-secret
Base variantThe reviewed Helm render itself: the chart, values, and captured objects.Redis default, Redis reuse-existing-secret
Package baseThe folder inside the installer package that holds one preset's files.packages/bitnami/redis/25.5.3/bases/default
Base SpaceThe ConfigHub Space created when you upload a base variant. It has no Target.cub variant upload labels it Variant=base

Two words worth defining

A recipe pins the source and the choices that produce exact objects: a Helm chart and its values, or an AICR recipe in its native format. Literal sources like OCI and plain YAML have no recipe; they are already an exact configuration.

Declared inputs are the named settings a package exposes for you to fill, such as a namespace or an existing Secret name. cub installer doc <pkg> lists them; a value outside that list is a hard error, not a silent Helm --set.

2. Decide where the change belongs

Ask whether Helm would render different Kubernetes objects. That one question decides where the change belongs.

ActionUse it whenExamples
Make a base variantThe choice changes the objects Helm would create.CRDs on or off, HA mode, generated Secret vs existing Secret, different values file.
Make a derived variantThe object set is already right, but it needs to live in a different place or policy context.prod-us-east from a base, target binding, labels, approvals, observation policy.
Go back to the recipeThe requested change belongs before render, not after it.New chart version, wrapper chart, customer overlay values, or a different rendered object set.
Settle a delivery prerequisiteNeither a base nor a variant edit, but it must be true before the OCI artifact ships.Target facts, generated facts, capability profile, hook or CRD disposition, approval, OCI digest and signature.

Ask three questions in order. Does the change alter what Helm renders? If not, does it only refine an already-rendered object? If neither, is it a prerequisite that must be true before the OCI artifact ships?

Changes Helm render inputs or rendered objects -> base variant.
Changes the operating context after render -> derived ConfigHub variant.
Needs a cluster or external system -> target fact, route, or setup step.

Read the full routing rule for the complete decision tree and its delivery-prerequisite checklist.

Quick routing table

User requestRouteWhy
Use this values fileBase variant, unless it only fills an already-rendered field.Values usually change template branches, object shape, or object count.
Promote a reviewed install to prod-us-eastDerived ConfigHub variant.The install shape stays the same; only target, facts, and policy change.
Use an existing SecretBase variant if it changes object shape; derived variant if the base already exposes the reference.Secret material stays out of public proof, but object references must be explicit.
Change namespace, target, environment, or region labelsDerived ConfigHub variant.These are clonable, fillable, and receipted without a Helm rerender.
Add a Kustomize patch that changes a Deployment fieldBase variant for a broad patch; derived variant only for one narrow post-render field.Broad patches belong in the reviewed rendered artifact.
Point Argo CD or Flux at the artifactDelivery configuration, not a base or a variant.The object set is already published; GitOps only consumes it.

Firm answers for four fields

Some fields come up so often that they deserve a direct answer instead of another decision tree.

FieldFirm answer
Image tag or digestBump it with cub installer setup --set-image NAME=REF, when the base declares an images: block. That is a declared-image override, not a new base variant or a ConfigHub edit.
NamespaceSet it with cub variant create --namespace on the cloned Units. That only works when the base already exposes the namespace as a fillable field; otherwise pick a base that does.
Replica countA plain scale change is a derived variant or a Day-2 operation. It needs a new base variant only when it also changes topology, storage, chart branches, or lifecycle behavior.
StorageClassA derived variant's target fact, when the base already exposes the field. It needs a new base variant when a different class needs a different rendered volume shape.

What protection means

Protection is not one thing. Here are the three meanings this site uses.

ProtectionWhat it means
Protected local fieldThe environment variant owns this field. A source refresh does not overwrite it silently; overlapping changes require review.
Protected inputA credential or other sensitive value stays outside portable configuration. The objects contain a reference or requirement instead.
Prune-protected resourceThe delivery path must not delete this object when it disappears from a later configuration. It does not protect individual fields.

One worked example: ExternalDNS overlays

Changing provider, sources, registry, domainFilters, txtOwnerId, the IAM role annotation, RBAC, CRDs, or controller args and env needs a new base variant.

Changing customer, environment, region, target, approval gates, observation freshness, a required hosted zone, or a required external Secret reference belongs in a derived ConfigHub variant.

Read the full ExternalDNS example, including the checked golden files.

The OCI boundary, and changing one field without ConfigHub

Once an OCI artifact is published, treat it as the reviewed desired object set. A change that needs a different Helm render goes back to the cub installer base path and republishes. An approved post-render refinement becomes a derived ConfigHub variant, which then republishes or applies.

A third option skips ConfigHub for a one-off fix. Change one field directly on a literal configuration OCI. The command writes a new local image, records the input digest and the old and new values, and needs no ConfigHub account or cluster.

3. Follow a safe flow

A good variant flow stays plain. Choose the base, name the variants that exist in the real world, preview the change, then promote only what was reviewed.

StepWhat happens
Choose a basePick the closest tested configuration from the chart page.
Load it into ConfigHubThe rendered objects become managed config that can be named, compared, reviewed, and delivered.
Name the real-world variantsCreate the dev, staging, prod, region, or customer versions people actually use.
Preview the differenceLook at the object and field changes before delivery. Small changes stay small.
Promote with a receiptMove a reviewed change forward only after the preview, gates, and receipts say what will happen.

Today you use cub installer, cub variant create, Unit diffs, and cub variant promote. The same changes remain available for review in ConfigHub.

For the exact commands with the why behind each flag, read After upload: create a variant and promote changes. It starts where a base variant's confighub.sh ends.

The whole chain, with the variants labeled

Variants appear at two levels, and they meet at upload.

chart -> base variant (chosen with --base) -> OCI package
      -> upload -> base Space
      -> derived variants (staging, production) -> promote

A base variant is a named way to render the chart's recipe, such as default, no-crds, or reuse-existing-secret. A derived variant is a ConfigHub Space cloned from your uploaded base for an environment; it never re-renders Helm.

The package is chosen and rendered before upload. cub installer upload stores the rendered Kubernetes objects and an untargeted installer-record Unit. The source package, chart, and templates stay in the package OCI; ConfigHub does not rerender them.

4. Run the commands

New to cub? Install the cub CLI first. Public catalog packages pull and render anonymously, and you sign in only once a command saves or changes ConfigHub data.

Here is what the command does. cub installer is an open-source plugin for the cub CLI. cub installer setup pulls a catalog package and writes its Kubernetes files locally, leaving delivery to kubectl, Argo CD or Flux. The generated scripts stop before doing any work when the plugin or kustomize is missing.

cub installer setup --pull oci://europe-west1-docker.pkg.dev/nth-fort-499605-q5/helm-expt/bitnami-redis:25.5.3@sha256:a216ce212424e05b341ef5000f1798e6014b72b8bc3dce9f315285871037af2a --base reuse-existing-secret --work-dir ./redis-reviewed
cub installer upload --work-dir ./redis-reviewed --space helm-redis-base
cub variant create prod-us-east helm-redis-base --environment Prod --region us-east --target prod/prod-us-east
cub variant promote prod-us-east --dry-run -o mutations

You see a base, a downstream variant, the changed paths, and a preview before promotion.

Expected output

created downstream variant
cloned Units linked to upstream Units
changed labels/target/gates only, unless an allowed mutation receipt says otherwise
promotion dry-run lists mutations before apply

5. Tell what set a field

Use these steps to trace which layer actually set a field you are looking at.

  • Open the base Space's installer-record Unit to see which package was uploaded. Catalog demo Spaces may also contain readme and render-intent Units that explain the chart, values profile, and required setup.
  • Open the package's Helm render-intent record to see which Helm values and render settings produced the starting objects.
  • Open the Kubernetes Unit's revision history for changes made in ConfigHub.
  • Open the derived Space's upstream link to see which base it started from.
  • Treat a value seen only in the live cluster as drift until the team records it as an intended revision or removes it.

Where each setting lives

There are four places to look.

PlaceWhat belongs thereHow to see what is set now
Helm valuesChoices that change what Helm renders: components, object count or fields, storage mode, CRDs, ingress, Secret strategy, hooks, service exposure, or topology.Open the base variant's valuesProfile link in its HelmRenderIntent, then open the rendered YAML it produced.
ConfigHub changesExact post-render edits when the base is right but an environment, region, customer, policy, image, label, resource, or other object field must differ.Open the Unit revision history or derived variant. The public catalog base itself has no ConfigHub edits.
Install workRequired Secrets, CRDs, target facts, hooks, setup jobs, certificates, cloud accounts, and other work around the objects.Open the base variant's prerequisites and lifecycle routes. These are not hidden as values or post-render edits.
Live clusterWhat actually ran.Compare observations with the reviewed Units. A live-only edit is drift until it is recorded as an intended ConfigHub revision or removed.

One field should not have two silent owners. If a new Helm render and a ConfigHub revision both change the same field, review the overlap before promotion, then read the full command walkthrough.

6. Understand a chart preset

The claim

The catalog does not try to prove every possible Helm values combination. Most charts expose too many switches for that to be useful or honest.

It claims something narrower and more practical.

  • Users keep their Helm charts.
  • The catalog offers ready-to-use chart presets for common operating choices.
  • Each chart preset records the values and render inputs that produced it.
  • The rendered Kubernetes objects are captured as generated output.
  • Hooks, CRDs, setup jobs, generated Secrets, cloud accounts, and target prerequisites are recorded with the chart preset.
  • Tests, receipts, and chart pages say what is proven, blocked, refused, or still waiting for more work.
Chart presetTypical reason
defaultStart from the chart author's normal path.
no-crdsThe target cluster or another controller owns the CRDs.
crds-enabledThe package owns the CRDs for this install.
reuse-existing-secretKeep secret material outside the chart render.
server-onlyRun one useful component instead of the whole chart stack.
haUse a reviewed high-availability configuration.
internal-serviceKeep the service private to the cluster or platform.

What a chart preset records

ItemWhy it matters
Chart source and versionThe upstream input is pinned.
Values profileReviewers can see which values were used.
Release name and namespaceThe render can be repeated.
Capability profileKubernetes API assumptions are explicit.
Source lockThe chart and dependencies can be traced.
Render intentThe compact machine-readable record of the render inputs.
Render variantThe captured Kubernetes objects produced by the chart preset.
Installer package OCI refThe public package address users pull with cub installer setup --pull oci://....
Package baseThe generated package users can inspect and try.
Evidence lanesThe checks, receipts, scans, and live observations for the row.
Chart extrasHooks, CRDs, setup jobs, generated facts, target facts, and other work outside plain YAML.

The short model

chart version
  base variant: named Helm render choice
    render intent: inputs needed to repeat the render
    render variant: Kubernetes objects captured from that render
  managed variant: ConfigHub version made after the render
TermPlain meaningExample
Preset / base variantA named way to render a Helm chart. Preset is the public word; base variant is the repo word.Redis default, Redis reuse-existing-secret
Render intentThe inputs needed to repeat that render.chart version, values file, namespace, release name, capabilities, source lock
Render variantThe captured output from that render.Redis release-objects.yaml plus variant-revision.yaml
Managed variantA ConfigHub version made after the rendered objects are uploaded.dev, staging, prod, per-region, per-customer

Managed variant here is the same idea as the derived variant used elsewhere on this page; the render-intent guide uses its own name for it.

7. See what is inside ConfigHub

  • Unit is a versioned, diffable piece of configuration. Rendered Kubernetes objects become Units when they are uploaded.
  • Space groups the Units for one managed configuration, such as a base, development environment, production region, or customer.
  • Base variant is the reviewed starting configuration. For a Helm source, it matches a supported render shape such as no-crds or reuse-existing-secret.
  • Derived variant is a ConfigHub clone for a specific environment, region, customer, or target. Its changes are exact object changes; Helm is not rendered again.

A base Space has no Target. cub variant upload creates it labeled Variant=base, and it holds one Unit per rendered object until you choose to deliver it.

What the package contains

An installer package is the catalog artifact for one chart version.

  • The package metadata and installer.yaml.
  • The available preset chart configurations, called bases in the repo.
  • The files needed to render each supported preset locally.
  • records/index.yaml, which lists the supporting record for every base.
  • records/<base>/source-and-intent.yaml, which connects the source, exact objects, requirements, lifecycle work, checks, and evidence.
  • records/<base>/helm-render-intent.yaml, which records the Helm chart, version, values, namespace, release name, capabilities, and source lock.

Files under records/ are supporting information, not Kubernetes objects; do not apply them to a cluster.

8. Open worked examples

These examples show the same rule in different chart shapes.

ExampleWhat it showsOpen
RedisSecret strategy changes the rendered objects, so it belongs in a base variant.Redis
PrometheusA small server-only base can become environment-specific ConfigHub variants.Prometheus
kube-prometheus-stackA serious chart needs variants that carry target facts, lifecycle routes, and upgrade checks.kube-prometheus-stack

9. Read the details

Creating variants explains the rules. cub variant commands lists the current commands. Variant promotion receipts show the current evidence.

The configuration model and vocabulary guide defines every term on this page. After upload walks through the exact commands. Helm chart presets and values and Helm render intents cover the render-time record in full.

The ConfigHub data model covers Units, Spaces, and targets in full. Choosing base variants, derived variants, and delivery changes and the custom overlay example cover routing in more depth. Change an OCI package without ConfigHub and installer OCI packages cover the package format.

Deciding whether to flatten covers the verdict a base needs before it ships as a bundle.

Generated from helm-expt catalog data. Base variants are render-time choices; derived variants are post-render ConfigHub refinements.