Standard library packages that compile to plain YAML.
Use high-level packages that adapt from single-node kind clusters to multi-zone production, while keeping full access to external managed services and raw PodSpec fields.
Packages that adapt to each cluster
Packages respond to the needs of each cluster. The same package can run one replica on a single-node development cluster, then spread replicas across zones on a production cluster configured for high availability.
- kind · 1 node cluster availability: none1 instance, no high availability
- eks · 3 zones cluster availability: zone3 instances spread across zones for high availability
Cluster profiles included
- EKS
- GKE
- GKE Autopilot
- AKS
- OpenShift
- k3s
- RKE2
- Talos
- kubeadm
- kind
Profiles describe cluster capabilities. You can also use any conformant Kubernetes cluster.
Apps depend on an interface. Clusters choose the provider.
Availability is set for the cluster, and packages adapt to it. Separately, the cluster can choose which package provides an interface such as ClickHouse, without changing the apps that use it.
# single-node ClickHouse provider- instances.data.olap.package = packages.experimental.clickhouse;# operator-managed ClickHouse provider (with its operator and Keeper)+ instances.data.olap.package = packages.experimental.clickhouse-cluster; Packages & escape hatches
The library covers databases, caches, observability, networking, and applications, with new packages tested against real clusters and added continuously.
Import external managed services
Wire an external AWS RDS or CloudSQL database into your cluster definition so consuming apps receive its endpoint and credentials without changing app code.
db = kix.mkImport {
out.fqdn = "rds.prod.internal";
# ... credentials
}; Reference Secrets managed outside Kix
Wrap an externally provisioned Secret name in kix.untrackedRef so kix check knows it is intentionally provided outside the build and tracks it in audit output.
secretName = kix.untrackedRef "rds-creds"; Override any raw Kubernetes field
Every Kix package exposes the underlying Kubernetes resources and PodSpec fields, so you can set priorityClassName, nodeSelector, tolerations, or custom sidecars directly.
spec.template.spec.priorityClassName = "production-high"; Bring existing Helm charts
Include existing Helm charts alongside native Kix packages so you can adopt Kix incrementally with the third-party software you already run.
chart = kix.helmChart {
repo = "https://charts.jetstack.io";
name = "cert-manager";
# ... version, hash
};