A self-hosted control plane for Kubernetes. Install Platz once, point it at your registries and clusters, and give every team a typed UI for every chart — backed by environments, role-based permissions, full history, and live metrics from each running deployment.
Each deployment maps one-to-one to a Kubernetes namespace and a Helm release inside it. You give it a name, pick a chart version, choose the cluster, and fill in the form. Platz writes a task, the in-cluster agent runs helm install or helm upgrade, and the result lands back in the UI.
The platz-chart-discovery worker watches your Helm OCI registries — ECR via SQS events, generic OCI registries via polling — and surfaces every new version within seconds. Charts that bundle a platz/ directory get richer treatment: values-ui.yaml becomes a typed form, features.yaml declares status and ingress, actions.yaml defines custom operations, and resources.yaml registers child resource types your service owns.
platz.io/git/commit, branch, repo, and provider on the chart and Platz threads them through the UI — so the deployment list shows the exact commit and branch a release came from.apiVersion: platz.io/v1beta1
kind: ValuesUi
inputs:
- id: domain_name
type: text
label: Domain name
required: true
- id: replica_count
type: number
label: Replica count
initialValue: 1
minimum: 1
maximum: 10
- id: database
type: CollectionSelect
label: Database
collection: Secret
- id: enable_delivery
type: checkbox
label: Enable delivery
- id: delivery_zones
type: text
label: Delivery zones
showIf: { var: enable_delivery }
outputs:
values:
- path: [ image, tag ]
value: "{{ chart.image_tag }}"
- path: [ replicaCount ]
value: { input: replica_count }
platz/values-ui.yaml — excerpt
When a chart opts in to the Status feature, the platz-status-updates worker polls a status endpoint on the deployment's standard ingress and writes the result back to the database. The UI shows a color-coded badge, an optional primary metric directly in the deployment list, and a full metrics grid on the deployment page — with no Prometheus or Grafana required to get started.
An env is a named group of clusters, the deployments that run on them, and the people who can touch any of it. Production lives in one env, staging in another, your dogfood cluster in a third — each isolated, each with its own settings and roster. Switching between them is a single click in the navbar, and every form on the page is scoped to the env you're in.
Environments & permissionsInstall, Upgrade, Reinstall, Recreate, Uninstall, InvokeAction, RestartK8sResource — every operation Platz performs against a deployment is a row in the deployment_tasks table, with the user (or bot) who triggered it, when, and the captured output. If a task fails, the stderr from the helm pod is in the task itself, so debugging is a click rather than a hunt through three log aggregators.
Platz is designed to live next to what you already run. Cluster providers and chart registries are pluggable; the workers ship in two modes each.
| Category | What | Discovery | Notes |
|---|---|---|---|
| Kubernetes clusters | Amazon EKS | Auto-discovered | k8s-agent in eks mode walks every AWS region in the account and registers every EKS cluster it can reach. |
| Local / kubeconfig | Manual | k8s-agent in local mode registers a single cluster from a kubeconfig context. Used by the dev stack and bring-your-own-cluster installs. | |
| Helm registries | Amazon ECR | Auto-discovered | chart-discovery in ecr mode subscribes to an SQS queue fed by ECR push/delete events — new chart versions appear in seconds. |
| Generic OCI | Auto-discovered | chart-discovery in oci mode polls any registry that implements the OCI Distribution Spec on a configurable interval. | |
| Authentication | Any OIDC provider | Standard | Auth0, Keycloak, Dex, Google, GitHub via an OIDC bridge — anything that speaks OpenID Connect. |
| Database | PostgreSQL 15+ | External | Managed RDS / Aurora / Cloud SQL or self-managed — Platz treats it as external. Built and tested against PostgreSQL 17. |
| Ingress | Any v1 Ingress controller | Existing | ingress-nginx, AWS Load Balancer Controller, Traefik, and others. cert-manager optional for auto-issued certificates. |
Pizza-Platz is an open-source set of repositories — shop, bank, farm, supplier, agency, customer — each shipped as a Helm chart with a Chart Extension. It's a worked example of how real services use Platz: how their values-ui.yaml is structured, how they surface status, how they wire deployment-to-deployment references, and how their Chart.yaml stamps the Git metadata Platz threads through the UI.
apiVersion: v2
name: shop
version: 0.1.0
appVersion: "0.1.0"
annotations:
platz.io/git/commit: a8c1da83308d93b111c14f0c79e0b9acf7f01686
platz.io/git/branch: main
platz.io/git/repo: https://github.com/pizza-platz/shop
platz.io/git/provider: github
Chart.yaml — Git annotations Platz surfaces in the UI
Platz is open source under Apache-2.0 across every repo. The big pieces:
You'll need a Kubernetes cluster, a PostgreSQL database, and an OIDC provider. The full install guide walks through the secrets, ingress, and per-cluster agent setup.
helm repo add platzio https://platzio.github.io/helm-charts
helm install platz platzio/platzio -n platzio