Configuration

The controller reads a YAML config file via --config. All string values support ${ENV_VAR} substitution.

Full reference

# URL of the Vrata control plane REST API.
controlPlaneUrl: "${CONTROLPLANE_URL:-http://localhost:8080}"

# TLS for the connection to the control plane (optional).
# tls:
#   cert: "${CONTROLLER_TLS_CERT}"   # Client cert for mTLS
#   key: "${CONTROLLER_TLS_KEY}"     # Client private key
#   ca: "${CP_CA}"                   # CA to verify the CP server cert

# API key sent to the control plane on every request (optional).
# apiKey: "${CONTROLLER_API_KEY}"

# Which Kubernetes resources to watch.
watch:
  namespaces: []          # Empty = all namespaces
  httpRoutes: true        # Standard Gateway API HTTPRoutes
  superHttpRoutes: false  # SuperHTTPRoute (no maxItems limits)
  gateways: true          # Gateway resources → Vrata Listeners

# Snapshot batching.
snapshot:
  debounce: "5s"          # Wait after last change before snapshot
  maxBatch: 100           # Force snapshot after this many changes
  batchIdleTimeout: "10s" # Wait after last batch member arrives (vrata.io/batch)
  # What to do when a batch with vrata.io/batch-size times out before all
  # members arrive. Only applies when both annotations are present.
  #   "apply"  — create the snapshot with whatever arrived (default)
  #   "reject" — discard the incomplete batch, don't create a snapshot
  batchIncompletePolicy: "apply"

# Overlap detection.
duplicates:
  mode: "warn"            # off | warn | reject

# Logging.
log:
  format: "console"       # console | json
  level: "info"           # debug | info | warn | error

# Leader election for multiple replicas.
leaderElection:
  enabled: false
  leaseName: "vrata-controller-leader"
  leaseNamespace: "default"
  leaseDuration: "15s"
  renewDeadline: "10s"
  retryPeriod: "2s"

# Prometheus metrics.
metrics:
  enabled: false
  address: ":9090"

Field reference

FieldDefaultDescription
controlPlaneUrlhttp://localhost:8080Vrata control plane URL
tlsTLS config for the CP connection: cert, key, ca (same as proxy)
apiKeyBearer token sent to the CP on every request
watch.namespaces[] (all)Restrict to specific namespaces
watch.httpRoutestrueWatch HTTPRoute resources
watch.superHttpRoutesfalseWatch SuperHTTPRoute resources
watch.gatewaystrueWatch Gateway resources
snapshot.debounce5sDebounce before creating snapshot
snapshot.maxBatch100Max changes before forced snapshot
snapshot.batchIdleTimeout10sIdle wait for vrata.io/batch groups. See Batch Deployments
snapshot.batchIncompletePolicyapplyapply: snapshot with partial set. reject: discard incomplete batch. See Batch Deployments
duplicates.modewarnoff: disabled, warn: log only, reject: skip route
leaderElection.enabledfalseEnable lease-based leader election
metrics.enabledfalseEnable Prometheus metrics on :9090