Skip to content
Docs · Settings

Reference

Settings

Every key in settings.json with its default, and how the file behaves.

Kubyl has no settings window. App: Open Settings (Ctrl ,, the Kubyl menu or the welcome screen) opens settings.json in your default editor. The one exception is the Clusters & Kubeconfigs tab, which edits per-context and source settings and writes them into the same file.

How the file works

  • It is live-reloaded. Save the file and the change applies immediately.
  • Kubyl writes changes atomically and only writes fields that differ from the defaults.
  • A $schema entry is added to a new file, and settings.schema.json is regenerated on every start. Point your editor at it for completion and validation.
  • If the file can't be parsed, Kubyl never overwrites it. Your changes stay in memory and a warning is logged.
  • Secrets never live here. See Authentication.
settings.json
{
  "theme": "system",
  "kubernetes": {
    "health_check_interval": 30
  },
  "keymap": {
    "preset": "k9s"
  },
  "logs": {
    "tail_lines": 500,
    "wrap": true
  }
}

Appearance

KeyDefaultMeaning
themedarkdark, light or system. The light theme is still unfinished.
ui_font_size13Interface size in px, 9–24. Changed by zoom.

kubernetes

KeyDefaultMeaning
load_default_kubeconfigtrueLoad ~/.kube/config.
load_kubeconfig_envtrueLoad the files in $KUBECONFIG.
kubeconfigs[]Extra files or folders. ~ is expanded.
health_check_interval30Seconds between cluster pings.
group_contextstrueOne sidebar entry per cluster and user.
separate_groupsContexts to show separately.
contexts.<id>Per cluster: display_name, color, default_namespace, production, read_only, hidden, namespaces.

explorer

KeyDefaultMeaning
group_orderOrder of sidebar groups. Ids: overview, events, workloads, network, config, storage, access, cluster, administration, custom, and the contributed rows alerts, network_flows, prometheus.
hidden_groupsGroups to hide, by the same ids.
show_countstrueShow object counts next to kinds.
default_grace_periodnoneGrace period for deletes.
cluster_ordernamename or connected_first.

keymap

preset is default or k9s. bindings is a list of entries with a context and a map of keystrokes to actions. Use null to unbind a key, and an array for actions with arguments. Changes apply immediately and mistakes show as a warning toast. See Keyboard shortcuts.

settings.json
{
  "keymap": {
    "bindings": [
      {
        "context": "ResourceList",
        "bindings": {
          "ctrl-k": null,
          "x": ["palette::Open", { "mode": "resources" }]
        }
      }
    ]
  }
}

logs

KeyDefaultMeaning
ring_buffer_lines100000Lines kept per log view.
timestampstrueShow timestamps.
wrapfalseWrap long lines.
followtrueFollow new lines.
tail_lines1000Lines to load initially.

terminal

KeyDefaultMeaning
shell_overridenoneShell to run. Otherwise /bin/bash, then /bin/sh, then sh.
scrollback_lines10000Scrollback size.
font_size13Terminal font size.
option_as_metafalse on macOS, true elsewhereTreat Option (Alt) as Meta.
open_inpanelpanel or tab.
debug_imagebusybox:1.37Image for debug containers.
node_shell_imagedocker.io/tyrola/kubyl-debug:3.24Image for node shells.
node_shell_namespacekube-systemNamespace for node shell pods.

files

KeyDefaultMeaning
concurrency_per_pod2Parallel transfers per pod.
verifytrueSHA-256 verification on both sides.
chunk_size_mb4Chunk size for large files.
show_hiddenfalseShow hidden files.
bookmarks[]Saved locations.
debug_imagebusybox:1.37Image for distroless containers.
preview_limit_kb256Largest file to preview.

yaml_editor

KeyDefaultMeaning
validatetrueValidate against the cluster's schema.
hide_managed_fieldstrueHide managedFields.
confirm_apply_on_prodtrueAsk before applying on production clusters.
side_by_side_difffalseSide-by-side instead of unified diffs.

metrics and overview

KeyDefaultMeaning
metrics.sourceautoauto, prometheus, metrics_server or off.
metrics.discovertrueLook for Prometheus automatically.
metrics.refresh_interval15Seconds between refreshes.
metrics.prometheusPer-cluster endpoint: namespace, service, port, scheme, path, url, service_account, insecure_skip_tls_verify, disabled.
metrics.queriesPromQL overrides by query id. $sel is replaced with label matchers.
overview.top_n4Top-N entries, 1–4.
overview.derived_eventstrueDerive OOMKilled warnings.
overview.notify_warningsfalseToasts for Warning events in favorited namespaces.
overview.notify_interval60Seconds between notification checks.
prometheus.sidebartrueShow the Prometheus row.
prometheus.refresh_interval15Seconds, 5–3600.

alerts and netflow

See the tables in Alerts and Network flows. The per-cluster blocks are alerts.clusters.<id> (disabled, discover, alertmanagers, matchers, rules) and netflow.clusters.<id> (backend, hubble, whisker, loki).

KeyDefaultMeaning
alerts.sidebarautoauto, always or never.
alerts.ack_duration1hLength of an acknowledge silence.
netflow.sidebartrueShow the Network Flows row.
netflow.max_flows20000Flows kept in memory.
netflow.max_age_minutes60Oldest flow kept.
netflow.keep_query_valuesfalseKeep URL query values in HTTP flows.

argocd, updates, webview

KeyDefaultMeaning
argocd.api_transportautoauto, proxy or forward.
argocd.auto_connecttrueReconnect API mode automatically.
updates.clusters.<id>provider plus eks, gke or aks details.
webview.open_inautoauto or browser.
webview.idle_stop_minutes30Stop idle background forwards. 0 keeps them.
webview.devtoolsfalseEnable developer tools.
webview.private_by_defaultfalseOpen every view as a private session.

kubeconfig_editor and self_update

KeyDefaultMeaning
kubeconfig_editor.backups_kept10Backups per edited kubeconfig.
kubeconfig_editor.allow_external_editstrueOffer to edit files Kubyl doesn't own.
kubeconfig_editor.editable_filesFiles you opted in to editing.
self_update.auto_checktrueCheck for updates every 6 hours.
self_update.channelstablestable or preview. preview currently falls back to stable.

Some state isn't a setting. Window layout, favorites, saved port-forwards, palette history and column choices live in state.json, which Kubyl manages itself. See Files and environment.

Something missing or wrong? Open an issue on GitHub.