Skip to main content
StackKits use CUE as their schema language. Understanding this architecture helps you customize kits and create your own.

Why CUE?

CUE (Configure, Unify, Execute) provides something that YAML and JSON Schema cannot: types, constraints, and composition in a single language.
// CUE catches errors that YAML cannot
#Service: {
    name:    string & =~"^[a-z][a-z0-9-]*$"
    port:    int & >0 & <65536
    enabled: bool | *true  // default: true
}
Key advantages:
  • Type safety — Catch configuration errors before deployment
  • Composable — Kits can extend and override each other
  • Defaults — Sensible defaults reduce configuration burden
  • Constraints — Express rules like “port must be > 1024” or “domain must be valid”

Three-layer architecture

Every StackKit follows a three-layer model:
  1. OS Layer — Base operating system configuration, security hardening, networking
  2. Platform Layer — Container runtime (Docker Compose), standard networks, volumes
  3. Application Layer — Modular services that users select and configure

How validation works

When you run kombify validate, your kombination.yaml is checked against the CUE schema of your selected StackKit:
1

Schema loading

The StackKit’s CUE schema is loaded, including all layer definitions and constraints.
2

Unification

Your configuration is unified with the schema. CUE checks that every value satisfies its type and constraints.
3

Default resolution

Missing optional values are filled with CUE defaults.
4

Error reporting

Any validation errors are reported with clear messages indicating what went wrong and where.

Extending kits

StackKits are designed to be extended. You can:
  • Override defaults — Change any default value in your kombination.yaml
  • Add services — Include additional services not in the base kit
  • Customize layers — Modify OS or platform settings for your environment

Further reading

Spec-driven design

The philosophy behind declarative infrastructure

Available kits

Browse the StackKit catalog