Where Does k9s Store Config and Skins?
Where k9s keeps its config file, skins, and per cluster overrides on Linux, macOS, and Windows.
Last updated
k9s follows the XDG layout: one config directory holding config.yaml for behavior, a skins folder for themes, and per cluster overrides. On Linux and macOS that root is ~/.config/k9s.
Cluster access itself is not stored here. k9s reads your existing kubeconfig for contexts and tokens, which means connecting a new cluster is a kubectl config task, not a k9s one. The info command prints the paths your build actually uses, settling any doubt in seconds. Aliases and hotkeys extend the same folder with small YAML files of their own.
Where k9s stores this, by platform
~/.config/k9s
config.yaml plus skins/ and clusters/ subfolders. Respects $XDG_CONFIG_HOME when set, falling back to ~/.config. The k9s info command prints the live paths if your install was customized at build time.
~/.config/k9s
Same layout as Linux. Homebrew and binary installs share it, so switching install methods keeps your skins. Context comes from ~/.kube/config regardless of how k9s was installed.
%APPDATA%\k9s
Uses %APPDATA%\k9s (for example C:\Users\[Username]\AppData\Roaming\k9s) for config.yaml and skins. Paste that into Explorer. kubeconfig still defaults to %USERPROFILE%\.kube\config.
Frequently asked questions
where is the k9s config file
Edit config.yaml inside the k9s config directory (~/.config/k9s on Linux and macOS). It controls thresholds, icons, and startup screen. A syntax error falls back to defaults, so validate YAML spacing after edits.
where do k9s skins go
As YAML files in the skins/ subdirectory of the k9s config folder. Set the skin name in config.yaml to activate one. Community skins are single files, so installing one is just a download into that folder.
where does k9s get cluster credentials
k9s never stores cluster credentials itself. It borrows the current context from kubeconfig, so a new cluster only needs a kubeconfig entry. If k9s shows no clusters, fix kubeconfig first.
Notice an outdated path? Let us know.