Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Configuration reference

This page summarises the keys. The authoritative description is the schema, schema/config.v2.schema.json, and xianyun config validate enforces it.

Top level

KeyTypeRequired
versioninteger, must be 2yes
clusterobjectyes
extendslist of paths or HTTPS URLsno
repositoriesmap of name to repositoryno
deployersmap of name to deployerno
reloadersmap of name to reloaderno
variablesmap of name to valueno

cluster

KeyMeaning
driverauto, colima, k3d, external, vcluster, or mock. auto picks k3d on Linux and colima elsewhere. mock is for tests.
name.strategystatic (default, uses xianyun) or directory-hash
network.hostnameThe primary hostname, for example gitlab.test. Required.
network.additional_hostnamesMore hostnames to set up, for example a registry
network.cluster_domainThe cluster DNS domain, when it isn’t under .local
registry_mirrorThe pull-through image cache. See below.

driver and k3s.disable can’t contain variables. They must be written literally.

Driver settings

BlockKeys
k3dagents, servers, image, port_mappings, k3s.disable, extra_args (passed verbatim to k3d cluster create, one token per entry)
colimamemory, cores, disk, k3s.disable. Colima always runs on the containerd runtime.
externalcontext, the kubeconfig context to use (the current one if omitted). down and destroy return an error because Xianyun doesn’t own the cluster.
vclusterhost_context (required), namespace, chart_version, values, manage_namespace
mockNo settings

registry_mirror

KeyMeaning
managedtrue runs and supervises a host-side zot cache. Default false.
endpointURL of a cache you run yourself, reachable from the cluster nodes. Required when managed is false, and not allowed when it’s true.
upstreamsRegistry hostnames whose pulls go through the cache, such as docker.io. The feature is off when this is empty.

See Registry cache.

repositories

Each entry needs repository (a Git URL) and directory (where to clone it). Optional keys: ref (a branch, tag, or commit; a tag or SHA pins the repository), edit_mode, and lifecycle_hooks.

deployers

Each deployer has a type, an optional needs list naming deployers that must finish first, and an optional repository. Deployers without a needs edge run in no defined order.

TypeBodyNotes
helmhelm.namespace (required), wait, timeout, values_file, dynamic_overrides, repository, releaseCharts can be local, OCI, or from a chart repository
kustomizekustomize.path (required), namespace, filesbuiltin:dev-ca and builtin:traefik-tlsstore are built-in targets
namespacenamespace.namespaces (list of names, required), delete_on_undeployCreates namespaces and waits for each to be usable

The builtin: overlays haven’t been deployed end to end; see Known limitations.

reloaders

TypeBody
mirrormirror.target (namespace, kubernetes_type, name), mirror.edit_mode_processes (required), filesystem, network
skaffoldskaffold settings and repository

kubernetes_type is one of deployment, statefulset, daemonset, or pod. Each edit_mode_processes entry has a command, and optionally a port and a context of mirrord or local. See Edit mode.

lifecycle_hooks

A hook has a type and one of script, mirror_script, or job. The types are edit_mode_prepare, edit_mode_start, and edit_mode_stop.

A script is split into arguments with quote handling and run directly, with no shell, so $HOME, pipes, and ; mean nothing to Xianyun. Wrap the command in sh -c '...' if you need shell behaviour. Hooks inherit your environment plus the predefined variables and KUBECONFIG.