Browse Config
Catalog
Config
Stacks
Operate
Docs

Follow a configuration from source to running

A configuration is one exact set of Kubernetes objects, the record of how they were produced, and the lifecycle work that must run around them. This page is the model: how any source becomes a reviewed base, how each format is rendered and flattened, what a flattening verdict decides, and which tool to pick first.

Four questions place any configuration: what do I have, what will it produce, can this destination accept it, and did it work. The first two need no cluster and no account.

try it
# what do I have, and what will it produce?
$ cub config check redis

Start from what you have: Helm · OCI · Flux, Argo CD, or kubectl · Kubara · AICR · plain YAML · Timoni and the rest. Each becomes the same reviewed base.

The Catalog is the store of tested configurations and the case for trusting them. This page is what a configuration is and what you can do with one. ConfigHub is where a reviewed base is governed, released, and promoted.

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.

1. Follow one configuration from source to running

Every source reaches the same shape through the same decisions, even when a step does nothing. Helm renders, Timoni builds, AICR and Kubara generate or compose, and literal YAML or configuration OCI is already there. First a source becomes a reviewed base:

source + processing intent
  -> select and lock inputs
  -> materialize exact Kubernetes objects
  -> capture the exact configuration revision
  -> identify lifecycle requirements
  -> decide the flattening lane for the intended path
  -> retain a reviewed base

After the base exists, configuration and lifecycle decisions continue together:

base
  -> derive or update a variant
  -> recheck affected source, flattening, lifecycle, and ownership facts
  -> resolve lifecycle routes for the exact variant, destination, and runtime
  -> compare, test, approve, and promote
  -> publish the release OCI
  -> reconcile objects and perform lifecycle work
  -> observe and record receipts

This is not a one-way build pipeline. A source upgrade rematerializes the base, a variant can introduce a new prerequisite, and a destination can pick a different route without changing the objects.

Across those steps the model does four things and keeps them apart:

  • Produce or read the exact objects. Helm renders, Timoni builds, AICR and Kubara generate; literal YAML and configuration OCI are read as they are.
  • Keep the identities separate. The base revision, exact object set, source OCI, ConfigHub Unit, and release OCI each have their own digest. A receipt names both sides of a handoff rather than treating unlike hashes as one.
  • Plan the work around ordinary apply. CRDs, hooks, setup Jobs, and prerequisites become recorded route intents, resolved once the variant and destination are known.
  • Change, promote, and deliver a reviewed variant. A derived variant edits a base after render; ConfigHub reviews, approves, promotes, and releases it, keeping non-overlapping changes on upgrade.
What each step means
  • Source package or configuration is the input you already use: a Helm chart, a typed Timoni module, an AICR recipe, an installer package, Kubara or Sveltos configuration, OCI, or ordinary Kubernetes YAML.
  • Processing intent records the source identity and the choices needed to produce or select exact objects.
  • Materialize means produce or read those exact objects. Helm renders, Timoni builds, AICR and Kubara generate or compose. Literal YAML and literal configuration OCI are already materialized, so this step is a recorded no-op.
  • Exact configuration revision is the accepted object set, inventory, and digest for one revision.
  • Flatten means retain those exact objects so delivery does not rerun the source processor. The verdict is safe-to-flatten, flatten-with-routes, unsafe-to-flatten, or born-flattened.
  • Lifecycle requirement records work or target state needed around ordinary apply, such as CRDs, hooks, setup Jobs, certificates, cloud resources, controllers, or prerequisite Secrets.
  • Route intent records portable handling the source or base proposes; a resolved lifecycle route binds it to an exact variant, destination, runtime, order, actor, and checks. An explicit no route required decision is different from a missing record.
  • Protected local field records downstream field ownership, so a source refresh does not silently overwrite an environment's own value.

Four questions, asked in order

The same four questions apply to Helm, AICR, Timoni, Kubara, installer packages, OCI, YAML, and retained ConfigHub revisions.

QuestionWhat answers itNeeds a Catalog match?Needs destination access?Needs it deployed?
What do I have?Inspect the source, exact files, OCI, or a snapshot of an existing system.NoUsually no; a live snapshot needs read access to what it measures.No
What will it produce?Run the source-native materialization step, or read the objects when the source is already literal configuration.NoNoNo
Can this destination accept it?Check the exact candidate against the chosen destination's APIs, CRDs, Secrets, policies, controllers, credentials, hardware, and lifecycle requirements.NoYesNo
Did it work?Check the delivered revision, controller result, resource health, runtime behavior, drift, and rollback result the claim requires.NoYesYes

A Catalog entry can shorten any investigation, but it is never a prerequisite for inspecting or processing your own configuration. If the required destination or deployment does not exist, the check is blocked or not run. That is not a failed configuration, a failed workload, or a failed conformance result.

The command at each stage

Each stage is a real command. The first are free and need no account; upload and release need a ConfigHub organization.

StageThe command that does it
Check what a source installs, and hand it on as a verified imagecub config check <name> --out oci://…
Certify a whole composition before it renderscub stack certify
Retain a reviewed base in ConfigHubcub variant upload
Derive a variant for an environment or targetcub variant create
Publish the reviewed release by digestcub release publish

A configuration that is unsafe to flatten does not fall out of this model. Its source stays authoritative and its processor runs late, at install time. But the result rejoins at the base step. The render-late objects are retained, derived, promoted, and released like any other base, and only where the objects are produced differs.

Where ConfigHub fits

ConfigHub is where a reviewed base becomes shared, governed configuration. cub variant upload creates the base variant: a Space labelled Component=<name>, Variant=base that holds the configuration as one Unit per resource, with no target. A component is the set of Spaces that share a Component label, so the base is the component's first Space. From there ConfigHub's own verbs release, promote, gate, approve, and roll back.

So one uploaded configuration is one component's base variant held in one Space: the same thing named from four sides. Stacks and fleets defines what comes next: several components compose into a stack, which becomes a platform once it runs under governance with your apps on it. The handoff runs base, then stack, then platform, with an app placed on either.

The full record is in the ConfigHub data model, and the catalog doctrine gives the same lifecycle for every source in more detail.

2. See what each format becomes

Every source ends as the same exact objects, but each takes a different path there and is checked for different things. Flattening is evaluated at each processing boundary, so an AICR Application set can be flattened while the Helm charts it references stay render-late.

SourceMaterializeFlattening resultWhat is checkedExample
Helm chartRun Helm with the recorded values and render context.safe-to-flatten, flatten-with-routes, or unsafe-to-flattenRender matches Helm's own output; hooks, CRDs, and generated state are inventoried.Redis
Timoni module or bundleBuild the pinned OCI module with its typed values.Flatten, flatten with routes, or run the workflow late.Typed schema and selected values; ordered apply sets, waits, and target lookups.Timoni Redis
AICRRun its declared composition step, including nested Helm work it declares.Flatten the generated layer, flatten with routes, or process part late.Component order, required controllers, GPU or cloud facts, and nested sources.Inference platforms
Kubara or another generatorRun its declared generation step, including nested sources it declares.Flatten the generated layer, keep routes beside it, or process the source late.Platform prerequisites, component ownership, and controller work.Build a platform
Installer or source OCIPull by digest, then invoke the processor it declares.Decide from the produced objects; a source OCI is not automatically deployable.Package role, processor, selections, and receipts.Try Redis
Literal configuration OCIPull by digest and read the objects it already contains.born-flattened; record whether routes or protected inputs travel beside it.Object inventory, provenance, and any prior transformation.Flux, Argo CD, or kubectl
SveltosRead the literal fleet configuration; materialize each referenced source separately.born-flattened for the fleet objects; the referenced Helm stays a later boundary.The literal ClusterProfile objects, plus each nested source on its own.Stacks and fleets
Plain Kubernetes YAMLRead, parse, and canonicalize the files.born-flattened; record requirements, ownership, and later packaging.File checksums, object inventory, and checks.Check my config
ConfigHub Units or release OCIRead the retained objects and revision history.Already retained as data.Space, revisions, approvals, release digest, and receipts.What ConfigHub adds

Every format above is a real catalog entry you can browse. Open the Catalog and use its Format filter to list one, for example all AICR platforms or the Timoni module.

The ways a configuration enters

The Catalog has records for seven concrete entry forms, and each keeps the team's existing source rather than replacing it.

  1. Helm: keep the chart and values, record the render context, and capture one exact render variant.
  2. AICR: keep the native recipe and selected options, then record each generated boundary and its controller requirements.
  3. cub installer source OCI: pull a public multi-preset package by digest, select one preset, and record the exact objects it produces.
  4. Kubara or another generator: keep its native source and inputs, then record the generated platform configuration and nested sources.
  5. Sveltos: retain the literal fleet configuration while keeping the referenced Helm source as a later boundary.
  6. Literal configuration OCI: pull exact objects by digest and import them without rerendering.
  7. Plain Kubernetes YAML: read and retain the supplied objects without a render step.

A ConfigHub revision or release OCI can also re-enter the model as an exact retained revision. An OCI artifact can carry source material, literal configuration, or a ConfigHub release, so its role and consumer are recorded rather than inferred from the word OCI.

In terms you already use

If you think in plain Helm: the recipe is your pinned chart and values. A base variant is the output of helm template for one values choice, kept as reviewable files. A derived variant gives one environment its own recorded version and keeps its changes through upgrades.

If you think in Kustomize: a base variant plays the role of a base, and a derived variant plays the role of an overlay. The base is already rendered rather than patched at build time. The overlay is a ConfigHub Space with revisions, gates, and an upstream link.

If you start with literal YAML or configuration OCI: the objects are already flat, so record their source and digest, attach any required routes, and retain them as a base. Do not pretend they passed through Helm.

If you start with AICR: use snapshot and diff first when the question is about existing GPU-node state. That path needs no recipe and tells you what differs, not what the node should contain. Select the provider-curated leaf variant before judging the difference, then retain the exact objects as a base.

If you start with Timoni: pin the module or bundle OCI, keep its typed schema and selected values, and build the exact objects. Record any ordered apply sets, waits, or target lookups that must still run. The built objects are an exact configuration revision, not a Helm render variant.

3. See whether a configuration can be flattened

Flattening means keeping the exact Kubernetes objects as the configuration that later systems review and deliver. The source stays recorded, but its processor does not run again in the delivery path. Flat objects can be read, compared, scanned, changed one field at a time, stored as OCI, or held as ConfigHub Units. It is not safe to assume every chart can be flattened without more work.

Two delivery models coexist. The catalog packages charts render-late: the installer package carries the un-rendered chart, and the toolchain renders at install time. The eks-inference example renders early: CI flattens charts to literal YAML, publishes OCI bundles, and delivery never runs Helm. Neither wins as a doctrine. The catalog machinery certifies, the flattened-bundle shape delivers wherever certification allows, and the flattening-safety verdict arbitrates. Render-late stays the certified route for charts the verdict rejects, chosen by receipt rather than by taste.

The four verdicts

VerdictUse it whenWhat must travel with the YAML
born-flattenedLiteral YAML or configuration OCI already contains the exact objects.Source identity, checksums or digest, inventory, checks, ownership, and any lifecycle requirements.
safe-to-flattenThe exact source configuration has no required processor behavior outside the materialized objects.Pinned source inputs, object inventory, digest, checks, and evidence.
flatten-with-routesThe objects are usable once named CRDs, hooks, certificates, Secrets, setup Jobs, or ordering steps are handled deliberately.The same records, plus route intents for each requirement, resolved after the variant and destination are known.
unsafe-to-flattenThe source depends on live lookup, generated state, or destructive lifecycle behavior that has no adequate route for this use.The source and inputs stay authoritative. Process the source late (render late for Helm) and record what must still be checked at deployment time.

A verdict is decided per base, not per chart. The same chart with auth.existingSecret set is a different question from the same chart without it, and the recorded scope says which values move the answer.

How the audited bases fall today

Of 257 retained bases, 245 have a decided verdict. 97 of those refuse a flattened bundle and stay render-late through their installer package; 75 can be flattened only when named companion routes travel with the bundle.

  • safe-to-flatten: 70 bases.
  • flatten-with-routes: 75 bases.
  • unsafe-to-flatten: 97 bases.
  • born-flattened: 3 bases.
  • not assessed yet: 12 bases.

Two plain examples of what a flattened render would lose:

  • A chart that reads a cluster value with Helm lookup has no answer until install time. Flattened, it bakes in whatever the lookup returned when the render ran, or nothing, so the objects are stale or empty.
  • A chart that generates a password in a hook produces a fresh secret each install. Flattened, that generation step is gone, so the rendered Secret carries one fixed value instead.

A base's verdict is one chart at a time. A stack's flattened release is a second judgement on top. It holds only when every part's verdict permits flattening, so one unsafe-to-flatten part keeps that part render-late even inside an otherwise flattened stack.

One shape, from source to a synced digest

A source whose verdict permits flattening — safe-to-flatten, flatten-with-routes, or born-flattened — flows through one shape, whether it is a Helm chart, a Kubara-generated tree, an AICR recipe, or raw YAML.

  1. Render or flatten once, with declared inputs, at build time and never in the delivery path.
  2. Package as a certified bundle: one OCI artifact per component, a digest-bound index pinning the composition, and a receipt.
  3. Ingest as Units at per-file granularity, with the bundle digest recorded, into a base Space no target deploys.
  4. Vary per target, then publish governed releases against an immutable digest.
  5. Any reconciler syncs that digest: Argo per cluster, Sveltos across a labeled fleet, plain kubectl for the minimal path.
  6. Receipts close the loop where convergence is recorded.

An unsafe-to-flatten source skips this build-time pipeline. Its processor runs late, at install time, through its installer package, which stays its certified route.

The receipt certifies rendering and packaging, not runtime health, and convergence receipts stay separate. A decided lane does not mean a bundle exists or ever will. Publication is a separate step, gated on the lane permitting it, and an unsafe-to-flatten entry must never carry a certified-bundle receipt.

The rules are in when to flatten configuration, deciding a flattening lane, and the certified bundle spec. The certified bundles record lists the flattened ones so far.

4. Choose a tool and start

Five tools cover the whole model. Pick by what you want to do right now, and move between them as the work grows.

ToolUse it whenWhat you get
cub config, the workshop pluginYou want the free path on a config, an app, or a stack: check, certify, render, publish, verify, and upload.The objects and what a source hides, a CERTIFIED or REJECTED verdict, and a verified image with --out oci://…. No account.
cub installerYou want a maintained catalog package with named bases, receipts, and an upgrade path.Render a reviewed preset and deliver it as a controller-native OCI, verified as it is pushed. Free on any catalog package.
cub helmYou have an arbitrary chart and want a fast render or to store it in ConfigHub.cub helm template renders locally; cub helm install records the source and rendered base as Units. Preparation, not a catalog entry.
The browser checkYou want to inspect rendered YAML without installing anything.An object review in your browser and a handoff prompt for your own AI. Is my configuration right?
Your own AI assistantYou want an assistant to run the investigation and keep it tied to records.It renders, checks, proposes a candidate, or completes the ConfigHub handoff; you still check the files and diffs. Your assistant

cub server install runs ConfigHub yourself, locally, in about twenty seconds, when you want the account path on your own machine.

Why this is more than a fast render command

A fair skeptic asks if this is just helm template with a wrapper. It turns Helm's output into something reviewed, named, and reusable across a fleet, with variants you can compare, checks you can gate on, and receipts you can cite.

A change becomes safer when it is compared, scanned, and kept as a receipt before it is promoted. Staying on the chart author's supported path also helps, because a departure becomes visible before it reaches production.

Read the fuller argument in why this exists and what you get, or see the free, account, and commercial paths on the Offering page.

Three public jobs

  • Catalog answers questions already investigated for a named source and version: retained packages, useful configurations, setup requirements, checks, and known limits. Find a configuration.
  • Check my config investigates a new chart, version, values set, OCI bundle, or existing deployment. The browser inspects rendered YAML without sending it to a server, and builds a prompt for your own assistant. Is my configuration right?
  • ConfigHub retains an accepted answer, then lets a team make variants, review diffs, promote changes, publish releases, and compare desired configuration with live observations. What ConfigHub adds.
A graduation path, not a day-one choice

You can move through these paths over time. You do not need the full catalog model on day one.

StageCommand pathResult
Inspectcub helm templateRender an arbitrary chart locally and see the Kubernetes objects.
Adopt a chartcub helm installStore a HelmSource Unit and the rendered base Units in two ConfigHub Spaces.
Adopt files or OCIcub variant uploadLoad rendered files or a literal configuration OCI into ConfigHub Units.
Use a maintained entrycub installer setup --pull <installer OCI ref> --base <base>Start from a reviewed package base with locks, values, receipts, and checks.
Operatecub variant create, cub variant promote, releases, scans, approvalsManage reviewed objects as ConfigHub Units and derived variants.

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.

When your chart is not in the catalog

When the exact chart and variant you want is not in the catalog, you render your own and bring it in. ConfigHub never needs one of our images to run a chart. Which path you take depends on what you mean to do.

  • Just check it. Render it with cub helm template locally, or use the browser check. No packaging, no account.
  • Render and deliver it your way. Your own chart has no catalog package to pull, so render it with cub helm template, then deliver the reviewed objects as OCI. cub installer pulls a catalog package that already ships an image; it cannot pull a chart that has none.
  • Manage it in ConfigHub. cub helm install records the chart straight into Units, and from there you release, promote, and gate it.
  • Add it to the tested catalog for everyone. Send it through the problem chart template, and a maintainer renders, checks, and publishes it as a base variant.

Config is the model. The Catalog is the store of tested configurations, stacks compose them, and ConfigHub governs, releases, and promotes a reviewed base.