Skip to main content
The kombination.yaml file is the central configuration for your kombify deployment. This reference documents all available fields and their valid values.

Top-level fields

FieldTypeRequiredDescription
versionstringYesSpec version (currently "1.0")
stackkitstringYesStackKit to use (base-kit, ha-kit, modern-homelab)
metaobjectYesMetadata about your homelab
nodesarrayYesServer definitions
servicesarray/objectYesServices to deploy

Meta section

meta:
  name: my-homelab          # Required: unique name
  domain: home.example.com  # Required: base domain
  email: you@example.com    # Optional: for Let's Encrypt
FieldTypeRequiredDescription
namestringYesUnique homelab identifier (alphanumeric, hyphens)
domainstringYesBase domain for services
emailstringNoEmail for TLS certificate generation

Nodes section

nodes:
  - name: server-1
    type: hypervisor
    connection:
      host: 192.168.1.100
      user: root
      ssh_key: ~/.ssh/id_ed25519
    resources:
      cpu: 4
      memory: 16384

Node fields

FieldTypeRequiredDescription
namestringYesUnique node identifier
typestringYesNode type: hypervisor, docker, bare-metal
connectionobjectYesHow to reach this node
resourcesobjectNoResource constraints

Connection fields

FieldTypeRequiredDescription
hoststringYesIP address or hostname
portintNoSSH port (default: 22)
userstringNoSSH user (default: root)
ssh_keystringNoPath to SSH private key

Services section

Services can be specified as a simple list or as detailed objects:
# Simple: enable with defaults
services:
  - traefik
  - immich
  - authelia

# Detailed: customize per service
services:
  traefik:
    enabled: true
    config:
      dashboard: true
      log_level: INFO
  immich:
    enabled: true
    config:
      upload_limit: 10GB

Environment variables

Services support environment variable overrides:
services:
  immich:
    enabled: true
    env:
      UPLOAD_LOCATION: /data/photos
      DB_PASSWORD: "${DOPPLER_IMMICH_DB_PASSWORD}"
Never hardcode secrets in your kombination.yaml. Use Doppler references or environment variable substitution.

Validation

Validate your spec before deployment:
kombify validate
The validator checks:
  • Required fields are present
  • Types match the CUE schema
  • Node connections are reachable
  • Service dependencies are satisfied
  • No port conflicts exist

Example: Complete spec

version: "1.0"
stackkit: base-kit

meta:
  name: family-cloud
  domain: home.example.com
  email: admin@example.com

nodes:
  - name: main-server
    type: docker
    connection:
      host: 192.168.1.100
      user: deploy
      ssh_key: ~/.ssh/id_ed25519

services:
  traefik:
    enabled: true
    config:
      dashboard: true
  authelia:
    enabled: true
  immich:
    enabled: true
    config:
      upload_limit: 50GB
  homepage:
    enabled: true