Browse Stacks
Catalog
Config
Stacks
Operate
Docs

For platform teams

Build an internal developer platform

Choose the services your developers need to build and run AI-assisted tools and applications. The Catalog supplies tested component versions and known requirements. AI can help with the selection and settings. The starter writes native Kubara configuration for you to review before Kubara generates the platform files.

Kubara composes; ConfigHub governs; Argo reconciles.

Keep platform components, developer tools, and applications as related but separately versioned configuration. ConfigHub retains and promotes each of them. Test a platform-component revision when shared services change, a tool revision when the developer experience changes, and an app revision when an application changes. Apps on a platform defines what an app needs from the platform under it. An AICR-generated AI platform composes the same way from Argo CD Applications; Try AICR inspects one without a GPU.

You can stop with Kubara's Git output and OCI packages. Add ConfigHub when the platform or its applications need shared variants, approvals, promotion, rollback, or a live fleet view. Argo CD remains the reconciler.

If you already run a platform on Flux or Argo, point ConfigHub at the fleet you have and add identity, approvals, and rollback with your reconciler unchanged.

The implementation lives in confighub/kubara-confighub.

Try it now · Point ConfigHub at an existing fleet · Learn ConfigHub

Need GitOps services and the shop app? Save, change and resume a local platform using the retained kubara-gitops-shop selection. The Guide provides direct cub commands and an assistant task, with saved results and a failure case. Static composition does not establish GitOps reconciliation or application health.

Generated at: 2026-09-04T11:23:58.207Z UTC · source: committed helm-expt evidence for this Kubara buyer journey.

Try it now

Three steps, smallest first. Each one is a real command or a recorded walkthrough, and every claim behind them links a committed receipt.

Generate and check a platform locally

Kubara generates the platform you described as files in Git, a Kubara tree that is not yet a stack and not yet a platform. Stacks and fleets defines a stack as a set of parts named in one manifest and checked before any of it runs. cub stack from-kubara turns the tree into exactly that. A platform is what the certified stack becomes once it runs under governance with apps on it. A fleet is that stack and its apps placed across many clusters. The workshop plugin carries the same three services as a stack and places it as a fleet.

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.

$ git clone https://github.com/confighub/kubara-confighub.git

$ cd kubara-confighub

$ cub plugin install confighub/cub-workshop

$ node scripts/create-kubara-platform.mjs --name demo-platform --services cert-manager,metrics-server,traefik --repository https://github.com/acme/platform.git --output ../demo-platform

# Generate local platform files with Kubara
$ kubara --work-dir ../demo-platform --config-file config.yaml --env-file .env.example generate --helm

# Kubara's own output as a stack, each chart rendered with its generated values
$ cub stack from-kubara ../demo-platform

$ cub stack certify ../demo-platform/confighub/stack.yaml

# or the catalog's tested images of the same three charts
$ cub stack sandbox kubara-platform

These commands need Git, Node.js, Python 3 with PyYAML, Kubara, Helm, oras, and cub on your PATH. Replace the example Git repository URL with yours. The starter writes ../demo-platform; Kubara generates its files and from-kubara writes confighub/stack.yaml inside that directory. Certification inspects the composition. Sandbox prints Kubernetes YAML; it does not start a cluster. Keep the generated directory for review. If certification refuses, repair the named conflict or missing API and rerun it; a static pass does not establish target readiness. Read the stack manifest and the fleet manifest. Nothing pulls those releases until a cluster with delivery wired exists, which is the next step.

Continue with a managed fleet

The following commands create or change ConfigHub records. First sign in to the organization you intend to use, inspect the fleet manifest, and confirm the demo Space names are available. They use the shipped fleet manifest, not the files generated above. A cluster, registry access and delivery wiring are separate prerequisites.

$ cub fleet up demo-platform

$ cub fleet age demo-platform && cub fleet status demo-platform

$ cub variant promote metrics-server-demo-dev --dry-run

If a remote step fails, inspect the records already created before retrying. Preserve existing resources; use the linked runbook for scoped cleanup.

A cluster with delivery wired, in minutes

cub cluster up --name demo --space demo-cluster

One command creates a temporary kind cluster, installs Argo CD, and wires it to a ConfigHub Space. Needs a ConfigHub account and Docker; the cluster runs on your laptop.

The whole platform, with applications flowing through it

The six-step journey below runs Kubara's own output through ConfigHub, from import to approved promotion and recorded rollback. The implementation, commands, and receipts live in confighub/kubara-confighub, and each step links its walkthrough.

Give your agent this prompt

I am building or operating an internal developer platform on Kubernetes.
My platform components: <list them, for example cert-manager, traefik, metrics-server, kube-prometheus-stack>.

1. Fetch https://confighub.github.io/helm-expt/site/changes.json and check which of my
   components have a checked entry in this catalog.
2. For each covered component, open its catalog page and compare my configuration with
   the recorded objects, prerequisites, hooks, CRDs, and license before I install it.
3. For each component with no entry, say so plainly, and with my approval file it at
   https://github.com/confighub/helm-expt/issues/new?template=problem-chart.yml
   so it gets a checked entry with receipts.
4. Then read https://confighub.github.io/helm-expt/site/kubara.html and tell me which
   of my components the recorded platform journey already covers.

Steps 1 and 2 read public data. Step 3 files a public issue with your approval, and an uncovered component becomes a checked entry with receipts.

Why hand any of this to an agent? Our committed two-round benchmark measured where agents are already strong and where they cannot be. A bare agent with a shell answered static chart questions at 96.7 percent. Twelve of eighteen questions about time, live state, and accountability needed records the agent could not produce. The toolchain carries day one; the records carry every day after. The benchmark and the full prompt live on the challenge page, and the run data is committed in data/ai-benchmark.

1. Choose services for your developers

This example uses four ordinary platform services and records one optional runtime image. Use the links to check each component, then change the comma-separated service list to suit your platform.

JobSelected componentCatalog page
Certificatescert-managerjetstack/cert-manager 1.21.0
Cluster metricsmetrics-servermetrics-server 3.13.1
IngresstraefikTraefik 41.0.2
Monitoringkube-prometheus-stackkube-prometheus-stack 87.19.2
git clone https://github.com/confighub/kubara-confighub.git
cd kubara-confighub
npm run kubara-platform:start -- \
  --name inference-platform \
  --repository https://github.com/acme/platform.git \
  --services cert-manager,metrics-server,traefik,kube-prometheus-stack \
  --runtime-image vllm=vllm/vllm-openai-cpu:v0.27.1-arm64@sha256:e6745d7ba6610f637c6f22fc06cd730342e50245b6c46767235600483adfbbde \
  --output ../my-platform

Replace https://github.com/acme/platform.git with the HTTPS Git repository where you will keep the generated platform.

The command needs Node.js. It does not contact ConfigHub Server, an OCI registry, or Kubernetes.

Website to command line: choose and inspect components here, then run the command with those exact component names. Give the generated files to your AI assistant when you want help with a change; review its file diff before running Kubara again.

Open the exact generated example · Open the smaller three-service starter

2. Review what the starter wrote

FileWhy it exists
config.yamlThe native Kubara selection: cluster, catalogs, enabled services, and ordinary settings.
source-and-intent.yamlThe Kubara source, exact component versions and packages, Catalog links, intended cluster, and checks still required.
runtime-images.yamlThe digest-pinned application or model-server images selected beside the platform. Kubara does not deploy this record, and an image is not a complete application.
README.md and checksums.txtThe next commands and hashes for every generated starter file.

3. Generate and inspect the platform

In ../my-platform, review the generated .env.example, create a private .env, and replace every placeholder. Do not commit the private file. Then run Kubara:

cd ../my-platform
kubara --work-dir . --config-file config.yaml --env-file .env generate --helm

Review the generated Kubernetes files and the required CRDs, hooks, setup Jobs, Secrets, certificate issuers, storage classes, and APIs. The Catalog links explain the known behavior of each selected chart, but the final check must use this platform's generated output and intended cluster.

4. Choose where the reviewed result goes

Keep the generated platform in Git, or compile its exact revision into component OCI packages plus a digest-bound platform index. Neither choice needs a ConfigHub account. Use ConfigHub when you want retained platform versions, environment variants, approvals, promotion, release OCI, rollback, or live fleet comparison.

Package the reviewed Git revision as OCI · Continue through ConfigHub and Argo CD · See what can be flattened

See the four-cluster result · Check the evidence · Open the technical runbook

See two applications added, promoted, released, and checked on the platform.

Benefits with explicit acceptance evidence

Each status pill reads one of three ways. A current live pill means a current live run accepted the benefit, and some name the exact result, such as a passed performance gate or zero audited residue. A current deterministic pill means committed deterministic evidence accepts it, without a live run. Any other wording means the deterministic contract still holds while its live acceptance is absent, stale, or not yet accepted.

One gate remains open. Every benefit below was accepted in the project's own retained four-cluster organization. A clean import into a fresh organization that you choose has not run yet, and it is the gate that stands between these results and a claim about your platform.

BenefitEvidence or acceptance targetStatus
No rewrite135 path-and-byte-identical generated files from Kubara's official and ConfigHub-aligned catalog lanes; 13 deterministic effective renders.current deterministic
A stronger component CatalogThe Kubara catalog 1.1 coverage run closed at 103 components and 130 retained versions, with all 18 exact Kubara selections kept under additive-only retention. The Catalog has grown since; the pages above carry its current size of 112 components and 139 retained versions.current deterministic
Recognizable platform shape4 clusters, 7 platform roles, 2 applications, faithful and adapted delivery identities, with Argo CD retained.faithful or adapted receipt needs refresh
Upgrade-safe retained workloads16 exact journaled immutable-selector replacements, including four PostgreSQL StatefulSets whose bound PVC identities are retained.live migration receipt required
Fleet visibility36 component/application cells, 25 curated native Link intents, and 663 extracted wiring facts kept as the full engineering view.desired state only
Repeatable deliveryThe retained four-cluster proof includes exact release heads, healthy applications, and an immediate zero-action apply.live receipt required
Measured reconciliation costThe current no-op made 0 ConfigHub mutation attempts and 0 Argo sync requests, while recording 33 ConfigHub CLI read commands, 208 total subprocess calls, and about 77 seconds. The fixture regression target is met; this is not a raw-Kubara comparison, HTTP-round-trip count, or service-level promise.performance gate passed
Clean governed inventoryA separate audit must prove exact ConfigHub inventory, no Argo-prunable resources, and no unclassified, dangling, or UID-stale audited durable workloads. It does not claim a complete inventory of every Kubernetes type.live receipt required: scoped residue audit

The status is generated from an exact evidence chain, component by component. Some current live evidence may already pass, but the complete publishable chain is still gated. Missing or inconsistent faithful, source-digest mini-IDP, performance, matrix, wiring, orphan, or GUI evidence stays visible instead of becoming a green marketing claim.

The composition, as evidence

Each component in a stack carries a certified-bundle receipt that names what it is and how it may be flattened, and the eight-bundle EKS inference platform is one worked example. The single composition verdict over a whole stack is specified and runs two ways today. This repository arms it as a regression gate over its own receipts. The workshop plugin's cub stack certify runs it anywhere, refusing a real conflict rather than reporting one. As a gate inside the ConfigHub product it remains proposed. The wiring facts above are the report those checks read.

What stays Kubara, and what ConfigHub adds

Kubara staysConfigHub adds
Ordered catalogs, ServiceDefinitions, config.yaml, values overlays, generated platform files, hub/spoke intentA component-first Catalog and retained exact versions; deployable variants and configurations follow each component, while Kubara keeps per-platform selection and wiring
Git as the portable platform hand-offOne immutable OCI package per reusable/effective configuration plus a digest-bound platform index
Argo CD as the cluster reconcilerA governance and release plane that selects the exact digest before local Argo receives it

Make latest discoverable, not deployable

The adapted lane keeps targetRevision: latest as a discovery address but leaves automated sync off. On the automated path, mutable latest cannot race past approval, promotion, or rollback, and ConfigHub selects the exact OCI digest before Argo CD receives it. Blocking a privileged human or a manual Argo sync needs your own RBAC or admission control.

The exact mechanism, step by step

The adapted lane retains targetRevision: latest as the ConfigHub OCI discovery address, but leaves spec.syncPolicy.automated absent from every managed Application. Pinned argobot v0.1.6 runs with ARGO_SYNC_MODE=kubernetes, ARGO_NAMESPACE=argocd, and ARGO_REFRESH_TYPE=hard, so it refreshes but cannot deploy.

ConfigHub revalidates the authoritative release and submits operation.sync.revision=<ManifestDigest> with Kubernetes UID/resourceVersion compare-and-set only when no Argo operation is active. This is the governed improvement: mutable latest cannot race past approval, promotion, or rollback, while Argo remains the local reconciler.

The authority check inventories Applications across the whole cluster: all managed Applications must live in argocd, and the adapted lane permits zero ApplicationSets. Retained release-N Tags expose contiguous history, but the exact OCI ManifestDigest remains deployment authority. Client opening and closing checks plus the no-auto fence stop a rejected raced Release from deploying through this managed path. Atomic rejection of the Release record requires server-side publish preconditions.

Production approval uses the Unit slug and server HeadRevisionNum. Authoritative reads before and after must preserve the Unit ID, observed numeric head, and DataHash, and the gate must clear exactly once. That is bracketed exact-head evidence; it is not a claim that the approval API accepts a numeric compare-and-set token.

The retained fleet records 16 exact, one-time immutable-selector replacements. Its v1 history honestly retains 12 earlier reviewed-preflight triggers and four resource-failure recovery triggers; completed history is not rewritten. For every new attempt, the v2 policy requires an attempted exact-revision Argo operation to record and digest-bind the matching terminal resource failure before deletion. Every old UID/resourceVersion and reviewed selector transition is journaled; the replacement must be healthy. The four PostgreSQL StatefulSet migrations retain the same bound PVC UID and volume identity. This is an allowlisted migration contract, not broad delete authority.

One adoption journey, in the user's order

The preparer, scanner, package verifier, binding lock, and receipt checks are checkpoints inside these steps. Certify is new here: it turns the pushed revision into a stack and checks it before OCI makes it immutable.

  1. 1. Choose components and wiring
    Keep Kubara catalogs, config.yaml, values overlays, and service definitions.

  2. 2. Generate the platform and push it to Git
    Run Kubara to generate the familiar platform, add-ons, ApplicationSets, overrides, and wiring. Then prepare, scan, commit, and push one exact portable revision.

  3. 3. Certify the platform as a stack
    Turn the pushed revision into a stack with cub stack from-kubara, then run cub stack certify until the composition holds together.

  4. 4. Import the Git revision and create OCI
    Publish immutable component/config packages plus a digest-bound platform index.

  5. 5. Load the selected ConfigHub organization
    Materialize the recognizable topology, apply twice, and prove zero residue in the declared scope.

  6. 6. Deploy applications
    Promote, approve, release, and roll back; local Argo reconciles only the exact ConfigHub-authorized digest.

Open the complete tutorial and its checkpoints.

What we show in ConfigHub

  1. The source-bound platform contract and familiar hub/spoke identity.
  2. The component-first Catalog, retained versions, and selected instances.
  3. Faithful Kubara and adapted ConfigHub delivery lanes side by side.
  4. hx-web and Cubbychat across development, staging, and two production targets.
  5. Curated native NeedsProvides Links, followed by the full extracted graph.
  6. Exact-head production approval, promotion, departure, rollback, release, OCI digest history, and the visible no-auto-sync authority boundary.
  7. The 16 journaled selector migrations, including four retained PostgreSQL PVC identities.
  8. The 36-cell matrix: desired placement/version/departure, ConfigHub release digest, Argo observed revision/sync/health, and Kubernetes desired/ready counts remain separate; missing runtime evidence is Unknown. Today it observes 24 cells and marks 12 disabled, across 9 components and 4 clusters. See the full colored matrix and the catalog-adapter snapshots on GitHub.
  9. The separate exact ConfigHub and scoped Argo/workload residue result.

The deterministic story is current. Live and GUI claims remain gated. Faithful, mini-IDP, performance, health, orphan, matrix, wiring, and all six published screenshots must match this source.

Run the screenshot-free pre-capture gate before opening the browser. Publish exactly six real, source-current frames. Their atomic GUI receipt must bind the source and organization. It must also bind faithful, mini-IDP, orphan, matrix, wiring, image digests, capture times, visible identities, and claim boundaries. Never substitute placeholders or mocked screenshots.

Follow the receipt-bound GUI tour.

The honest boundaries

  • This is deterministic adoption, not an AI rewrite. Ordinary catalog and configuration updates may still be required.
  • The user explicitly selects the organization. Targets and the local delivery runtime are current prerequisites; the importer does not silently create or guess them.
  • Secrets and target-owned facts stay outside the portable Git and OCI payloads.
  • Desired state, current live state, historical evidence, OCI publication, and production support remain distinct claims.
  • The exact-digest evidence controls the managed automated path. Blocking privileged human or manual Argo sync additionally requires separate RBAC or admission proof.
  • The current no-op records 33 ConfigHub CLI read commands and 208 total subprocess calls. It completes in about 77 seconds, with zero ConfigHub mutation attempts and zero Argo sync requests. The fixture regression target is met. CLI commands are not HTTP round trips; this is not a raw-Kubara comparison or a service-level promise.
  • The retained four-cluster organization is live-proved. A clean import into a fresh user-selected organization is still a separate graduation gate.

live receipt required means a deterministic contract exists but its current live acceptance chain is absent or stale.

Keep all the detail

The concise buyer journey does not replace the engineering material. Use the complete mini-IDP and maintainer runbook, importer contract, matrix and wiring evidence, and performance analysis.

The example is accepted only after a clean-checkout import into a fresh user-selected organization passes twice. The orphan count must be zero, one application must be healthy, and every published screenshot must be receipt-bound.

Every claim is scoped to the named Kubara source, version, catalogs, ConfigHub organization, delivery path, and receipt.